Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions c-api/src/capi_vm_hook_pointers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ pub struct vm_exec_vm_hook_c_func_pointers {
pub transfer_esdt_nft_execute_func_ptr: extern "C" fn(context: *mut c_void, dest_offset: i32, token_id_offset: i32, token_id_len: i32, value_offset: i32, nonce: i64, gas_limit: i64, function_offset: i32, function_length: i32, num_arguments: i32, arguments_length_offset: i32, data_offset: i32) -> i32,
pub multi_transfer_esdt_nft_execute_func_ptr: extern "C" fn(context: *mut c_void, dest_offset: i32, num_token_transfers: i32, token_transfers_args_length_offset: i32, token_transfer_data_offset: i32, gas_limit: i64, function_offset: i32, function_length: i32, num_arguments: i32, arguments_length_offset: i32, data_offset: i32) -> i32,
pub create_async_call_func_ptr: extern "C" fn(context: *mut c_void, dest_offset: i32, value_offset: i32, data_offset: i32, data_length: i32, success_offset: i32, success_length: i32, error_offset: i32, error_length: i32, gas: i64, extra_gas_for_callback: i64) -> i32,
pub create_async_v3_call_func_ptr: extern "C" fn(context: *mut c_void, dest_offset: i32, value_offset: i32, data_offset: i32, data_length: i32, success_offset: i32, success_length: i32, error_offset: i32, error_length: i32, gas: i64, extra_gas_for_callback: i64) -> i32,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this needs implementation on the VM side.

pub set_async_context_callback_func_ptr: extern "C" fn(context: *mut c_void, callback: i32, callback_length: i32, data: i32, data_length: i32, gas: i64) -> i32,
pub upgrade_contract_func_ptr: extern "C" fn(context: *mut c_void, dest_offset: i32, gas_limit: i64, value_offset: i32, code_offset: i32, code_metadata_offset: i32, length: i32, num_arguments: i32, arguments_length_offset: i32, data_offset: i32),
pub upgrade_from_source_contract_func_ptr: extern "C" fn(context: *mut c_void, dest_offset: i32, gas_limit: i64, value_offset: i32, source_contract_address_offset: i32, code_metadata_offset: i32, num_arguments: i32, arguments_length_offset: i32, data_offset: i32),
Expand Down
4 changes: 4 additions & 0 deletions c-api/src/capi_vm_hooks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@ impl multiversx_chain_vm_executor::VMHooksLegacy for CapiVMHooks {
(self.c_func_pointers_ptr.create_async_call_func_ptr)(self.vm_hooks_ptr, self.convert_mem_ptr(dest_offset), self.convert_mem_ptr(value_offset), self.convert_mem_ptr(data_offset), self.convert_mem_length(data_length), self.convert_mem_ptr(success_offset), self.convert_mem_length(success_length), self.convert_mem_ptr(error_offset), self.convert_mem_length(error_length), gas, extra_gas_for_callback)
}

fn create_async_v3_call(&self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> i32 {
(self.c_func_pointers_ptr.create_async_v3_call_func_ptr)(self.vm_hooks_ptr, self.convert_mem_ptr(dest_offset), self.convert_mem_ptr(value_offset), self.convert_mem_ptr(data_offset), self.convert_mem_length(data_length), self.convert_mem_ptr(success_offset), self.convert_mem_length(success_length), self.convert_mem_ptr(error_offset), self.convert_mem_length(error_length), gas, extra_gas_for_callback)
}

fn set_async_context_callback(&self, callback: MemPtr, callback_length: MemLength, data: MemPtr, data_length: MemLength, gas: i64) -> i32 {
(self.c_func_pointers_ptr.set_async_context_callback_func_ptr)(self.vm_hooks_ptr, self.convert_mem_ptr(callback), self.convert_mem_length(callback_length), self.convert_mem_ptr(data), self.convert_mem_length(data_length), gas)
}
Expand Down
6 changes: 6 additions & 0 deletions vm-executor-experimental/src/we_imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,11 @@ fn wasmer_import_create_async_call(env: FunctionEnvMut<VMHooksWrapper>, dest_off
with_vm_hooks(env, |vh| vh.create_async_call(convert_mem_ptr(dest_offset), convert_mem_ptr(value_offset), convert_mem_ptr(data_offset), convert_mem_length(data_length), convert_mem_ptr(success_offset), convert_mem_length(success_length), convert_mem_ptr(error_offset), convert_mem_length(error_length), gas, extra_gas_for_callback))
}

#[rustfmt::skip]
fn wasmer_import_create_async_v3_call(env: FunctionEnvMut<VMHooksWrapper>, dest_offset: i32, value_offset: i32, data_offset: i32, data_length: i32, success_offset: i32, success_length: i32, error_offset: i32, error_length: i32, gas: i64, extra_gas_for_callback: i64) -> Result<i32, VMHooksEarlyExit> {
with_vm_hooks(env, |vh| vh.create_async_v3_call(convert_mem_ptr(dest_offset), convert_mem_ptr(value_offset), convert_mem_ptr(data_offset), convert_mem_length(data_length), convert_mem_ptr(success_offset), convert_mem_length(success_length), convert_mem_ptr(error_offset), convert_mem_length(error_length), gas, extra_gas_for_callback))
}

#[rustfmt::skip]
fn wasmer_import_set_async_context_callback(env: FunctionEnvMut<VMHooksWrapper>, callback: i32, callback_length: i32, data: i32, data_length: i32, gas: i64) -> Result<i32, VMHooksEarlyExit> {
with_vm_hooks(env, |vh| vh.set_async_context_callback(convert_mem_ptr(callback), convert_mem_length(callback_length), convert_mem_ptr(data), convert_mem_length(data_length), gas))
Expand Down Expand Up @@ -1422,6 +1427,7 @@ pub fn generate_import_object(store: &mut Store, vh_wrapper: VMHooksWrapper) ->
"transferESDTNFTExecute" => Function::new_typed_with_env(store, &function_env, wasmer_import_transfer_esdt_nft_execute),
"multiTransferESDTNFTExecute" => Function::new_typed_with_env(store, &function_env, wasmer_import_multi_transfer_esdt_nft_execute),
"createAsyncCall" => Function::new_typed_with_env(store, &function_env, wasmer_import_create_async_call),
"createAsyncV3Call" => Function::new_typed_with_env(store, &function_env, wasmer_import_create_async_v3_call),
"setAsyncContextCallback" => Function::new_typed_with_env(store, &function_env, wasmer_import_set_async_context_callback),
"upgradeContract" => Function::new_typed_with_env(store, &function_env, wasmer_import_upgrade_contract),
"upgradeFromSourceContract" => Function::new_typed_with_env(store, &function_env, wasmer_import_upgrade_from_source_contract),
Expand Down
6 changes: 6 additions & 0 deletions vm-executor-wasmer/src/wasmer_imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,11 @@ fn wasmer_import_create_async_call(env: &VMHooksWrapper, dest_offset: i32, value
env.vm_hooks.create_async_call(env.convert_mem_ptr(dest_offset), env.convert_mem_ptr(value_offset), env.convert_mem_ptr(data_offset), env.convert_mem_length(data_length), env.convert_mem_ptr(success_offset), env.convert_mem_length(success_length), env.convert_mem_ptr(error_offset), env.convert_mem_length(error_length), gas, extra_gas_for_callback)
}

#[rustfmt::skip]
fn wasmer_import_create_async_v3_call(env: &VMHooksWrapper, dest_offset: i32, value_offset: i32, data_offset: i32, data_length: i32, success_offset: i32, success_length: i32, error_offset: i32, error_length: i32, gas: i64, extra_gas_for_callback: i64) -> i32 {
env.vm_hooks.create_async_v3_call(env.convert_mem_ptr(dest_offset), env.convert_mem_ptr(value_offset), env.convert_mem_ptr(data_offset), env.convert_mem_length(data_length), env.convert_mem_ptr(success_offset), env.convert_mem_length(success_length), env.convert_mem_ptr(error_offset), env.convert_mem_length(error_length), gas, extra_gas_for_callback)
}

#[rustfmt::skip]
fn wasmer_import_set_async_context_callback(env: &VMHooksWrapper, callback: i32, callback_length: i32, data: i32, data_length: i32, gas: i64) -> i32 {
env.vm_hooks.set_async_context_callback(env.convert_mem_ptr(callback), env.convert_mem_length(callback_length), env.convert_mem_ptr(data), env.convert_mem_length(data_length), gas)
Expand Down Expand Up @@ -1419,6 +1424,7 @@ pub fn generate_import_object(store: &Store, env: &VMHooksWrapper) -> ImportObje
"transferESDTNFTExecute" => Function::new_native_with_env(store, env.clone(), wasmer_import_transfer_esdt_nft_execute),
"multiTransferESDTNFTExecute" => Function::new_native_with_env(store, env.clone(), wasmer_import_multi_transfer_esdt_nft_execute),
"createAsyncCall" => Function::new_native_with_env(store, env.clone(), wasmer_import_create_async_call),
"createAsyncV3Call" => Function::new_native_with_env(store, env.clone(), wasmer_import_create_async_v3_call),
"setAsyncContextCallback" => Function::new_native_with_env(store, env.clone(), wasmer_import_set_async_context_callback),
"upgradeContract" => Function::new_native_with_env(store, env.clone(), wasmer_import_upgrade_contract),
"upgradeFromSourceContract" => Function::new_native_with_env(store, env.clone(), wasmer_import_upgrade_from_source_contract),
Expand Down
4 changes: 4 additions & 0 deletions vm-executor/src/new_traits/vm_hooks_legacy_adapter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@ impl<VH: VMHooksSetEarlyExit> VMHooksLegacy for VMHooksLegacyAdapter<VH> {
self.adapt_vm_hooks(|inner| VMHooks::create_async_call(inner, dest_offset, value_offset, data_offset, data_length, success_offset, success_length, error_offset, error_length, gas, extra_gas_for_callback))
}

fn create_async_v3_call(&self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> i32 {
self.adapt_vm_hooks(|inner| VMHooks::create_async_v3_call(inner, dest_offset, value_offset, data_offset, data_length, success_offset, success_length, error_offset, error_length, gas, extra_gas_for_callback))
}

fn set_async_context_callback(&self, callback: MemPtr, callback_length: MemLength, data: MemPtr, data_length: MemLength, gas: i64) -> i32 {
self.adapt_vm_hooks(|inner| VMHooks::set_async_context_callback(inner, callback, callback_length, data, data_length, gas))
}
Expand Down
6 changes: 6 additions & 0 deletions vm-executor/src/new_traits/vm_hooks_new.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ pub trait VMHooks: core::fmt::Debug {
fn transfer_esdt_nft_execute(&mut self, dest_offset: MemPtr, token_id_offset: MemPtr, token_id_len: MemLength, value_offset: MemPtr, nonce: i64, gas_limit: i64, function_offset: MemPtr, function_length: MemLength, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr) -> Result<i32, VMHooksEarlyExit>;
fn multi_transfer_esdt_nft_execute(&mut self, dest_offset: MemPtr, num_token_transfers: i32, token_transfers_args_length_offset: MemPtr, token_transfer_data_offset: MemPtr, gas_limit: i64, function_offset: MemPtr, function_length: MemLength, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr) -> Result<i32, VMHooksEarlyExit>;
fn create_async_call(&mut self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> Result<i32, VMHooksEarlyExit>;
fn create_async_v3_call(&mut self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> Result<i32, VMHooksEarlyExit>;
fn set_async_context_callback(&mut self, callback: MemPtr, callback_length: MemLength, data: MemPtr, data_length: MemLength, gas: i64) -> Result<i32, VMHooksEarlyExit>;
fn upgrade_contract(&mut self, dest_offset: MemPtr, gas_limit: i64, value_offset: MemPtr, code_offset: MemPtr, code_metadata_offset: MemPtr, length: MemLength, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr) -> Result<(), VMHooksEarlyExit>;
fn upgrade_from_source_contract(&mut self, dest_offset: MemPtr, gas_limit: i64, value_offset: MemPtr, source_contract_address_offset: MemPtr, code_metadata_offset: MemPtr, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr) -> Result<(), VMHooksEarlyExit>;
Expand Down Expand Up @@ -400,6 +401,11 @@ impl VMHooks for VMHooksDefault {
Ok(0)
}

fn create_async_v3_call(&mut self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> Result<i32, VMHooksEarlyExit> {
println!("Called: create_async_v3_call");
Ok(0)
}

fn set_async_context_callback(&mut self, callback: MemPtr, callback_length: MemLength, data: MemPtr, data_length: MemLength, gas: i64) -> Result<i32, VMHooksEarlyExit> {
println!("Called: set_async_context_callback");
Ok(0)
Expand Down
6 changes: 6 additions & 0 deletions vm-executor/src/vm_hooks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ pub trait VMHooksLegacy: core::fmt::Debug {
fn transfer_esdt_nft_execute(&self, dest_offset: MemPtr, token_id_offset: MemPtr, token_id_len: MemLength, value_offset: MemPtr, nonce: i64, gas_limit: i64, function_offset: MemPtr, function_length: MemLength, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr) -> i32;
fn multi_transfer_esdt_nft_execute(&self, dest_offset: MemPtr, num_token_transfers: i32, token_transfers_args_length_offset: MemPtr, token_transfer_data_offset: MemPtr, gas_limit: i64, function_offset: MemPtr, function_length: MemLength, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr) -> i32;
fn create_async_call(&self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> i32;
fn create_async_v3_call(&self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> i32;
fn set_async_context_callback(&self, callback: MemPtr, callback_length: MemLength, data: MemPtr, data_length: MemLength, gas: i64) -> i32;
fn upgrade_contract(&self, dest_offset: MemPtr, gas_limit: i64, value_offset: MemPtr, code_offset: MemPtr, code_metadata_offset: MemPtr, length: MemLength, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr);
fn upgrade_from_source_contract(&self, dest_offset: MemPtr, gas_limit: i64, value_offset: MemPtr, source_contract_address_offset: MemPtr, code_metadata_offset: MemPtr, num_arguments: i32, arguments_length_offset: MemPtr, data_offset: MemPtr);
Expand Down Expand Up @@ -403,6 +404,11 @@ impl VMHooksLegacy for VMHooksLegacyDefault {
0
}

fn create_async_v3_call(&self, dest_offset: MemPtr, value_offset: MemPtr, data_offset: MemPtr, data_length: MemLength, success_offset: MemPtr, success_length: MemLength, error_offset: MemPtr, error_length: MemLength, gas: i64, extra_gas_for_callback: i64) -> i32 {
println!("Called: create_async_v3_call");
0
}

fn set_async_context_callback(&self, callback: MemPtr, callback_length: MemLength, data: MemPtr, data_length: MemLength, gas: i64) -> i32 {
println!("Called: set_async_context_callback");
0
Expand Down
Loading