有时,您调用的合约可能会根据其执行向特定地址转移资金。这种合约调用的底层交易必须具有适当数量的变量输出 才能成功。
假设您部署了一个具有以下方法的合约:
fn transfer(coins: u64, asset_id: AssetId, recipient: Identity) {
transfer(recipient, asset_id, coins);
}
当使用 SDK 调用 transfer_coins_to_output
时,您可以通过在调用中链式添加 append_variable_outputs(amount)
来指定变量输出的数量。就像这样:
let address = wallet.address();
let asset_id = contract_id.asset_id(&Bits256::zeroed());
// withdraw some tokens to wallet
let response = contract_methods
.transfer(1_000_000, asset_id, address.into())
.append_variable_outputs(1)
.call()
.await?;
append_variable_outputs
方法实际上将给定数量的 Output::Variable
添加到交易的输出列表中。该输出类型表示金额和所有者可能会根据交易执行而变化。
注意: Sway 的
lib-std
函数mint_to_address
在内部调用了transfer_to_address
,因此您需要像对待transfer_to_address
一样在 Rust SDK 测试中调用append_variable_outputs
。