Transfers
This walkthrough covers how to initiate transaction signing, submit transactions, and handle advanced scenarios such as BCS serialization, multi-agent, and fee payment through UKey Wallet Aptos Provider.
Sign and submit the transaction
// Note: Simple APT transfer
const payload = {
type: "entry_function_payload",
function: "0x1::aptos_account::transfer",
type_arguments: [],
arguments: [
"0xdemo_receiver...", // Note: receiving address
"100000000", // sample amount in Octas (1 APT = 100000000 Octas)
],
};
const requestResult = await provider.signAndSubmitTransaction(payload);
console.log("Tx hash:", requestResult.hash);
Only signature, no submission
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);
// Note: Submit the signed transaction later using Aptos SDK
// reference code: const pendingTxn = await client.submitTransaction(signedTxn)
Signature V2 (BCS Serialization)
When the application has constructed a BCS serialized transaction, it can use the V2 interface to handle lower-level signature scenarios:
import { BCS } from 'aptos'
const rawTransaction = /* BCS-serialized raw transaction */
const signedTxn = await provider.signTransactionV2({
transaction: rawTransaction,
transactionType: 'simple', // choose 'simple' or 'multi_agent'
asFeePayer: false,
})
Trading options
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 minutes
};
const requestResult = await provider.signAndSubmitTransaction(payload, options);
Smart contract interaction
Call View function
// Note: View functions do not require signatures
const callResult = await client.view({
function: "0x1::coin::balance",
type_arguments: ["0x1::aptos_coin::AptosCoin"],
arguments: [accountAddress],
});
console.log("Current balance:", callResult[0]);
Call the Entry function
// Note: Minting NFT Example
const payload = {
type: "entry_function_payload",
function: "0x3::token::create_collection_script",
type_arguments: [],
arguments: [
"Demo Collection", // Note: Collection name
"Demo description", // Note: describe
"https://demo.example", // Note: URI
"1000", // Note: maximum supply
[false, false, false], // Note: Variable configuration
],
};
const requestResult = await provider.signAndSubmitTransaction(payload);
multi-agent trading
When a transaction requires the participation of multiple signers, use the multi-agent type:
const signedTxn = await provider.signTransactionV2({
transaction: rawTransaction,
transactionType: "multi_agent",
});
Fee payment transaction
If the current account needs to participate in signing as a fee payer, you can set asFeePayer:
const signedTxn = await provider.signTransactionV2({
transaction: rawTransaction,
transactionType: "simple",
asFeePayer: true,
});