WDK logoWDK documentation

Transfer TRC20 Tokens

Transfer TRC20 tokens gas-free and estimate transfer fees.

This guide explains how to transfer TRC20 tokens gas-free, override the fee limit, estimate transfer fees, and validate inputs before executing.

Transfer Tokens (Gas-Free)

You can send TRC20 tokens gas-free using account.transfer(). The gas-free service handles the fee payment:

Gas-Free TRC20 Transfer
const transferResult = await account.transfer({
  token: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', // USDT
  recipient: 'TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH',
  amount: 1000000 // Amount in TRC20's base units
})
console.log('Transfer hash:', transferResult.hash)
console.log('Transfer fee:', transferResult.fee, 'token units')

Override Fee Limit

You can set a maximum fee for a specific transfer by passing a second configuration object specifying a transferMaxFee to account.transfer():

Transfer with Fee Limit
const result = await account.transfer({
  token: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', // USDT
  recipient: 'TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH',
  amount: 1000000
}, {
  transferMaxFee: 1000 // Maximum fee allowed in token units
})
console.log('Transfer hash:', result.hash)
console.log('Transfer fee:', result.fee, 'token units')

Estimate Transfer Fees

You can get a fee estimate before executing the transfer using account.quoteTransfer():

Quote Gas-Free Transfer
const transferQuote = await account.quoteTransfer({
  token: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', // USDT
  recipient: 'TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH',
  amount: 1000000
})
console.log('Transfer fee estimate:', transferQuote.fee, 'token units')

Transfer with Validation

Validate addresses and check balances before transferring:

  1. Use account.getTokenBalance() to verify sufficient funds.
  2. Use account.quoteTransfer() to confirm fees.
  3. Execute the transfer with account.transfer():
Validated Gas-Free Transfer
async function transferWithValidation(account, tokenAddress, recipient, amount) {
  if (!tokenAddress.startsWith('T') || tokenAddress.length !== 34) {
    throw new Error('Invalid TRC20 contract address')
  }

  if (!recipient.startsWith('T') || recipient.length !== 34) {
    throw new Error('Invalid recipient address')
  }

  const balance = await account.getTokenBalance(tokenAddress)
  if (balance < amount) {
    throw new Error('Insufficient TRC20 token balance')
  }

  const quote = await account.quoteTransfer({
    token: tokenAddress,
    recipient,
    amount
  })
  console.log('Transfer fee estimate:', quote.fee, 'token units')

  const result = await account.transfer({
    token: tokenAddress,
    recipient,
    amount
  })
  console.log('Transfer completed:', result.hash)
  console.log('Fee paid:', result.fee, 'token units')

  return result
}

Next Steps

Learn how to sign and verify messages with your gas-free Tron account.

On this page