State::exists, docs and tests.
This commit is contained in:
parent
cfb7d9a7c3
commit
c6ec6e4aef
12
src/state.rs
12
src/state.rs
@ -76,6 +76,11 @@ impl State {
|
|||||||
self.cache.borrow_mut().insert(account.clone(), None);
|
self.cache.borrow_mut().insert(account.clone(), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Determine whether an account exists.
|
||||||
|
pub fn exists(&self, a: &Address) -> bool {
|
||||||
|
self.cache.borrow().get(&a).unwrap_or(&None).is_some() || SecTrieDB::new(&self.db, &self.root).contains(&a)
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the balance of account `a`.
|
/// Get the balance of account `a`.
|
||||||
pub fn balance(&self, a: &Address) -> U256 {
|
pub fn balance(&self, a: &Address) -> U256 {
|
||||||
self.get(a, false).as_ref().map(|account| account.balance().clone()).unwrap_or(U256::from(0u8))
|
self.get(a, false).as_ref().map(|account| account.balance().clone()).unwrap_or(U256::from(0u8))
|
||||||
@ -287,9 +292,12 @@ fn get_from_database() {
|
|||||||
fn remove() {
|
fn remove() {
|
||||||
let a = Address::zero();
|
let a = Address::zero();
|
||||||
let mut s = State::new_temp();
|
let mut s = State::new_temp();
|
||||||
|
assert_eq!(s.exists(&a), false);
|
||||||
s.inc_nonce(&a);
|
s.inc_nonce(&a);
|
||||||
|
assert_eq!(s.exists(&a), true);
|
||||||
assert_eq!(s.nonce(&a), U256::from(1u64));
|
assert_eq!(s.nonce(&a), U256::from(1u64));
|
||||||
s.kill_account(&a);
|
s.kill_account(&a);
|
||||||
|
assert_eq!(s.exists(&a), false);
|
||||||
assert_eq!(s.nonce(&a), U256::from(0u64));
|
assert_eq!(s.nonce(&a), U256::from(0u64));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,20 +308,24 @@ fn remove_from_database() {
|
|||||||
let mut s = State::new_temp();
|
let mut s = State::new_temp();
|
||||||
s.inc_nonce(&a);
|
s.inc_nonce(&a);
|
||||||
s.commit();
|
s.commit();
|
||||||
|
assert_eq!(s.exists(&a), true);
|
||||||
assert_eq!(s.nonce(&a), U256::from(1u64));
|
assert_eq!(s.nonce(&a), U256::from(1u64));
|
||||||
s.drop()
|
s.drop()
|
||||||
};
|
};
|
||||||
|
|
||||||
let (r, db) = {
|
let (r, db) = {
|
||||||
let mut s = State::from_existing(db, r, U256::from(0u8));
|
let mut s = State::from_existing(db, r, U256::from(0u8));
|
||||||
|
assert_eq!(s.exists(&a), true);
|
||||||
assert_eq!(s.nonce(&a), U256::from(1u64));
|
assert_eq!(s.nonce(&a), U256::from(1u64));
|
||||||
s.kill_account(&a);
|
s.kill_account(&a);
|
||||||
s.commit();
|
s.commit();
|
||||||
|
assert_eq!(s.exists(&a), false);
|
||||||
assert_eq!(s.nonce(&a), U256::from(0u64));
|
assert_eq!(s.nonce(&a), U256::from(0u64));
|
||||||
s.drop()
|
s.drop()
|
||||||
};
|
};
|
||||||
|
|
||||||
let s = State::from_existing(db, r, U256::from(0u8));
|
let s = State::from_existing(db, r, U256::from(0u8));
|
||||||
|
assert_eq!(s.exists(&a), false);
|
||||||
assert_eq!(s.nonce(&a), U256::from(0u64));
|
assert_eq!(s.nonce(&a), U256::from(0u64));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user