Fix account and add butress test.
This commit is contained in:
parent
6f5d383834
commit
ea9d333312
@ -182,14 +182,14 @@ impl Account {
|
|||||||
|
|
||||||
/// Commit the `storage_overlay` to the backing DB and update `storage_root`.
|
/// Commit the `storage_overlay` to the backing DB and update `storage_root`.
|
||||||
pub fn commit_storage(&mut self, db: &mut HashDB) {
|
pub fn commit_storage(&mut self, db: &mut HashDB) {
|
||||||
let mut t = SecTrieDBMut::new(db, &mut self.storage_root);
|
let mut t = SecTrieDBMut::from_existing(db, &mut self.storage_root);
|
||||||
for (k, &mut (ref mut f, ref mut v)) in self.storage_overlay.borrow_mut().iter_mut() {
|
for (k, &mut (ref mut f, ref mut v)) in self.storage_overlay.borrow_mut().iter_mut() {
|
||||||
if f == &Filth::Dirty {
|
if f == &Filth::Dirty {
|
||||||
// cast key and value to trait type,
|
// cast key and value to trait type,
|
||||||
// so we can call overloaded `to_bytes` method
|
// so we can call overloaded `to_bytes` method
|
||||||
match v.is_zero() {
|
match v.is_zero() {
|
||||||
true => t.remove(k),
|
true => { t.remove(k); },
|
||||||
false => t.insert(k, &encode(&U256::from(v.as_slice()))),
|
false => { t.insert(k, &encode(&U256::from(v.as_slice()))); },
|
||||||
}
|
}
|
||||||
*f = Filth::Clean;
|
*f = Filth::Clean;
|
||||||
}
|
}
|
||||||
@ -272,12 +272,25 @@ mod tests {
|
|||||||
fn commit_storage() {
|
fn commit_storage() {
|
||||||
let mut a = Account::new_contract(U256::from(69u8));
|
let mut a = Account::new_contract(U256::from(69u8));
|
||||||
let mut db = OverlayDB::new_temp();
|
let mut db = OverlayDB::new_temp();
|
||||||
a.set_storage(H256::from(&U256::from(0x00u64)), H256::from(&U256::from(0x1234u64)));
|
a.set_storage(x!(0), x!(0x1234));
|
||||||
assert_eq!(a.storage_root(), None);
|
assert_eq!(a.storage_root(), None);
|
||||||
a.commit_storage(&mut db);
|
a.commit_storage(&mut db);
|
||||||
assert_eq!(a.storage_root().unwrap().hex(), "c57e1afb758b07f8d2c8f13a3b6e44fa5ff94ab266facc5a4fd3f062426e50b2");
|
assert_eq!(a.storage_root().unwrap().hex(), "c57e1afb758b07f8d2c8f13a3b6e44fa5ff94ab266facc5a4fd3f062426e50b2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn commit_remove_commit_storage() {
|
||||||
|
let mut a = Account::new_contract(U256::from(69u8));
|
||||||
|
let mut db = OverlayDB::new_temp();
|
||||||
|
a.set_storage(x!(0), x!(0x1234));
|
||||||
|
a.commit_storage(&mut db);
|
||||||
|
a.set_storage(x!(1), x!(0x1234));
|
||||||
|
a.commit_storage(&mut db);
|
||||||
|
a.set_storage(x!(1), x!(0));
|
||||||
|
a.commit_storage(&mut db);
|
||||||
|
assert_eq!(a.storage_root().unwrap().hex(), "c57e1afb758b07f8d2c8f13a3b6e44fa5ff94ab266facc5a4fd3f062426e50b2");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn commit_code() {
|
fn commit_code() {
|
||||||
let mut a = Account::new_contract(U256::from(69u8));
|
let mut a = Account::new_contract(U256::from(69u8));
|
||||||
|
Loading…
Reference in New Issue
Block a user