交易项
这里演示如何通过 UKey Wallet Aptos Provider 发起交易签名、确认提交交易,以及处理 BCS 序列化、多代理和代付手续费等高级场景。
签名并确认提交交易
// 简单 APT 转账参考
const payload = {
type: "entry_function_payload",
function: "0x1::aptos_account::transfer",
type_arguments: [],
arguments: [
"0xdemo_receiver...", // 接收地址
"100000000", // 金额参考值,单位为 Octas(1 APT = 100000000 Octas)
],
};
const requestResult = await provider.signAndSubmitTransaction(payload);
console.log("交易哈希值:", requestResult.hash);
仅签名不确认提交
const payload = {
type: "entry_function_payload",
function: "0x1::coin::transfer",
type_arguments: ["0x1::aptos_coin::AptosCoin"],
arguments: ["0xdemo_receiver...", "100000000"],
};
const signedTxn = await provider.signTransaction(payload);
// 稍后再通过 Aptos SDK 确认提交
// 例如:const pendingTxn = await client.submitTransaction(signedTxn)
签名 V2(BCS 序列化)
当应用已经构造好 BCS 序列化交易时,可以使用 V2 接口处理更底层的签名场景:
import { BCS } from 'aptos'
const rawTransaction = /* BCS 序列化的原始交易 */
const signedTxn = await provider.signTransactionV2({
transaction: rawTransaction,
transactionType: 'simple', // 可选 'simple' 或 'multi_agent'
asFeePayer: false,
})
交易选项
const payload = {
type: "entry_function_payload",
function: "0x1::aptos_account::transfer",
type_arguments: [],
arguments: ["0xdemo_receiver...", "100000000"],
};
const options = {
max_gas_amount: "10000",
gas_unit_price: "100",
expiration_timestamp_secs: Math.floor(Date.now() / 1000) + 600, // 10 分钟
};
const requestResult = await provider.signAndSubmitTransaction(payload, options);
智能合约交互
调用 View 函数
// View 调用场景不需要签名
const callResult = await client.view({
function: "0x1::coin::balance",
type_arguments: ["0x1::aptos_coin::AptosCoin"],
arguments: [accountAddress],
});
console.log("当前余额:", callResult[0]);
调用 Entry 函数
// NFT 铸造参考
const payload = {
type: "entry_function_payload",
function: "0x3::token::create_collection_script",
type_arguments: [],
arguments: [
"Demo Collection", // 集合名称
"Demo description", // 描述
"https://demo.example", // 资源 URI
"1000", // 最大可发行量
[false, false, false], // 字段可变配置
],
};
const requestResult = await provider.signAndSubmitTransaction(payload);
多代理交易
当交易需要多个签名者参与时,使用 multi-agent 类型:
const signedTxn = await provider.signTransactionV2({
transaction: rawTransaction,
transactionType: "multi_agent",
});
代付手续费交易
如果当前账户需要作为手续费代付方参与签名,可设置 asFeePayer:
const signedTxn = await provider.signTransactionV2({
transaction: rawTransaction,
transactionType: "simple",
asFeePayer: true,
});