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.

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/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"
OpenClaw · Install into ~/.openclaw/skills/
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"
manifest: skills/arunnadarasa/dancearc/SKILL.md
source content

DanceTech 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

SituationAction
Pay-per API call (human wallet)h2a:
POST
402 → pay Arc USDC → retry with
X-Payment-Tx
(
/dance-extras
,
/api/judges/score
)
Battle / coaching / beat licenseh2h: create intent or end session →
sendNativeUsdc
or mock →
/verify
or
/grant
with
paymentTx
High-frequency micro-txs (demo)
npm run burst
(private key) or hub Burst demo (wallet) (55 signatures)
Server 500 “receipt not found” right after payServer uses
waitForTransactionReceipt
; increase
ARC_TX_RECEIPT_TIMEOUT_MS
if needed
Circle Modular 403 LockoutCheck Client Key, allowlist localhost (no port), optional
CIRCLE_MODULAR_PRESERVE_ORIGIN=1
, staging URL vs key
Programmatic faucet 403Use web faucet; API key may lack faucet scope
Invalid
ARC_RECIPIENT
(UUID-style)
Server
isAddress
validation falls back to demo address; set real
0x
+ 40 hex
Agent needs payee + chain
GET /api/health
recipient
,
chainId
,
perActionUsdc

Protocol matrix (h2h · h2a · a2a · a2h)

ModeAcronymWho paysWho receivesDanceArc surface
Human → Humanh2hPersonPerson/treasury (
ARC_RECIPIENT
)
/battle
,
/coaching
,
/beats
Human → Agenth2aPerson (wallet)API/resource owner
/dance-extras
,
/api/judges/score
Agent → Agenta2aAutomated signerAnother serviceDesigned: headless key / smart account; demo: burst scripts
Agent → Humana2hService/treasuryPersonPayout 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
  • npm run burst
    , transaction frequency demo

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)

PathRole
server/index.js
Routes,
requireArcPayment
, proxies
server/payments.js
Intents, coaching, beats
server/onchain-verify.js
Receipt wait + validation
server/config.js
ARC_RECIPIENT
validation (
isAddress
)
src/payArc.ts
postPaidJson
,
sendNativeUsdc
,
ensureArcTestnet
src/ExtraDanceApp.tsx
h2a UI + ArcScan link
src/BattleApp.tsx
,
CoachingApp.tsx
,
BeatsApp.tsx
h2h flows

Environment (minimum viable)

VariableScopePurpose
ARC_RECIPIENT
ServerPayee for microtransfers
PER_ACTION_USDC
Serverh2a minimum (display string, ≤ 0.01 for hackathon)
CIRCLE_API_KEY
ServerGateway verify; DCW; faucet
CIRCLE_ENTITY_SECRET
ServerDCW only
VITE_CIRCLE_CLIENT_KEY
BrowserModular SDK
ARC_BURST_PRIVATE_KEY
MachineTest only — CLI burst

Never commit

.env
. Copy from
.env.example
.

Detection triggers (support / debugging)

SignalLikely causeFirst check
TransactionReceiptNotFoundError
Race before inclusionServer
waitForTransactionReceipt
; client retry
403 HTML Lockout (Modular)Key / domain / WAFConsole allowlist,
CIRCLE_MODULAR_PRESERVE_ORIGIN
invalid_recipient
in UI
Bad envFix
ARC_RECIPIENT
, new intent
402 after paymentWrong recipient/amount/chainExplorer tx vs challenge
payTo
/
maxAmountRequired
Faucet
Forbidden
Circle policy / scopesWeb 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
    +
    GET /api/nanopayments/events
    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.

Multi-agent notes

  • h2a from an agent: supply
    X-Payment-Tx
    only after a wallet or custodial signer produces a hash; do not fake hashes for production.
  • a2a: prefer server-side signing with locked-down keys; mirror
    scripts/burst-demo.mjs
    patterns.
  • Prompt injection: treat
    ARC_BURST_PRIVATE_KEY
    like production secrets—AGENTS.md should forbid echoing it into browser context.

References (this skill)

FileContent
references/api-routes.md
HTTP route map
references/payment-flow.md
402 + verify sequence
references/openclaw-workspace.md
Suggested AGENTS.md / TOOLS.md snippets

Promotion targets (from learnings)

If you maintain

.learnings/
for this project:

Learning typePromote to
Arc / Circle env gotchas
CLAUDE.md
, TOOLS.md
Two-step payment for agentsAGENTS.md
Product pitch / protocol wording
README.md
, demo script

Quality gates (before demo or publish)

  • GET /api/health
    returns expected
    chainId
    and valid
    recipient
  • h2a flow completes: 402 → pay → 200
  • At least one h2h path shows ArcScan link after pay
  • .env
    not in git;
    .env.example
    updated for new vars
  • npm run build
    passes

Related

Source

  • Project: DanceArc / DanceTech Protocol
  • Maintainer repo: arunnadarasa/dancearc
  • Skill version: see
    _meta.json