{
  "schemaVersion": "1.0",
  "item": {
    "slug": "krumpverify",
    "name": "Clawhub Krump Verify",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/arunnadarasa/krumpverify",
    "canonicalUrl": "https://clawhub.ai/arunnadarasa/krumpverify",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/krumpverify",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=krumpverify",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/krumpverify"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/krumpverify",
    "agentPageUrl": "https://openagent3.xyz/skills/krumpverify/agent",
    "manifestUrl": "https://openagent3.xyz/skills/krumpverify/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/krumpverify/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ClawHub & Krump Verify for Agents",
        "body": "Use this skill when working with ClawHub and Krump Verify: on-chain verification of dance moves against registered Story IP, with payment in USDC.k or via x402/EVVM payment receipts. Agents can perform verifications autonomously; humans can audit on-chain.\n\nBuilding a similar app? See docs/BUILDING_WITH_EVVM_X402_STORY_AENEID.md for step-by-step EVVM/x402/USDC.k on Story Aeneid: architecture, failures (EVVM payment failed, IP registry, funding UX), and fixes."
      },
      {
        "title": "What Krump Verify Does",
        "body": "Verification: Prove a move (hash of move/video data) against a registered Story IP asset. Fee is paid to treasury; a receipt is recorded on-chain and Verified(ipId, verifier, receiptHash, timestamp) is emitted.\nChain: Story Aeneid (chain ID 1315). Explorer: https://aeneid.storyscan.io.\nFee: USDC.k (6 decimals). Default verificationFee = 1e6 (1 USDC.k). Read from contract verificationFee()."
      },
      {
        "title": "1. Direct (wallet pays on-chain)",
        "body": "User/agent approves USDC.k for KrumpVerify: approve(KrumpVerify, verificationFee) on USDC.k contract.\nCall verifyMove(ipId, moveDataHash, proof) on KrumpVerify. Contract does transferFrom(msg.sender, treasury, verificationFee) then records receipt."
      },
      {
        "title": "2. Receipt (x402 / EVVM; agent-friendly)",
        "body": "Fund EVVM (one-time per payer): Approve USDC.k for EVVM Treasury, then call Treasury.deposit(USDC.k, amount) so the payer has EVVM internal balance.\nSign x402 + EVVM: User signs EIP-712 TransferWithAuthorization (domain = adapter) and an EVVM message: hash payload must include \"pay\" and (to, '', token, amount, 0n); executor address(0); use getNextCurrentSyncNonce(payer) and isAsyncExec: false.\nRelayer (with RECEIPT_SUBMITTER_ROLE) calls adapter payViaEVVMWithX402(...) then submitPaymentReceipt(receiptId, payer, amount).\nPayer calls verifyMoveWithReceipt(ipId, moveDataHash, proof, paymentReceiptId). No on-chain transfer; receipt is consumed once. msg.sender must equal the receipt’s payer.\n\nUse the receipt flow when the agent or user has already paid via x402 and has a receiptId (bytes32) to use."
      },
      {
        "title": "EVVM / x402 Pitfalls (Reference)",
        "body": "\"EVVM payment failed\" on adapter: Hash payload must encode \"pay\" then (to, identity, token, amount, priorityFee); executor must be 0x0; use sync nonce from Core and isAsyncExec: false.\n\"IP registry not set\": Contract’s IP Asset Registry (and License/Royalty if used) must be set at deploy or via setter.\nNo EVVM balance: Payer must complete Fund EVVM (approve + deposit to EVVM Treasury) before Pay via x402."
      },
      {
        "title": "Key Data Shapes",
        "body": "TermTypeDescriptionipIdaddressStory IP account address (from IP Asset Registry). Must be registered.moveDataHashbytes32keccak256 of move/video data (e.g. keccak256(toHex(utf8MoveData))).proofbytesOptional; e.g. signature or reference. Can be 0x.paymentReceiptId / receiptIdbytes32For receipt flow: id of the payment receipt submitted by relayer (0x + 64 hex).receiptHashbytes32Returned from verify; unique per (ipId, verifier, moveDataHash, timestamp, fee, proof)."
      },
      {
        "title": "Contract Surface (KrumpVerify)",
        "body": "Read: verificationFee(), paymentReceipts(bytes32) → (payer, amount, used), receiptUsed(bytes32).\nWrite (anyone): verifyMove(ipId, moveDataHash, proof), verifyMoveWithReceipt(ipId, moveDataHash, proof, paymentReceiptId).\nWrite (RECEIPT_SUBMITTER_ROLE): submitPaymentReceipt(receiptId, payer, amount).\nEvents: Verified(ipId, verifier, receiptHash, timestamp), PaymentReceiptSubmitted(receiptId, payer, amount).\n\nAgents can discover a user’s unused receipts by querying PaymentReceiptSubmitted(payer=user) and filtering with paymentReceipts(receiptId).used == false."
      },
      {
        "title": "Default Addresses (Story Aeneid)",
        "body": "KrumpVerify: 0x012eD5BfDd306Fa7e959383A8dD63213b7c7AeA5 (override with VITE_KRUMP_VERIFY_ADDRESS).\nKrumpVerifyNFT: 0x602789919332d242A1Cb70d462CEbb570a53A6Ac.\nKrumpTreasury: 0xa2e9245cE7D7B89554E86334a76fbE6ac5dc4617.\nUSDC.k: 0xd35890acdf3BFFd445C2c7fC57231bDE5cAFbde5.\nEVVM Treasury: 0x977126dd6B03cAa3A87532784E6B7757aBc9C1cc.\nEVVM Core: 0xa6a02E8e17b819328DDB16A0ad31dD83Dd14BA3b. EVVM Native x402 Adapter: 0xDf5eaED856c2f8f6930d5F3A5BCE5b5d7E4C73cc."
      },
      {
        "title": "Relayer",
        "body": "Local: relayer/ — RELAYER_PRIVATE_KEY, KRUMP_VERIFY_ADDRESS; runs on port 7350. Frontend VITE_X402_RELAYER_URL for local: http://localhost:7350.\nProduction: Fly.io app krump-x402-relayer at https://krump-x402-relayer.fly.dev. Set fly secrets set RELAYER_PRIVATE_KEY=0x...; frontend VITE_X402_RELAYER_URL=https://krump-x402-relayer.fly.dev."
      },
      {
        "title": "Deploy (Contracts)",
        "body": "Script: script/DeployAll.s.sol — deploys KrumpTreasury, KrumpVerify (with Story IP/License/Royalty set), KrumpVerifyNFT; deployer gets RECEIPT_SUBMITTER_ROLE. Optional RELAYER_ADDRESS in env to grant role to another address.\nCommand: ./deploy.sh or forge script script/DeployAll.s.sol:DeployAll --rpc-url https://aeneid.storyrpc.io --broadcast --gas-price 10000000000 --legacy. See DEPLOY.md."
      },
      {
        "title": "Agent Autonomy and Human Oversight",
        "body": "Autonomous use: An agent with a wallet (or delegated signing) can pay via x402 (after Fund EVVM), have a relayer submit a receipt, then call verifyMoveWithReceipt. Or it can approve USDC.k and call verifyMove.\nHuman check: All verifications and payment receipts are on-chain; humans can audit via explorer, Verified / PaymentReceiptSubmitted events, and receiptUsed / paymentReceipts state.\nRepo: Contract and frontend in this repo; frontend supports Fund EVVM, “Pay via x402”, “Load my receipts”, and “Verify with receipt”."
      },
      {
        "title": "Quick Reference",
        "body": "Verify with wallet payment: approve(USDC.k) then verifyMove(ipId, moveDataHash, proof).\nVerify with receipt: verifyMoveWithReceipt(ipId, moveDataHash, proof, paymentReceiptId) (payer must be msg.sender).\nSubmit receipt (relayer only): submitPaymentReceipt(receiptId, payer, amount); require amount >= verificationFee, payer != 0, receipt not already submitted.\nEVVM/x402 build guide: docs/BUILDING_WITH_EVVM_X402_STORY_AENEID.md.\n\nFor full contract and env details, see repo README and DEPLOY.md and src/KrumpVerify.sol."
      }
    ],
    "body": "ClawHub & Krump Verify for Agents\n\nUse this skill when working with ClawHub and Krump Verify: on-chain verification of dance moves against registered Story IP, with payment in USDC.k or via x402/EVVM payment receipts. Agents can perform verifications autonomously; humans can audit on-chain.\n\nBuilding a similar app? See docs/BUILDING_WITH_EVVM_X402_STORY_AENEID.md for step-by-step EVVM/x402/USDC.k on Story Aeneid: architecture, failures (EVVM payment failed, IP registry, funding UX), and fixes.\n\nWhat Krump Verify Does\nVerification: Prove a move (hash of move/video data) against a registered Story IP asset. Fee is paid to treasury; a receipt is recorded on-chain and Verified(ipId, verifier, receiptHash, timestamp) is emitted.\nChain: Story Aeneid (chain ID 1315). Explorer: https://aeneid.storyscan.io.\nFee: USDC.k (6 decimals). Default verificationFee = 1e6 (1 USDC.k). Read from contract verificationFee().\nTwo Payment Flows\n1. Direct (wallet pays on-chain)\nUser/agent approves USDC.k for KrumpVerify: approve(KrumpVerify, verificationFee) on USDC.k contract.\nCall verifyMove(ipId, moveDataHash, proof) on KrumpVerify. Contract does transferFrom(msg.sender, treasury, verificationFee) then records receipt.\n2. Receipt (x402 / EVVM; agent-friendly)\nFund EVVM (one-time per payer): Approve USDC.k for EVVM Treasury, then call Treasury.deposit(USDC.k, amount) so the payer has EVVM internal balance.\nSign x402 + EVVM: User signs EIP-712 TransferWithAuthorization (domain = adapter) and an EVVM message: hash payload must include \"pay\" and (to, '', token, amount, 0n); executor address(0); use getNextCurrentSyncNonce(payer) and isAsyncExec: false.\nRelayer (with RECEIPT_SUBMITTER_ROLE) calls adapter payViaEVVMWithX402(...) then submitPaymentReceipt(receiptId, payer, amount).\nPayer calls verifyMoveWithReceipt(ipId, moveDataHash, proof, paymentReceiptId). No on-chain transfer; receipt is consumed once. msg.sender must equal the receipt’s payer.\n\nUse the receipt flow when the agent or user has already paid via x402 and has a receiptId (bytes32) to use.\n\nEVVM / x402 Pitfalls (Reference)\n\"EVVM payment failed\" on adapter: Hash payload must encode \"pay\" then (to, identity, token, amount, priorityFee); executor must be 0x0; use sync nonce from Core and isAsyncExec: false.\n\"IP registry not set\": Contract’s IP Asset Registry (and License/Royalty if used) must be set at deploy or via setter.\nNo EVVM balance: Payer must complete Fund EVVM (approve + deposit to EVVM Treasury) before Pay via x402.\nKey Data Shapes\nTerm\tType\tDescription\nipId\taddress\tStory IP account address (from IP Asset Registry). Must be registered.\nmoveDataHash\tbytes32\tkeccak256 of move/video data (e.g. keccak256(toHex(utf8MoveData))).\nproof\tbytes\tOptional; e.g. signature or reference. Can be 0x.\npaymentReceiptId / receiptId\tbytes32\tFor receipt flow: id of the payment receipt submitted by relayer (0x + 64 hex).\nreceiptHash\tbytes32\tReturned from verify; unique per (ipId, verifier, moveDataHash, timestamp, fee, proof).\nContract Surface (KrumpVerify)\nRead: verificationFee(), paymentReceipts(bytes32) → (payer, amount, used), receiptUsed(bytes32).\nWrite (anyone): verifyMove(ipId, moveDataHash, proof), verifyMoveWithReceipt(ipId, moveDataHash, proof, paymentReceiptId).\nWrite (RECEIPT_SUBMITTER_ROLE): submitPaymentReceipt(receiptId, payer, amount).\nEvents: Verified(ipId, verifier, receiptHash, timestamp), PaymentReceiptSubmitted(receiptId, payer, amount).\n\nAgents can discover a user’s unused receipts by querying PaymentReceiptSubmitted(payer=user) and filtering with paymentReceipts(receiptId).used == false.\n\nDefault Addresses (Story Aeneid)\nKrumpVerify: 0x012eD5BfDd306Fa7e959383A8dD63213b7c7AeA5 (override with VITE_KRUMP_VERIFY_ADDRESS).\nKrumpVerifyNFT: 0x602789919332d242A1Cb70d462CEbb570a53A6Ac.\nKrumpTreasury: 0xa2e9245cE7D7B89554E86334a76fbE6ac5dc4617.\nUSDC.k: 0xd35890acdf3BFFd445C2c7fC57231bDE5cAFbde5.\nEVVM Treasury: 0x977126dd6B03cAa3A87532784E6B7757aBc9C1cc.\nEVVM Core: 0xa6a02E8e17b819328DDB16A0ad31dD83Dd14BA3b. EVVM Native x402 Adapter: 0xDf5eaED856c2f8f6930d5F3A5BCE5b5d7E4C73cc.\nRelayer\nLocal: relayer/ — RELAYER_PRIVATE_KEY, KRUMP_VERIFY_ADDRESS; runs on port 7350. Frontend VITE_X402_RELAYER_URL for local: http://localhost:7350.\nProduction: Fly.io app krump-x402-relayer at https://krump-x402-relayer.fly.dev. Set fly secrets set RELAYER_PRIVATE_KEY=0x...; frontend VITE_X402_RELAYER_URL=https://krump-x402-relayer.fly.dev.\nDeploy (Contracts)\nScript: script/DeployAll.s.sol — deploys KrumpTreasury, KrumpVerify (with Story IP/License/Royalty set), KrumpVerifyNFT; deployer gets RECEIPT_SUBMITTER_ROLE. Optional RELAYER_ADDRESS in env to grant role to another address.\nCommand: ./deploy.sh or forge script script/DeployAll.s.sol:DeployAll --rpc-url https://aeneid.storyrpc.io --broadcast --gas-price 10000000000 --legacy. See DEPLOY.md.\nAgent Autonomy and Human Oversight\nAutonomous use: An agent with a wallet (or delegated signing) can pay via x402 (after Fund EVVM), have a relayer submit a receipt, then call verifyMoveWithReceipt. Or it can approve USDC.k and call verifyMove.\nHuman check: All verifications and payment receipts are on-chain; humans can audit via explorer, Verified / PaymentReceiptSubmitted events, and receiptUsed / paymentReceipts state.\nRepo: Contract and frontend in this repo; frontend supports Fund EVVM, “Pay via x402”, “Load my receipts”, and “Verify with receipt”.\nQuick Reference\nVerify with wallet payment: approve(USDC.k) then verifyMove(ipId, moveDataHash, proof).\nVerify with receipt: verifyMoveWithReceipt(ipId, moveDataHash, proof, paymentReceiptId) (payer must be msg.sender).\nSubmit receipt (relayer only): submitPaymentReceipt(receiptId, payer, amount); require amount >= verificationFee, payer != 0, receipt not already submitted.\nEVVM/x402 build guide: docs/BUILDING_WITH_EVVM_X402_STORY_AENEID.md.\n\nFor full contract and env details, see repo README and DEPLOY.md and src/KrumpVerify.sol."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/arunnadarasa/krumpverify",
    "publisherUrl": "https://clawhub.ai/arunnadarasa/krumpverify",
    "owner": "arunnadarasa",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/krumpverify",
    "downloadUrl": "https://openagent3.xyz/downloads/krumpverify",
    "agentUrl": "https://openagent3.xyz/skills/krumpverify/agent",
    "manifestUrl": "https://openagent3.xyz/skills/krumpverify/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/krumpverify/agent.md"
  }
}