### 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.