Skip to main content

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,
});