Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit 018e240

Browse files
sorpaasandresilva
authored andcommitted
state: test when contract creation fails, old storage values should re-appear (#9532)
Because more tests won't hurt. :) Add a test case for ethereum/py-evm#1224 (comment) where if contract creation fails, old storage values (if ever existed) should re-appear.
1 parent 61f4534 commit 018e240

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

ethcore/src/state/mod.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2472,6 +2472,33 @@ mod tests {
24722472
assert_eq!(orig_root, state.root().clone());
24732473
}
24742474

2475+
#[test]
2476+
fn create_contract_fail_previous_storage() {
2477+
let mut state = get_temp_state();
2478+
let a: Address = 1000.into();
2479+
let k = H256::from(U256::from(0));
2480+
2481+
state.set_storage(&a, k, H256::from(U256::from(0xffff))).unwrap();
2482+
state.commit().unwrap();
2483+
state.clear();
2484+
2485+
let orig_root = state.root().clone();
2486+
assert_eq!(state.storage_at(&a, &k).unwrap(), H256::from(U256::from(0xffff)));
2487+
state.clear();
2488+
2489+
state.checkpoint(); // c1
2490+
state.new_contract(&a, U256::zero(), U256::zero()).unwrap();
2491+
state.checkpoint(); // c2
2492+
state.set_storage(&a, k, H256::from(U256::from(2))).unwrap();
2493+
state.revert_to_checkpoint(); // revert to c2
2494+
assert_eq!(state.storage_at(&a, &k).unwrap(), H256::from(U256::from(0)));
2495+
state.revert_to_checkpoint(); // revert to c1
2496+
assert_eq!(state.storage_at(&a, &k).unwrap(), H256::from(U256::from(0xffff)));
2497+
2498+
state.commit().unwrap();
2499+
assert_eq!(orig_root, state.root().clone());
2500+
}
2501+
24752502
#[test]
24762503
fn create_empty() {
24772504
let mut state = get_temp_state();

0 commit comments

Comments
 (0)