multiversx_sc_scenario/scenario/tx_to_step/
tx_to_step_transfer.rs1use multiversx_sc::types::{Tx, TxEnv, TxFromSpecified, TxGas, TxPayment, TxToSpecified};
2
3use crate::{imports::TxESDT, scenario_model::TransferStep};
4
5use super::{StepWrapper, TxToStep, address_annotated, gas_annotated};
6
7impl<Env, From, To, Payment, Gas> TxToStep<Env, ()> for Tx<Env, From, To, Payment, Gas, (), ()>
8where
9 Env: TxEnv,
10 From: TxFromSpecified<Env>,
11 To: TxToSpecified<Env>,
12 Payment: TxPayment<Env>,
13 Gas: TxGas<Env>,
14{
15 type Step = TransferStep;
16
17 fn tx_to_step(self) -> StepWrapper<Env, Self::Step, ()> {
18 let step = tx_to_transfer_step(&self.env, self.from, self.to, self.payment, self.gas);
19
20 StepWrapper {
21 env: self.env,
22 step,
23 result_handler: self.result_handler,
24 }
25 }
26}
27
28pub fn tx_to_transfer_step<Env, From, To, Payment, Gas>(
29 env: &Env,
30 from: From,
31 to: To,
32 payment: Payment,
33 gas: Gas,
34) -> TransferStep
35where
36 Env: TxEnv,
37 From: TxFromSpecified<Env>,
38 To: TxToSpecified<Env>,
39 Payment: TxPayment<Env>,
40 Gas: TxGas<Env>,
41{
42 let mut step = TransferStep::new()
43 .from(address_annotated(env, &from))
44 .to(address_annotated(env, &to));
45
46 step.tx.gas_limit = gas_annotated(env, gas);
47
48 let full_payment_data = payment.into_scenario_payments(env);
49 if let Some(annotated_egld_payment) = full_payment_data.egld {
50 step.tx.egld_value = annotated_egld_payment.into();
51 } else {
52 step.tx.esdt_value = full_payment_data
53 .multi_esdt
54 .iter()
55 .map(|item| TxESDT::from(item.clone()))
56 .collect();
57 }
58
59 step
60}