diff --git a/rust-evmjit/src/lib.rs b/rust-evmjit/src/lib.rs index f1150ae40..3f3de7f4e 100644 --- a/rust-evmjit/src/lib.rs +++ b/rust-evmjit/src/lib.rs @@ -311,9 +311,6 @@ pub mod ffi { #[no_mangle] pub unsafe extern "C" fn env_sha3(begin: *const u8, size: u64, out_hash: *mut JitI256) { - // TODO: write tests - // it may be incorrect due to endianess - // if it is, don't use `from_raw_parts` let out_hash = &mut *out_hash; let input = slice::from_raw_parts(begin, size as usize); let outlen = out_hash.words.len() * 8; diff --git a/src/evm/env.rs b/src/evm/env.rs index ac4292619..fcc5fe0bd 100644 --- a/src/evm/env.rs +++ b/src/evm/env.rs @@ -1,13 +1,32 @@ +//! Contract execution environment. + use util::hash::*; use util::uint::*; use state::*; +/// This structure represents contract execution environment. +/// It should be initalized with `State` and contract address. +/// +/// ```markdown +/// extern crate ethcore_util as util; +/// extern crate ethcore; +/// use util::hash::*; +/// use ethcore::state::*; +/// use ethcore::evm::*; +/// +/// fn main() { +/// let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap(); +/// let mut data = RuntimeData::new(); +/// let mut env = Env::new(State::new_temp(), address); +/// } +/// ``` pub struct Env { state: State, address: Address } impl Env { + /// Creates new evm environment object with backing state. pub fn new(state: State, address: Address) -> Env { Env { state: state, @@ -15,17 +34,19 @@ impl Env { } } - pub fn sload(&self, index: &H256) -> H256 { - self.state.storage_at(&self.address, index) + /// Returns a value for given key. + pub fn sload(&self, key: &H256) -> H256 { + self.state.storage_at(&self.address, key) } - pub fn sstore(&mut self, index: H256, value: H256) { - println!("index: {:?}, value: {:?}", index, value); - self.state.set_storage(&self.address, index, value) + /// Stores a value for given key. + pub fn sstore(&mut self, key: H256, value: H256) { + self.state.set_storage(&self.address, key, value) } - pub fn balance(&self, _address: &Address) -> U256 { - unimplemented!(); + /// Returns address balance. + pub fn balance(&self, address: &Address) -> U256 { + self.state.balance(address) } pub fn blockhash(&self, _number: &U256) -> H256 { diff --git a/src/evm/evm.rs b/src/evm/evm.rs index 41ce32b9e..0cf721b65 100644 --- a/src/evm/evm.rs +++ b/src/evm/evm.rs @@ -1,4 +1,4 @@ -//! EVM interface +//! Evm interface. use evm::{RuntimeData, Env}; diff --git a/src/evm/runtime_data.rs b/src/evm/runtime_data.rs index 7fba9362d..01adb34a3 100644 --- a/src/evm/runtime_data.rs +++ b/src/evm/runtime_data.rs @@ -1,3 +1,5 @@ +//! Immutable runtime data. + use util::hash::*; use util::uint::*; diff --git a/src/evm/vmfactory.rs b/src/evm/vmfactory.rs index 404a95f46..306ec4e0f 100644 --- a/src/evm/vmfactory.rs +++ b/src/evm/vmfactory.rs @@ -1,4 +1,4 @@ -//! Vm factory. +//! Evm factory. use evm::Evm;