Wallet Modules Overview
Explore WDK wallet modules for building self-custodial wallets across supported chains.
The Wallet Development Kit (WDK) provides modules for multiple blockchain networks and account models. Shared interfaces provide common operations, while each module defines its supported methods, fee units, and transaction flow. Multisig wallets use proposals and approvals instead of the standard direct-send flow.
Shared Fee Limits
Wallet modules can expose fee caps through their configuration objects. Use the chain-specific docs for exact units and supported operations.
| Option | Applies to | Description |
|---|---|---|
transferMaxFee | transfer() | Caps token transfer fees in the module's base fee unit. |
transactionMaxFee | sendTransaction() and signTransaction() | Caps native transaction send/sign flows separately from token transfers when the module supports that base wallet option. |
Shared Signer Interface
The base @tetherto/wdk-wallet package defines a cross-chain ISigner interface for wallet modules that support external signing. Signer-aware modules can be constructed from a default signer instead of a seed, can register named signers with addSigner(name, signer), and can resolve accounts by passing signerName to account retrieval methods.
In base wallet beta.21, a default signer must have isDerivable: true. Register a non-derivable signer by name in a supporting module. The interface also exposes nullable keyPair and path properties and message signing; see the base-wallet contracts and disposal changes.
| Surface | Description |
|---|---|
ISigner.isDerivable | Indicates whether the signer supports child derivation. |
ISigner.keyPair / ISigner.path | Returns key material or a derivation path when available; either may be null. |
ISigner.derive(relPath) | Derives a child signer from a relative derivation path, when the signer supports derivation. |
ISigner.getAddress() | Returns the address controlled by the signer. |
ISigner.sign(message) | Signs a message and returns Promise<string>. |
ISigner.dispose() | Clears signer-held secret material or external resources. |
WalletManager.addSigner(name, signer) | Registers a named signer. Blank names throw an error. |
WalletManager.getSigner(name?) | Returns a named signer, or the default signer when called without a name. |
WalletManager.getSigners() | Returns a shallow copy of the named signer map. |
signTransaction(tx) is an account-level operation, not part of ISigner. Use the chain account's IWalletAccount.signTransaction(tx) when a module supports signing without broadcast. Modules can also type their signed transaction payloads so sendTransaction(tx) and quoteSendTransaction(tx) accept either unsigned transactions or module-specific signed payloads where that behavior is implemented.
Module support depends on the chain-specific wallet implementation. Check each module's reference before relying on signer-based account creation.
Supported Networks
This package works with multiple blockchain networks through wallet registration.

Bitcoin Mainnet

Ethereum, Sepolia Testnet, L2s, etc.

Tron Mainnet

TON Mainnet

Solana Mainnet

Solana with paymaster-funded transactions


Spark Mainnet
Wallet Modules
Wallet implementations for supported chains and asset systems:
Community modules are developed and maintained independently by third-party contributors.
Tether and the WDK Team do not endorse or assume responsibility for their code, security, or maintenance. Use your own judgment and proceed at your own risk.
| Module | Blockchain | Status | Documentation |
|---|---|---|---|
@tetherto/wdk-wallet-evm | EVM | ✅ Ready | Documentation |
@hinkal/wdk-wallet-evm-hinkal | EVM, Hinkal private sends | Community, seed-only, Node bundling required | Documentation |
@tetherto/wdk-wallet-ton | TON | ✅ Ready | Documentation |
@tetherto/wdk-wallet-btc | Bitcoin | ✅ Ready | Documentation |
@tetherto/wdk-wallet-spark | Spark | ✅ Ready | Documentation |
@tetherto/wdk-wallet-tron | TRON | ✅ Ready | Documentation |
@tetherto/wdk-wallet-solana | Solana | ✅ Ready | Documentation |
@tetherto/wdk-wallet-aptos | Aptos | ✅ Ready | Documentation |
@utexo/wdk-wallet-rgb | Bitcoin (RGB) | ✅ Ready | Documentation |
@utexo/wdk-rgb-lightning | Bitcoin (RGB and Lightning) | ✅ Ready | Documentation |
@base58-io/wdk-wallet-cosmos | Cosmos | ✅ Ready | Documentation |
Account Abstraction Wallet Modules
Wallet implementations that support Account Abstraction for gasless transactions using paymaster tokens like USD₮:
| Module | Blockchain | Status | Documentation |
|---|---|---|---|
@tetherto/wdk-wallet-evm-erc-4337 | EVM | ✅ Ready | Documentation |
@tetherto/wdk-wallet-evm-7702-gasless | EVM | ✅ Ready | Documentation |
@tetherto/wdk-wallet-ton-gasless | TON | ✅ Ready | Documentation |
@tetherto/wdk-wallet-tron-gasfree | TRON | ✅ Ready | Documentation |
@tetherto/wdk-wallet-solana-gasless | Solana | ✅ Ready | Documentation |
@tetherto/wdk-wallet-solana-jupiterz | Solana | In progress | - |
Multisig Wallet Modules
Choose a multisig module when spending requires approvals from multiple owners. Fund the owner EOA for Safe deployment, and fund the Safe for payments and its selected operating fee mode. For Squads, fund the member account for fees and rent and the vault for payments.
| Module | Blockchain | Account model | Documentation |
|---|---|---|---|
@tetherto/wdk-wallet-multisig-safe | EVM | Safe owner threshold with coordinator and ERC-4337 execution | Multisig (Safe) |
@tetherto/wdk-wallet-multisig-squads | Solana | Squads vault with member permissions, on-chain votes, and optional timelock | Multisig (Squads) |
Next Steps
To get started with WDK modules, follow these steps:
- Get up and running quickly with our Quickstart Guide
- Choose the modules that best fit your needs from the tables above
- Check specific documentation for modules you wish to use
You can also:
- Learn about key concepts like Account Abstraction and other important definitions
- Use one of our ready-to-use examples to be production ready