Test outer create.
This commit is contained in:
parent
718feeccbc
commit
bc6a892f2b
@ -494,8 +494,8 @@ mod tests {
|
|||||||
assert_eq!(substate.contracts_created.len(), 0);
|
assert_eq!(substate.contracts_created.len(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
evm_test!{test_create_contract: test_create_contract_jit, test_create_contract_int}
|
evm_test!{test_call_to_create: test_call_to_create_jit, test_call_to_create_int}
|
||||||
fn test_create_contract(factory: Factory) {
|
fn test_call_to_create(factory: Factory) {
|
||||||
// code:
|
// code:
|
||||||
//
|
//
|
||||||
// 7c 601080600c6000396000f3006000355415600957005b60203560003555 - push 29 bytes?
|
// 7c 601080600c6000396000f3006000355415600957005b60203560003555 - push 29 bytes?
|
||||||
@ -571,6 +571,58 @@ mod tests {
|
|||||||
assert_eq!(gas_left, U256::from(44_752));
|
assert_eq!(gas_left, U256::from(44_752));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
evm_test!{test_create_contract: test_create_contract_jit, test_create_contract_int}
|
||||||
|
fn test_create_contract(factory: Factory) {
|
||||||
|
// code:
|
||||||
|
//
|
||||||
|
// 60 10 - push 16
|
||||||
|
// 80 - duplicate first stack item
|
||||||
|
// 60 0c - push 12
|
||||||
|
// 60 00 - push 0
|
||||||
|
// 39 - copy current code to memory
|
||||||
|
// 60 00 - push 0
|
||||||
|
// f3 - return
|
||||||
|
|
||||||
|
let code = "601080600c6000396000f3006000355415600957005b60203560003555".from_hex().unwrap();
|
||||||
|
|
||||||
|
let sender = Address::from_str("cd1722f3947def4cf144679da39c4c32bdc35681").unwrap();
|
||||||
|
let address = contract_address(&sender, &U256::zero());
|
||||||
|
// TODO: add tests for 'callcreate'
|
||||||
|
//let next_address = contract_address(&address, &U256::zero());
|
||||||
|
let mut params = ActionParams::default();
|
||||||
|
params.address = address.clone();
|
||||||
|
params.sender = sender.clone();
|
||||||
|
params.origin = sender.clone();
|
||||||
|
params.gas = U256::from(100_000);
|
||||||
|
params.code = Some(code.clone());
|
||||||
|
params.value = ActionValue::Transfer(x!(100));
|
||||||
|
let mut state_result = get_temp_state();
|
||||||
|
let mut state = state_result.reference_mut();
|
||||||
|
state.add_balance(&sender, &U256::from(100));
|
||||||
|
let info = EnvInfo::default();
|
||||||
|
let engine = TestEngine::new(5, factory);
|
||||||
|
let mut substate = Substate::new(true);
|
||||||
|
|
||||||
|
let gas_left = {
|
||||||
|
let mut ex = Executive::new(&mut state, &info, &engine);
|
||||||
|
ex.create(params.clone(), &mut substate).unwrap()
|
||||||
|
};
|
||||||
|
|
||||||
|
println!("trace: {:?}", substate.subtraces);
|
||||||
|
let expected_trace = Some(vec![Trace {
|
||||||
|
depth: 0,
|
||||||
|
action: TraceAction::Create(TraceCreate {
|
||||||
|
from: params.sender,
|
||||||
|
value: x!(100),
|
||||||
|
gas: params.gas,
|
||||||
|
init: vec![96, 16, 128, 96, 12, 96, 0, 57, 96, 0, 243, 0, 96, 0, 53, 84, 21, 96, 9, 87, 0, 91, 96, 32, 53, 96, 0, 53, 85],
|
||||||
|
result: Some((x!(3224), params.address, vec![96, 0, 53, 84, 21, 96, 9, 87, 0, 91, 96, 32, 53, 96, 0, 53])),
|
||||||
|
}),
|
||||||
|
subs: vec![]
|
||||||
|
} ]);
|
||||||
|
assert_eq!(substate.subtraces, expected_trace);
|
||||||
|
assert_eq!(gas_left, U256::from(96_776));
|
||||||
|
}
|
||||||
evm_test!{test_create_contract_value_too_high: test_create_contract_value_too_high_jit, test_create_contract_value_too_high_int}
|
evm_test!{test_create_contract_value_too_high: test_create_contract_value_too_high_jit, test_create_contract_value_too_high_int}
|
||||||
fn test_create_contract_value_too_high(factory: Factory) {
|
fn test_create_contract_value_too_high(factory: Factory) {
|
||||||
// code:
|
// code:
|
||||||
|
Loading…
Reference in New Issue
Block a user