Install
openclaw skills install @hodldance/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, bu...
openclaw skills install @hodldance/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 |
Each token has its own unique Bonding Curve instance. Always fetch
bonding_curve_addressfromget-token,get-tokensorcreate-token— do not use the template address.