Transfer Jetton Tokens
Transfer Jetton tokens gaslessly with fees paid in paymaster tokens.
This guide explains how to transfer Jetton tokens gaslessly, override paymaster configuration, estimate transfer fees, and validate inputs before executing.
Transfer Tokens (Gasless)
You can send Jetton tokens gaslessly using account.transfer(). Fees are deducted from the configured paymaster token:
const result = await account.transfer({
token: 'EQ...', // Jetton master contract address
recipient: 'EQ...', // Recipient's TON address
amount: 1000000000 // Amount in Jetton's base units
})
console.log('Transfer hash:', result.hash)
console.log('Transfer fee:', result.fee, 'paymaster token units')Override Paymaster Configuration
You can override the default paymaster token and maximum fee on a per-transfer basis by passing a second configuration argument to account.transfer():
const result = await account.transfer({
token: 'EQ...',
recipient: 'EQ...',
amount: 1000000000
}, {
paymasterToken: {
address: 'EQ...' // Override default paymaster token
},
transferMaxFee: 2000000000 // Override maximum allowed fee
})
console.log('Transfer hash:', result.hash)
console.log('Transfer fee:', result.fee, 'paymaster token units')Estimate Transfer Fees
You can get a fee estimate before executing the transfer using account.quoteTransfer():
const quote = await account.quoteTransfer({
token: 'EQ...',
recipient: 'EQ...',
amount: 1000000
})
console.log('Transfer fee estimate:', quote.fee, 'paymaster token units')Transfer with Validation
Validate balances before transferring:
- Use
account.getTokenBalance()to check Jetton balance. - Use
account.getPaymasterTokenBalance()to verify sufficient paymaster funds. - Use
account.quoteTransfer()to estimate fees. - Execute the transfer with
account.transfer():
async function transferWithValidation(account, jettonAddress, recipient, amount) {
if (typeof jettonAddress !== 'string' || jettonAddress.length === 0) {
throw new Error('Invalid Jetton address format')
}
if (typeof recipient !== 'string' || recipient.length === 0) {
throw new Error('Invalid recipient address format')
}
const balance = await account.getTokenBalance(jettonAddress)
if (balance < amount) {
throw new Error('Insufficient Jetton balance')
}
const paymasterBalance = await account.getPaymasterTokenBalance()
console.log('Paymaster token balance:', paymasterBalance)
const quote = await account.quoteTransfer({
token: jettonAddress,
recipient,
amount
})
console.log('Estimated fee (paymaster token):', quote.fee)
const result = await account.transfer({
token: jettonAddress,
recipient,
amount
})
console.log('Transfer hash:', result.hash)
console.log('Actual fee (paymaster token):', result.fee)
return result
}Next Steps
Learn how to sign and verify messages with your gasless TON account.