Skip to content

Commit

Permalink
update rust
Browse files Browse the repository at this point in the history
  • Loading branch information
chfast committed Mar 13, 2024
1 parent d9a34b3 commit c818948
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 33 deletions.
1 change: 0 additions & 1 deletion bindings/rust/evmc-declare-tests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ impl EvmcVm for FooVM {
fn execute(
&self,
_revision: evmc_sys::evmc_revision,
_code: &[u8],
_message: &ExecutionMessage,
_context: Option<&mut ExecutionContext>,
) -> ExecutionResult {
Expand Down
26 changes: 4 additions & 22 deletions bindings/rust/evmc-declare/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
//! ExampleVM {}
//! }
//!
//! fn execute(&self, revision: evmc_vm::ffi::evmc_revision, code: &[u8], message: &evmc_vm::ExecutionMessage, context: Option<&mut evmc_vm::ExecutionContext>) -> evmc_vm::ExecutionResult {
//! fn execute(&self, revision: evmc_vm::ffi::evmc_revision, message: &evmc_vm::ExecutionMessage, context: Option<&mut evmc_vm::ExecutionContext>) -> evmc_vm::ExecutionResult {
//! evmc_vm::ExecutionResult::success(1337, 0, None)
//! }
//! }
Expand Down Expand Up @@ -395,52 +395,34 @@ fn build_execute_fn(names: &VMNameSet) -> proc_macro2::TokenStream {
host: *const ::evmc_vm::ffi::evmc_host_interface,
context: *mut ::evmc_vm::ffi::evmc_host_context,
revision: ::evmc_vm::ffi::evmc_revision,
msg: *const ::evmc_vm::ffi::evmc_message,
code: *const u8,
code_size: usize
msg: *const ::evmc_vm::ffi::evmc_message
) -> ::evmc_vm::ffi::evmc_result
{
use evmc_vm::EvmcVm;

// TODO: context is optional in case of the "precompiles" capability
if instance.is_null() || msg.is_null() || (code.is_null() && code_size != 0) {
// These are irrecoverable errors that violate the EVMC spec.
std::process::abort();
}

assert!(!instance.is_null());
assert!(!msg.is_null());

let execution_message: ::evmc_vm::ExecutionMessage = unsafe {
msg.as_ref().expect("EVMC message is null").into()
};

let empty_code = [0u8;0];
let code_ref: &[u8] = if code.is_null() {
assert_eq!(code_size, 0);
&empty_code
} else {
unsafe {
::std::slice::from_raw_parts(code, code_size)
}
};

let container = unsafe {
// Acquire ownership from EVMC.
::evmc_vm::EvmcContainer::<#type_name_ident>::from_ffi_pointer(instance)
};

let result = ::std::panic::catch_unwind(|| {
if host.is_null() {
container.execute(revision, code_ref, &execution_message, None)
container.execute(revision, &execution_message, None)
} else {
let mut execution_context = unsafe {
::evmc_vm::ExecutionContext::new(
host.as_ref().expect("EVMC host is null"),
context,
)
};
container.execute(revision, code_ref, &execution_message, Some(&mut execution_context))
container.execute(revision, &execution_message, Some(&mut execution_context))
}
});

Expand Down
5 changes: 0 additions & 5 deletions bindings/rust/evmc-vm/src/container.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ mod tests {
fn execute(
&self,
_revision: evmc_sys::evmc_revision,
_code: &[u8],
_message: &ExecutionMessage,
_context: Option<&mut ExecutionContext>,
) -> ExecutionResult {
Expand Down Expand Up @@ -120,8 +119,6 @@ mod tests {
set_option: None,
};

let code = [0u8; 0];

let message = ::evmc_sys::evmc_message {
kind: ::evmc_sys::evmc_call_kind::EVMC_CALL,
flags: 0,
Expand Down Expand Up @@ -165,7 +162,6 @@ mod tests {
container
.execute(
evmc_sys::evmc_revision::EVMC_PETERSBURG,
&code,
&message,
Some(&mut context)
)
Expand All @@ -181,7 +177,6 @@ mod tests {
container
.execute(
evmc_sys::evmc_revision::EVMC_PETERSBURG,
&code,
&message,
Some(&mut context)
)
Expand Down
3 changes: 1 addition & 2 deletions bindings/rust/evmc-vm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ pub trait EvmcVm {
fn execute<'a>(
&self,
revision: Revision,
code: &'a [u8],
message: &'a ExecutionMessage,
context: Option<&'a mut ExecutionContext<'a>>,
) -> ExecutionResult;
Expand Down Expand Up @@ -368,7 +367,7 @@ impl<'a> ExecutionContext<'a> {
create2_salt: *message.create2_salt(),
code_address: *message.code_address(),
code: code_data,
code_size,
code_size: code_size,
};
unsafe {
assert!((*self.host).call.is_some());
Expand Down
5 changes: 2 additions & 3 deletions examples/example-rust-vm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ impl EvmcVm for ExampleRustVM {
fn execute<'a>(
&self,
_revision: Revision,
_code: &'a [u8],
message: &'a ExecutionMessage,
_context: Option<&'a mut ExecutionContext<'a>>,
) -> ExecutionResult {
Expand All @@ -53,7 +52,7 @@ impl EvmcVm for ExampleRustVM {
return ExecutionResult::failure();
}

if _code.is_empty() {
if message.code().unwrap().is_empty() {
return ExecutionResult::failure();
}

Expand All @@ -63,7 +62,7 @@ impl EvmcVm for ExampleRustVM {
0x43, 0x60, 0x00, 0x55, 0x43, 0x60, 0x00, 0x52, 0x59, 0x60, 0x00, 0xf3,
];

if save_return_block_number != _code {
if save_return_block_number != *message.code().unwrap() {
return ExecutionResult::failure();
}

Expand Down

0 comments on commit c818948

Please sign in to comment.