Skip to content

Commit 6bb0d35

Browse files
authored
Merge branch 'dev' into issue-243-contrafactual-accounts
2 parents 4c4d987 + 059d102 commit 6bb0d35

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

primitives/src/balances_map.rs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ use std::collections::BTreeMap;
33
use crate::{BigNum, ValidatorId};
44
use std::collections::btree_map::{Entry, Iter, Values};
55

6-
use serde::{ser::SerializeMap, Deserialize, Serialize, Serializer};
6+
use serde::{Deserialize, Serialize};
77
use std::iter::FromIterator;
88
use std::ops::Index;
99

10-
#[derive(Clone, Debug, Default, Deserialize, PartialEq, Eq)]
10+
#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
1111
#[serde(transparent)]
1212
pub struct BalancesMap(BTreeMap<ValidatorId, BigNum>);
1313

@@ -50,20 +50,6 @@ impl FromIterator<(ValidatorId, BigNum)> for BalancesMap {
5050
}
5151
}
5252

53-
impl Serialize for BalancesMap {
54-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
55-
where
56-
S: Serializer,
57-
{
58-
let mut map = serializer.serialize_map(Some(self.0.len()))?;
59-
60-
for (key, big_num) in self.0.iter() {
61-
map.serialize_entry(&key.to_hex_prefix_string(), big_num)?;
62-
}
63-
map.end()
64-
}
65-
}
66-
6753
#[cfg(test)]
6854
mod test {
6955
use super::*;
@@ -80,8 +66,7 @@ mod test {
8066
let balances_map: BalancesMap = data.into_iter().collect();
8167

8268
let actual_json = serde_json::to_string(&balances_map).expect("Should serialize it");
83-
// should be all lowercase!
84-
let expected_json = r#"{"0xc91763d7f14ac5c5ddfbcd012e0d2a61ab9bded3":"100","0xce07cbb7e054514d590a0262c93070d838bfba2e":"50"}"#;
69+
let expected_json = r#"{"0xC91763D7F14ac5c5dDfBCD012e0D2A61ab9bDED3":"100","0xce07CbB7e054514D590a0262C93070D838bFBA2e":"50"}"#;
8570

8671
assert_eq!(expected_json, actual_json);
8772

@@ -90,4 +75,23 @@ mod test {
9075

9176
assert_eq!(balances_map, balances_map_from_json);
9277
}
78+
79+
#[test]
80+
fn test_balances_map_deserialization_with_same_keys() {
81+
// the first is ETH Checksummed, the second is lowercase!
82+
let json = r#"{"0xC91763D7F14ac5c5dDfBCD012e0D2A61ab9bDED3":"100","0xc91763d7f14ac5c5ddfbcd012e0d2a61ab9bded3":"20","0xce07CbB7e054514D590a0262C93070D838bFBA2e":"50"}"#;
83+
84+
let actual_deserialized: BalancesMap =
85+
serde_json::from_str(&json).expect("Should deserialize it");
86+
87+
let expected_deserialized: BalancesMap = vec![
88+
(IDS["leader"].clone(), BigNum::from(50_u64)),
89+
// only the second should be accepted, as it appears second in the string and it's the latest one
90+
(IDS["follower"].clone(), BigNum::from(20_u64)),
91+
]
92+
.into_iter()
93+
.collect();
94+
95+
assert_eq!(expected_deserialized, actual_deserialized);
96+
}
9397
}

0 commit comments

Comments
 (0)