vm ext call function uses u256 instead of u64, ext works entirely on u256

This commit is contained in:
debris
2016-01-13 22:36:59 +01:00
parent 6f17b7b44b
commit 5a072d1b4b
5 changed files with 23 additions and 26 deletions

View File

@@ -6,7 +6,6 @@ use util::bytes::*;
use evm::{Schedule, Error};
use env_info::*;
// TODO: replace all u64 with u256
pub trait Ext {
/// Returns a value for given key.
fn sload(&self, key: &H256) -> H256;
@@ -32,13 +31,13 @@ pub trait Ext {
/// If call is successfull, returns gas left.
/// otherwise `Error`.
fn call(&mut self,
gas: u64,
call_gas: u64,
gas: &U256,
call_gas: &U256,
receive_address: &Address,
value: &U256,
data: &[u8],
code_address: &Address,
output: &mut [u8]) -> Result<u64, Error>;
output: &mut [u8]) -> Result<U256, Error>;
/// Returns code at given address
fn extcode(&self, address: &Address) -> Vec<u8>;

View File

@@ -240,8 +240,8 @@ impl<'a> evmjit::Ext for ExtAdapter<'a> {
out_size: u64,
code_address: *const evmjit::H256) -> bool {
unsafe {
let res = self.ext.call(*io_gas,
call_gas,
let res = self.ext.call(&U256::from(*io_gas),
&U256::from(call_gas),
&Address::from_jit(&*receive_address),
&U256::from_jit(&*value),
slice::from_raw_parts(in_beg, in_size as usize),
@@ -250,7 +250,7 @@ impl<'a> evmjit::Ext for ExtAdapter<'a> {
match res {
Ok(gas_left) => {
*io_gas = gas_left;
*io_gas = gas_left.low_u64();
true
},
Err(err @ evm::Error::OutOfGas) => {

View File

@@ -47,13 +47,13 @@ impl Ext for FakeExt {
}
fn call(&mut self,
_gas: u64,
_call_gas: u64,
_gas: &U256,
_call_gas: &U256,
_receive_address: &Address,
_value: &U256,
_data: &[u8],
_code_address: &Address,
_output: &mut [u8]) -> result::Result<u64, evm::Error> {
_output: &mut [u8]) -> result::Result<U256, evm::Error> {
unimplemented!();
}