skills$openclaw/wdk
humanrupert7.1k

by humanrupert

wdk – OpenClaw Skill

wdk is an OpenClaw Skills integration for coding workflows. Tether Wallet Development Kit (WDK) for building non-custodial multi-chain wallets. Use when working with @tetherto/wdk-core, wallet modules (wdk-wallet-btc, wdk-wallet-evm, wdk-wallet-evm-erc-4337, wdk-wallet-solana, wdk-wallet-spark, wdk-wallet-ton, wdk-wallet-tron, ton-gasless, tron-gasfree), and protocol modules including swap (wdk-protocol-swap-velora-evm), bridge (wdk-protocol-bridge-usdt0-evm), and lending (wdk-protocol-lending-aave-evm). Covers wallet creation, transactions, token transfers, DEX swaps, cross-chain bridges, and DeFi lending/borrowing.

7.1k stars338 forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026coding

Skill Snapshot

namewdk
descriptionTether Wallet Development Kit (WDK) for building non-custodial multi-chain wallets. Use when working with @tetherto/wdk-core, wallet modules (wdk-wallet-btc, wdk-wallet-evm, wdk-wallet-evm-erc-4337, wdk-wallet-solana, wdk-wallet-spark, wdk-wallet-ton, wdk-wallet-tron, ton-gasless, tron-gasfree), and protocol modules including swap (wdk-protocol-swap-velora-evm), bridge (wdk-protocol-bridge-usdt0-evm), and lending (wdk-protocol-lending-aave-evm). Covers wallet creation, transactions, token transfers, DEX swaps, cross-chain bridges, and DeFi lending/borrowing. OpenClaw Skills integration.
ownerhumanrupert
repositoryhumanrupert/tether-wallet-development-kit
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @humanrupert/tether-wallet-development-kit
last updatedFeb 7, 2026

Maintainer

humanrupert

humanrupert

Maintains wdk in the OpenClaw Skills directory.

View GitHub profile
File Explorer
2 files
.
_meta.json
321 B
SKILL.md
10.5 KB
SKILL.md

name: wdk description: Tether Wallet Development Kit (WDK) for building non-custodial multi-chain wallets. Use when working with @tetherto/wdk-core, wallet modules (wdk-wallet-btc, wdk-wallet-evm, wdk-wallet-evm-erc-4337, wdk-wallet-solana, wdk-wallet-spark, wdk-wallet-ton, wdk-wallet-tron, ton-gasless, tron-gasfree), and protocol modules including swap (wdk-protocol-swap-velora-evm), bridge (wdk-protocol-bridge-usdt0-evm), and lending (wdk-protocol-lending-aave-evm). Covers wallet creation, transactions, token transfers, DEX swaps, cross-chain bridges, and DeFi lending/borrowing.

Tether WDK

Multi-chain wallet SDK. All modules share common interfaces from @tetherto/wdk-wallet.

Documentation

Official Docs: https://docs.wallet.tether.io

URL Fetching Workflow

When working with WDK tasks, follow this workflow to access documentation:

Identify relevant URLs - Based on the task, determine which module documentation pages are needed (see Module Documentation Links below) Attempt to fetch - Try web_fetch on the URL directly If fetch fails - Search for the exact URL:

web_search("https://docs.wallet.tether.io/sdk/wallet-modules/wallet-spark/usage") This makes the URL appear in search results, which unlocks fetching.

Fetch after search - Now web_fetch will work on that URL

Example workflow: Task: Build a Spark wallet app

  1. Relevant URLs identified:

  2. web_fetch("https://docs.wallet.tether.io/sdk/wallet-modules/wallet-spark/usage") → If permission error, proceed to step 3

  3. web_search("https://docs.wallet.tether.io/sdk/wallet-modules/wallet-spark/usage") → URL now appears in results

  4. web_fetch("https://docs.wallet.tether.io/sdk/wallet-modules/wallet-spark/usage") → Success - full page content retrieved

For each module, documentation is organized into subpages:

/usage - Example usage and patterns /configuration - Configuration options and settings /api-reference - Complete API documentation

Architecture

@tetherto/wdk-core          # Orchestrator - registers wallets + protocols
    ├── @tetherto/wdk-wallet    # Base classes (WalletManager, IWalletAccount)
    │   ├── wdk-wallet-btc      # Bitcoin (BIP-84, SegWit)
    │   ├── wdk-wallet-evm      # Ethereum & EVM chains
    │   ├── wdk-wallet-evm-erc-4337  # EVM with Account Abstraction
    │   ├── wdk-wallet-solana   # Solana
    │   ├── wdk-wallet-spark    # Spark/Lightning
    │   ├── wdk-wallet-ton      # TON
    │   ├── wdk-wallet-ton-gasless   # TON gasless
    │   ├── wdk-wallet-tron     # TRON
    │   └── wdk-wallet-tron-gasfree  # TRON gas-free
    └── Protocol Modules
        ├── wdk-protocol-swap-velora-evm   # DEX swaps on EVM
        ├── wdk-protocol-bridge-usdt0-evm  # Cross-chain USDT0 bridge
        └── wdk-protocol-lending-aave-evm  # Aave V3 lending

Quick Start

Docs: https://docs.wallet.tether.io/sdk/get-started

With WDK Core (Multi-chain)

import WDK from '@tetherto/wdk'
import WalletManagerEvm from '@tetherto/wdk-wallet-evm'
import WalletManagerBtc from '@tetherto/wdk-wallet-btc'

const wdk = new WDK(seedPhrase)
  .registerWallet('ethereum', WalletManagerEvm, { provider: 'https://eth.drpc.org' })
  .registerWallet('bitcoin', WalletManagerBtc, { host: 'electrum.blockstream.info', port: 50001 })

const ethAccount = await wdk.getAccount('ethereum', 0)
const btcAccount = await wdk.getAccount('bitcoin', 0)

Single Chain (Direct)

import WalletManagerBtc from '@tetherto/wdk-wallet-btc'

const wallet = new WalletManagerBtc(seedPhrase, {
  host: 'electrum.blockstream.info',
  port: 50001,
  network: 'bitcoin'
})
const account = await wallet.getAccount(0)

All wallet accounts implement IWalletAccount:

MethodReturnsDescription
getAddress()Promise<string>Account address
getBalance()Promise<bigint>Native token balance (base units)
getTokenBalance(addr)Promise<bigint>Token balance
sendTransaction({to, value})Promise<{hash, fee}>Send native tokens
quoteSendTransaction({to, value})Promise<{fee}>Estimate tx fee
transfer({token, recipient, amount})Promise<{hash, fee}>Transfer tokens
quoteTransfer(opts)Promise<{fee}>Estimate transfer fee
sign(message)Promise<string>Sign message
verify(message, signature)Promise<boolean>Verify signature
dispose()voidClear private keys from memory

Properties: index, path, keyPair (⚠️ sensitive)

Module Documentation Links

Core Module

ResourceURL
Overviewhttps://docs.wallet.tether.io/sdk/core-module
Usagehttps://docs.wallet.tether.io/sdk/core-module/usage
Configurationhttps://docs.wallet.tether.io/sdk/core-module/configuration
API Referencehttps://docs.wallet.tether.io/sdk/core-module/api-reference

Wallet Modules

ModuleDocs
Bitcoinhttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-btc
EVMhttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-evm
EVM ERC-4337https://docs.wallet.tether.io/sdk/wallet-modules/wallet-evm-erc-4337
Solanahttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-solana
Sparkhttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-spark
TONhttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-ton
TON Gaslesshttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-ton-gasless
TRONhttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-tron
TRON Gasfreehttps://docs.wallet.tether.io/sdk/wallet-modules/wallet-tron-gasfree

Each wallet module has /usage, /configuration, and /api-reference subpages.

Protocol Modules

ModuleDocs
Swap (Velora EVM)https://docs.wallet.tether.io/sdk/swap-modules/swap-velora-evm
Bridge (USDT0 EVM)https://docs.wallet.tether.io/sdk/bridge-modules/bridge-usdt0-evm
Lending (Aave EVM)https://docs.wallet.tether.io/sdk/lending-modules/lending-aave-evm

Each protocol module has /usage, /configuration, and /api-reference subpages.

UI Kits & Examples

ResourceURL
React Native UI Kithttps://docs.wallet.tether.io/ui-kits/react-native-ui-kit/get-started
Theminghttps://docs.wallet.tether.io/ui-kits/react-native-ui-kit/theming
UI Kit API Referencehttps://docs.wallet.tether.io/ui-kits/react-native-ui-kit/api-reference
React Native Starterhttps://docs.wallet.tether.io/examples-and-starters/react-native-starter

Chain-Specific Notes

Bitcoin

  • BIP-84 (Native SegWit only, bc1... addresses)
  • Uses Electrum servers, fees in sat/vB
  • No token support (getTokenBalance, transfer throw)
  • getTransfers({direction, limit, skip}) for history

EVM

  • BIP-44 (m/44'/60'), EIP-1559 fee model
  • Supports ERC20 via transfer()
  • Fee rates: normal = base×1.1, fast = base×2.0

ERC-4337 (Account Abstraction)

  • Gasless via UserOperations + Paymaster
  • Fees paid in paymaster token (e.g., USDT)
  • getPaymasterTokenBalance() for fee balance
  • Batch transactions: sendTransaction([tx1, tx2])

Solana

  • BIP-44 (m/44'/501'), Ed25519
  • Fees in lamports (1 SOL = 1B lamports)
  • SPL tokens via transfer()

Spark

  • Bitcoin L2 with Lightning support
  • Zero fees for Spark txs
  • getSingleUseDepositAddress(), claimDeposit(txId)
  • createLightningInvoice({value, memo}), payLightningInvoice({invoice, maxFeeSats})
  • withdraw({to, value}) for L1 withdrawal

TON

  • BIP-44 (m/44'/607'), Ed25519
  • Fees in nanotons (1 TON = 1B nanotons)
  • Jettons via transfer()

TRON

  • BIP-44 (m/44'/195'), secp256k1
  • Fees in sun (1 TRX = 1M sun)
  • TRC20 via transfer()
  • Energy + bandwidth costs

Gasless Variants

  • TON Gasless: Requires tonApiClient, paymasterToken config
  • TRON Gasfree: Requires gasFreeProvider, gasFreeApiKey, serviceProvider, verifyingContract
  • Both: sendTransaction() not supported, use transfer() only

Protocol Quick Reference

Swap (DEX)

// EVM (Velora)
const velora = new VeloraProtocolEvm(evmAccount, { swapMaxFee: 200000000000000n })
await velora.swap({ tokenIn: '0x...', tokenOut: '0x...', tokenInAmount: 1000000n })

Bridge

const bridge = new Usdt0ProtocolEvm(evmAccount, { bridgeMaxFee: 1000000000000000n })
await bridge.bridge({
  targetChain: 'arbitrum',
  recipient: '0x...',
  token: '0x...',  // USDT0
  amount: 1000000n
})

Lending (Aave)

const aave = new AaveProtocolEvm(evmAccount)
await aave.supply({ token: '0x...', amount: 1000000n })
await aave.borrow({ token: '0x...', amount: 500000n })
await aave.repay({ token: '0x...', amount: 500000n })
await aave.withdraw({ token: '0x...', amount: 1000000n })
const data = await aave.getAccountData()  // healthFactor, ltv, etc.

Common Patterns

Fee Estimation Before Send

const quote = await account.quoteSendTransaction({ to, value })
if (quote.fee > maxAcceptableFee) throw new Error('Fee too high')
const result = await account.sendTransaction({ to, value })

Cleanup

try {
  // ... wallet operations
} finally {
  account.dispose()
  wallet.dispose()
}

Read-Only Account

const readOnly = await account.toReadOnlyAccount()
// Can query balances, estimate fees, but cannot sign

Package Versions

ALWAYS fetch the latest version from npm before adding any package to package.json:

npm view <package-name> version

Example workflow:

# Before writing package.json, check each package you need:
npm view @tetherto/wdk-core version
npm view @tetherto/wdk-wallet-btc version
npm view @tetherto/wdk-wallet-evm version
# ... for every @tetherto package you're using

Never hardcode or guess versions. Always verify against npm first.

Browser Compatibility

WDK uses sodium-universal for secure memory handling which requires Node.js. For browser/React apps:

  1. Add node polyfills (vite-plugin-node-polyfills or similar)
  2. Create a shim for sodium if dispose() errors occur:
// sodium-shim.js - No-op for browser
export function sodium_memzero() {}
export default { sodium_memzero }
  1. Alias in bundler config:
resolve: {
  alias: {
    'sodium-universal': './src/sodium-shim.js'
  }
}
README.md

No README available.

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

  • OpenClaw CLI installed and configured.
  • Language: Markdown
  • License: MIT
  • Topics:

FAQ

How do I install wdk?

Run openclaw add @humanrupert/tether-wallet-development-kit in your terminal. This installs wdk into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/humanrupert/tether-wallet-development-kit. Review commits and README documentation before installing.