Install
openclaw skills install bitget-wallet-skill-disabledWallet Manage, Interact with Bitget Wallet API for crypto market data, token info, swap quotes, and security audits. Use when the user asks about wallet, token prices, market data, swap/trading quotes, token security checks, K-line charts, or token rankings on supported chains (ETH, SOL, BSC, Base, etc.).
openclaw skills install bitget-wallet-skill-disabledHow to handle tasks:
docs/ to decide which commands to run and how. Scripts lists each Python CLI with purpose, subcommands, and when to use them; docs/swap.md, docs/wallet-signing.md, docs/market-data.md, etc. describe flows and domain rules.python3 scripts/bitget_agent_api.py ..., python3 scripts/order_sign.py ...). For swap, balance, wallet, and signing, follow the flows in docs/swap.md and docs/wallet-signing.md.Before starting a new swap - two mandatory pre-checks:
Balance check (required): Run get-processed-balance to verify the wallet has enough fromToken balance for the intended swap amount. Include native token ("") to check gas availability. If fromToken balance < fromAmount, inform the user of the shortfall and do not proceed. Gas mode decision: If native token balance is sufficient for gas → use --feature user_gas (preferred). If native token balance is near zero → use --feature no_gas (gasless, gas deducted from fromToken; requires swap amount ≥ ~$5 USD — below this threshold the API only returns user_gas). This choice must be passed to confirm.
python3 scripts/bitget_agent_api.py get-processed-balance --chain <fromChain> --address <wallet> --contract "" --contract <fromContract>
Token risk check (required): Run check-swap-token for the intended fromToken and toToken. If error_code != 0, show msg and stop. If for any token data.list[].checkTokenList is non-empty, show the tips content to the user and let them decide whether to continue. If the toToken (swap target) has an item with waringType equal to "forbidden-buy", do not proceed with the swap and warn the user that this token cannot be used as the swap target.
python3 scripts/bitget_agent_api.py check-swap-token --from-chain ... --from-contract ... --from-symbol ... --to-chain ... --to-contract ... --to-symbol ...
See Scripts for full command details and docs/swap.md for the complete flow.
Technical reference (no need to read .py files):
https://copenapi.bgwapi.io (token auth, no API key needed).scripts/bitget_agent_api.py. Covers token risk check (check-swap-token), balance (get-processed-balance), balance+price (batch-v2), token search (search-tokens), token list (get-token-list); market data: token-info, token-price, batch-token-info, kline, tx-info, batch-tx-info, historical-coins, rankings, liquidity, security; swap flow (quote, confirm, make-order, send, get-order-details). Request/response details are in docs/.This skill uses date-based versioning (YYYY.M.DD). Each release includes a sequential suffix: YYYY.M.DD-1, YYYY.M.DD-2, etc. The current version is in the frontmatter above. See CHANGELOG.md for full history.
First-use version check (at most once every 7 days):
version from frontmatter above.https://raw.githubusercontent.com/bitget-wallet-ai-lab/bitget-wallet-skill/main/CHANGELOG.md.If a new version is available, inform the user (installed vs latest, one-line changes, security-related yes/no) and ask "Upgrade? [yes/no]". If the user confirms, re-install the skill from the main branch and replace all local skill files; then re-read SKILL.md. Post-upgrade: diff old/new bitget_agentapi.py, flag new endpoints/deps/credentials, and run platform security audit if applicable.
If versions match: Proceed normally. Check frequency: at most once every 7 days.
When a user first requests a swap or any signing operation, check if a wallet is already configured. If not, guide them through setup:
Path 1: Create a new wallet
mnemonic, bip_utils, or equivalent).Path 2: Query only (no wallet)
If the user only wants price queries, token info, and security checks - no wallet setup needed. Skip this flow entirely. Signing operations will be unavailable.
Key management rules:
Signing pipeline (how keys flow):
Secure storage (mnemonic) → derive private key (in memory) → sign transaction → discard key
The first time a user initiates a swap, before executing, guide them through these one-time preferences:
Transaction deadline - how long the on-chain transaction remains valid:
120 seconds (better protection against sandwich attacks in volatile markets)300 seconds (balanced - suitable for most users)600 seconds (for slow signing workflows, e.g., hardware wallets or multi-sig)Automatic security check - whether to audit unfamiliar tokens before swaps:
security automatically before swapSave preferences - store in the agent's memory/config for future swaps
Remind user they can update anytime (e.g., "update my swap settings" or "change my default deadline")
If the user declines configuration, use sensible defaults: deadline=300, security=always.
Derivation paths:
| Chain | Path | Curve |
|---|---|---|
| EVM (ETH/BNB/Base/...) | m/44'/60'/0'/0/0 | secp256k1 |
| Solana | m/44'/501'/0'/0' | Ed25519 (SLIP-0010) |
| Tron | m/44'/195'/0'/0/0 | secp256k1 |
All BGW API amount fields use human-readable values, not smallest units (wei, lamports, token decimals). In the swap flow, fromAmount (and toAmount, etc.) must be the human-readable number (e.g. 0.01 for 0.01 USDT). Do not convert to token decimals or wei/lamports. Applies to quote, confirm, makeOrder, and all toAmount/fromAmount in responses. The decimals field in responses is informational only.
"" as the contract address for native tokens (ETH, SOL, BNB, etc.). Do not use wrapped token addresses (e.g. WETH, WSOL) for native.Always use these verified addresses for USDT/USDC. Do not guess or generate contract addresses from memory - incorrect addresses cause API errors (error_code: 80000, "get token info failed").
USDT vs USDT0: On some chains Tether has migrated to USDT0 (omnichain). The same contract addresses work; use the address below for "USDT" regardless.
| Chain (code) | USDT (USDT0) | USDC |
|---|---|---|
Ethereum (eth) | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
BNB Chain (bnb) | 0x55d398326f99059fF775485246999027B3197955 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d |
Base (base) | 0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
Arbitrum (arbitrum) | 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
Polygon (matic) | 0xc2132D05D31c914a87C6611C10748AEb04B58e8F | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
Solana (sol) | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
Morph (morph) | 0xe7cd86e13AC4309349F30B3435a9d337750fC82D | 0xCfb1186F4e93D60E60a8bDd997427D1F33bc372B |
BGB (Bitget Token): Ethereum 0x54D2252757e1672EEaD234D27B1270728fF90581; Morph 0x389C08Bc23A7317000a1FD76c7c5B0cb0b4640b5.
For other tokens, use token-info or a block explorer to verify the contract address before calling swap endpoints.
Load the following when the task requires it:
| Module | File | When to Load |
|---|---|---|
| Commands | docs/commands.md | Full subcommand parameters, usage examples for all scripts |
| Wallet & Signing | docs/wallet-signing.md | Key management, BIP-39/44, signing, multi-chain |
| Market Data | docs/market-data.md | Token info, price, K-line, tx info, rankings, liquidity, security |
| Swap | docs/swap.md | Swap flow, quote/confirm/makeOrder/send, slippage, gas, approvals |
| x402 Payments | docs/x402-payments.md | HTTP 402, EIP-3009, Permit2, Solana partial-sign |
sol not solana, bnb not bsc. See Chain Identifiers below.batch-token-info uses --tokens "sol:<addr1>,eth:<addr2>" (chain:address, comma-separated).docs/swap.md.bitget_agent_api.py, order_sign.py).order_sign.py --private-key, discard immediately after signing. Never store keys or output mnemonic/keys to chat.0.01), not wei/lamports/decimals.Swap-supported chains (7):
| Chain | ID | Code |
|---|---|---|
| Ethereum | 1 | eth |
| Solana | 100278 | sol |
| BNB Chain | 56 | bnb |
| Base | 8453 | base |
| Arbitrum | 42161 | arbitrum |
| Polygon | 137 | matic |
| Morph | 100283 | morph |
Use empty string "" for native token contract (ETH, SOL, BNB, etc.).
4 scripts in scripts/, Python 3.9+. Full subcommand details and examples: docs/commands.md.
| Script | Purpose | Key commands |
|---|---|---|
bitget_agent_api.py | Unified API client | Balance, token search, market data (info/price/kline/tx/rankings/liquidity/security), swap flow (quote→confirm→make-order→send→get-order-details) |
order_make_sign_send.py | One-shot swap execution | makeOrder + sign + send in one run. --private-key (EVM) or --private-key-sol (Solana). Avoids 60s expiry. |
order_sign.py | Sign makeOrder data | Outputs JSON array of signatures. Supports raw tx, EVM gasPayMaster (eth_sign), EIP-712, Solana Ed25519, Solana gasPayMaster. |
x402_pay.py | x402 payment | EIP-3009 signing, Solana partial-sign, HTTP 402 pay flow |
# Balance (include native token "" to check gas)
python3 scripts/bitget_agent_api.py get-processed-balance --chain bnb --address <addr> --contract "" --contract <token>
# Market data
python3 scripts/bitget_agent_api.py token-price --chain bnb --contract <addr>
python3 scripts/bitget_agent_api.py rankings --name Hotpicks # or topGainers, topLosers
python3 scripts/bitget_agent_api.py security --chain bnb --contract <addr>
# Swap flow
python3 scripts/bitget_agent_api.py quote --from-chain bnb --from-contract <addr> --from-symbol USDT --from-amount 5 --to-chain bnb --to-contract "" --to-symbol BNB --from-address <wallet> --to-address <wallet>
python3 scripts/bitget_agent_api.py confirm ... --market <id> --protocol <proto> --slippage <val> --feature user_gas
python3 scripts/order_make_sign_send.py --private-key "$KEY" --order-id <id> --from-chain bnb ... --market ... --protocol ...
python3 scripts/bitget_agent_api.py get-order-details --order-id <id>