env implementation in progress
This commit is contained in:
parent
4e31fe5785
commit
3dd26582a2
@ -1,4 +1,5 @@
|
||||
use util::hash::*;
|
||||
use util::uint::*;
|
||||
|
||||
pub struct Env;
|
||||
|
||||
@ -18,6 +19,35 @@ impl Env {
|
||||
//unimplemented!();
|
||||
|
||||
}
|
||||
|
||||
pub fn balance(&self, _address: &Address) -> U256 {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn blockhash(&self, _number: &U256) -> H256 {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
/// Creates new contract
|
||||
/// Returns new contract address gas used
|
||||
pub fn create(&self, _gas: u64, _endowment: &U256, _code: &[u8]) -> (Address, u64) {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
/// Calls existing contract
|
||||
/// Returns call output and gas used
|
||||
pub fn call(&self, _gas: u64, _call_gas: u64, _receive_address: &H256, _value: &U256, _data: &[u8], _code_address: &Address) -> Option<(Vec<u8>, u64)>{
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
/// Returns code at given address
|
||||
pub fn extcode(&self, _address: &Address) -> Vec<u8> {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn log(&self, _topics: &[H256], _data: &[u8]) {
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,6 +34,12 @@ impl<'a> FromJit<&'a evmjit::I256> for H256 {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromJit<&'a evmjit::I256> for Address {
|
||||
fn from_jit(input: &'a evmjit::I256) -> Self {
|
||||
Address::from(H256::from_jit(input))
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoJit<evmjit::I256> for U256 {
|
||||
fn into_jit(self) -> evmjit::I256 {
|
||||
let mut res: evmjit::I256 = unsafe { mem::uninitialized() };
|
||||
@ -115,12 +121,20 @@ impl<'a> evmjit::Env for EnvAdapter<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn balance(&self, _address: *const evmjit::I256, _out_value: *mut evmjit::I256) {
|
||||
unimplemented!();
|
||||
fn balance(&self, address: *const evmjit::I256, out_value: *mut evmjit::I256) {
|
||||
unsafe {
|
||||
let a = Address::from_jit(&*address);
|
||||
let o = self.env.balance(&a);
|
||||
*out_value = o.into_jit();
|
||||
}
|
||||
}
|
||||
|
||||
fn blockhash(&self, _number: *const evmjit::I256, _out_hash: *mut evmjit::I256) {
|
||||
unimplemented!();
|
||||
fn blockhash(&self, number: *const evmjit::I256, out_hash: *mut evmjit::I256) {
|
||||
unsafe {
|
||||
let n = U256::from_jit(&*number);
|
||||
let o = self.env.blockhash(&n);
|
||||
*out_hash = o.into_jit();
|
||||
}
|
||||
}
|
||||
|
||||
fn create(&mut self,
|
||||
@ -212,6 +226,16 @@ mod tests {
|
||||
assert_eq!(h, h2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_and_from_address() {
|
||||
use std::str::FromStr;
|
||||
|
||||
let a = Address::from_str("2adc25665018aa1fe0e6bc666dac8fc2697ff9ba").unwrap();
|
||||
let j = a.clone().into_jit();
|
||||
let a2 = Address::from_jit(&j);
|
||||
assert_eq!(a, a2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_env_adapter() {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user