Install
openclaw skills install hodl-danceTrade, create, and manage memecoins on HODL.DANCE's BSC bonding curve launchpad. Launch tokens with logo upload and optional initial buy, get live quotes, buy and sell with BNB, and handle ERC20 approvals automatically.
openclaw skills install hodl-danceTrade memecoins on the HODL.DANCE bonding curve launchpad on BSC (BNB Chain).
HODL.DANCE is a memecoin launchpad on BSC using a CPMM bonding curve (r × t = k). Tokens trade on the curve until 19 BNB is raised, then liquidity auto-migrates to PancakeSwap V3.
npm install -g @hodl-dance/skill
# or without installing:
npx @hodl-dance/skill <command>
Required only for create-token, buy-token and sell-token:
export HODL_PRIVATE_KEY=0xyour_private_key
export HODL_RPC_URL=https://bsc-dataseed.binance.org/ # optional
⚠️ The private key is used locally only to sign transactions. Never share it.
get-tokensList tokens with filtering and sorting. Returns full token objects including bonding_curve_address.
hodl-skill get-tokens
hodl-skill get-tokens --sort=market_cap --limit=10
hodl-skill get-tokens --sort=volume --verified=true
hodl-skill get-tokens --sort=progress --finalized=false
hodl-skill get-tokens --search=pepe --limit=5
Options: --sort=newest|market_cap|progress|volume · --limit=N (max 100) · --offset=N · --verified=true|false · --finalized=true|false · --search=<text>
Key output fields per token:
address — token contract addressbonding_curve_address — ⭐ use this in quote/buy-token/sell-tokenmarket_cap_usd, progress_percent (0–100 toward PancakeSwap migration)finalized — if true, bonding curve is closed, token is on PancakeSwap V3price_change_24h, trades_24h, volume_24h_bnbget-token <tokenAddress>Full token details + 20 most recent trades.
hodl-skill get-token 0x1a2b3c...
Returns same fields as get-tokens plus recent_trades[].
get-trades <tokenAddress>Trade history for a specific token.
hodl-skill get-trades 0x1a2b3c...
hodl-skill get-trades 0x1a2b3c... --type=buy --limit=20
Options: --type=all|buy|sell · --limit=N (max 500) · --offset=N
quote <bondingCurveAddress> buy|sell <amount>Simulate trade output using live on-chain state. No transaction sent, no gas used.
# How many tokens will I get for 0.1 BNB?
hodl-skill quote 0xbc1234... buy 0.1
# How much BNB will I get for selling 500000 tokens?
hodl-skill quote 0xbc1234... sell 500000
Always run
quotebeforebuy-tokenorsell-tokento verify expected amounts.
create-tokenDeploy a new token + bonding curve on HODL.DANCE. Uploads logo to IPFS, then sends on-chain transaction.
hodl-skill create-token --name="Moon Cat" --symbol=MCAT --logo=./logo.png
hodl-skill create-token \
--name="Moon Cat" \
--symbol=MCAT \
--logo=./logo.png \
--category=meme \
--description="The cat that dances on the moon" \
--twitter="https://x.com/mooncat" \
--telegram="https://t.me/mooncat" \
--website="https://mooncat.io" \
--initial-buy=0.1
Requires: HODL_PRIVATE_KEY
Options:
--name — token name, 3–40 characters (required)--symbol — token symbol, 1–10 characters (required)--logo — path to local image file PNG/JPG/WEBP, max 5MB (required)--category — meme|ai|games|social|other (default: meme)--description — token description, max 500 characters--website — https://...--twitter — https://x.com/...--telegram — https://t.me/...--initial-buy — BNB amount to buy in the same transaction (default: 0)Deploy fee: 0.0001 BNB. If
--initial-buyis set, total value =0.0001 + initial-buy.
Output: tx_hash, block_number, gas_used, token_address, bonding_curve_address, name, symbol, category, logo_ipfs, initial_buy_bnb
buy-token <bondingCurveAddress> <bnbAmount> [--recipient=0x...]Buy tokens using BNB. Sends transaction on-chain.
hodl-skill buy-token 0xbc1234... 0.1
hodl-skill buy-token 0xbc1234... 0.5 --recipient=0xfriend...
Requires: HODL_PRIVATE_KEY
Output: tx_hash, bnb_spent, tokens_received, tokens_estimated, fee_bnb, block_number, gas_used
sell-token <bondingCurveAddress> <tokenAmount>Sell tokens, receive BNB.
hodl-skill sell-token 0xbc1234... 1000000
Requires: HODL_PRIVATE_KEY
⚠️ Selling requires ERC20
approvebeforesellTokens. This skill handles it automatically in two steps:
- Checks current
allowance— if insufficient, sendsapprove()transaction first- Sends
sellTokens()transactionThe output field
approve_was_needed: true/falsetells you whether approve was sent. If approve was needed,approve_tx_hashcontains its transaction hash. Total gas cost may cover 2 transactions if approve was required.
Output: tx_hash, tokens_sold, bnb_received, bnb_estimated, fee_bnb, approve_tx_hash, approve_was_needed, block_number, gas_used
All commands output JSON to stdout:
{ "success": true, "data": { ... } }
Errors:
{ "success": false, "error": { "code": "TOKEN_FINALIZED", "message": "..." } }
Exit code 0 = success, 1 = error.
| Code | Meaning |
|---|---|
MISSING_ARG | Required argument not provided |
INVALID_ARG | Invalid argument value (e.g. logo file not found) |
TOKEN_FINALIZED | Token migrated to PancakeSwap V3, bonding curve closed |
INSUFFICIENT_BALANCE | Not enough tokens to sell |
ERROR | General error (message contains details) |
1. get-tokens --sort=volume --limit=10
→ find tokens with activity, note bonding_curve_address
2. get-token <tokenAddress>
→ check progress_percent, finalized, recent_trades
3. quote <bondingCurveAddress> buy 0.1
→ verify tokens_out before committing
4. buy-token <bondingCurveAddress> 0.1
→ execute, save tx_hash and tokens_received
5. [later] quote <bondingCurveAddress> sell <tokens_received>
→ check exit value
6. sell-token <bondingCurveAddress> <tokens_received>
→ approve sent automatically if needed, then sell
→ check approve_was_needed in output
1. create-token --name="..." --symbol=... --logo=./logo.png --initial-buy=0.1
→ deploys token + bonding curve, returns token_address and bonding_curve_address
2. quote <bonding_curve_address> buy 0.5
→ verify expected tokens before buying more
3. buy-token <bonding_curve_address> 0.5
→ accumulate position
| Contract | Address |
|---|---|
| Token Factory | 0x99A1F02f56E8356e6E90A880DBb1be6EC7485737 |
| Bonding Curve Template | 0xea508aD6B550E94aC45831F265B2bD5346d06700 |
| Locker | 0x562ff19485674d9b965ab14a1034370f5e3af7c9 |
Each token has its own unique Bonding Curve instance. Always fetch
bonding_curve_addressfromget-token,get-tokensorcreate-token— do not use the template address.