diff --git a/src/evm/jit.rs b/src/evm/jit.rs index b149c64a0..3fb3bb40c 100644 --- a/src/evm/jit.rs +++ b/src/evm/jit.rs @@ -328,12 +328,11 @@ impl evm::Evm for JitEvm { data.call_value = params.value; data.code = params.code.clone(); - // TODO: - data.author = Address::new(); - data.difficulty = U256::zero(); - data.gas_limit = U256::zero(); - data.number = 0; - data.timestamp = 0; + data.author = ext.env_info().author.clone(); + data.difficulty = ext.env_info().difficulty; + data.gas_limit = ext.env_info().gas_limit; + data.number = ext.env_info().number; + data.timestamp = ext.env_info().timestamp; let mut context = unsafe { evmjit::ContextHandle::new(data.into_jit(), &mut ext_handle) }; let res = context.exec(); diff --git a/src/evm/tests.rs b/src/evm/tests.rs index 1f1c20670..7ee64e4cc 100644 --- a/src/evm/tests.rs +++ b/src/evm/tests.rs @@ -323,3 +323,103 @@ fn test_calldataload() { assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("23ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23").unwrap()); } + +#[test] +fn test_author() { + let author = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap(); + let code = "41600055".from_hex().unwrap(); + + let mut params = ActionParams::new(); + params.gas = U256::from(100_000); + params.code = code; + let mut ext = FakeExt::new(); + ext.info.author = author; + + let gas_left = { + let vm = Factory::create(); + vm.exec(¶ms, &mut ext).unwrap() + }; + + assert_eq!(gas_left, U256::from(79_995)); + assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap()); +} + +#[test] +fn test_timestamp() { + let timestamp = 0x1234; + let code = "42600055".from_hex().unwrap(); + + let mut params = ActionParams::new(); + params.gas = U256::from(100_000); + params.code = code; + let mut ext = FakeExt::new(); + ext.info.timestamp = timestamp; + + let gas_left = { + let vm = Factory::create(); + vm.exec(¶ms, &mut ext).unwrap() + }; + + assert_eq!(gas_left, U256::from(79_995)); + assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap()); +} + +#[test] +fn test_number() { + let number = 0x1234; + let code = "43600055".from_hex().unwrap(); + + let mut params = ActionParams::new(); + params.gas = U256::from(100_000); + params.code = code; + let mut ext = FakeExt::new(); + ext.info.number = number; + + let gas_left = { + let vm = Factory::create(); + vm.exec(¶ms, &mut ext).unwrap() + }; + + assert_eq!(gas_left, U256::from(79_995)); + assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap()); +} + +#[test] +fn test_difficulty() { + let difficulty = U256::from(0x1234); + let code = "44600055".from_hex().unwrap(); + + let mut params = ActionParams::new(); + params.gas = U256::from(100_000); + params.code = code; + let mut ext = FakeExt::new(); + ext.info.difficulty = difficulty; + + let gas_left = { + let vm = Factory::create(); + vm.exec(¶ms, &mut ext).unwrap() + }; + + assert_eq!(gas_left, U256::from(79_995)); + assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap()); +} + +#[test] +fn test_gas_limit() { + let gas_limit = U256::from(0x1234); + let code = "45600055".from_hex().unwrap(); + + let mut params = ActionParams::new(); + params.gas = U256::from(100_000); + params.code = code; + let mut ext = FakeExt::new(); + ext.info.gas_limit = gas_limit; + + let gas_left = { + let vm = Factory::create(); + vm.exec(¶ms, &mut ext).unwrap() + }; + + assert_eq!(gas_left, U256::from(79_995)); + assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap()); +}