Icon HelpCircleForumIcon Link

⌘K

Icon HelpCircleForumIcon Link

Icon LinkCustom contract and script calls

When preparing a contract call via CallHandler, the Rust SDK uses a transaction builder in the background. You can fetch this builder and customize it before submitting it to the network. After the transaction is executed successfully, you can use the corresponding CallHandler to generate a call response . The call response can be used to decode return values and logs. Below are examples for both contract and script calls.

Icon LinkCustom contract call

let call_handler = contract_instance.methods().initialize_counter(counter);
 
let mut tb = call_handler.transaction_builder().await?;
 
// customize the builder...
 
wallet.adjust_for_fee(&mut tb, 0).await?;
tb.add_signer(wallet.clone())?;
 
let tx = tb.build(provider).await?;
 
let tx_id = provider.send_transaction(tx).await?;
let tx_status = provider.tx_status(&tx_id).await?;
 
let response = call_handler.get_response_from(tx_status)?;
 
assert_eq!(counter, response.value);

Icon LinkCustom script call

let script_call_handler = script_instance.main(1, 2);
 
let mut tb = script_call_handler.transaction_builder().await?;
 
// customize the builder...
 
wallet.adjust_for_fee(&mut tb, 0).await?;
tb.add_signer(wallet.clone())?;
 
let tx = tb.build(provider).await?;
 
let tx_id = provider.send_transaction(tx).await?;
let tx_status = provider.tx_status(&tx_id).await?;
 
let response = script_call_handler.get_response_from(tx_status)?;
 
assert_eq!(response.value, "hello");