跳到主要内容

交易项

这里演示如何通过 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,
});