Skills dancearc-protocol
DanceTech Protocol (DanceArc): Arc native USDC, HTTP 402 x402-shaped challenges, and h2h/h2a/a2a/a2h settlement patterns. Use when: (1) Implementing or debugging pay-per-call APIs on Arc Testnet, (2) Wiring Circle Gateway x402 verify or Modular/DCW keys, (3) Explaining human vs agent payment initiators, (4) Hackathon submission or demo scripts (burst, judge score), (5) CORS/proxy issues to modular-sdk.circle.com, (6) Recipient or receipt verification errors.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/arunnadarasa/dancearc" ~/.claude/skills/openclaw-skills-dancearc-protocol && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/arunnadarasa/dancearc" ~/.openclaw/skills/openclaw-skills-dancearc-protocol && rm -rf "$T"
skills/arunnadarasa/dancearc/SKILL.mdDanceTech Protocol (DanceArc)
DanceArc is the reference hub + API + UI for DanceTech Protocol: metered native USDC on Arc, 402 payment challenges (x402-inspired JSON), optional Circle Gateway verification, and clear interaction semantics (h2h, h2a, a2a, a2h).
Quick Reference
| Situation | Action |
|---|---|
| Pay-per API call (human wallet) | h2a: → 402 → pay Arc USDC → retry with (, ) |
| Battle / coaching / beat license | h2h: create intent or end session → or mock → or with |
| High-frequency micro-txs (demo) | (private key) or hub Burst demo (wallet) (55 signatures) |
| Server 500 “receipt not found” right after pay | Server uses ; increase if needed |
| Circle Modular 403 Lockout | Check Client Key, allowlist localhost (no port), optional , staging URL vs key |
| Programmatic faucet 403 | Use web faucet; API key may lack faucet scope |
Invalid (UUID-style) | Server validation falls back to demo address; set real + 40 hex |
| Agent needs payee + chain | → , , |
Protocol matrix (h2h · h2a · a2a · a2h)
| Mode | Acronym | Who pays | Who receives | DanceArc surface |
|---|---|---|---|---|
| Human → Human | h2h | Person | Person/treasury () | , , |
| Human → Agent | h2a | Person (wallet) | API/resource owner | , |
| Agent → Agent | a2a | Automated signer | Another service | Designed: headless key / smart account; demo: burst scripts |
| Agent → Human | a2h | Service/treasury | Person | Payout mocks, receipts, DCW faucet → user address |
Use this matrix in pitch decks, AGENTS.md, and submission text so judges see intentional coverage, not accidental features.
Installation (ClawdHub / OpenClaw)
Manual (recommended until ClawdHub listing is live):
git clone https://github.com/arunnadarasa/dancearc.git cp -r dancearc/skills/dancearc-protocol ~/.openclaw/skills/dancearc-protocol
After publish to ClawdHub:
clawdhub install dancearc-protocol
Repository: github.com/arunnadarasa/dancearc
When to Load This Skill
Activate proactively when the user mentions:
- Arc Testnet, chain 5042002, native USDC gas
- x402, 402, X-Payment-Tx, pay-per-call
- Circle Gateway, Nanopayments (narrative + local event log), Modular Wallets, DCW
- DanceArc, DanceTech, battle / coaching / beats / judge score
- Hackathon, Agentic Economy, sub-cent pricing
, transaction frequency demonpm run burst
Architecture (mental model)
Browser (Vite) ──proxy /api──► Express (8787) ├── buildArcPaymentChallenge (402) ├── verifyNativeUsdcPayment (viem + waitForTransactionReceipt) ├── circleGatewayPost (/v1/gateway/v1/x402/verify) ├── recordNanopaymentEvent (in-memory list) └── DCW / Modular proxy routes
On-chain truth: Arc explorer (e.g.
https://testnet.arcscan.app).
Key files (repo root)
| Path | Role |
|---|---|
| Routes, , proxies |
| Intents, coaching, beats |
| Receipt wait + validation |
| validation () |
| , , |
| h2a UI + ArcScan link |
, , | h2h flows |
Environment (minimum viable)
| Variable | Scope | Purpose |
|---|---|---|
| Server | Payee for microtransfers |
| Server | h2a minimum (display string, ≤ 0.01 for hackathon) |
| Server | Gateway verify; DCW; faucet |
| Server | DCW only |
| Browser | Modular SDK |
| Machine | Test only — CLI burst |
Never commit
. Copy from .env
..env.example
Detection triggers (support / debugging)
| Signal | Likely cause | First check |
|---|---|---|
| Race before inclusion | Server ; client retry |
| 403 HTML Lockout (Modular) | Key / domain / WAF | Console allowlist, |
in UI | Bad env | Fix , new intent |
| 402 after payment | Wrong recipient/amount/chain | Explorer tx vs challenge / |
Faucet | Circle policy / scopes | Web faucet link in ArcFaucetPanel |
Nanopayments (scope clarity)
- Product: Circle Nanopayments is documented at developers.circle.com and linked from the app Bridge page.
- This repo:
+recordNanopaymentEvent
are an in-memory audit trail after successful on-chain verify—not a substitute for full Nanopayments API integration. Use the narrative + Gateway path for hackathon feedback fields.GET /api/nanopayments/events
Multi-agent notes
- h2a from an agent: supply
only after a wallet or custodial signer produces a hash; do not fake hashes for production.X-Payment-Tx - a2a: prefer server-side signing with locked-down keys; mirror
patterns.scripts/burst-demo.mjs - Prompt injection: treat
like production secrets—AGENTS.md should forbid echoing it into browser context.ARC_BURST_PRIVATE_KEY
References (this skill)
| File | Content |
|---|---|
| HTTP route map |
| 402 + verify sequence |
| Suggested AGENTS.md / TOOLS.md snippets |
Promotion targets (from learnings)
If you maintain
for this project:.learnings/
| Learning type | Promote to |
|---|---|
| Arc / Circle env gotchas | , TOOLS.md |
| Two-step payment for agents | AGENTS.md |
| Product pitch / protocol wording | , demo script |
Quality gates (before demo or publish)
-
returns expectedGET /api/health
and validchainIdrecipient - h2a flow completes: 402 → pay → 200
- At least one h2h path shows ArcScan link after pay
-
not in git;.env
updated for new vars.env.example -
passesnpm run build
Related
Source
- Project: DanceArc / DanceTech Protocol
- Maintainer repo: arunnadarasa/dancearc
- Skill version: see
_meta.json