Staking: deprecating controller for proxies strategy & implementation

Agree with the general feedback from @shawntabrizi, I think both of the initial ideas are a bit over-complicated. That being said, given that the wallet integrations of proxy accounts is not perfect yet, we could have a transition period where all of 1. bond(controller, 10) 2. bond(stash, 10) and
3. proxy(controller, bond(10)) are acceptable. This was more or less what I had in mind by creating a ProxyProvider. So, we’d have something like:

fn bond(origin, amount: _) {
  // if signed by controller directly 
  T::ProxyProvider::is_proxy(origin);
  // or if signed by stash directly. 
  let stash = ensure_signed(origin);
}

My only minor disagreement is that the new Controller proxy type is also most likely an overkill. All controller should just move to be Staking proxy. The differences between the two are negligible and I have nowhere seen that it was an intentional choice. I think the real solution here is configurable proxies, as discussed in Proxy Pallet On Steriods.


All that said, the first action item ,before we touch any Rust code, is to ensure that in the staking dashboard (and PJS apps, and other wallets that provide staking experience) using a proxy account is seamless and supported. Afterwards, we can proceed as Shawn explained.

3 Likes