Sway 包括用于将资产转移到钱包和合约的强大功能。
在您的 Sway 项目中使用这些转账功能时,重要的是要意识到每次调用都需要交易的 Outputs 中的一个 Output Variable 。
例如,如果合约函数调用了 Sway 转账函数 3 次,则在交易的输出列表中需要存在 3 个输出变量。
Output Variable
的 Sway 函数 fn transfer_to_address(recipient: Address, asset_id: AssetId, amount: u64) {
transfer(Identity::Address(recipient), asset_id, amount);
}
fn transfer_to_contract(target: ContractId, asset_id: AssetId, amount: u64) {
transfer(Identity::ContractId(target), asset_id, amount);
}
当您的合约调用了其中任何一个函数,或者如果它调用了导致另一个合约调用这些函数的函数时,您需要添加相应数量的输出变量。
可以如下所示执行此操作:
const { transactionResult } = await contract.functions
.transfer_to_address(address, assetId, 100)
.txParams({
variableOutputs: 1,
})
.call();
在 TypeScript SDK 中,输出变量会自动添加到交易的输出列表中。
这个过程是通过一种蛮力策略来完成的,执行连续的干扰运行,直到不再返回错误为止。这种方法确定了处理交易所需的输出变量的数量。
然而,这可能会显著延迟交易处理。因此,强烈建议在提交交易之前手动添加正确数量的输出变量。