remove duplicate accounts in chain-spec. (#7725)

* remove duplicate accounts in chain-spec.

* Fix build

* Enforce in balances modules.

* Apply suggestions from code review

* Update frame/balances/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
Kian Paimani
2020-12-15 10:30:44 +00:00
committed by GitHub
parent 5a19ece7e3
commit 9706023ec7
3 changed files with 25 additions and 5 deletions
+6
View File
@@ -412,6 +412,12 @@ decl_storage! {
"the balance of any account should always be at least the existential deposit.",
)
}
// ensure no duplicates exist.
let endowed_accounts = config.balances.iter().map(|(x, _)| x).cloned().collect::<std::collections::BTreeSet<_>>();
assert!(endowed_accounts.len() == config.balances.len(), "duplicate balances in genesis.");
for &(ref who, free) in config.balances.iter() {
T::AccountStore::insert(who, AccountData { free, .. Default::default() });
}
+9
View File
@@ -639,6 +639,15 @@ macro_rules! decl_tests {
}.assimilate_storage(&mut t).unwrap();
}
#[test]
#[should_panic = "duplicate balances in genesis."]
fn cannot_set_genesis_value_twice() {
let mut t = frame_system::GenesisConfig::default().build_storage::<$test>().unwrap();
let _ = GenesisConfig::<$test> {
balances: vec![(1, 10), (2, 20), (1, 15)],
}.assimilate_storage(&mut t).unwrap();
}
#[test]
fn dust_moves_between_free_and_reserved() {
<$ext_builder>::default()