State::transfer_balance and a couple of placeholders.
This commit is contained in:
parent
6b61ab6322
commit
9d70f6bdff
29
src/state.rs
29
src/state.rs
@ -123,6 +123,12 @@ impl State {
|
|||||||
self.require(a, false).sub_balance(decr)
|
self.require(a, false).sub_balance(decr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Subtracts `by` from the balance of `from` and adds it to that of `to`.
|
||||||
|
pub fn transfer_balance(&mut self, from: &Address, to: &Address, by: &U256) {
|
||||||
|
self.sub_balance(from, by);
|
||||||
|
self.add_balance(to, by);
|
||||||
|
}
|
||||||
|
|
||||||
/// Increment the nonce of account `a` by 1.
|
/// Increment the nonce of account `a` by 1.
|
||||||
pub fn inc_nonce(&mut self, a: &Address) {
|
pub fn inc_nonce(&mut self, a: &Address) {
|
||||||
self.require(a, false).inc_nonce()
|
self.require(a, false).inc_nonce()
|
||||||
@ -138,6 +144,17 @@ impl State {
|
|||||||
self.require_or_from(a, true, || Account::new_contract(U256::from(0u8))).set_code(code);
|
self.require_or_from(a, true, || Account::new_contract(U256::from(0u8))).set_code(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Execute a given transaction.
|
||||||
|
/// This will change the state accordingly.
|
||||||
|
/* pub fn execute(_env_info: EnvInfo, _seal_engine: SealEngine, _t: Transaction, _p: Permanence) -> (ExecutionResult, TransactionReceipt) {
|
||||||
|
unimplemented!();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/// Convert into a JSON representation.
|
||||||
|
pub fn as_json(&self) -> String {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
|
||||||
/// Commit accounts to TrieDBMut. This is similar to cpp-ethereum's dev::eth::commit.
|
/// Commit accounts to TrieDBMut. This is similar to cpp-ethereum's dev::eth::commit.
|
||||||
/// `accounts` is mutable because we may need to commit the code or storage and record that.
|
/// `accounts` is mutable because we may need to commit the code or storage and record that.
|
||||||
pub fn commit_into(db: &mut HashDB, mut root: H256, accounts: &mut HashMap<Address, Option<Account>>) -> H256 {
|
pub fn commit_into(db: &mut HashDB, mut root: H256, accounts: &mut HashMap<Address, Option<Account>>) -> H256 {
|
||||||
@ -171,6 +188,11 @@ impl State {
|
|||||||
self.root = Self::commit_into(&mut self.db, r, self.cache.borrow_mut().deref_mut());
|
self.root = Self::commit_into(&mut self.db, r, self.cache.borrow_mut().deref_mut());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Populate the state from `accounts`. Just uses `commit_into`.
|
||||||
|
pub fn populate_from(&mut self, _accounts: &mut HashMap<Address, Option<Account>>) {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
|
||||||
/// Pull account `a` in our cache from the trie DB and return it.
|
/// Pull account `a` in our cache from the trie DB and return it.
|
||||||
/// `require_code` requires that the code be cached, too.
|
/// `require_code` requires that the code be cached, too.
|
||||||
fn get(&self, a: &Address, require_code: bool) -> Ref<Option<Account>> {
|
fn get(&self, a: &Address, require_code: bool) -> Ref<Option<Account>> {
|
||||||
@ -272,6 +294,7 @@ fn get_from_database() {
|
|||||||
fn alter_balance() {
|
fn alter_balance() {
|
||||||
let mut s = State::new_temp();
|
let mut s = State::new_temp();
|
||||||
let a = Address::from_str("0000000000000000000000000000000000000000").unwrap();
|
let a = Address::from_str("0000000000000000000000000000000000000000").unwrap();
|
||||||
|
let b = Address::from_str("0000000000000000000000000000000000000001").unwrap();
|
||||||
s.add_balance(&a, &U256::from(69u64));
|
s.add_balance(&a, &U256::from(69u64));
|
||||||
assert_eq!(s.balance(&a), U256::from(69u64));
|
assert_eq!(s.balance(&a), U256::from(69u64));
|
||||||
s.commit();
|
s.commit();
|
||||||
@ -280,6 +303,12 @@ fn alter_balance() {
|
|||||||
assert_eq!(s.balance(&a), U256::from(27u64));
|
assert_eq!(s.balance(&a), U256::from(27u64));
|
||||||
s.commit();
|
s.commit();
|
||||||
assert_eq!(s.balance(&a), U256::from(27u64));
|
assert_eq!(s.balance(&a), U256::from(27u64));
|
||||||
|
s.transfer_balance(&a, &b, &U256::from(18u64));
|
||||||
|
assert_eq!(s.balance(&a), U256::from(9u64));
|
||||||
|
assert_eq!(s.balance(&b), U256::from(18u64));
|
||||||
|
s.commit();
|
||||||
|
assert_eq!(s.balance(&a), U256::from(9u64));
|
||||||
|
assert_eq!(s.balance(&b), U256::from(18u64));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user