multiversx_sc_snippets/interactor/interactor_scenario/
interactor_transfer.rs1use std::process;
2
3use super::error_message::transfer_err_message;
4use crate::InteractorBase;
5use log::info;
6use multiversx_sc_scenario::{scenario::ScenarioRunner, scenario_model::TransferStep};
7use multiversx_sdk::{
8 gateway::{GatewayAsyncService, SendTxRequest},
9 retrieve_tx_on_network,
10};
11
12impl<GatewayProxy> InteractorBase<GatewayProxy>
13where
14 GatewayProxy: GatewayAsyncService,
15{
16 pub async fn transfer(&mut self, transfer_step: TransferStep) -> String {
17 self.pre_runners.run_transfer_step(&transfer_step);
18
19 let sender_address = &transfer_step.tx.from.value;
20 let mut transaction = self.tx_call_to_blockchain_tx(&transfer_step.tx.to_tx_call());
21 self.set_nonce_and_sign_tx(sender_address, &mut transaction)
22 .await;
23 let tx_hash = match self.proxy.request(SendTxRequest(&transaction)).await {
24 Ok(hash) => hash,
25 Err(err) => {
26 transfer_err_message(&err);
27 process::exit(1);
28 }
29 };
30 self.generate_blocks_until_tx_processed(&tx_hash)
31 .await
32 .unwrap();
33
34 println!("transfer tx hash: {tx_hash}");
35 info!("transfer tx hash: {}", tx_hash);
36
37 retrieve_tx_on_network(&self.proxy, tx_hash.clone()).await;
38
39 self.post_runners.run_transfer_step(&transfer_step);
40
41 tx_hash
42 }
43}