@tetherto/wdk-wallet-ton-gasless
Note: This package is currently in beta. Please test thoroughly in development environments before using in production.
A simple and secure package to manage gasless transactions on the TON blockchain. This package provides a clean API for creating, managing, and interacting with TON wallets using BIP-39 seed phrases and TON-specific derivation paths, with support for gasless transactions through a paymaster system.
🔍 About WDK
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.wallet.tether.io.
🌟 Features
- TON Derivation Paths: Support for BIP-44 standard derivation paths for TON (m/44'/607')
- Multi-Account Management: Create and manage multiple accounts from a single seed phrase
- Gasless Transactions: Execute transactions without requiring TON for gas fees
- Paymaster Integration: Built-in support for paymaster-based fee delegation
- Jetton Support: Query native TON and Jetton token balances using smart contract interactions
- Message Signing: Sign and verify messages using TON cryptography
- Failover Providers: Pass an array of
tonClient and/or tonApiClient configs to enable automatic round-robin failover
⬇️ Installation
To install the @tetherto/wdk-wallet-ton-gasless package, follow these instructions:
You can install it using npm:
🚀 Quick Start
Importing from @tetherto/wdk-wallet-ton-gasless
Creating a New Wallet
Managing Multiple Accounts
Checking Balances
Owned Account
For accounts where you have the seed phrase and full access:
Read-Only Account
For addresses where you don't have the seed phrase:
Sending Transactions
⚠️ Important Note: Direct transaction sending using sendTransaction() is not supported in WalletAccountTonGasless. This is a gasless implementation that handles transactions through a gasless provider instead of direct blockchain transactions.
For sending tokens, please use the transfer() method instead.
Token Transfers (Gasless)
Transfer Jetton tokens and estimate fees using WalletAccountTonGasless. Uses paymaster for gasless operations.
Message Signing and Verification
Sign and verify messages using WalletAccountTonGasless.
Fee Management
Retrieve current fee rates using WalletManagerTonGasless.
Memory Management
Clear sensitive data from memory using dispose methods in WalletAccountTonGasless and WalletManagerTonGasless.
📚 API Reference
Table of Contents
WalletManagerTonGasless
The main class for managing TON wallets with gasless features.
Extends WalletManager from @tetherto/wdk-wallet.
Constructor
Parameters:
seed (string | Uint8Array): BIP-39 mnemonic seed phrase or seed bytes
config (object, optional): Configuration object
tonClient (object | TonClient): TON client configuration or instance
tonApiClient (object | TonApiClient): TON API client configuration or instance
url (string): TON API URL (e.g., 'https://tonapi.io/v3')
secretKey (string, optional): API key for TON API
paymasterToken (object): Paymaster token configuration
address (string): The address of the paymaster token
transferMaxFee (number | bigint, optional): Maximum fee amount for transfer operations (in nanotons)
Example:
Methods
| Method | Description | Returns |
|---|
getAccount(index) | Returns a wallet account at the specified index | Promise<WalletAccountTonGasless> |
getAccountByPath(path) | Returns a wallet account at the specified BIP-44 derivation path | Promise<WalletAccountTonGasless> |
getFeeRates() | Returns current fee rates for transactions | Promise<{normal: bigint, fast: bigint}> |
dispose() | Disposes all wallet accounts, clearing private keys from memory | void |
getAccount(index)
Returns a gasless TON wallet account at the specified index using BIP-44 derivation path m/44'/607'.
Parameters:
index (number, optional): The index of the account to get (default: 0)
Returns: Promise<WalletAccountTonGasless> - The gasless TON wallet account
Example:
getAccountByPath(path)
Returns a gasless TON wallet account at the specified BIP-44 derivation path.
Parameters:
path (string): The derivation path (e.g., "0'/0/0", "1'/0/5")
Returns: Promise<WalletAccountTonGasless> - The gasless TON wallet account
Example:
getFeeRates()
Returns current fee rates for TON transactions (used by paymaster for gasless operations).
Returns: Promise<{normal: bigint, fast: bigint}> - Object containing fee rates in nanotons
normal: Standard fee rate for normal confirmation speed
fast: Higher fee rate for faster confirmation
Example:
dispose()
Disposes all gasless TON wallet accounts and clears sensitive data from memory.
Returns: void
Example:
WalletAccountTonGasless
Represents an individual wallet account with gasless features. Implements IWalletAccount from @tetherto/wdk-wallet.
Constructor
Parameters:
seed (string | Uint8Array): BIP-39 mnemonic seed phrase or seed bytes
path (string): BIP-44 derivation path (e.g., "0'/0/0")
config (object, optional): Configuration object
tonClient (object | TonClient): TON client configuration or instance
url (string): TON Center API URL
secretKey (string, optional): API key for TON Center
tonApiClient (object | TonApiClient): TON API client configuration or instance
url (string): TON API URL
secretKey (string, optional): API key for TON API
paymasterToken (object): Paymaster token configuration
address (string): The address of the paymaster token
transferMaxFee (number | bigint, optional): Maximum fee amount for transfer operations (in nanotons)
Methods
| Method | Description | Returns |
|---|
getAddress() | Returns the account's TON address | Promise<string> |
sign(message) | Signs a message using the account's private key | Promise<string> |
verify(message, signature) | Verifies a message signature | Promise<boolean> |
transfer(options, config?) | Transfers tokens using gasless transactions | Promise<{hash: string, fee: bigint}> |
quoteTransfer(options, config?) | Estimates the fee for a token transfer | Promise<{fee: bigint}> |
getBalance() | Returns the native TON balance (in nanotons) | Promise<bigint> |
getTokenBalance(tokenAddress) | Returns the balance of a specific token | Promise<bigint> |
getPaymasterTokenBalance() | Returns the balance of the paymaster token | Promise<bigint> |
dispose() | Disposes the wallet account, clearing private keys from memory | void |
getAddress()
Returns the account's TON address.
Returns: Promise<string> - The TON address
Example:
sign(message)
Signs a message using the account's private key.
Parameters:
message (string): Message to sign
Returns: Promise<string> - Signature as hex string
Example:
verify(message, signature)
Verifies a message signature using the account's public key.
Parameters:
message (string): Original message
signature (string): Signature as hex string
Returns: Promise<boolean> - True if signature is valid
Example:
transfer(options, config?)
Transfers tokens using gasless transactions where the paymaster covers transaction fees.
Parameters:
options (object): Transfer options
token (string): Token contract address (e.g., 'EQ...')
recipient (string): Recipient TON address (e.g., 'EQ...')
amount (number | bigint): Amount in token's base units
config (object, optional): Override configuration
paymasterToken (object, optional): Override default paymaster token
address (string): Paymaster token address
transferMaxFee (number | bigint, optional): Override maximum fee
Returns: Promise<{hash: string, fee: bigint}> - Object containing hash and fee (typically 0 or covered by paymaster)
Example:
quoteTransfer(options, config?)
Estimates the fee for a token transfer (typically covered by paymaster in gasless operations).
Parameters:
options (object): Same as transfer parameters
token (string): Token contract address
recipient (string): Recipient TON address
amount (number | bigint): Amount in token's base units
config (object, optional): Same as transfer configuration
paymasterToken (object, optional): Override default paymaster token
transferMaxFee (number | bigint, optional): Override maximum fee
Returns: Promise<{fee: bigint}> - Object containing estimated fee (typically 0 or covered by paymaster)
Example:
getBalance()
Returns the account's native TON balance in nanotons.
Returns: Promise<bigint> - Balance in nanotons
Example:
getTokenBalance(tokenAddress)
Returns the balance of a specific token (Jetton).
Parameters:
tokenAddress (string): The token contract address
Returns: Promise<bigint> - Token balance in token's smallest unit
Example:
getPaymasterTokenBalance()
Returns the balance of the paymaster token used for gasless operations.
Returns: Promise<bigint> - Paymaster token balance in token's smallest unit
Example:
dispose()
Disposes the wallet account, securely erasing the private key from memory.
Returns: void
Example:
Properties
| Property | Type | Description |
|---|
index | number | The derivation path's index of this account |
path | string | The full derivation path of this account |
keyPair | object | The account's key pair (⚠️ Contains sensitive data) |
⚠️ Security Note: The keyPair property contains sensitive cryptographic material. Never log, display, or expose the private key.
WalletAccountReadOnlyTonGasless
Represents a read-only wallet account with gasless features.
Constructor
Parameters:
publicKey (string | Uint8Array): The account's public key
config (object, optional): Configuration object
tonClient (object | TonClient): TON client configuration or instance
url (string): TON Center API URL
secretKey (string, optional): API key for TON Center
tonApiClient (object | TonApiClient): TON API client configuration or instance
url (string): TON API URL
secretKey (string, optional): API key for TON API
paymasterToken (object): Paymaster token configuration
address (string): The address of the paymaster token
Methods
| Method | Description | Returns |
|---|
getBalance() | Returns the native TON balance (in nanotons) | Promise<bigint> |
getTokenBalance(tokenAddress) | Returns the balance of a specific token | Promise<bigint> |
getPaymasterTokenBalance() | Returns the balance of the paymaster token | Promise<bigint> |
quoteTransfer(options, config?) | Estimates the fee for a token transfer | Promise<{fee: bigint}> |
verify(message, signature) | Verifies a message signature | Promise<boolean> |
getBalance()
Returns the account's native TON balance in nanotons.
Returns: Promise<bigint> - Balance in nanotons
Example:
getTokenBalance(tokenAddress)
Returns the balance of a specific token (Jetton).
Parameters:
tokenAddress (string): The token contract address
Returns: Promise<bigint> - Token balance in token's smallest unit
Example:
getPaymasterTokenBalance()
Returns the balance of the paymaster token used for gasless operations.
Returns: Promise<bigint> - Paymaster token balance in token's smallest unit
Example:
quoteTransfer(options, config?)
Estimates the fee for a token transfer (typically covered by paymaster in gasless operations).
Parameters:
options (object): Transfer options
token (string): Token contract address
recipient (string): Recipient TON address
amount (number | bigint): Amount in token's base units
config (object, optional): Override configuration
paymasterToken (object, optional): Override default paymaster token
address (string): Paymaster token address
transferMaxFee (number | bigint, optional): Override maximum fee
Returns: Promise<{fee: bigint}> - Object containing estimated fee (typically 0 or covered by paymaster)
Example:
verify(message, signature)
Verifies a message signature using the account's public key.
Parameters:
message (string): Original message
signature (string): Signature as hex string
Returns: Promise<boolean> - True if signature is valid
Example:
🌐 Supported Networks
This package works with the TON blockchain, including:
🔒 Security Considerations
- Seed Phrase Security: Always store your seed phrase securely and never share it
- Private Key Management: The package handles private keys internally with memory safety features using sodium-universal
- Provider Security: Use trusted TON Center and TON API endpoints
- Transaction Validation: Always validate transaction details before signing
- Memory Cleanup: Use the
dispose() method to clear private keys from memory when done
- Fee Limits: Set
transferMaxFee in config to prevent excessive transaction fees
- Address Validation: Be careful with bounceable vs non-bounceable addresses
- Paymaster Token: Ensure sufficient paymaster token balance for gasless operations
- API Keys: Securely manage both TON Center and TON API keys
- Gasless Provider: Validate gasless provider configuration and token allowances
🛠️ Development
Building
Testing
📜 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
🆘 Support
For support, please open an issue on the GitHub repository.