Building Blocks
Discover and install building blocks to extend your WDK integration.
Discover and install building blocks to extend your WDK integration.
@tetherto/wdk-wallet-ton-gasless
Gasless Jetton transfers on TON
Loading README…
TON blockchain wallet
Bitcoin SegWit wallet with BIP-39/BIP-44 support
Ethereum and EVM-compatible chains wallet
Note: This package is currently in beta. Please test thoroughly in development environments before using in production.
Manage TON wallets and relay Jetton transfers through TON API gasless paymaster flows. The package derives TON accounts from BIP-39 seed phrases, reads native TON and Jetton balances, and pays transfer fees with a configured paymaster Jetton instead of native TON.
This module is part of the WDK (Wallet Development Kit) project, which empowers developers to build secure, non-custodial wallets with unified blockchain access, stateless architecture, and complete user control.
For detailed documentation about the complete WDK ecosystem, visit docs.wdk.tether.io.
npm install @tetherto/wdk-wallet-ton-gaslessExisting wallets:
getAccount(index)changed its default derivation inv1.0.0-beta.5, fromm/44'/607'/0'/0/{index}tom/44'/607'/{index}'. The same seed therefore produces different addresses after upgrading fromv1.0.0-beta.4or earlier. UsegetAccountByPath("0'/0/0")to reopen the old account at index0; see Configuration for migration details.
Provide a TON Center JSON-RPC client for chain queries, a TON API client for gasless estimation and relay, and a paymaster Jetton supported by the service's gasless configuration. Use the TON API origin without /v2; the client adds that prefix. Add secretKey to either client configuration from secure runtime configuration when your provider requires one.
Gasless operations support Jetton transfers through
transfer()only. NativesendTransaction(),quoteSendTransaction(), andsignTransaction()are not supported.The mnemonic below is public test data; never use it to hold funds. Keep seed phrases and API keys out of source control. This example requires configuration: replace every
EQ...placeholder with a valid mainnet address, and adjust the amount and fee cap for the selected Jettons' decimals. Before transferring, verify the token, recipient, and paymaster addresses; check the account's transfer-token and paymaster-token balances; and settransferMaxFee. Quoted and charged fees use the paymaster Jetton's base units.
import WalletManagerTonGasless from '@tetherto/wdk-wallet-ton-gasless'
const seedPhrase = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'
const wallet = new WalletManagerTonGasless(seedPhrase, {
tonClient: {
url: 'https://toncenter.com/api/v2/jsonRPC',
},
tonApiClient: {
url: 'https://tonapi.io',
},
paymasterToken: {
address: 'EQ...', // Paymaster Jetton master contract address
},
transferMaxFee: 10_000_000n, // Paymaster Jetton base units
})
try {
const account = await wallet.getAccount(0)
const paymasterBalance = await account.getPaymasterTokenBalance()
console.log('Paymaster token balance:', paymasterBalance)
const transfer = {
token: 'EQ...', // Jetton master contract address
recipient: 'EQ...',
amount: 1_000_000n, // Jetton base units
}
const quote = await account.quoteTransfer(transfer)
console.log('Estimated fee:', quote.fee)
const result = await account.transfer(transfer)
console.log('Transaction hash:', result.hash)
} finally {
wallet.dispose()
}m/44'/607'transferMaxFeegetTransaction() and poll for finality with waitForTransaction()getFeeRates() still returns mainnet fee rates, regardless of the configured clients./api/v3 on the same origin for transaction lookup| Topic | Description | Link |
|---|---|---|
| Overview | Module overview and feature summary | Wallet TON Gasless Overview |
| Usage | End-to-end integration walkthrough | Wallet TON Gasless Usage |
| Configuration | TON clients, paymaster token, failover, and fee limits | Wallet TON Gasless Configuration |
| API Reference | Class, method, and type documentation | Wallet TON Gasless API Reference |
Join the WDK Discord to connect with other developers.
For support, please open an issue on GitHub or reach out via email.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.