@tetherto/wdk-protocol-bridge-usdt0-evm
Note: This package is currently in beta. Please test thoroughly in development environments before using in production.
A simple and secure package that lets EVM wallet accounts bridge USDT0 tokens across different blockchains. This package provides a clean SDK for moving tokens between EVM-compatible chains using the LayerZero protocol and USDT0 bridge system with support for both standard wallets and ERC-4337 smart accounts.
This module can be managed by the @tetherto/wdk package, which provides a unified interface for managing multiple WDK wallet and protocol modules across different blockchains.
🔍 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
- Cross-Chain Bridge: Move USDT0 and XAUt0 tokens between supported blockchains
- LayerZero Integration: Uses LayerZero protocol for secure cross-chain transfers
- Multi-Chain Support: Bridge across 25+ networks including Ethereum, Arbitrum, Optimism, Polygon, Berachain, Monad, and more
- Non-EVM Destinations: Bridge to Solana, TON, and TRON from any supported EVM source chain
- Account Abstraction: Works with both standard EVM wallets and ERC-4337 smart accounts
- Fee Management: Built-in fee calculation and bridge cost estimation
- Token Support: Supports USDT0 and XAUt0 (Tether Gold) across supported networks
- TypeScript Support: Full TypeScript definitions included
- Memory Safety: Secure transaction handling with proper error management
- Provider Flexibility: Works with JSON-RPC URLs and EIP-1193 browser providers
⬇️ Installation
To install the @tetherto/wdk-protocol-bridge-usdt0-evm package, follow these instructions:
You can install it using npm:
🚀 Quick Start
Before calling bridge(), approve the source-chain bridge spender for the token and amount you want to bridge. When you pass oftContractAddress, use that same address as the approval spender. Some providers also require allowance before quoteBridge() because fee quoting estimates the bridge send transaction.
Option 1: Using with WDK Core (Recommended)
Use the source-chain OFT or bridge contract as the approval spender. Find current token and bridge contract addresses in the USDT0 deployments. For the route mapping used by this package, see src/config.js, especially oftContract, legacyMeshContract, and xautOftContract.
Option 2: Direct Usage
Creating a New Bridge Service
Basic Cross-Chain Bridging
Getting Bridge Quotes
ERC-4337 Smart Account Bridging
Multi-Token Bridging
Bridging to Non-EVM Chains
Custom Contract Address and Destination EID Overrides
Advanced Bridge Operations
📚 API Reference
Table of Contents
| Class | Description | Methods |
|---|
| Usdt0ProtocolEvm | Main class for bridging USDT0 tokens between EVM chains. Extends BridgeProtocol from @tetherto/wdk-wallet/protocols. | Constructor, Methods |
Usdt0ProtocolEvm
The main class for bridging USDT0 tokens between EVM-compatible blockchains using the LayerZero protocol.
Extends BridgeProtocol from @tetherto/wdk-wallet/protocols.
Constructor
Parameters:
account (WalletAccountEvm | WalletAccountEvmErc4337 | WalletAccountReadOnlyEvm | WalletAccountReadOnlyEvmErc4337): The wallet account to use for bridge operations
config (object, optional): Configuration object
bridgeMaxFee (bigint, optional): Maximum total bridge cost in wei
Example:
Methods
| Method | Description | Returns |
|---|
bridge(options, config?) | Bridges tokens between EVM chains | Promise<BridgeResult> |
quoteBridge(options, config?) | Gets the cost of a bridge operation | Promise<Omit<BridgeResult, 'hash'>> |
bridge(options, config?)
Bridges tokens between blockchains using the USDT0 protocol.
Parameters:
options (BridgeOptions): Bridge operation options
targetChain (string): Where to send tokens (e.g. 'ethereum', 'arbitrum', 'polygon', 'solana', 'ton', 'tron', etc.)
recipient (string): Address that will get the bridged tokens (EVM hex address, Solana base58, TON, or TRON address)
token (string): Token address on source chain
amount (bigint): Amount to bridge in token base units
oftContractAddress (string, optional): Custom OFT contract address to use instead of auto-resolving from the source chain
dstEid (number, optional): Custom LayerZero destination endpoint ID to override the default for the target chain
config (Pick<EvmErc4337WalletConfig, 'paymasterToken'> & Pick<BridgeProtocolConfig, 'bridgeMaxFee'>, optional): Override settings for ERC-4337 accounts
paymasterToken ({ address: string }, optional): Paymaster token configuration
bridgeMaxFee (bigint, optional): Override maximum bridge fee
Returns: Promise<BridgeResult> - Bridge operation result
Example:
quoteBridge(options, config?)
Gets the cost of a bridge operation without executing it.
Parameters:
options (BridgeOptions): Same as bridge method (including optional oftContractAddress and dstEid overrides)
config (Pick<EvmErc4337WalletConfig, 'paymasterToken'>, optional): Override settings for ERC-4337 accounts
Returns: Promise<Omit<BridgeResult, 'hash'>> - Bridge cost estimate
Example:
🌐 Supported Networks
This package supports bridging from EVM source chains to both EVM and non-EVM destination chains.
EVM Source/Destination Chains (USDT0):
| Chain | Chain ID | EID |
|---|
| Ethereum | 1 | 30101 |
| Arbitrum | 42161 | 30110 |
| Berachain | 80094 | 30362 |
| Conflux eSpace | 1030 | 30212 |
| Corn | 21000000 | 30331 |
| Flare | 14 | 30295 |
| HyperEVM | 999 | 30367 |
| Ink | 57073 | 30339 |
| Mantle | 5000 | 30181 |
| MegaETH | 4326 | 30398 |
| Monad | 143 | 30390 |
| Morph | 2818 | 30322 |
| Optimism | 10 | 30111 |
| Plasma | 9745 | 30383 |
| Polygon | 137 | 30109 |
| Rootstock | 30 | 30333 |
| Sei | 1329 | 30280 |
| Stable | 988 | 30396 |
| Unichain | 130 | 30320 |
| XLayer | 196 | 30274 |
Legacy Mesh Chains (USDT0):
| Chain | EID |
|---|
| Ethereum | 30101 |
| Arbitrum | 30110 |
| Celo | 30125 |
| Solana | 30168 |
| TON | 30343 |
| TRON | 30420 |
Non-EVM Destination Chains:
- Solana (EID: 30168) - base58 address format
- TON (EID: 30343) - TON address format
- TRON (EID: 30420) - TRON address format
XAUt0 (Tether Gold) Support:
| Chain | EID |
|---|
| Ethereum | 30101 |
| Arbitrum | 30110 |
| Avalanche | 30106 |
| Celo | 30125 |
| HyperEVM | 30367 |
| Ink | 30339 |
| Monad | 30390 |
| Plasma | 30383 |
| Polygon | 30109 |
| Stable | 30396 |
Account Types:
- Standard EVM Wallets:
@tetherto/wdk-wallet-evm accounts
- ERC-4337 Smart Accounts:
@tetherto/wdk-wallet-evm-erc-4337 accounts with sponsored transactions
- Read-Only Accounts: For querying bridge costs without transaction capabilities
Note: Token support is determined by the contracts deployed on each chain. The protocol checks for oftContract, legacyMeshContract, and xautOftContract to determine available tokens.
🔒 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
- RPC Provider Security: Use trusted RPC endpoints and consider running your own node
- Transaction Validation: Always validate bridge details before signing
- Gas Price Management: Monitor gas prices and set appropriate
bridgeMaxFee limits
- Quote Validation: Always get quotes before executing bridges to avoid unexpected costs
- Token Verification: Verify token contract addresses before bridging
- Chain Verification: Ensure target chain supports the token being bridged
- Recipient Validation: Double-check recipient addresses for target chains
- LayerZero Security: Trust LayerZero protocol for cross-chain message delivery
- Smart Contract Risk: Understand the risks of interacting with bridge smart contracts
- ERC-4337 Considerations: Be aware of paymaster and bundler dependencies for smart accounts
- Slippage Protection: Consider price impact for large bridge amounts
- MEV Protection: Be aware of potential MEV risks on public mempools
🛠️ 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.