WDK logoWDK documentation

Send TON

Send native TON and estimate transaction fees.

This guide explains how to send native TON, estimate 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')

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