### Design Goals 1. **Scalable**: There should be no boundary on the number of validators and nominators. 2. **Simple**: There won't be so many different ways to stake. Nominators, and Validators. Nominators chose between: ```rust enum Nomination { /// Managed pool. AccountId can be a smart contract. Mirror(AccountId), /// Robot pool. Fixed(BoundedVec<AccountId, 16>), } ``` 4. **Fast Ubonding**: System tracks the total stake being unbonded, the unbonding time is a function of this amount. 5. **Lazy Rewards and Slashes**: We leverage things like `#[pallet::task]` to process rewards. Otherwise it should always be like pools. Anyone claims their own reward. Slashes need to be applied by someone. 6. **Extensible Exposures**: Validators can be declared as exposed to more things. Allows re-staking. 7. **Liquid-ish**: You get an asset representative for your staked DOTs in the form of `pallet_assets`. Not transferrable by default, but ready to be tweaked by governance. 8. **Configurable**. You should be able to configure it to do phragmen, offchain, or simple approval voting, or fixed PoA set. ### Known Issues 1. Switching nominations won't be as readily possible anymore.