moved runtime data to jit
This commit is contained in:
parent
4932720d58
commit
43c612fa89
@ -109,7 +109,6 @@ impl<'a> Executive<'a> {
|
|||||||
fn create(&mut self) -> ExecutiveResult {
|
fn create(&mut self) -> ExecutiveResult {
|
||||||
let address = self.params.address.clone();
|
let address = self.params.address.clone();
|
||||||
|
|
||||||
//let new_address = contract_address(&address, &self.state.nonce(&address));
|
|
||||||
let new_address = self.params.address.clone();
|
let new_address = self.params.address.clone();
|
||||||
self.state.inc_nonce(&address);
|
self.state.inc_nonce(&address);
|
||||||
|
|
||||||
|
@ -8,6 +8,43 @@ use util::bytes::*;
|
|||||||
use util::sha3::*;
|
use util::sha3::*;
|
||||||
use evm;
|
use evm;
|
||||||
|
|
||||||
|
/// Ethcore representation of evmjit runtime data.
|
||||||
|
pub struct RuntimeData {
|
||||||
|
pub gas: U256,
|
||||||
|
pub gas_price: U256,
|
||||||
|
pub call_data: Vec<u8>,
|
||||||
|
pub address: Address,
|
||||||
|
pub caller: Address,
|
||||||
|
pub origin: Address,
|
||||||
|
pub call_value: U256,
|
||||||
|
pub coinbase: Address,
|
||||||
|
pub difficulty: U256,
|
||||||
|
pub gas_limit: U256,
|
||||||
|
pub number: u64,
|
||||||
|
pub timestamp: u64,
|
||||||
|
pub code: Vec<u8>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RuntimeData {
|
||||||
|
pub fn new() -> RuntimeData {
|
||||||
|
RuntimeData {
|
||||||
|
gas: U256::zero(),
|
||||||
|
gas_price: U256::zero(),
|
||||||
|
call_data: vec![],
|
||||||
|
address: Address::new(),
|
||||||
|
caller: Address::new(),
|
||||||
|
origin: Address::new(),
|
||||||
|
call_value: U256::zero(),
|
||||||
|
coinbase: Address::new(),
|
||||||
|
difficulty: U256::zero(),
|
||||||
|
gas_limit: U256::zero(),
|
||||||
|
number: 0,
|
||||||
|
timestamp: 0,
|
||||||
|
code: vec![]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Should be used to convert jit types to ethcore
|
/// Should be used to convert jit types to ethcore
|
||||||
trait FromJit<T>: Sized {
|
trait FromJit<T>: Sized {
|
||||||
fn from_jit(input: T) -> Self;
|
fn from_jit(input: T) -> Self;
|
||||||
@ -94,7 +131,7 @@ impl IntoJit<evmjit::H256> for Address {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IntoJit<evmjit::RuntimeDataHandle> for evm::RuntimeData {
|
impl IntoJit<evmjit::RuntimeDataHandle> for RuntimeData {
|
||||||
fn into_jit(self) -> evmjit::RuntimeDataHandle {
|
fn into_jit(self) -> evmjit::RuntimeDataHandle {
|
||||||
let mut data = evmjit::RuntimeDataHandle::new();
|
let mut data = evmjit::RuntimeDataHandle::new();
|
||||||
assert!(self.gas <= U256::from(u64::max_value()), "evmjit gas must be lower than 2 ^ 64");
|
assert!(self.gas <= U256::from(u64::max_value()), "evmjit gas must be lower than 2 ^ 64");
|
||||||
@ -268,7 +305,7 @@ impl evm::Evm for JitEvm {
|
|||||||
// Dirty hack. This is unsafe, but we interact with ffi, so it's justified.
|
// Dirty hack. This is unsafe, but we interact with ffi, so it's justified.
|
||||||
let ext_adapter: ExtAdapter<'static> = unsafe { ::std::mem::transmute(ExtAdapter::new(ext)) };
|
let ext_adapter: ExtAdapter<'static> = unsafe { ::std::mem::transmute(ExtAdapter::new(ext)) };
|
||||||
let mut ext_handle = evmjit::ExtHandle::new(ext_adapter);
|
let mut ext_handle = evmjit::ExtHandle::new(ext_adapter);
|
||||||
let mut data = evm::RuntimeData::new();
|
let mut data = RuntimeData::new();
|
||||||
let params = ext.params();
|
let params = ext.params();
|
||||||
data.gas = params.gas;
|
data.gas = params.gas;
|
||||||
data.gas_price = params.gas_price;
|
data.gas_price = params.gas_price;
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
//! Ethereum virtual machine.
|
//! Ethereum virtual machine.
|
||||||
|
|
||||||
pub mod ext;
|
pub mod ext;
|
||||||
pub mod runtime_data;
|
|
||||||
pub mod evm;
|
pub mod evm;
|
||||||
pub mod vmfactory;
|
pub mod vmfactory;
|
||||||
pub mod logentry;
|
pub mod logentry;
|
||||||
@ -12,7 +11,6 @@ mod jit;
|
|||||||
|
|
||||||
pub use self::evm::{Evm, ReturnCode};
|
pub use self::evm::{Evm, ReturnCode};
|
||||||
pub use self::ext::{Ext};
|
pub use self::ext::{Ext};
|
||||||
pub use self::runtime_data::RuntimeData;
|
|
||||||
pub use self::logentry::LogEntry;
|
pub use self::logentry::LogEntry;
|
||||||
pub use self::vmfactory::VmFactory;
|
pub use self::vmfactory::VmFactory;
|
||||||
pub use self::executive::Executive;
|
pub use self::executive::Executive;
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
//! Immutable runtime data.
|
|
||||||
|
|
||||||
use util::hash::*;
|
|
||||||
use util::uint::*;
|
|
||||||
|
|
||||||
// call_data
|
|
||||||
pub struct RuntimeData {
|
|
||||||
pub gas: U256,
|
|
||||||
pub gas_price: U256,
|
|
||||||
pub call_data: Vec<u8>,
|
|
||||||
pub address: Address,
|
|
||||||
pub caller: Address,
|
|
||||||
pub origin: Address,
|
|
||||||
pub call_value: U256,
|
|
||||||
pub coinbase: Address,
|
|
||||||
pub difficulty: U256,
|
|
||||||
pub gas_limit: U256,
|
|
||||||
pub number: u64,
|
|
||||||
pub timestamp: u64,
|
|
||||||
pub code: Vec<u8>
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RuntimeData {
|
|
||||||
pub fn new() -> RuntimeData {
|
|
||||||
RuntimeData {
|
|
||||||
gas: U256::zero(),
|
|
||||||
gas_price: U256::zero(),
|
|
||||||
call_data: vec![],
|
|
||||||
address: Address::new(),
|
|
||||||
caller: Address::new(),
|
|
||||||
origin: Address::new(),
|
|
||||||
call_value: U256::zero(),
|
|
||||||
coinbase: Address::new(),
|
|
||||||
difficulty: U256::zero(),
|
|
||||||
gas_limit: U256::zero(),
|
|
||||||
number: 0,
|
|
||||||
timestamp: 0,
|
|
||||||
code: vec![]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user