跳到主要内容

发送交易

Step1: 生成交易

val tx = Transaction(
to, // To Address
data, // Transaction Data
value, // The value transferred to `To Address`
);

Step2: 通过 simulateTransaction() 获取手续费选项

提示

💡 您需要在 suspend function 中调用此方法,因为它是异步方法。

// data class SimulateResult(
// var `isFeeRequired`: Boolean,
// var `feeOptions`: List<FeeOption>,
// )

// data class FeeOption(
// var `token`: String,
// var `name`: String,
// var `symbol`: String,
// var `decimals`: UByte,
// var `to`: String,
// var `amount`: String,
// var `error`: String?,
// )

val simulateRet = smartAccount.simulateTransaction(tx);

Step3: 应用侧验证手续费代币是否足够

// Create options which is used for sendTransaction
val sendTransactionOptions = SendingTransactionOptions(null)

// Token_CA: The contract address of the token you want to use as gasFee
// Example: Take USDC on Mumbai as gasFee
var Token_CA = "0x87F0E95E11a49f56b329A1c143Fb22430C07332a"

if (simulateRet!!.isFeeRequired) {
sendTransactionOptions.fee =
simulateRet?.feeOptions?.find { it.token.lowercase() == Token_CA.lowercase() }
}
提示

请注意,如果交易中涉及到手续费代币,验证结果可能不准确。

Step4: 指定手续费代币并发送交易

提示

💡 您需要在 suspend function 中调用此方法,因为它是异步方法。

val txHash = smartAccount.sendTransaction(tx, sendTransactionOptions)
val receipt = smartAccount.waitTransactionReceiptByHash(txHash!!, 2, ChainID.ETHEREUM_MAINNET, 60);