{"id":"028f36f9-22d7-4843-b5cf-dc6c429f2fee","entityType":"agent","slug":"clawhub-hodldance-hodl-dance","name":"Hodl Dance Skill","canonicalUrl":"https://www.xpersona.co/agent/clawhub-hodldance-hodl-dance","canonicalPath":"/agent/clawhub-hodldance-hodl-dance","generatedAt":"2026-10-14T16:02:38.763Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T20:45:10.891Z","emptyReason":null},"description":"Trade, 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... Skill: Hodl Dance Skill Owner: hodldance Summary: Trade, 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... Tags: bonding-curve:1.1.0, bsc:1.1.0, defi:1.1.0, latest:1.3.1, memecoin:1.1.0, trading:1.1.0 Version history: v1.3.1 | 2026-05-27T00:38:06.142Z | user Fix: ethers dependency (v5 → v6). Version 1.3.0 was broke","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 995 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17em12e927j9ee5ee7n7x93d586tqkx:hodl-dance","sourceUrl":"https://clawhub.ai/hodldance/hodl-dance","homepage":"https://clawhub.ai/hodldance/skills/hodl-dance","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/hodldance/hodl-dance","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/hodldance/skills/hodl-dance","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Trade, 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..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:45:10.891Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:45:10.891Z","emptyReason":null},"stars":null,"forks":null,"downloads":995,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.3.1","tractionLabel":"995 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:45:10.824Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T20:45:10.891Z","lastCrawledAt":"2026-10-11T20:45:10.824Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T20:45:10.824Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.1","createdAt":"2026-05-27T00:38:06.142Z","changelog":"Fix: ethers dependency (v5 → v6). Version 1.3.0 was broken due to accidental npm audit fix --force before publishing.","fileCount":25,"zipByteSize":36583},{"version":"1.3.0","createdAt":"2026-05-27T00:33:36.435Z","changelog":"Version 1.3.0 introduces input validation, improved test coverage, and build tooling. - Added input validators for commands (see new src/lib/validators.js) - Introduced unit tests for core logic (new /tests with chain, output, and validator tests) - Added build script (scripts/build.js) and Vitest config for testing - Updated several core command files with validation and minor improvements - Documentation updates in README.md and SKILL.md - Package and lockfile updated for dependencies and test tooling","fileCount":25,"zipByteSize":45629},{"version":"1.2.1","createdAt":"2026-05-16T14:34:54.266Z","changelog":"- Added support for deploying new tokens with the new create-token command. - Updated documentation to include create-token usage, options, and workflow. - create-token sends logo to IPFS and deploys token + bonding curve in one step. - HODL_PRIVATE_KEY is now required for create-token as well as buy/sell. - Minor clarifications and enhancements to SKILL.md instructions and error codes.","fileCount":17,"zipByteSize":19338},{"version":"1.1.0","createdAt":"2026-05-16T12:00:34.331Z","changelog":"- Added full documentation in SKILL.md, covering all commands, usage, and output format. - Provides detailed instructions for buying and selling tokens, including automatic ERC20 approve handling for sales. - Lists API endpoints, contract addresses, environment variables, and agent workflow for trading memecoins on HODL.DANCE. - Describes all command-line options, expected outputs (including JSON format), and error handling codes. - Makes credential requirements and operational safety notes clear for users.","fileCount":16,"zipByteSize":13743}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17em12e927j9ee5ee7n7x93d586tqkx:hodl-dance","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-14T16:02:38.759Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hodldance-hodl-dance/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T20:45:10.891Z","emptyReason":null},"readme":"Skill: Hodl Dance Skill\n\nOwner: hodldance\n\nSummary: Trade, 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...\n\nTags: bonding-curve:1.1.0, bsc:1.1.0, defi:1.1.0, latest:1.3.1, memecoin:1.1.0, trading:1.1.0\n\nVersion history:\n\nv1.3.1 | 2026-05-27T00:38:06.142Z | user\n\nFix: ethers dependency (v5 → v6). Version 1.3.0 was broken due to accidental npm audit fix --force before publishing.\n\nv1.3.0 | 2026-05-27T00:33:36.435Z | auto\n\nVersion 1.3.0 introduces input validation, improved test coverage, and build tooling.\n\n- Added input validators for commands (see new src/lib/validators.js)\n- Introduced unit tests for core logic (new /tests with chain, output, and validator tests)\n- Added build script (scripts/build.js) and Vitest config for testing\n- Updated several core command files with validation and minor improvements\n- Documentation updates in README.md and SKILL.md\n- Package and lockfile updated for dependencies and test tooling\n\nv1.2.1 | 2026-05-16T14:34:54.266Z | auto\n\n- Added support for deploying new tokens with the new create-token command.\n- Updated documentation to include create-token usage, options, and workflow.\n- create-token sends logo to IPFS and deploys token + bonding curve in one step.\n- HODL_PRIVATE_KEY is now required for create-token as well as buy/sell.\n- Minor clarifications and enhancements to SKILL.md instructions and error codes.\n\nv1.1.0 | 2026-05-16T12:00:34.331Z | auto\n\n- Added full documentation in SKILL.md, covering all commands, usage, and output format.\n- Provides detailed instructions for buying and selling tokens, including automatic ERC20 approve handling for sales.\n- Lists API endpoints, contract addresses, environment variables, and agent workflow for trading memecoins on HODL.DANCE.\n- Describes all command-line options, expected outputs (including JSON format), and error handling codes.\n- Makes credential requirements and operational safety notes clear for users.\n\nArchive index:\n\nArchive v1.3.1: 25 files, 36583 bytes\n\nFiles: CHANGELOG.md (2114b), package-lock.json (56633b), package.json (932b), README.md (5431b), scripts/build.js (1553b), skill-card.md (2481b), SKILL.md (7284b), src/abi/BondingCurve.json (2760b), src/commands/buy-token.js (2807b), src/commands/create-token.js (4846b), src/commands/get-token.js (567b), src/commands/get-tokens.js (741b), src/commands/get-trades.js (874b), src/commands/quote.js (1718b), src/commands/sell-token.js (3781b), src/index.js (1076b), src/lib/api.js (549b), src/lib/chain.js (1930b), src/lib/output.js (1237b), src/lib/validators.js (928b), tests/chain.test.js (1426b), tests/output.test.js (1460b), tests/validators.test.js (1443b), vitest.config.js (315b), _meta.json (129b)\n\nFile v1.3.1:SKILL.md\n\n# HODL.DANCE Agent Skill\n\nTrade memecoins on the [HODL.DANCE](https://hodl.dance) bonding curve launchpad on BSC (BNB Chain).\n\n## Overview\n\nHODL.DANCE is a memecoin launchpad on BSC using a CPMM bonding curve (r × t = k).\nTokens trade on the curve until 19 BNB is raised, then liquidity auto-migrates to PancakeSwap V3.\n\n- **Network:** BSC Mainnet (Chain ID: 56)\n- **Native currency:** BNB\n- **Fee:** 1% per trade (buy and sell)\n- **API:** [https://hodl.dance/api](https://hodl.dance/api) (public, no API key required)\n- **Docs:** [https://docs.hodl.dance](https://docs.hodl.dance)\n\n## Installation\n\n```bash\nnpm install -g @hodl-dance/skill\n# or without installing:\nnpx @hodl-dance/skill <command>\n```\n\n## Credentials\n\nRequired only for `create-token`, `buy-token` and `sell-token`:\n\n```bash\nexport HODL_PRIVATE_KEY=0xyour_private_key\nexport HODL_RPC_URL=https://bsc-dataseed.binance.org/  # optional\n```\n\n> ⚠️ The private key is used locally only to sign transactions. Never share it.\n\n---\n\n## Commands\n\n### `get-tokens`\n\nList tokens with filtering and sorting. Returns full token objects including `bonding_curve_address`.\n\n```bash\nhodl-skill get-tokens\nhodl-skill get-tokens --sort=market_cap --limit=10\nhodl-skill get-tokens --sort=volume --verified=true\nhodl-skill get-tokens --sort=progress --finalized=false\nhodl-skill get-tokens --search=pepe --limit=5\n```\n\n**Options:** `--sort=newest|market_cap|progress|volume` · `--limit=N` (max 100) · `--offset=N` · `--verified=true|false` · `--finalized=true|false` · `--search=<text>`\n\n**Key output fields per token:**\n- `address` — token contract address\n- `bonding_curve_address` — ⭐ use this in quote/buy-token/sell-token\n- `market_cap_usd`, `progress_percent` (0–100 toward PancakeSwap migration)\n- `finalized` — if true, bonding curve is closed, token is on PancakeSwap V3\n- `price_change_24h`, `trades_24h`, `volume_24h_bnb`\n\n---\n\n### `get-token <tokenAddress>`\n\nFull token details + 20 most recent trades.\n\n```bash\nhodl-skill get-token 0x1a2b3c...\n```\n\nReturns same fields as `get-tokens` plus `recent_trades[]`.\n\n---\n\n### `get-trades <tokenAddress>`\n\nTrade history for a specific token.\n\n```bash\nhodl-skill get-trades 0x1a2b3c...\nhodl-skill get-trades 0x1a2b3c... --type=buy --limit=20\n```\n\n**Options:** `--type=all|buy|sell` · `--limit=N` (max 500) · `--offset=N`\n\n---\n\n### `quote <bondingCurveAddress> buy|sell <amount>`\n\n**Simulate** trade output using live on-chain state. No transaction sent, no gas used.\n\n```bash\n# How many tokens will I get for 0.1 BNB?\nhodl-skill quote 0xbc1234... buy 0.1\n\n# How much BNB will I get for selling 500000 tokens?\nhodl-skill quote 0xbc1234... sell 500000\n```\n\n> Always run `quote` before `buy-token` or `sell-token` to verify expected amounts.\n\n---\n\n### `create-token`\n\nDeploy a new token + bonding curve on HODL.DANCE. Uploads logo to IPFS, then sends on-chain transaction.\n\n```bash\nhodl-skill create-token --name=\"Moon Cat\" --symbol=MCAT --logo=./logo.png\n\nhodl-skill create-token \\\n  --name=\"Moon Cat\" \\\n  --symbol=MCAT \\\n  --logo=./logo.png \\\n  --category=meme \\\n  --description=\"The cat that dances on the moon\" \\\n  --twitter=\"https://x.com/mooncat\" \\\n  --telegram=\"https://t.me/mooncat\" \\\n  --website=\"https://mooncat.io\" \\\n  --initial-buy=0.1\n```\n\n**Requires:** `HODL_PRIVATE_KEY`\n\n**Options:**\n- `--name` — token name, 3–40 characters *(required)*\n- `--symbol` — token symbol, 1–10 characters *(required)*\n- `--logo` — path to local image file PNG/JPG/WEBP, max 5MB *(required)*\n- `--category` — `meme|ai|games|social|other` (default: `meme`)\n- `--description` — token description, max 500 characters\n- `--website` — `https://...`\n- `--twitter` — `https://x.com/...`\n- `--telegram` — `https://t.me/...`\n- `--initial-buy` — BNB amount to buy in the same transaction (default: `0`)\n\n> Deploy fee: **0.0001 BNB**. If `--initial-buy` is set, total value = `0.0001 + initial-buy`.\n\n**Output:** `tx_hash`, `block_number`, `gas_used`, `token_address`, `bonding_curve_address`, `name`, `symbol`, `category`, `logo_ipfs`, `initial_buy_bnb`\n\n---\n\n### `buy-token <bondingCurveAddress> <bnbAmount> [--recipient=0x...]`\n\nBuy tokens using BNB. Sends transaction on-chain.\n\n```bash\nhodl-skill buy-token 0xbc1234... 0.1\nhodl-skill buy-token 0xbc1234... 0.5 --recipient=0xfriend...\n```\n\n**Requires:** `HODL_PRIVATE_KEY`\n\n**Output:** `tx_hash`, `bnb_spent`, `tokens_received`, `tokens_estimated`, `fee_bnb`, `block_number`, `gas_used`\n\n---\n\n### `sell-token <bondingCurveAddress> <tokenAmount>`\n\nSell tokens, receive BNB.\n\n```bash\nhodl-skill sell-token 0xbc1234... 1000000\n```\n\n**Requires:** `HODL_PRIVATE_KEY`\n\n> ⚠️ **Selling requires ERC20 `approve` before `sellTokens`.**\n> This skill handles it automatically in two steps:\n> 1. Checks current `allowance` — if insufficient, sends `approve()` transaction first\n> 2. Sends `sellTokens()` transaction\n>\n> The output field `approve_was_needed: true/false` tells you whether approve was sent.\n> If approve was needed, `approve_tx_hash` contains its transaction hash.\n> Total gas cost may cover 2 transactions if approve was required.\n\n**Output:** `tx_hash`, `tokens_sold`, `bnb_received`, `bnb_estimated`, `fee_bnb`, `approve_tx_hash`, `approve_was_needed`, `block_number`, `gas_used`\n\n---\n\n## Response Format\n\nAll commands output JSON to stdout:\n\n```json\n{ \"success\": true, \"data\": { ... } }\n```\n\nErrors:\n\n```json\n{ \"success\": false, \"error\": { \"code\": \"TOKEN_FINALIZED\", \"message\": \"...\" } }\n```\n\nExit code `0` = success, `1` = error.\n\n### Error Codes\n\n| Code | Meaning |\n|---|---|\n| `MISSING_ARG` | Required argument not provided |\n| `INVALID_ARG` | Invalid argument value (e.g. logo file not found) |\n| `TOKEN_FINALIZED` | Token migrated to PancakeSwap V3, bonding curve closed |\n| `INSUFFICIENT_BALANCE` | Not enough tokens to sell |\n| `ERROR` | General error (message contains details) |\n\n---\n\n## Typical Agent Workflow\n\n```\n1. get-tokens --sort=volume --limit=10\n   → find tokens with activity, note bonding_curve_address\n\n2. get-token <tokenAddress>\n   → check progress_percent, finalized, recent_trades\n\n3. quote <bondingCurveAddress> buy 0.1\n   → verify tokens_out before committing\n\n4. buy-token <bondingCurveAddress> 0.1\n   → execute, save tx_hash and tokens_received\n\n5. [later] quote <bondingCurveAddress> sell <tokens_received>\n   → check exit value\n\n6. sell-token <bondingCurveAddress> <tokens_received>\n   → approve sent automatically if needed, then sell\n   → check approve_was_needed in output\n```\n\n### Token Launch Workflow\n\n```\n1. create-token --name=\"...\" --symbol=... --logo=./logo.png --initial-buy=0.1\n   → deploys token + bonding curve, returns token_address and bonding_curve_address\n\n2. quote <bonding_curve_address> buy 0.5\n   → verify expected tokens before buying more\n\n3. buy-token <bonding_curve_address> 0.5\n   → accumulate position\n```\n\n---\n\n## Contract Addresses (BSC Mainnet, Chain ID 56)\n\n| Contract | Address |\n|---|---|\n| Token Factory | `0x99A1F02f56E8356e6E90A880DBb1be6EC7485737` |\n| Bonding Curve Template | `0xea508aD6B550E94aC45831F265B2bD5346d06700` |\n\n> Each token has its own unique Bonding Curve instance.\n> Always fetch `bonding_curve_address` from `get-token`, `get-tokens` or `create-token` — do not use the template address.\n\nFile v1.3.1:README.md\n\n# 🪩 HODL.DANCE Agent Skill\n\n**Official CLI skill for AI agents and trading bots to interact with [HODL.DANCE](https://hodl.dance) — the memecoin bonding curve launchpad on BSC.**\n\n[![Version](https://img.shields.io/badge/version-1.3.0-1d9bf0)](https://www.npmjs.com/package/@hodl-dance/skill)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node](https://img.shields.io/badge/Node-%3E%3D18-green)](https://nodejs.org/)\n\n---\n\n## The Problem\n\nMost AI agents and trading bots want to trade memecoins on emerging launchpads, but:\n\n- Bonding curve mechanics are complex to simulate correctly\n- On-chain trading requires careful handling of approvals, gas, and errors\n- Public APIs give data, but executing trades reliably is painful\n- Most tools are built for humans, not autonomous agents\n\n---\n\n## The Solution\n\n**@hodl-dance/skill** gives agents a clean, reliable, JSON-first interface to HODL.DANCE.\n\n- Read market data, token details, and trade history\n- Simulate buys and sells instantly (no gas, no transactions)\n- Execute real buys and sells with automatic ERC20 approvals\n- Launch new tokens directly from code or agents\n\n**Built for agents. Works great for humans too.**\n\n---\n\n## ✨ Key Features\n\n- **Pure JSON output** — Every command returns structured, machine-readable JSON\n- **Gas-free simulations** — `quote` command uses on-chain state to predict exact output\n- **Automatic approvals** — `sell-token` handles ERC20 `approve` when needed\n- **Zero dependencies for reads** — Public commands work without any wallet or keys\n- **Agent-native** — Designed for 8004 agents, ClawHub, and autonomous systems\n- **Windows + Linux friendly** — Stable on both WSL and native Windows\n\n---\n\n## 🤖 AI Agents & 8004 Integration\n\nThis skill is the **official on-chain execution layer** for HODL.DANCE agents.\n\nIt is referenced in the platform's agent manifest:\n\n- [Agent Card](https://hodl.dance/.well-known/agent-card.json)\n- [OpenAPI Spec](https://hodl.dance/.well-known/openapi.json)\n\n### Example Agent ID on 8004\n- [HODL.DANCE Agent #96231](https://8004scan.io/agents/bsc/96231)\n\n### Supported Workflows for Agents\n\n```bash\n# 1. Discovery\nhodl-skill get-tokens --sort=volume --limit=10\n\n# 2. Analysis\nhodl-skill get-token <tokenAddress>\nhodl-skill get-trades <tokenAddress> --type=buy --limit=20\n\n# 3. Simulation (free)\nhodl-skill quote <bondingCurveAddress> buy 0.1\n\n# 4. Execution\nhodl-skill buy-token <bondingCurveAddress> 0.1\nhodl-skill sell-token <bondingCurveAddress> <amount>\n```\n\nMore integration examples and agent card details: [docs.hodl.dance](https://docs.hodl.dance)\n\n---\n\n## 🚀 Installation\n\n```bash\nnpm install -g @hodl-dance/skill\n```\n\nOr run without installing:\n\n```bash\nnpx @hodl-dance/skill <command>\n```\n\n### Requirements\n\n- Node.js ≥ 18\n- For write commands (`buy`, `sell`, `create`): `HODL_PRIVATE_KEY` environment variable\n\n---\n\n## 📖 Usage\n\n### Read Commands (no wallet required)\n\n```bash\n# List tokens\nhodl-skill get-tokens --sort=volume --limit=10 --verified=true\n\n# Token details + recent trades\nhodl-skill get-token 0x...\n\n# Trade history\nhodl-skill get-trades 0x... --type=buy --limit=20\n```\n\n### Simulation (recommended before trading)\n\n```bash\n# How many tokens will I receive for 0.1 BNB?\nhodl-skill quote 0x... buy 0.1\n\n# How much BNB will I get for selling 500,000 tokens?\nhodl-skill quote 0x... sell 500000\n```\n\n### Write Commands (requires `HODL_PRIVATE_KEY`)\n\n```bash\nexport HODL_PRIVATE_KEY=0xYourPrivateKey\n\n# Buy tokens\nhodl-skill buy-token 0x... 0.1\n\n# Sell tokens (approve handled automatically)\nhodl-skill sell-token 0x... 1000000\n\n# Launch a new token\nhodl-skill create-token --name=\"Moon Cat\" --symbol=MCAT --logo=./logo.png --initial-buy=0.1\n```\n\nFull command reference: [SKILL.md](./SKILL.md)\n\n---\n\n## 🛠 Development\n\n```bash\ngit clone https://github.com/hodldance/agent-skill.git\ncd agent-skill\nnpm install\n\n# Run directly\nnode src/index.js --help\n\n# Run tests\nnpm test\n```\n\n---\n\n## 🏗 Project Structure\n\n```\nsrc/\n├── index.js                 # CLI entrypoint & command dispatcher\n├── commands/                # All 7 commands (get-*, quote, buy, sell, create)\n├── lib/\n│   ├── api.js               # HTTP client for hodl.dance API\n│   ├── chain.js             # Ethers.js + bonding curve math simulations\n│   ├── output.js            # Safe JSON output (Windows + Linux compatible)\n│   └── validators.js        # Address validation helpers\n└── abi/\n    └── BondingCurve.json\n```\n\n---\n\n## Ecosystem & Integrations\n\n- **Platform**: [hodl.dance](https://hodl.dance)\n- **Documentation**: [docs.hodl.dance](https://docs.hodl.dance)\n- **NPM Package**: [@hodl-dance/skill](https://www.npmjs.com/package/@hodl-dance/skill)\n- **ClawHub**: [clawhub.ai/hodldance/hodl-dance](https://clawhub.ai/hodldance/hodl-dance)\n- **Agent Card**: [hodl.dance/.well-known/agent-card.json](https://hodl.dance/.well-known/agent-card.json)\n- **OpenAPI Spec**: [hodl.dance/.well-known/openapi.json](https://hodl.dance/.well-known/openapi.json)\n\n---\n\n## Contributing\n\nContributions are welcome, especially around:\n\n- Better error messages and agent-friendly output\n- Additional simulation accuracy\n- Test coverage\n- Windows/PowerShell UX improvements\n\n---\n\n## License\n\nMIT License\n\n---\n\n**Built with ❤️ for the memecoin community and autonomous agents.**\n\nFile v1.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn70cw47asswh3p18g11rrjen586tg1s\",\n  \"slug\": \"hodl-dance\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1779842286142\n}\n\nFile v1.3.1:CHANGELOG.md\n\n# Changelog\n\nAll notable changes to `@hodl-dance/skill` will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n---\n\n## [1.3.0] - 2026-05-27\n\n### Added\n- Full support for AI agent workflows and 8004 ecosystem integration\n- New modern README with Problem/Solution structure and dedicated \"AI Agents & 8004 Integration\" section\n- `CHANGELOG.md` for proper release tracking\n- Basic address validation for all commands accepting Ethereum addresses (`get-token`, `get-trades`, `quote`, `buy-token`, `sell-token`)\n- `stripMongoFields()` helper to consistently remove internal `_id` and `__v` fields from all public JSON output\n\n### Changed\n- **Breaking for output consumers**: `get-token`, `get-trades`, and nested trades now return clean objects without MongoDB internal fields (`_id`, `__v`)\n- Improved Windows compatibility: replaced direct `process.exit()` calls with `process.exitCode` pattern to prevent libuv `UV_HANDLE_CLOSING` assertion crashes when output is captured\n- Better error messages when invalid addresses are provided (now returns clear `INVALID_ARG` instead of downstream contract errors)\n- Updated `get-tokens` to use the new sanitization helper for consistency\n\n### Fixed\n- Critical bug: CLI would crash with native assertion on Windows after every successful command when stdout was piped or captured (common in agent environments)\n- Inconsistent presence of MongoDB metadata in JSON responses\n\n### Technical\n- Added `src/lib/validators.js` for reusable address validation\n- Refactored output handling in `src/lib/output.js` and `src/index.js`\n\n---\n\n## [1.2.1] - Previous\n\n- Documentation updates\n- Minor fixes for `create-token` command\n\n---\n\n## [1.2.0]\n\n- Added `create-token` command (token deployment + logo upload + optional initial buy)\n\n---\n\n## [1.1.0]\n\n- Initial public release\n- Commands: `get-tokens`, `get-token`, `get-trades`, `quote`, `buy-token`, `sell-token`\n\n[1.3.0]: https://github.com/hodldance/agent-skill/compare/v1.2.1...v1.3.0\n\nFile v1.3.1:skill-card.md\n\n## Description:\n\nHelps agents read HODL.DANCE market data, simulate bonding-curve trades, execute BNB/token trades, and launch memecoins on the HODL.DANCE BSC launchpad.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[hodldance](https://clawhub.ai/user/hodldance)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent operators use this skill to give agents a JSON-first CLI for discovering HODL.DANCE tokens, quoting bonding-curve trades, executing buy/sell transactions, and creating new tokens on BNB Chain.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Write commands can spend real BNB, deploy tokens, approve token transfers, or sell tokens when a private key is configured.\n\nMitigation: Use a dedicated low-value wallet, run read and quote commands first, and require human approval with strict amount limits before buy-token, sell-token, or create-token.\n\nRisk: The create-token command uploads a local logo file and token metadata.\n\nMitigation: Restrict logo paths to an approved directory and review metadata before allowing an agent to run create-token.\n\nRisk: Unpinned npx execution may install a package version other than the reviewed release.\n\nMitigation: Pin @hodl-dance/skill to version 1.3.1 or install from a locked package source.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/hodldance/skills/hodl-dance)\n- [HODL.DANCE Documentation](https://docs.hodl.dance)\n- [HODL.DANCE API](https://hodl.dance/api)\n- [HODL.DANCE Agent Card](https://hodl.dance/.well-known/agent-card.json)\n- [HODL.DANCE OpenAPI Spec](https://hodl.dance/.well-known/openapi.json)\n- [NPM Package](https://www.npmjs.com/package/@hodl-dance/skill)\n\n## Skill Output:\n\n**Output Type(s):** [JSON, Shell commands, Configuration]\n\n**Output Format:** [JSON to stdout, with command-line usage and environment variable guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Write commands require HODL_PRIVATE_KEY and can submit BNB Chain transactions; read and quote commands do not require a wallet.]\n\n## Skill Version(s):\n\n1.3.1 (source: server release metadata; artifact package.json and CHANGELOG report 1.3.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.3.1:package-lock.json\n\n{\n  \"name\": \"@hodl-dance/skill\",\n  \"version\": \"1.3.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"@hodl-dance/skill\",\n      \"version\": \"1.3.0\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ethers\": \"^6.13.0\",\n        \"form-data\": \"^4.0.5\",\n        \"node-fetch\": \"^2.7.0\"\n      },\n      \"bin\": {\n        \"hodl-skill\": \"src/index.js\"\n      },\n      \"devDependencies\": {\n        \"vitest\": \"^4.1.7\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@adraffy/ens-normalize\": {\n      \"version\": \"1.10.1\",\n      \"resolved\": \"https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz\",\n      \"integrity\": \"sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@emnapi/core\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz\",\n      \"integrity\": \"sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@emnapi/wasi-threads\": \"1.2.1\",\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@emnapi/runtime\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz\",\n      \"integrity\": \"sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@emnapi/wasi-threads\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz\",\n      \"integrity\": \"sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@jridgewell/sourcemap-codec\": {\n      \"version\": \"1.5.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz\",\n      \"integrity\": \"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@napi-rs/wasm-runtime\": {\n      \"version\": \"1.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz\",\n      \"integrity\": \"sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@tybys/wasm-util\": \"^0.10.1\"\n      },\n      \"funding\": {\n        \"type\": \"github\",\n        \"url\": \"https://github.com/sponsors/Brooooooklyn\"\n      },\n      \"peerDependencies\": {\n        \"@emnapi/core\": \"^1.7.1\",\n        \"@emnapi/runtime\": \"^1.7.1\"\n      }\n    },\n    \"node_modules/@noble/curves\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz\",\n      \"integrity\": \"sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@noble/hashes\": \"1.3.2\"\n      },\n      \"funding\": {\n        \"url\": \"https://paulmillr.com/funding/\"\n      }\n    },\n    \"node_modules/@noble/hashes\": {\n      \"version\": \"1.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz\",\n      \"integrity\": \"sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 16\"\n      },\n      \"funding\": {\n        \"url\": \"https://paulmillr.com/funding/\"\n      }\n    },\n    \"node_modules/@oxc-project/types\": {\n      \"version\": \"0.132.0\",\n      \"resolved\": \"https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz\",\n      \"integrity\": \"sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/Boshen\"\n      }\n    },\n    \"node_modules/@rolldown/binding-android-arm64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz\",\n      \"integrity\": \"sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-darwin-arm64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz\",\n      \"integrity\": \"sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-darwin-x64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz\",\n      \"integrity\": \"sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-freebsd-x64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz\",\n      \"integrity\": \"sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-arm-gnueabihf\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz\",\n      \"integrity\": \"sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-arm64-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-arm64-musl\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz\",\n      \"integrity\": \"sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"musl\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-ppc64-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-s390x-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==\",\n      \"cpu\": [\n        \"s390x\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-x64-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-x64-musl\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz\",\n      \"integrity\": \"sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"musl\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-openharmony-arm64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz\",\n      \"integrity\": \"sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openharmony\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-wasm32-wasi\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz\",\n      \"integrity\": \"sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==\",\n      \"cpu\": [\n        \"wasm32\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@emnapi/core\": \"1.10.0\",\n        \"@emnapi/runtime\": \"1.10.0\",\n        \"@napi-rs/wasm-runtime\": \"^1.1.4\"\n      },\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-win32-arm64-msvc\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz\",\n      \"integrity\": \"sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-win32-x64-msvc\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz\",\n      \"integrity\": \"sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/pluginutils\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz\",\n      \"integrity\": \"sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@standard-schema/spec\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz\",\n      \"integrity\": \"sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@tybys/wasm-util\": {\n      \"version\": \"0.10.2\",\n      \"resolved\": \"https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz\",\n      \"integrity\": \"sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@types/chai\": {\n      \"version\": \"5.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz\",\n      \"integrity\": \"sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/deep-eql\": \"*\",\n        \"assertion-error\": \"^2.0.1\"\n      }\n    },\n    \"node_modules/@types/deep-eql\": {\n      \"version\": \"4.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz\",\n      \"integrity\": \"sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@types/estree\": {\n      \"version\": \"1.0.9\",\n      \"resolved\": \"https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz\",\n      \"integrity\": \"sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@types/node\": {\n      \"version\": \"25.9.1\",\n      \"resolved\": \"https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz\",\n      \"integrity\": \"sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==\",\n      \"extraneous\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"undici-types\": \">=7.24.0 <7.24.7\"\n      }\n    },\n    \"node_modules/@vitest/expect\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/expect/-/expect-4.1.7.tgz\",\n      \"integrity\": \"sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@standard-schema/spec\": \"^1.1.0\",\n        \"@types/chai\": \"^5.2.2\",\n        \"@vitest/spy\": \"4.1.7\",\n        \"@vitest/utils\": \"4.1.7\",\n        \"chai\": \"^6.2.2\",\n        \"tinyrainbow\": \"^3.1.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/mocker\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.7.tgz\",\n      \"integrity\": \"sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/spy\": \"4.1.7\",\n        \"estree-walker\": \"^3.0.3\",\n        \"magic-string\": \"^0.30.21\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      },\n      \"peerDependencies\": {\n        \"msw\": \"^2.4.9\",\n        \"vite\": \"^6.0.0 || ^7.0.0 || ^8.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"msw\": {\n          \"optional\": true\n        },\n        \"vite\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@vitest/pretty-format\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.7.tgz\",\n      \"integrity\": \"sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"tinyrainbow\": \"^3.1.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/runner\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/runner/-/runner-4.1.7.tgz\",\n      \"integrity\": \"sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/utils\": \"4.1.7\",\n        \"pathe\": \"^2.0.3\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/snapshot\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.7.tgz\",\n      \"integrity\": \"sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/pretty-format\": \"4.1.7\",\n        \"@vitest/utils\": \"4.1.7\",\n        \"magic-string\": \"^0.30.21\",\n        \"pathe\": \"^2.0.3\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/spy\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/spy/-/spy-4.1.7.tgz\",\n      \"integrity\": \"sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/utils\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/utils/-/utils-4.1.7.tgz\",\n      \"integrity\": \"sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/pretty-format\": \"4.1.7\",\n        \"convert-source-map\": \"^2.0.0\",\n        \"tinyrainbow\": \"^3.1.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/aes-js\": {\n      \"version\": \"4.0.0-beta.5\",\n      \"resolved\": \"https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz\",\n      \"integrity\": \"sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/assertion-error\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz\",\n      \"integrity\": \"sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/asynckit\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz\",\n      \"integrity\": \"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/call-bind-apply-helpers\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz\",\n      \"integrity\": \"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"es-errors\": \"^1.3.0\",\n        \"function-bind\": \"^1.1.2\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/chai\": {\n      \"version\": \"6.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/chai/-/chai-6.2.2.tgz\",\n      \"integrity\": \"sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/combined-stream\": {\n      \"version\": \"1.0.8\",\n      \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz\",\n      \"integrity\": \"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"delayed-stream\": \"~1.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.8\"\n      }\n    },\n    \"node_modules/convert-source-map\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz\",\n      \"integrity\": \"sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/delayed-stream\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz\",\n      \"integrity\": \"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.4.0\"\n      }\n    },\n    \"node_modules/detect-libc\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz\",\n      \"integrity\": \"sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==\",\n      \"dev\": true,\n      \"license\": \"Apache-2.0\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/dunder-proto\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz\",\n      \"integrity\": \"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"call-bind-apply-helpers\": \"^1.0.1\",\n        \"es-errors\": \"^1.3.0\",\n        \"gopd\": \"^1.2.0\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/es-define-property\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz\",\n      \"integrity\": \"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/es-errors\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz\",\n      \"integrity\": \"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/es-module-lexer\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz\",\n      \"integrity\": \"sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/es-object-atoms\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz\",\n      \"integrity\": \"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"es-errors\": \"^1.3.0\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/es-set-tostringtag\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz\",\n      \"integrity\": \"sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"es-errors\": \"^1.3.0\",\n        \"get-intrinsic\": \"^1.2.6\",\n        \"has-tostringtag\": \"^1.0.2\",\n        \"hasown\": \"^2.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/estree-walker\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz\",\n      \"integrity\": \"sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/estree\": \"^1.0.0\"\n      }\n    },\n    \"node_modules/ethers\": {\n      \"version\": \"6.16.0\",\n      \"resolved\": \"https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz\",\n      \"integrity\": \"sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://github.com/sponsors/ethers-io/\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@adraffy/ens-normalize\": \"1.10.1\",\n        \"@noble/curves\": \"1.2.0\",\n        \"@noble/hashes\": \"1.3.2\",\n        \"@types/node\": \"22.7.5\",\n        \"aes-js\": \"4.0.0-beta.5\",\n        \"tslib\": \"2.7.0\",\n        \"ws\": \"8.17.1\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/ethers/node_modules/@types/node\": {\n      \"version\": \"22.7.5\",\n      \"resolved\": \"https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz\",\n      \"integrity\": \"sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"undici-types\": \"~6.19.2\"\n      }\n    },\n    \"node_modules/ethers/node_modules/undici-types\": {\n      \"version\": \"6.19.8\",\n      \"resolved\": \"https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz\",\n      \"integrity\": \"sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/expect-type\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz\",\n      \"integrity\": \"sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==\",\n      \"dev\": true,\n      \"license\": \"Apache-2.0\",\n      \"engines\": {\n        \"node\": \">=12.0.0\"\n      }\n    },\n    \"node_modules/fdir\": {\n      \"version\": \"6.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz\",\n      \"integrity\": \"sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12.0.0\"\n      },\n      \"peerDependencies\": {\n        \"picomatch\": \"^3 || ^4\"\n      },\n      \"peerDependenciesMeta\": {\n        \"picomatch\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/form-data\": {\n      \"version\": \"4.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz\",\n      \"integrity\": \"sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"asynckit\": \"^0.4.0\",\n        \"combined-stream\": \"^1.0.8\",\n        \"es-set-tostringtag\": \"^2.1.0\",\n        \"hasown\": \"^2.0.2\",\n        \"mime-types\": \"^2.1.12\"\n      },\n      \"engines\": {\n        \"node\": \">= 6\"\n      }\n    },\n    \"node_modules/fsevents\": {\n      \"version\": \"2.3.3\",\n      \"resolved\": \"https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz\",\n      \"integrity\": \"sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\",\n      \"dev\": true,\n      \"hasInstallScript\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^8.16.0 || ^10.6.0 || >=11.0.0\"\n      }\n    },\n    \"node_modules/function-bind\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz\",\n      \"integrity\": \"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==\",\n      \"license\": \"MIT\",\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/ljharb\"\n      }\n    },\n    \"node_modules/get-intrinsic\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz\",\n      \"integrity\": \"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"call-bind-apply-helpers\": \"^1.0.2\",\n        \"es-define-property\": \"^1.0.1\",\n        \"es-errors\": \"^1.3.0\",\n        \"es-object-atoms\": \"^1.1.1\",\n        \"function-bind\": \"^1.1.2\",\n        \"get-proto\": \"^1.0.1\",\n        \"gopd\": \"^1.2.0\",\n        \"has-symbols\": \"^1.1.0\",\n        \"hasown\": \"^2.0.2\",\n        \"math-intrinsics\": \"^1.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/ljharb\"\n      }\n    },\n    \"node_modules/get-proto\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz\",\n      \"integrity\": \"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"dunder-proto\": \"^1.0.1\",\n        \"es-object-atoms\": \"^1.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/gopd\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz\",\n      \"integrity\": \"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/ljharb\"\n      }\n    },\n    \"node_modules/has-symbols\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz\",\n      \"integrity\": \"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/ljharb\"\n      }\n    },\n    \"node_modules/has-tostringtag\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz\",\n      \"integrity\": \"sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"has-symbols\": \"^1.0.3\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/ljharb\"\n      }\n    },\n    \"node_modules/hasown\": {\n      \"version\": \"2.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz\",\n      \"integrity\": \"sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"function-bind\": \"^1.1.2\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/lightningcss\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz\",\n      \"integrity\": \"sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==\",\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"dependencies\": {\n        \"detect-libc\": \"^2.0.3\"\n      },\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      },\n      \"optionalDependencies\": {\n        \"lightningcss-android-arm64\": \"1.32.0\",\n        \"lightningcss-darwin-arm64\": \"1.32.0\",\n        \"lightningcss-darwin-x64\": \"1.32.0\",\n        \"lightningcss-freebsd-x64\": \"1.32.0\",\n        \"lightningcss-linux-arm-gnueabihf\": \"1.32.0\",\n        \"lightningcss-linux-arm64-gnu\": \"1.32.0\",\n        \"lightningcss-linux-arm64-musl\": \"1.32.0\",\n        \"lightningcss-linux-x64-gnu\": \"1.32.0\",\n        \"lightningcss-linux-x64-musl\": \"1.32.0\",\n        \"lightningcss-win32-arm64-msvc\": \"1.32.0\",\n        \"lightningcss-win32-x64-msvc\": \"1.32.0\"\n      }\n    },\n    \"node_modules/lightningcss-android-arm64\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz\",\n      \"integrity\": \"sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-darwin-arm64\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz\",\n      \"integrity\": \"sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-darwin-x64\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz\",\n      \"integrity\": \"sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-freebsd-x64\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz\",\n      \"integrity\": \"sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-linux-arm-gnueabihf\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz\",\n      \"integrity\": \"sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-linux-arm64-gnu\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz\",\n      \"integrity\": \"sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-linux-arm64-musl\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz\",\n      \"integrity\": \"sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"musl\"\n      ],\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-linux-x64-gnu\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz\",\n      \"integrity\": \"sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-linux-x64-musl\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz\",\n      \"integrity\": \"sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"musl\"\n      ],\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-win32-arm64-msvc\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz\",\n      \"integrity\": \"sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/lightningcss-win32-x64-msvc\": {\n      \"version\": \"1.32.0\",\n      \"resolved\": \"https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz\",\n      \"integrity\": \"sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MPL-2.0\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">= 12.0.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/parcel\"\n      }\n    },\n    \"node_modules/magic-string\": {\n      \"version\": \"0.30.21\",\n      \"resolved\": \"https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz\",\n      \"integrity\": \"sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jridgewell/sourcemap-codec\": \"^1.5.5\"\n      }\n    },\n    \"node_modules/math-intrinsics\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz\",\n      \"integrity\": \"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/mime-db\": {\n      \"version\": \"1.52.0\",\n      \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz\",\n      \"integrity\": \"sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 0.6\"\n      }\n    },\n    \"node_modules/mime-types\": {\n      \"version\": \"2.1.35\",\n      \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz\",\n      \"integrity\": \"sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"mime-db\": \"1.52.0\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.6\"\n      }\n    },\n    \"node_modules/nanoid\": {\n      \"version\": \"3.3.12\",\n      \"resolved\": \"https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz\",\n      \"integrity\": \"sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==\",\n      \"dev\": true,\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/ai\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"bin\": {\n        \"nanoid\": \"bin/nanoid.cjs\"\n      },\n      \"engines\": {\n        \"node\": \"^10 || ^12 || ^13.7 || ^14 || >=15.0.1\"\n      }\n    },\n    \"node_modules/node-fetch\": {\n      \"version\": \"2.7.0\",\n      \"resolved\": \"https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz\",\n      \"integrity\": \"sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"whatwg-url\": \"^5.0.0\"\n      },\n      \"engines\": {\n        \"node\": \"4.x || >=6.0.0\"\n      },\n      \"peerDependencies\": {\n        \"encoding\": \"^0.1.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"encoding\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/obug\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/obug/-/obug-2.1.1.tgz\",\n      \"integrity\": \"sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==\",\n      \"dev\": true,\n      \"funding\": [\n        \"https://github.com/sponsors/sxzz\",\n        \"https://opencollective.com/debug\"\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/pathe\": {\n      \"version\": \"2.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz\",\n      \"integrity\": \"sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/picocolors\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz\",\n      \"integrity\": \"sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/picomatch\": {\n      \"version\": \"4.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz\",\n      \"integrity\": \"sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/jonschlinkert\"\n      }\n    },\n    \"node_modules/postcss\": {\n      \"version\": \"8.5.15\",\n      \"resolved\": \"https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz\",\n      \"integrity\": \"sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==\",\n      \"dev\": true,\n      \"funding\": [\n        {\n          \"type\": \"opencollective\",\n          \"url\": \"https://opencollective.com/postcss/\"\n        },\n        {\n          \"type\": \"tidelift\",\n          \"url\": \"https://tidelift.com/funding/github/npm/postcss\"\n        },\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/ai\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"nanoid\": \"^3.3.12\",\n        \"picocolors\": \"^1.1.1\",\n        \"source-map-js\": \"^1.2.1\"\n      },\n      \"engines\": {\n        \"node\": \"^10 || ^12 || >=14\"\n      }\n    },\n    \"node_modules/rolldown\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz\",\n      \"integrity\": \"sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@oxc-project/types\": \"=0.132.0\",\n        \"@rolldown/pluginutils\": \"^1.0.0\"\n      },\n      \"bin\": {\n        \"rolldown\": \"bin/cli.mjs\"\n      },\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      },\n      \"optionalDependencies\": {\n        \"@rolldown/binding-android-arm64\": \"1.0.2\",\n        \"@rolldown/binding-darwin-arm64\": \"1.0.2\",\n        \"@rolldown/binding-darwin-x64\": \"1.0.2\",\n        \"@rolldown/binding-freebsd-x64\": \"1.0.2\",\n        \"@rolldown/binding-linux-arm-gnueabihf\": \"1.0.2\",\n        \"@rolldown/binding-linux-arm64-gnu\": \"1.0.2\",\n        \"@rolldown/binding-linux-arm64-musl\": \"1.0.2\",\n        \"@rolldown/binding-linux-ppc64-gnu\": \"1.0.2\",\n        \"@rolldown/binding-linux-s390x-gnu\": \"1.0.2\",\n        \"@rolldown/binding-linux-x64-gnu\": \"1.0.2\",\n        \"@rolldown/binding-linux-x64-musl\": \"1.0.2\",\n        \"@rolldown/binding-openharmony-arm64\": \"1.0.2\",\n        \"@rolldown/binding-wasm32-wasi\": \"1.0.2\",\n        \"@rolldown/binding-win32-arm64-msvc\": \"1.0.2\",\n        \"@rolldown/binding-win32-x64-msvc\": \"1.0.2\"\n      }\n    },\n    \"node_modules/siginfo\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz\",\n      \"integrity\": \"sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/source-map-js\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz\",\n      \"integrity\": \"sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==\",\n      \"dev\": true,\n      \"license\": \"BSD-3-Clause\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/stackback\": {\n      \"version\": \"0.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz\",\n      \"integrity\": \"sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/std-env\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz\",\n      \"integrity\": \"sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/tinybench\": {\n      \"version\": \"2.9.0\",\n      \"resolved\": \"https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz\",\n      \"integrity\": \"sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/tinyexec\": {\n      \"version\": \"1.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.2.tgz\",\n      \"integrity\": \"sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/tinyglobby\": {\n      \"version\": \"0.2.16\",\n      \"resolved\": \"https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz\",\n      \"integrity\": \"sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"fdir\": \"^6.5.0\",\n        \"picomatch\": \"^4.0.4\"\n      },\n      \"engines\": {\n        \"node\": \">=12.0.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/SuperchupuDev\"\n      }\n    },\n    \"node_modules/tinyrainbow\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz\",\n      \"integrity\": \"sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/tr46\": {\n      \"version\": \"0.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz\",\n      \"integrity\": \"sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/tslib\": {\n      \"version\": \"2.7.0\",\n      \"resolved\": \"https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz\",\n      \"integrity\": \"sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==\",\n      \"license\": \"0BSD\"\n    },\n    \"node_modules/undici-types\": {\n      \"version\": \"7.24.6\",\n      \"\n\nFile v1.3.1:package.json\n\n{\n  \"name\": \"@hodl-dance/skill\",\n  \"version\": \"1.3.0\",\n  \"description\": \"AI Agent Skill for HODL.DANCE — memecoin launchpad on BSC\",\n  \"main\": \"src/index.js\",\n  \"bin\": {\n    \"hodl-skill\": \"src/index.js\"\n  },\n  \"keywords\": [\n    \"hodl-dance\",\n    \"memecoin\",\n    \"bsc\",\n    \"bonding-curve\",\n    \"ai-agent\",\n    \"skill\",\n    \"defi\"\n  ],\n  \"author\": \"HODL.DANCE\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"ethers\": \"^6.13.0\",\n    \"form-data\": \"^4.0.5\",\n    \"node-fetch\": \"^2.7.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/hodldance/agent-skill\"\n  },\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"cli\": \"node src/index.js\",\n    \"build\": \"node scripts/build.js\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"version\": \"node -e \\\"console.log(require('./package.json').version)\\\"\"\n  },\n  \"devDependencies\": {\n    \"vitest\": \"^4.1.7\"\n  }\n}\n\nFile v1.3.1:src/abi/BondingCurve.json\n\n[\n  { \"inputs\": [], \"name\": \"buyTokens\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\" },\n  { \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }], \"name\": \"buyTokensFor\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\" },\n  { \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }], \"name\": \"sellTokens\", \"outputs\": [], \"stateMutability\": \"nonpayable\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"r\", \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"t\", \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"k\", \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"finalized\", \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"priceBNBPerToken1e18\", \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"priceTokenPerBNB1e18\", \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"LIQUIDITY_THRESHOLD\", \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"token\", \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"inputs\": [], \"name\": \"creator\", \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }], \"stateMutability\": \"view\", \"type\": \"function\" },\n  { \"anonymous\": false, \"inputs\": [{ \"indexed\": true, \"internalType\": \"address\", \"name\": \"buyer\", \"type\": \"address\" }, { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"bnbIn\", \"type\": \"uint256\" }, { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"tokensOut\", \"type\": \"uint256\" }, { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"fee\", \"type\": \"uint256\" }], \"name\": \"TokensPurchased\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [{ \"indexed\": true, \"internalType\": \"address\", \"name\": \"seller\", \"type\": \"address\" }, { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"tokensIn\", \"type\": \"uint256\" }, { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"bnbOut\", \"type\": \"uint256\" }, { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"fee\", \"type\": \"uint256\" }], \"name\": \"TokensSold\", \"type\": \"event\" }\n]\n\nArchive v1.3.0: 25 files, 45629 bytes\n\nFiles: CHANGELOG.md (2114b), package-lock.json (100827b), package.json (957b), README.md (5431b), scripts/build.js (1553b), skill-card.md (3411b), SKILL.md (7284b), src/abi/BondingCurve.json (2760b), src/commands/buy-token.js (2807b), src/commands/create-token.js (4846b), src/commands/get-token.js (567b), src/commands/get-tokens.js (741b), src/commands/get-trades.js (874b), src/commands/quote.js (1718b), src/commands/sell-token.js (3781b), src/index.js (1076b), src/lib/api.js (549b), src/lib/chain.js (1930b), src/lib/output.js (1237b), src/lib/validators.js (928b), tests/chain.test.js (1426b), tests/output.test.js (1460b), tests/validators.test.js (1443b), vitest.config.js (315b), _meta.json (129b)\n\nFile v1.3.0:SKILL.md\n\n# HODL.DANCE Agent Skill\n\nTrade memecoins on the [HODL.DANCE](https://hodl.dance) bonding curve launchpad on BSC (BNB Chain).\n\n## Overview\n\nHODL.DANCE is a memecoin launchpad on BSC using a CPMM bonding curve (r × t = k).\nTokens trade on the curve until 19 BNB is raised, then liquidity auto-migrates to PancakeSwap V3.\n\n- **Network:** BSC Mainnet (Chain ID: 56)\n- **Native currency:** BNB\n- **Fee:** 1% per trade (buy and sell)\n- **API:** [https://hodl.dance/api](https://hodl.dance/api) (public, no API key required)\n- **Docs:** [https://docs.hodl.dance](https://docs.hodl.dance)\n\n## Installation\n\n```bash\nnpm install -g @hodl-dance/skill\n# or without installing:\nnpx @hodl-dance/skill <command>\n```\n\n## Credentials\n\nRequired only for `create-token`, `buy-token` and `sell-token`:\n\n```bash\nexport HODL_PRIVATE_KEY=0xyour_private_key\nexport HODL_RPC_URL=https://bsc-dataseed.binance.org/  # optional\n```\n\n> ⚠️ The private key is used locally only to sign transactions. Never share it.\n\n---\n\n## Commands\n\n### `get-tokens`\n\nList tokens with filtering and sorting. Returns full token objects including `bonding_curve_address`.\n\n```bash\nhodl-skill get-tokens\nhodl-skill get-tokens --sort=market_cap --limit=10\nhodl-skill get-tokens --sort=volume --verified=true\nhodl-skill get-tokens --sort=progress --finalized=false\nhodl-skill get-tokens --search=pepe --limit=5\n```\n\n**Options:** `--sort=newest|market_cap|progress|volume` · `--limit=N` (max 100) · `--offset=N` · `--verified=true|false` · `--finalized=true|false` · `--search=<text>`\n\n**Key output fields per token:**\n- `address` — token contract address\n- `bonding_curve_address` — ⭐ use this in quote/buy-token/sell-token\n- `market_cap_usd`, `progress_percent` (0–100 toward PancakeSwap migration)\n- `finalized` — if true, bonding curve is closed, token is on PancakeSwap V3\n- `price_change_24h`, `trades_24h`, `volume_24h_bnb`\n\n---\n\n### `get-token <tokenAddress>`\n\nFull token details + 20 most recent trades.\n\n```bash\nhodl-skill get-token 0x1a2b3c...\n```\n\nReturns same fields as `get-tokens` plus `recent_trades[]`.\n\n---\n\n### `get-trades <tokenAddress>`\n\nTrade history for a specific token.\n\n```bash\nhodl-skill get-trades 0x1a2b3c...\nhodl-skill get-trades 0x1a2b3c... --type=buy --limit=20\n```\n\n**Options:** `--type=all|buy|sell` · `--limit=N` (max 500) · `--offset=N`\n\n---\n\n### `quote <bondingCurveAddress> buy|sell <amount>`\n\n**Simulate** trade output using live on-chain state. No transaction sent, no gas used.\n\n```bash\n# How many tokens will I get for 0.1 BNB?\nhodl-skill quote 0xbc1234... buy 0.1\n\n# How much BNB will I get for selling 500000 tokens?\nhodl-skill quote 0xbc1234... sell 500000\n```\n\n> Always run `quote` before `buy-token` or `sell-token` to verify expected amounts.\n\n---\n\n### `create-token`\n\nDeploy a new token + bonding curve on HODL.DANCE. Uploads logo to IPFS, then sends on-chain transaction.\n\n```bash\nhodl-skill create-token --name=\"Moon Cat\" --symbol=MCAT --logo=./logo.png\n\nhodl-skill create-token \\\n  --name=\"Moon Cat\" \\\n  --symbol=MCAT \\\n  --logo=./logo.png \\\n  --category=meme \\\n  --description=\"The cat that dances on the moon\" \\\n  --twitter=\"https://x.com/mooncat\" \\\n  --telegram=\"https://t.me/mooncat\" \\\n  --website=\"https://mooncat.io\" \\\n  --initial-buy=0.1\n```\n\n**Requires:** `HODL_PRIVATE_KEY`\n\n**Options:**\n- `--name` — token name, 3–40 characters *(required)*\n- `--symbol` — token symbol, 1–10 characters *(required)*\n- `--logo` — path to local image file PNG/JPG/WEBP, max 5MB *(required)*\n- `--category` — `meme|ai|games|social|other` (default: `meme`)\n- `--description` — token description, max 500 characters\n- `--website` — `https://...`\n- `--twitter` — `https://x.com/...`\n- `--telegram` — `https://t.me/...`\n- `--initial-buy` — BNB amount to buy in the same transaction (default: `0`)\n\n> Deploy fee: **0.0001 BNB**. If `--initial-buy` is set, total value = `0.0001 + initial-buy`.\n\n**Output:** `tx_hash`, `block_number`, `gas_used`, `token_address`, `bonding_curve_address`, `name`, `symbol`, `category`, `logo_ipfs`, `initial_buy_bnb`\n\n---\n\n### `buy-token <bondingCurveAddress> <bnbAmount> [--recipient=0x...]`\n\nBuy tokens using BNB. Sends transaction on-chain.\n\n```bash\nhodl-skill buy-token 0xbc1234... 0.1\nhodl-skill buy-token 0xbc1234... 0.5 --recipient=0xfriend...\n```\n\n**Requires:** `HODL_PRIVATE_KEY`\n\n**Output:** `tx_hash`, `bnb_spent`, `tokens_received`, `tokens_estimated`, `fee_bnb`, `block_number`, `gas_used`\n\n---\n\n### `sell-token <bondingCurveAddress> <tokenAmount>`\n\nSell tokens, receive BNB.\n\n```bash\nhodl-skill sell-token 0xbc1234... 1000000\n```\n\n**Requires:** `HODL_PRIVATE_KEY`\n\n> ⚠️ **Selling requires ERC20 `approve` before `sellTokens`.**\n> This skill handles it automatically in two steps:\n> 1. Checks current `allowance` — if insufficient, sends `approve()` transaction first\n> 2. Sends `sellTokens()` transaction\n>\n> The output field `approve_was_needed: true/false` tells you whether approve was sent.\n> If approve was needed, `approve_tx_hash` contains its transaction hash.\n> Total gas cost may cover 2 transactions if approve was required.\n\n**Output:** `tx_hash`, `tokens_sold`, `bnb_received`, `bnb_estimated`, `fee_bnb`, `approve_tx_hash`, `approve_was_needed`, `block_number`, `gas_used`\n\n---\n\n## Response Format\n\nAll commands output JSON to stdout:\n\n```json\n{ \"success\": true, \"data\": { ... } }\n```\n\nErrors:\n\n```json\n{ \"success\": false, \"error\": { \"code\": \"TOKEN_FINALIZED\", \"message\": \"...\" } }\n```\n\nExit code `0` = success, `1` = error.\n\n### Error Codes\n\n| Code | Meaning |\n|---|---|\n| `MISSING_ARG` | Required argument not provided |\n| `INVALID_ARG` | Invalid argument value (e.g. logo file not found) |\n| `TOKEN_FINALIZED` | Token migrated to PancakeSwap V3, bonding curve closed |\n| `INSUFFICIENT_BALANCE` | Not enough tokens to sell |\n| `ERROR` | General error (message contains details) |\n\n---\n\n## Typical Agent Workflow\n\n```\n1. get-tokens --sort=volume --limit=10\n   → find tokens with activity, note bonding_curve_address\n\n2. get-token <tokenAddress>\n   → check progress_percent, finalized, recent_trades\n\n3. quote <bondingCurveAddress> buy 0.1\n   → verify tokens_out before committing\n\n4. buy-token <bondingCurveAddress> 0.1\n   → execute, save tx_hash and tokens_received\n\n5. [later] quote <bondingCurveAddress> sell <tokens_received>\n   → check exit value\n\n6. sell-token <bondingCurveAddress> <tokens_received>\n   → approve sent automatically if needed, then sell\n   → check approve_was_needed in output\n```\n\n### Token Launch Workflow\n\n```\n1. create-token --name=\"...\" --symbol=... --logo=./logo.png --initial-buy=0.1\n   → deploys token + bonding curve, returns token_address and bonding_curve_address\n\n2. quote <bonding_curve_address> buy 0.5\n   → verify expected tokens before buying more\n\n3. buy-token <bonding_curve_address> 0.5\n   → accumulate position\n```\n\n---\n\n## Contract Addresses (BSC Mainnet, Chain ID 56)\n\n| Contract | Address |\n|---|---|\n| Token Factory | `0x99A1F02f56E8356e6E90A880DBb1be6EC7485737` |\n| Bonding Curve Template | `0xea508aD6B550E94aC45831F265B2bD5346d06700` |\n\n> Each token has its own unique Bonding Curve instance.\n> Always fetch `bonding_curve_address` from `get-token`, `get-tokens` or `create-token` — do not use the template address.\n\nFile v1.3.0:README.md\n\n# 🪩 HODL.DANCE Agent Skill\n\n**Official CLI skill for AI agents and trading bots to interact with [HODL.DANCE](https://hodl.dance) — the memecoin bonding curve launchpad on BSC.**\n\n[![Version](https://img.shields.io/badge/version-1.3.0-1d9bf0)](https://www.npmjs.com/package/@hodl-dance/skill)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node](https://img.shields.io/badge/Node-%3E%3D18-green)](https://nodejs.org/)\n\n---\n\n## The Problem\n\nMost AI agents and trading bots want to trade memecoins on emerging launchpads, but:\n\n- Bonding curve mechanics are complex to simulate correctly\n- On-chain trading requires careful handling of approvals, gas, and errors\n- Public APIs give data, but executing trades reliably is painful\n- Most tools are built for humans, not autonomous agents\n\n---\n\n## The Solution\n\n**@hodl-dance/skill** gives agents a clean, reliable, JSON-first interface to HODL.DANCE.\n\n- Read market data, token details, and trade history\n- Simulate buys and sells instantly (no gas, no transactions)\n- Execute real buys and sells with automatic ERC20 approvals\n- Launch new tokens directly from code or agents\n\n**Built for agents. Works great for humans too.**\n\n---\n\n## ✨ Key Features\n\n- **Pure JSON output** — Every command returns structured, machine-readable JSON\n- **Gas-free simulations** — `quote` command uses on-chain state to predict exact output\n- **Automatic approvals** — `sell-token` handles ERC20 `approve` when needed\n- **Zero dependencies for reads** — Public commands work without any wallet or keys\n- **Agent-native** — Designed for 8004 agents, ClawHub, and autonomous systems\n- **Windows + Linux friendly** — Stable on both WSL and native Windows\n\n---\n\n## 🤖 AI Agents & 8004 Integration\n\nThis skill is the **official on-chain execution layer** for HODL.DANCE agents.\n\nIt is referenced in the platform's agent manifest:\n\n- [Agent Card](https://hodl.dance/.well-known/agent-card.json)\n- [OpenAPI Spec](https://hodl.dance/.well-known/openapi.json)\n\n### Example Agent ID on 8004\n- [HODL.DANCE Agent #96231](https://8004scan.io/agents/bsc/96231)\n\n### Supported Workflows for Agents\n\n```bash\n# 1. Discovery\nhodl-skill get-tokens --sort=volume --limit=10\n\n# 2. Analysis\nhodl-skill get-token <tokenAddress>\nhodl-skill get-trades <tokenAddress> --type=buy --limit=20\n\n# 3. Simulation (free)\nhodl-skill quote <bondingCurveAddress> buy 0.1\n\n# 4. Execution\nhodl-skill buy-token <bondingCurveAddress> 0.1\nhodl-skill sell-token <bondingCurveAddress> <amount>\n```\n\nMore integration examples and agent card details: [docs.hodl.dance](https://docs.hodl.dance)\n\n---\n\n## 🚀 Installation\n\n```bash\nnpm install -g @hodl-dance/skill\n```\n\nOr run without installing:\n\n```bash\nnpx @hodl-dance/skill <command>\n```\n\n### Requirements\n\n- Node.js ≥ 18\n- For write commands (`buy`, `sell`, `create`): `HODL_PRIVATE_KEY` environment variable\n\n---\n\n## 📖 Usage\n\n### Read Commands (no wallet required)\n\n```bash\n# List tokens\nhodl-skill get-tokens --sort=volume --limit=10 --verified=true\n\n# Token details + recent trades\nhodl-skill get-token 0x...\n\n# Trade history\nhodl-skill get-trades 0x... --type=buy --limit=20\n```\n\n### Simulation (recommended before trading)\n\n```bash\n# How many tokens will I receive for 0.1 BNB?\nhodl-skill quote 0x... buy 0.1\n\n# How much BNB will I get for selling 500,000 tokens?\nhodl-skill quote 0x... sell 500000\n```\n\n### Write Commands (requires `HODL_PRIVATE_KEY`)\n\n```bash\nexport HODL_PRIVATE_KEY=0xYourPrivateKey\n\n# Buy tokens\nhodl-skill buy-token 0x... 0.1\n\n# Sell tokens (approve handled automatically)\nhodl-skill sell-token 0x... 1000000\n\n# Launch a new token\nhodl-skill create-token --name=\"Moon Cat\" --symbol=MCAT --logo=./logo.png --initial-buy=0.1\n```\n\nFull command reference: [SKILL.md](./SKILL.md)\n\n---\n\n## 🛠 Development\n\n```bash\ngit clone https://github.com/hodldance/agent-skill.git\ncd agent-skill\nnpm install\n\n# Run directly\nnode src/index.js --help\n\n# Run tests\nnpm test\n```\n\n---\n\n## 🏗 Project Structure\n\n```\nsrc/\n├── index.js                 # CLI entrypoint & command dispatcher\n├── commands/                # All 7 commands (get-*, quote, buy, sell, create)\n├── lib/\n│   ├── api.js               # HTTP client for hodl.dance API\n│   ├── chain.js             # Ethers.js + bonding curve math simulations\n│   ├── output.js            # Safe JSON output (Windows + Linux compatible)\n│   └── validators.js        # Address validation helpers\n└── abi/\n    └── BondingCurve.json\n```\n\n---\n\n## Ecosystem & Integrations\n\n- **Platform**: [hodl.dance](https://hodl.dance)\n- **Documentation**: [docs.hodl.dance](https://docs.hodl.dance)\n- **NPM Package**: [@hodl-dance/skill](https://www.npmjs.com/package/@hodl-dance/skill)\n- **ClawHub**: [clawhub.ai/hodldance/hodl-dance](https://clawhub.ai/hodldance/hodl-dance)\n- **Agent Card**: [hodl.dance/.well-known/agent-card.json](https://hodl.dance/.well-known/agent-card.json)\n- **OpenAPI Spec**: [hodl.dance/.well-known/openapi.json](https://hodl.dance/.well-known/openapi.json)\n\n---\n\n## Contributing\n\nContributions are welcome, especially around:\n\n- Better error messages and agent-friendly output\n- Additional simulation accuracy\n- Test coverage\n- Windows/PowerShell UX improvements\n\n---\n\n## License\n\nMIT License\n\n---\n\n**Built with ❤️ for the memecoin community and autonomous agents.**\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn70cw47asswh3p18g11rrjen586tg1s\",\n  \"slug\": \"hodl-dance\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1779842016435\n}\n\nFile v1.3.0:CHANGELOG.md\n\n# Changelog\n\nAll notable changes to `@hodl-dance/skill` will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n---\n\n## [1.3.0] - 2026-05-27\n\n### Added\n- Full support for AI agent workflows and 8004 ecosystem integration\n- New modern README with Problem/Solution structure and dedicated \"AI Agents & 8004 Integration\" section\n- `CHANGELOG.md` for proper release tracking\n- Basic address validation for all commands accepting Ethereum addresses (`get-token`, `get-trades`, `quote`, `buy-token`, `sell-token`)\n- `stripMongoFields()` helper to consistently remove internal `_id` and `__v` fields from all public JSON output\n\n### Changed\n- **Breaking for output consumers**: `get-token`, `get-trades`, and nested trades now return clean objects without MongoDB internal fields (`_id`, `__v`)\n- Improved Windows compatibility: replaced direct `process.exit()` calls with `process.exitCode` pattern to prevent libuv `UV_HANDLE_CLOSING` assertion crashes when output is captured\n- Better error messages when invalid addresses are provided (now returns clear `INVALID_ARG` instead of downstream contract errors)\n- Updated `get-tokens` to use the new sanitization helper for consistency\n\n### Fixed\n- Critical bug: CLI would crash with native assertion on Windows after every successful command when stdout was piped or captured (common in agent environments)\n- Inconsistent presence of MongoDB metadata in JSON responses\n\n### Technical\n- Added `src/lib/validators.js` for reusable address validation\n- Refactored output handling in `src/lib/output.js` and `src/index.js`\n\n---\n\n## [1.2.1] - Previous\n\n- Documentation updates\n- Minor fixes for `create-token` command\n\n---\n\n## [1.2.0]\n\n- Added `create-token` command (token deployment + logo upload + optional initial buy)\n\n---\n\n## [1.1.0]\n\n- Initial public release\n- Commands: `get-tokens`, `get-token`, `get-trades`, `quote`, `buy-token`, `sell-token`\n\n[1.3.0]: https://github.com/hodldance/agent-skill/compare/v1.2.1...v1.3.0\n\nFile v1.3.0:skill-card.md\n\n## Description: <br>\nTrade, create, and manage memecoins on HODL.DANCE's BSC bonding curve launchpad using JSON-first CLI commands for market data, quotes, token launches, buys, and sells. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[hodldance](https://clawhub.ai/user/hodldance) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal developers, AI agents, and trading-bot operators use this skill to inspect HODL.DANCE token data, simulate trades, and execute or launch BSC bonding-curve tokens with a funded wallet. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can spend real crypto funds, sign transactions, and create tokens on BSC when given a funded wallet private key. <br>\nMitigation: Use a dedicated low-balance wallet, keep HODL_PRIVATE_KEY scoped to this task, verify BSC chain and contract addresses, and require explicit human approval before buy, sell, approve, or token-creation commands. <br>\nRisk: Bonding-curve trades are irreversible and may produce unexpected proceeds if market state changes between simulation and execution. <br>\nMitigation: Run quote immediately before trading, set conservative amounts, inspect returned estimates and fees, and confirm the target bonding_curve_address before submitting a transaction. <br>\nRisk: Selling may trigger an ERC20 approval before the sell transaction, increasing transaction count, gas cost, and token-transfer permission exposure. <br>\nMitigation: Review whether approve_was_needed is expected, limit sales to intended token amounts, and monitor or revoke allowances after use when appropriate. <br>\nRisk: Security evidence reports a suspicious verdict because VirusTotal showed 2 malicious detections out of 64 engines, although artifact inspection did not find deception, exfiltration, destructive local behavior, or hidden install hooks. <br>\nMitigation: Review the artifact before installation, run it in a controlled environment, and avoid granting production wallets or broad credentials until review is complete. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/hodldance/hodl-dance) <br>\n- [HODL.DANCE Documentation](https://docs.hodl.dance) <br>\n- [HODL.DANCE API](https://hodl.dance/api) <br>\n- [HODL.DANCE Agent Card](https://hodl.dance/.well-known/agent-card.json) <br>\n- [HODL.DANCE OpenAPI Spec](https://hodl.dance/.well-known/openapi.json) <br>\n- [NPM Package](https://www.npmjs.com/package/@hodl-dance/skill) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [JSON, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [JSON objects returned by CLI commands, with Markdown command examples in the skill documentation] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Read commands work without a wallet; buy, sell, and token-creation commands require HODL_PRIVATE_KEY and may submit irreversible BSC transactions.] <br>\n\n## Skill Version(s): <br>\n1.3.0 (source: server release metadata, package.json, README badge, and CHANGELOG released 2026-05-27) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.3.0:package-lock.json\n\n{\n  \"name\": \"@hodl-dance/skill\",\n  \"version\": \"1.3.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"@hodl-dance/skill\",\n      \"version\": \"1.3.0\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"clawhub\": \"^0.18.0\",\n        \"ethers\": \"^5.8.0\",\n        \"form-data\": \"^4.0.5\",\n        \"node-fetch\": \"^2.7.0\"\n      },\n      \"bin\": {\n        \"hodl-skill\": \"src/index.js\"\n      },\n      \"devDependencies\": {\n        \"vitest\": \"^4.1.7\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@ark/schema\": {\n      \"version\": \"0.56.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ark/schema/-/schema-0.56.0.tgz\",\n      \"integrity\": \"sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ark/util\": \"0.56.0\"\n      }\n    },\n    \"node_modules/@ark/util\": {\n      \"version\": \"0.56.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ark/util/-/util-0.56.0.tgz\",\n      \"integrity\": \"sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@clack/core\": {\n      \"version\": \"1.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/@clack/core/-/core-1.3.1.tgz\",\n      \"integrity\": \"sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"fast-wrap-ansi\": \"^0.2.0\",\n        \"sisteransi\": \"^1.0.5\"\n      },\n      \"engines\": {\n        \"node\": \">= 20.12.0\"\n      }\n    },\n    \"node_modules/@clack/prompts\": {\n      \"version\": \"1.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@clack/prompts/-/prompts-1.4.0.tgz\",\n      \"integrity\": \"sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@clack/core\": \"1.3.1\",\n        \"fast-string-width\": \"^3.0.2\",\n        \"fast-wrap-ansi\": \"^0.2.0\",\n        \"sisteransi\": \"^1.0.5\"\n      },\n      \"engines\": {\n        \"node\": \">= 20.12.0\"\n      }\n    },\n    \"node_modules/@emnapi/core\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz\",\n      \"integrity\": \"sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@emnapi/wasi-threads\": \"1.2.1\",\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@emnapi/runtime\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz\",\n      \"integrity\": \"sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@emnapi/wasi-threads\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz\",\n      \"integrity\": \"sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@ethersproject/abi\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz\",\n      \"integrity\": \"sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/constants\": \"^5.8.0\",\n        \"@ethersproject/hash\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/abstract-provider\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz\",\n      \"integrity\": \"sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/networks\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/transactions\": \"^5.8.0\",\n        \"@ethersproject/web\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/abstract-signer\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz\",\n      \"integrity\": \"sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abstract-provider\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/address\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz\",\n      \"integrity\": \"sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/rlp\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/base64\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz\",\n      \"integrity\": \"sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/basex\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz\",\n      \"integrity\": \"sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/bignumber\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz\",\n      \"integrity\": \"sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"bn.js\": \"^5.2.1\"\n      }\n    },\n    \"node_modules/@ethersproject/bytes\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz\",\n      \"integrity\": \"sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/constants\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz\",\n      \"integrity\": \"sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bignumber\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/contracts\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz\",\n      \"integrity\": \"sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abi\": \"^5.8.0\",\n        \"@ethersproject/abstract-provider\": \"^5.8.0\",\n        \"@ethersproject/abstract-signer\": \"^5.8.0\",\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/constants\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/transactions\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/hash\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz\",\n      \"integrity\": \"sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abstract-signer\": \"^5.8.0\",\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/base64\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/hdnode\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz\",\n      \"integrity\": \"sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abstract-signer\": \"^5.8.0\",\n        \"@ethersproject/basex\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/pbkdf2\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/sha2\": \"^5.8.0\",\n        \"@ethersproject/signing-key\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\",\n        \"@ethersproject/transactions\": \"^5.8.0\",\n        \"@ethersproject/wordlists\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/json-wallets\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz\",\n      \"integrity\": \"sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abstract-signer\": \"^5.8.0\",\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/hdnode\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/pbkdf2\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/random\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\",\n        \"@ethersproject/transactions\": \"^5.8.0\",\n        \"aes-js\": \"3.0.0\",\n        \"scrypt-js\": \"3.0.1\"\n      }\n    },\n    \"node_modules/@ethersproject/keccak256\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz\",\n      \"integrity\": \"sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"js-sha3\": \"0.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/logger\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz\",\n      \"integrity\": \"sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@ethersproject/networks\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz\",\n      \"integrity\": \"sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/pbkdf2\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz\",\n      \"integrity\": \"sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/sha2\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/properties\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz\",\n      \"integrity\": \"sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/providers\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz\",\n      \"integrity\": \"sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abstract-provider\": \"^5.8.0\",\n        \"@ethersproject/abstract-signer\": \"^5.8.0\",\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/base64\": \"^5.8.0\",\n        \"@ethersproject/basex\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/constants\": \"^5.8.0\",\n        \"@ethersproject/hash\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/networks\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/random\": \"^5.8.0\",\n        \"@ethersproject/rlp\": \"^5.8.0\",\n        \"@ethersproject/sha2\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\",\n        \"@ethersproject/transactions\": \"^5.8.0\",\n        \"@ethersproject/web\": \"^5.8.0\",\n        \"bech32\": \"1.1.4\",\n        \"ws\": \"8.18.0\"\n      }\n    },\n    \"node_modules/@ethersproject/random\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz\",\n      \"integrity\": \"sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/rlp\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz\",\n      \"integrity\": \"sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/sha2\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz\",\n      \"integrity\": \"sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"hash.js\": \"1.1.7\"\n      }\n    },\n    \"node_modules/@ethersproject/signing-key\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz\",\n      \"integrity\": \"sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"bn.js\": \"^5.2.1\",\n        \"elliptic\": \"6.6.1\",\n        \"hash.js\": \"1.1.7\"\n      }\n    },\n    \"node_modules/@ethersproject/solidity\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz\",\n      \"integrity\": \"sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/sha2\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/strings\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz\",\n      \"integrity\": \"sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/constants\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/transactions\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz\",\n      \"integrity\": \"sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/constants\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/rlp\": \"^5.8.0\",\n        \"@ethersproject/signing-key\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/units\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz\",\n      \"integrity\": \"sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/constants\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/wallet\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz\",\n      \"integrity\": \"sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/abstract-provider\": \"^5.8.0\",\n        \"@ethersproject/abstract-signer\": \"^5.8.0\",\n        \"@ethersproject/address\": \"^5.8.0\",\n        \"@ethersproject/bignumber\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/hash\": \"^5.8.0\",\n        \"@ethersproject/hdnode\": \"^5.8.0\",\n        \"@ethersproject/json-wallets\": \"^5.8.0\",\n        \"@ethersproject/keccak256\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/random\": \"^5.8.0\",\n        \"@ethersproject/signing-key\": \"^5.8.0\",\n        \"@ethersproject/transactions\": \"^5.8.0\",\n        \"@ethersproject/wordlists\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/web\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz\",\n      \"integrity\": \"sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/base64\": \"^5.8.0\",\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@ethersproject/wordlists\": {\n      \"version\": \"5.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz\",\n      \"integrity\": \"sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==\",\n      \"funding\": [\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2\"\n        },\n        {\n          \"type\": \"individual\",\n          \"url\": \"https://www.buymeacoffee.com/ricmoo\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ethersproject/bytes\": \"^5.8.0\",\n        \"@ethersproject/hash\": \"^5.8.0\",\n        \"@ethersproject/logger\": \"^5.8.0\",\n        \"@ethersproject/properties\": \"^5.8.0\",\n        \"@ethersproject/strings\": \"^5.8.0\"\n      }\n    },\n    \"node_modules/@jridgewell/sourcemap-codec\": {\n      \"version\": \"1.5.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz\",\n      \"integrity\": \"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@napi-rs/wasm-runtime\": {\n      \"version\": \"1.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz\",\n      \"integrity\": \"sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@tybys/wasm-util\": \"^0.10.1\"\n      },\n      \"funding\": {\n        \"type\": \"github\",\n        \"url\": \"https://github.com/sponsors/Brooooooklyn\"\n      },\n      \"peerDependencies\": {\n        \"@emnapi/core\": \"^1.7.1\",\n        \"@emnapi/runtime\": \"^1.7.1\"\n      }\n    },\n    \"node_modules/@oxc-project/types\": {\n      \"version\": \"0.132.0\",\n      \"resolved\": \"https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz\",\n      \"integrity\": \"sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/Boshen\"\n      }\n    },\n    \"node_modules/@rolldown/binding-android-arm64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz\",\n      \"integrity\": \"sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-darwin-arm64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz\",\n      \"integrity\": \"sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-darwin-x64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz\",\n      \"integrity\": \"sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-freebsd-x64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz\",\n      \"integrity\": \"sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-arm-gnueabihf\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz\",\n      \"integrity\": \"sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-arm64-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-arm64-musl\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz\",\n      \"integrity\": \"sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"musl\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-ppc64-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-s390x-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==\",\n      \"cpu\": [\n        \"s390x\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-x64-gnu\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz\",\n      \"integrity\": \"sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"glibc\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-linux-x64-musl\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz\",\n      \"integrity\": \"sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"libc\": [\n        \"musl\"\n      ],\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-openharmony-arm64\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz\",\n      \"integrity\": \"sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openharmony\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-wasm32-wasi\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz\",\n      \"integrity\": \"sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==\",\n      \"cpu\": [\n        \"wasm32\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@emnapi/core\": \"1.10.0\",\n        \"@emnapi/runtime\": \"1.10.0\",\n        \"@napi-rs/wasm-runtime\": \"^1.1.4\"\n      },\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-win32-arm64-msvc\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz\",\n      \"integrity\": \"sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/binding-win32-x64-msvc\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz\",\n      \"integrity\": \"sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \"^20.19.0 || >=22.12.0\"\n      }\n    },\n    \"node_modules/@rolldown/pluginutils\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz\",\n      \"integrity\": \"sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@standard-schema/spec\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz\",\n      \"integrity\": \"sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@tybys/wasm-util\": {\n      \"version\": \"0.10.2\",\n      \"resolved\": \"https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz\",\n      \"integrity\": \"sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@types/chai\": {\n      \"version\": \"5.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz\",\n      \"integrity\": \"sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/deep-eql\": \"*\",\n        \"assertion-error\": \"^2.0.1\"\n      }\n    },\n    \"node_modules/@types/deep-eql\": {\n      \"version\": \"4.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz\",\n      \"integrity\": \"sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@types/estree\": {\n      \"version\": \"1.0.9\",\n      \"resolved\": \"https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz\",\n      \"integrity\": \"sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@vitest/expect\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/expect/-/expect-4.1.7.tgz\",\n      \"integrity\": \"sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@standard-schema/spec\": \"^1.1.0\",\n        \"@types/chai\": \"^5.2.2\",\n        \"@vitest/spy\": \"4.1.7\",\n        \"@vitest/utils\": \"4.1.7\",\n        \"chai\": \"^6.2.2\",\n        \"tinyrainbow\": \"^3.1.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/mocker\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.7.tgz\",\n      \"integrity\": \"sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/spy\": \"4.1.7\",\n        \"estree-walker\": \"^3.0.3\",\n        \"magic-string\": \"^0.30.21\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      },\n      \"peerDependencies\": {\n        \"msw\": \"^2.4.9\",\n        \"vite\": \"^6.0.0 || ^7.0.0 || ^8.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"msw\": {\n          \"optional\": true\n        },\n        \"vite\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@vitest/pretty-format\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.7.tgz\",\n      \"integrity\": \"sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"tinyrainbow\": \"^3.1.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/runner\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/runner/-/runner-4.1.7.tgz\",\n      \"integrity\": \"sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/utils\": \"4.1.7\",\n        \"pathe\": \"^2.0.3\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/snapshot\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.7.tgz\",\n      \"integrity\": \"sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/pretty-format\": \"4.1.7\",\n        \"@vitest/utils\": \"4.1.7\",\n        \"magic-string\": \"^0.30.21\",\n        \"pathe\": \"^2.0.3\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/spy\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/spy/-/spy-4.1.7.tgz\",\n      \"integrity\": \"sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/@vitest/utils\": {\n      \"version\": \"4.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/@vitest/utils/-/utils-4.1.7.tgz\",\n      \"integrity\": \"sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@vitest/pretty-format\": \"4.1.7\",\n        \"convert-source-map\": \"^2.0.0\",\n        \"tinyrainbow\": \"^3.1.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/vitest\"\n      }\n    },\n    \"node_modules/aes-js\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz\",\n      \"integrity\": \"sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/ansi-regex\": {\n      \"version\": \"6.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz\",\n      \"integrity\": \"sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/ansi-regex?sponsor=1\"\n      }\n    },\n    \"node_modules/arkregex\": {\n      \"version\": \"0.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/arkregex/-/arkregex-0.0.5.tgz\",\n      \"integrity\": \"sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ark/util\": \"0.56.0\"\n      }\n    },\n    \"node_modules/arktype\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/arktype/-/arktype-2.2.0.tgz\",\n      \"integrity\": \"sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@ark/schema\": \"0.56.0\",\n        \"@ark/util\": \"0.56.0\",\n        \"arkregex\": \"0.0.5\"\n      }\n    },\n    \"node_modules/assertion-error\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz\",\n      \"integrity\": \"sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/asynckit\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz\",\n      \"integrity\": \"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/bech32\": {\n      \"version\": \"1.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz\",\n      \"integrity\": \"sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/bn.js\": {\n      \"version\": \"5.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz\",\n      \"integrity\": \"sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/brorand\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz\",\n      \"integrity\": \"sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/call-bind-apply-helpers\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz\",\n      \"integrity\": \"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"es-errors\": \"^1.3.0\",\n        \"function-bind\": \"^1.1.2\"\n      },\n      \"engines\": {\n        \"node\": \">= 0.4\"\n      }\n    },\n    \"node_modules/chai\": {\n      \"version\": \"6.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/chai/-/chai-6.2.2.tgz\",\n      \"integrity\": \"sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/chalk\": {\n      \"version\": \"5.6.2\",\n      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz\",\n      \"integrity\": \"sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \"^12.17.0 || ^14.13 || >=16.0.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/chalk?sponsor=1\"\n      }\n    },\n    \"node_modules/clawhub\": {\n      \"version\": \"0.18.0\",\n      \"resolved\": \"https://registry.npmjs.org/clawhub/-/clawhub-0.18.0.tgz\",\n      \"integrity\": \"sha512-3hh1ii0Ecp64pHKIgshyf0FheTcojs525Amo/tSl97RciUwuaLm7WghSDcpNJQMZV/iwpXfEcSk8gLXQvuHXBA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@clack/prompts\": \"1.4.0\",\n        \"arktype\": \"2.2.0\",\n        \"commander\": \"14.0.3\",\n        \"fflate\": \"0.8.3\",\n        \"ignore\": \"7.0.5\",\n        \"json5\": \"2.2.3\",\n        \"mime\": \"4.1.0\",\n        \"ora\": \"9.4.0\",\n        \"p-retry\": \"8.0.0\",\n        \"semver\": \"7.8.1\",\n        \"undici\": \"7.26.0\"\n      },\n      \"bin\": {\n        \"clawdhub\": \"bin/clawdhub.js\",\n        \"clawhub\": \"bin/clawdhub.js\"\n      },\n      \"engines\": {\n        \"node\": \">=20\"\n      }\n    },\n    \"node_modules/cli-cursor\": {\n      \"version\": \"5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz\",\n      \"integrity\": \"sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"restore-cursor\": \"^5.0.0\"\n      },\n      \"en\n\nFile v1.3.0:package.json\n\n{\n  \"name\": \"@hodl-dance/skill\",\n  \"version\": \"1.3.0\",\n  \"description\": \"AI Agent Skill for HODL.DANCE — memecoin launchpad on BSC\",\n  \"main\": \"src/index.js\",\n  \"bin\": {\n    \"hodl-skill\": \"src/index.js\"\n  },\n  \"keywords\": [\n    \"hodl-dance\",\n    \"memecoin\",\n    \"bsc\",\n    \"bonding-curve\",\n    \"ai-agent\",\n    \"skill\",\n    \"defi\"\n  ],\n  \"author\": \"HODL.DANCE\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"clawhub\": \"^0.18.0\",\n    \"ethers\": \"^5.8.0\",\n    \"form-data\": \"^4.0.5\",\n    \"node-fetch\": \"^2.7.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/hodldance/agent-skill\"\n  },\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"cli\": \"node src/index.js\",\n    \"build\": \"node scripts/build.js\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"version\": \"nod\n\nArchive v1.2.1: 17 files, 19338 bytes\n\nFiles: package-lock.json (14510b), package.json (627b), README.md (2307b), SKILL.md (7342b), src/abi/BondingCurve.json (2760b), src/commands/buy-token.js (2673b), src/commands/create-token.js (4846b), src/commands/get-token.js (421b), src/commands/get-tokens.js (753b), src/commands/get-trades.js (729b), src/commands/quote.js (1591b), src/commands/sell-token.js (3636b), src/index.js (1024b), src/lib/api.js (549b), src/lib/chain.js (1930b), src/lib/output.js (303b), _meta.json (129b)\n\nArchive v1.1.0: 16 files, 13743 bytes\n\nFiles: package-lock.json (4221b), package.json (540b), README.md (1779b), SKILL.md (5554b), src/abi/BondingCurve.json (2760b), src/commands/buy-token.js (2673b), src/commands/get-token.js (421b), src/commands/get-tokens.js (753b), src/commands/get-trades.js (729b), src/commands/quote.js (1591b), src/commands/sell-token.js (3636b), src/index.js (980b), src/lib/api.js (549b), src/lib/chain.js (1930b), src/lib/output.js (303b), _meta.json (129b)","readmeExcerpt":"Skill: Hodl Dance Skill Owner: hodldance Summary: Trade, 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... Tags: bonding-curve:1.1.0, bsc:1.1.0, defi:1.1.0, latest:1.3.1, memecoin:1.1.0, trading:1.1.0 Version history: v1.3.1 | 2026-05-27T00:38:06.142Z | user Fix: ethers dependency (v5 → v6). Version 1.3.0 was broke","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"npm install -g @hodl-dance/skill\n# or without installing:\nnpx @hodl-dance/skill <command>"},{"language":"bash","snippet":"export HODL_PRIVATE_KEY=0xyour_private_key\nexport HODL_RPC_URL=https://bsc-dataseed.binance.org/  # optional"},{"language":"bash","snippet":"hodl-skill get-tokens\nhodl-skill get-tokens --sort=market_cap --limit=10\nhodl-skill get-tokens --sort=volume --verified=true\nhodl-skill get-tokens --sort=progress --finalized=false\nhodl-skill get-tokens --search=pepe --limit=5"},{"language":"bash","snippet":"hodl-skill get-token 0x1a2b3c..."},{"language":"bash","snippet":"hodl-skill get-trades 0x1a2b3c...\nhodl-skill get-trades 0x1a2b3c... --type=buy --limit=20"},{"language":"bash","snippet":"# How many tokens will I get for 0.1 BNB?\nhodl-skill quote 0xbc1234... buy 0.1\n\n# How much BNB will I get for selling 500000 tokens?\nhodl-skill quote 0xbc1234... sell 500000"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"# HODL.DANCE Agent Skill\n\nTrade memecoins on the [HODL.DANCE](https://hodl.dance) bonding curve launchpad on BSC (BNB Chain).\n\n## Overview\n\nHODL.DANCE is a memecoin launchpad on BSC using a CPMM bonding curve (r × t = k).\nTokens trade on the curve until 19 BNB is raised, then liquidity auto-migrates to PancakeSwap V3.\n\n- **Network:** BSC Mainnet (Chain ID: 56)\n- **Native currency:** BNB\n- **Fee:** 1% per trade (buy and sell)\n- **API:** [https://hodl.dance/api](https://hodl.dance/api) (public, no API key required)\n- **Docs:** [https://docs.hodl.dance](https://docs.hodl.dance)\n\n## Installation\n\n```bash\nnpm install -g @hodl-dance/skill\n# or without installing:\nnpx @hodl-dance/skill <command>\n```\n\n## Credentials\n\nRequired only for `create-token`, `buy-token` and `sell-token`:\n\n```bash\nexport HODL_PRIVATE_KEY=0xyour_private_key\nexport HODL_RPC_URL=https://bsc-dataseed.binance.org/  # optional\n```\n\n> ⚠️ The private key is used locally only to sign transactions. Never share it.\n\n---\n\n## Commands\n\n### `get-tokens`\n\nList tokens with filtering and sorting. Returns full token objects including `bonding_curve_address`.\n\n```bash\nhodl-skill get-tokens\nhodl-skill get-tokens --sort=market_cap --limit=10\nhodl-skill get-tokens --sort=volume --verified=true\nhodl-skill get-tokens --sort=progress --finalized=false\nhodl-skill get-tokens --search=pepe --limit=5\n```\n\n**Options:** `--sort=newest|market_cap|progress|volume` · `--limit=N` (max 100) · `--offset=N` · `--verified=true|false` · `--finalized=true|false` · `--search=<text>`\n\n**Key output fields per token:**\n- `address` — token contract address\n- `bonding_curve_address` — ⭐ use this in quote/buy-token/sell-token\n- `market_cap_usd`, `progress_percent` (0–100 toward PancakeSwap migration)\n- `finalized` — if true, bonding curve is closed, token is on PancakeSwap V3\n- `price_change_24h`, `trades_24h`, `volume_24h_bnb`\n\n---\n\n### `get-token <tokenAddress>`\n\nFull token details + 20 most recent trades.\n\n```bash\nhodl-skill get-token 0x1a2b3c...\n```\n\nReturns same fields as `get-tokens` plus `recent_trades[]`.\n\n---\n\n### `get-trades <tokenAddress>`\n\nTrade history for a specific token.\n\n```bash\nhodl-skill get-trades 0x1a2b3c...\nhodl-skill get-trades 0x1a2b3c... --type=buy --limit=20\n```\n\n**Options:** `--type=all|buy|sell` · `--limit=N` (max 500) · `--offset=N`\n\n---\n\n### `quote <bondingCurveAddress> buy|sell <amount>`\n\n**Simulate** trade output using live on-chain state. No transaction sent, no gas used.\n\n```bash\n# How many tokens will I get for 0.1 BNB?\nhodl-skill quote 0xbc1234... buy 0.1\n\n# How much BNB will I get for selling 500000 tokens?\nhodl-skill quote 0xbc1234... sell 500000\n```\n\n> Always run `quote` before `buy-token` or `sell-token` to verify expected amounts.\n\n---\n\n### `create-token`\n\nDeploy a new token + bonding curve on HODL.DANCE. Uploads logo to IPFS, then sends on-chain transaction.\n\n```bash\nhodl-skill create-token --name=\"Moon Cat\" --symbol=MCAT --logo=./logo.png\n\nhodl-skill create-token \\\n  --name=\"Moon Cat\""},{"path":"README.md","content":"# 🪩 HODL.DANCE Agent Skill\n\n**Official CLI skill for AI agents and trading bots to interact with [HODL.DANCE](https://hodl.dance) — the memecoin bonding curve launchpad on BSC.**\n\n[![Version](https://img.shields.io/badge/version-1.3.0-1d9bf0)](https://www.npmjs.com/package/@hodl-dance/skill)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node](https://img.shields.io/badge/Node-%3E%3D18-green)](https://nodejs.org/)\n\n---\n\n## The Problem\n\nMost AI agents and trading bots want to trade memecoins on emerging launchpads, but:\n\n- Bonding curve mechanics are complex to simulate correctly\n- On-chain trading requires careful handling of approvals, gas, and errors\n- Public APIs give data, but executing trades reliably is painful\n- Most tools are built for humans, not autonomous agents\n\n---\n\n## The Solution\n\n**@hodl-dance/skill** gives agents a clean, reliable, JSON-first interface to HODL.DANCE.\n\n- Read market data, token details, and trade history\n- Simulate buys and sells instantly (no gas, no transactions)\n- Execute real buys and sells with automatic ERC20 approvals\n- Launch new tokens directly from code or agents\n\n**Built for agents. Works great for humans too.**\n\n---\n\n## ✨ Key Features\n\n- **Pure JSON output** — Every command returns structured, machine-readable JSON\n- **Gas-free simulations** — `quote` command uses on-chain state to predict exact output\n- **Automatic approvals** — `sell-token` handles ERC20 `approve` when needed\n- **Zero dependencies for reads** — Public commands work without any wallet or keys\n- **Agent-native** — Designed for 8004 agents, ClawHub, and autonomous systems\n- **Windows + Linux friendly** — Stable on both WSL and native Windows\n\n---\n\n## 🤖 AI Agents & 8004 Integration\n\nThis skill is the **official on-chain execution layer** for HODL.DANCE agents.\n\nIt is referenced in the platform's agent manifest:\n\n- [Agent Card](https://hodl.dance/.well-known/agent-card.json)\n- [OpenAPI Spec](https://hodl.dance/.well-known/openapi.json)\n\n### Example Agent ID on 8004\n- [HODL.DANCE Agent #96231](https://8004scan.io/agents/bsc/96231)\n\n### Supported Workflows for Agents\n\n```bash\n# 1. Discovery\nhodl-skill get-tokens --sort=volume --limit=10\n\n# 2. Analysis\nhodl-skill get-token <tokenAddress>\nhodl-skill get-trades <tokenAddress> --type=buy --limit=20\n\n# 3. Simulation (free)\nhodl-skill quote <bondingCurveAddress> buy 0.1\n\n# 4. Execution\nhodl-skill buy-token <bondingCurveAddress> 0.1\nhodl-skill sell-token <bondingCurveAddress> <amount>\n```\n\nMore integration examples and agent card details: [docs.hodl.dance](https://docs.hodl.dance)\n\n---\n\n## 🚀 Installation\n\n```bash\nnpm install -g @hodl-dance/skill\n```\n\nOr run without installing:\n\n```bash\nnpx @hodl-dance/skill <command>\n```\n\n### Requirements\n\n- Node.js ≥ 18\n- For write commands (`buy`, `sell`, `create`): `HODL_PRIVATE_KEY` environment variable\n\n---\n\n## 📖 Usage\n\n### Read Commands (no wallet required)\n\n```bash\n# List tokens\nhodl-skill "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70cw47asswh3p18g11rrjen586tg1s\",\n  \"slug\": \"hodl-dance\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1779842286142\n}"},{"path":"CHANGELOG.md","content":"# Changelog\n\nAll notable changes to `@hodl-dance/skill` will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n---\n\n## [1.3.0] - 2026-05-27\n\n### Added\n- Full support for AI agent workflows and 8004 ecosystem integration\n- New modern README with Problem/Solution structure and dedicated \"AI Agents & 8004 Integration\" section\n- `CHANGELOG.md` for proper release tracking\n- Basic address validation for all commands accepting Ethereum addresses (`get-token`, `get-trades`, `quote`, `buy-token`, `sell-token`)\n- `stripMongoFields()` helper to consistently remove internal `_id` and `__v` fields from all public JSON output\n\n### Changed\n- **Breaking for output consumers**: `get-token`, `get-trades`, and nested trades now return clean objects without MongoDB internal fields (`_id`, `__v`)\n- Improved Windows compatibility: replaced direct `process.exit()` calls with `process.exitCode` pattern to prevent libuv `UV_HANDLE_CLOSING` assertion crashes when output is captured\n- Better error messages when invalid addresses are provided (now returns clear `INVALID_ARG` instead of downstream contract errors)\n- Updated `get-tokens` to use the new sanitization helper for consistency\n\n### Fixed\n- Critical bug: CLI would crash with native assertion on Windows after every successful command when stdout was piped or captured (common in agent environments)\n- Inconsistent presence of MongoDB metadata in JSON responses\n\n### Technical\n- Added `src/lib/validators.js` for reusable address validation\n- Refactored output handling in `src/lib/output.js` and `src/index.js`\n\n---\n\n## [1.2.1] - Previous\n\n- Documentation updates\n- Minor fixes for `create-token` command\n\n---\n\n## [1.2.0]\n\n- Added `create-token` command (token deployment + logo upload + optional initial buy)\n\n---\n\n## [1.1.0]\n\n- Initial public release\n- Commands: `get-tokens`, `get-token`, `get-trades`, `quote`, `buy-token`, `sell-token`\n\n[1.3.0]: https://github.com/hodldance/agent-skill/compare/v1.2.1...v1.3.0"},{"path":"skill-card.md","content":"## Description:\n\nHelps agents read HODL.DANCE market data, simulate bonding-curve trades, execute BNB/token trades, and launch memecoins on the HODL.DANCE BSC launchpad.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[hodldance](https://clawhub.ai/user/hodldance)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent operators use this skill to give agents a JSON-first CLI for discovering HODL.DANCE tokens, quoting bonding-curve trades, executing buy/sell transactions, and creating new tokens on BNB Chain.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Write commands can spend real BNB, deploy tokens, approve token transfers, or sell tokens when a private key is configured.\n\nMitigation: Use a dedicated low-value wallet, run read and quote commands first, and require human approval with strict amount limits before buy-token, sell-token, or create-token.\n\nRisk: The create-token command uploads a local logo file and token metadata.\n\nMitigation: Restrict logo paths to an approved directory and review metadata before allowing an agent to run create-token.\n\nRisk: Unpinned npx execution may install a package version other than the reviewed release.\n\nMitigation: Pin @hodl-dance/skill to version 1.3.1 or install from a locked package source.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/hodldance/skills/hodl-dance)\n- [HODL.DANCE Documentation](https://docs.hodl.dance)\n- [HODL.DANCE API](https://hodl.dance/api)\n- [HODL.DANCE Agent Card](https://hodl.dance/.well-known/agent-card.json)\n- [HODL.DANCE OpenAPI Spec](https://hodl.dance/.well-known/openapi.json)\n- [NPM Package](https://www.npmjs.com/package/@hodl-dance/skill)\n\n## Skill Output:\n\n**Output Type(s):** [JSON, Shell commands, Configuration]\n\n**Output Format:** [JSON to stdout, with command-line usage and environment variable guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Write commands require HODL_PRIVATE_KEY and can submit BNB Chain transactions; read and quote commands do not require a wallet.]\n\n## Skill Version(s):\n\n1.3.1 (source: server release metadata; artifact package.json and CHANGELOG report 1.3.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Trade, 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... Skill: Hodl Dance Skill Owner: hodldance Summary: Trade, 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... Tags: bonding-curve:1.1.0, bsc:1.1.0, defi:1.1.0, latest:1.3.1, memecoin:1.1.0, trading:1.1.0 Version history: v1.3.1 | 2026-05-27T00:38:06.142Z | user Fix: ethers dependency (v5 → v6). Version 1.3.0 was broke","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1531,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T20:45:10.891Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T20:45:10.891Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-14T16:02:38.763Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}