vm factory
This commit is contained in:
parent
3dd26582a2
commit
e3f59d82ef
@ -12,5 +12,5 @@ pub enum ReturnCode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait Evm {
|
pub trait Evm {
|
||||||
fn exec(data: RuntimeData, env: &mut Env) -> ReturnCode;
|
fn exec(&self, data: RuntimeData, env: &mut Env) -> ReturnCode;
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,7 @@ impl From<evmjit::ReturnCode> for evm::ReturnCode {
|
|||||||
pub struct JitEvm;
|
pub struct JitEvm;
|
||||||
|
|
||||||
impl evm::Evm for JitEvm {
|
impl evm::Evm for JitEvm {
|
||||||
fn exec(data: evm::RuntimeData, env: &mut evm::Env) -> evm::ReturnCode {
|
fn exec(&self, data: evm::RuntimeData, env: &mut evm::Env) -> evm::ReturnCode {
|
||||||
// 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 env_adapter: EnvAdapter<'static> = unsafe { ::std::mem::transmute(EnvAdapter::new(env)) };
|
let env_adapter: EnvAdapter<'static> = unsafe { ::std::mem::transmute(EnvAdapter::new(env)) };
|
||||||
let mut env_handle = evmjit::EnvHandle::new(env_adapter);
|
let mut env_handle = evmjit::EnvHandle::new(env_adapter);
|
||||||
@ -205,6 +205,7 @@ mod tests {
|
|||||||
use util::uint::*;
|
use util::uint::*;
|
||||||
use evm::*;
|
use evm::*;
|
||||||
use evm::jit::{FromJit, IntoJit};
|
use evm::jit::{FromJit, IntoJit};
|
||||||
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_to_and_from_u256() {
|
fn test_to_and_from_u256() {
|
||||||
@ -254,7 +255,8 @@ mod tests {
|
|||||||
data.origin = Address::from_str("cd1722f3947def4cf144679da39c4c32bdc35681").unwrap();
|
data.origin = Address::from_str("cd1722f3947def4cf144679da39c4c32bdc35681").unwrap();
|
||||||
data.call_value = U256::from_str("0de0b6b3a7640000").unwrap();
|
data.call_value = U256::from_str("0de0b6b3a7640000").unwrap();
|
||||||
let mut env = Env::new();
|
let mut env = Env::new();
|
||||||
assert_eq!(JitEvm::exec(data, &mut env), ReturnCode::Stop);
|
let evm = JitEvm;
|
||||||
|
assert_eq!(evm.exec(data, &mut env), ReturnCode::Stop);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,10 @@
|
|||||||
pub mod env;
|
pub mod env;
|
||||||
pub mod runtime_data;
|
pub mod runtime_data;
|
||||||
pub mod evm;
|
pub mod evm;
|
||||||
|
pub mod vmfactory;
|
||||||
#[cfg(feature = "jit" )]
|
#[cfg(feature = "jit" )]
|
||||||
pub mod jit;
|
mod jit;
|
||||||
|
|
||||||
pub use self::evm::{Evm, ReturnCode};
|
pub use self::evm::{Evm, ReturnCode};
|
||||||
pub use self::env::Env;
|
pub use self::env::Env;
|
||||||
pub use self::runtime_data::RuntimeData;
|
pub use self::runtime_data::RuntimeData;
|
||||||
|
|
||||||
#[cfg(feature = "jit" )]
|
|
||||||
pub use self::jit::JitEvm;
|
|
||||||
|
26
src/evm/vmfactory.rs
Normal file
26
src/evm/vmfactory.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//! Vm factory.
|
||||||
|
|
||||||
|
use evm::Evm;
|
||||||
|
|
||||||
|
/// Vm factory. Creates appropriate Evm.
|
||||||
|
/// TODO: SmartVm
|
||||||
|
pub struct VmFactory;
|
||||||
|
|
||||||
|
impl VmFactory {
|
||||||
|
/// Returns jit vm
|
||||||
|
#[cfg(feature = "jit")]
|
||||||
|
pub fn create() -> Box<Evm> {
|
||||||
|
Box::new(super::jit::JitEvm)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns native rust evm
|
||||||
|
#[cfg(not(feature = "jit"))]
|
||||||
|
pub fn create() -> Box<Evm> {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_create_vm() {
|
||||||
|
let _vm = VmFactory::create();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user