### Inspect Ledger state & recover plans - Controller: `15bt67qghz8hJxCUPgAXmzVxUBHLpPN41RVm2nwMFyLWByVE` - Stash: `14kwUJW6rtjTVW3RusMecvTfDqjEMAt8W159jAGBJqPrwwvC` **Timeline** 1. Stash `14kw` was bonded with controller `15bt` - `Bonded(14kw) = 15bt` - `Ledger(15bt) = ledger { stash = 14kw }` 2. at block #19824629, the ledger became "double-bonded" due to `15bt` calling bond (https://polkadot.subscan.io/extrinsic/19824629-2) - `Bonded(14kw) = 15bt` - `Bonded(15bt) = 15bt` - `Ledger(15bt) = ledger { stash = 15bt }` ❌ overwrote ledger from `14kw` 3. controller `15bt` registered for `fast_unstake` 4. at block #19915659, `fast_unstake` took place, `kill_ledger` was successful. - `Bonded(14kw) = 15bt` - `Ledger(14kw) = None` (this should not have happened, but did due to double-bonding of `15bt`) - `Bonded(15bt) = None` (expected due to kill) - `Ledger(15bt) = None` (expected due to kill) ``` // Polkadot state @ #19968049 (19 March) // controller is expected Bonded(stash) = 15bt67qghz8hJxCUPgAXmzVxUBHLpPN41RVm2nwMFyLWByVE // controller is not a stash Bonded(controller) = None // None ledger Ledger(controller) = None // no ledger associated with stash Ledger(stash) = None // stash with staking lock balances.locks(stash) [ { id: staking amount: 42,606,076,773,049 reasons: All } ] // controller without balances.locks(controller) [] ``` **What did the stash and controller do recently?** - **Stash**: - last activity: `bond_extra` ~870 days ago. - **Controller**: - `nominate`, `bond_extra`, `nominate`, calls, successful - ❓❓❓ trying to call a few times `unbond` which failed - `fast_unstake` registered successfully at block `#19915630` - fast unstake for `15bt67qghz8hJxCUPgAXmzVxUBHLpPN41RVm2nwMFyLWByVE` was successful at block #19915659 https://polkadot.subscan.io/block/19915659?tab=event&event=19915659-55 ``` Option 1: - enforce controller deprecation (simplest) Option 2: - enforce controller deprecations IFF is necessary if B is not bonded - set controller as B - otherwise set controller as stash Option 3: - don't enforce by moving locked funds to old ledger (B, B) ❌ - Remove the nomiantions/payee etc (only reset the ledger stuff) --- (A, B) // good/old state forever (B, B) nominate(B) -> Ledger(Bb) // stash bond_extra() (A, B) A.amount/lock = 10 (B, B) B.amount/lock = 11 bond_extra(A, 15) Bb.stash --> lock and amount updated (B) (A, B) A.amount/lock = 10 (B, B) B.amount/lock = 26 maybe_total (); // ignore bond() payout_staker() set_controller() ```