WDK logoWDK documentation
TONStandard TONGuides

Send TON

Send native TON and estimate transaction fees.

This guide explains how to send native TON, estimate transaction fees, cap transaction fees, use dynamic fee rates, and sign a transaction offline.

On TON, values are expressed in nanotons (1 TON = 10^9 nanotons). Transactions support an optional bounceable parameter specific to the TON network.

Send Native TON

You can transfer TON to a recipient address using account.sendTransaction():

Send TON
const result = await account.sendTransaction({
  to: 'EQ...', // TON address
  value: 1000000000, // 1 TON in nanotons
  bounceable: true // Optional: specify if the address is bounceable
})
console.log('Transaction hash:', result.hash)
console.log('Transaction fee:', result.fee, 'nanotons')

Estimate Transaction Fees

You can get a fee estimate before sending using account.quoteSendTransaction():

Quote Transaction Fee
const quote = await account.quoteSendTransaction({
  to: 'EQ...',
  value: 1000000000,
  bounceable: true
})
console.log('Estimated fee:', quote.fee, 'nanotons')

Cap Transaction Fees

Set transactionMaxFee when you create the wallet to stop native sendTransaction() and signTransaction() calls if the estimated fee exceeds your limit.

Cap Native Transaction Fees
const wallet = new WalletManagerTon(seedPhrase, {
  tonClient: { url: 'https://toncenter.com/api/v3' },
  transactionMaxFee: 1000000000n
})

Use Dynamic Fee Rates

You can retrieve current fee rates from the wallet manager using wallet.getFeeRates():

Get Fee Rates
const feeRates = await wallet.getFeeRates()
console.log('Normal fee rate:', feeRates.normal, 'nanotons')
console.log('Fast fee rate:', feeRates.fast, 'nanotons')

Sign a Transaction Offline

You can sign a transaction without broadcasting it using account.signTransaction(). This returns the signed external-message body as a TON Cell, which you can serialize and broadcast from another environment.

Sign Transaction Offline
const cell = await account.signTransaction({
  to: 'EQ...', // TON address
  value: 1000000000 // 1 TON in nanotons
})

// Serialize to a wire-format payload for broadcast elsewhere
const boc = cell.toBoc().toString('base64')
console.log('Signed payload:', boc)

Next Steps

To transfer Jetton tokens instead of native TON, see Transfer Jetton Tokens.

On this page