Variable Outputs

Icon Link可变输出

Sway 包括用于将资产转移到钱包和合约的强大功能。

在您的 Sway 项目中使用这些转账功能时,重要的是要意识到每次调用都需要交易的 Outputs Icon Link 中的一个 Output Variable Icon Link

例如,如果合约函数调用了 Sway 转账函数 3 次,则在交易的输出列表中需要存在 3 个输出变量。

Icon Link示例:需要 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);
}

Icon Link向合约调用添加可变输出

当您的合约调用了其中任何一个函数,或者如果它调用了导致另一个合约调用这些函数的函数时,您需要添加相应数量的输出变量。

可以如下所示执行此操作:

const { transactionResult } = await contract.functions
  .transfer_to_address(address, assetId, 100)
  .txParams({
    variableOutputs: 1,
  })
  .call();

在 TypeScript SDK 中,输出变量会自动添加到交易的输出列表中。

这个过程是通过一种蛮力策略来完成的,执行连续的干扰运行,直到不再返回错误为止。这种方法确定了处理交易所需的输出变量的数量。

然而,这可能会显著延迟交易处理。因此,强烈建议在提交交易之前手动添加正确数量的输出变量。