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():
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():
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():
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.
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.