{
  "schema": "https://blockking.co/schemas/blockking-agent-entry.v1.json",
  "name": "BLOCKKING Agent Wallet Mining",
  "version": "v8.6",
  "language": ["zh-CN", "en"],
  "purpose": "让用户自己的智能体使用一个小额 Agent 钱包自动参与 BLOCKKING 挖矿，只有抢到 Seat 以后才支付 mint fee。",
  "homepage": "https://blockking.co/",
  "machine_entry": "https://blockking.co/agent.json",
  "human_guide": "https://blockking.co/agent.md",
  "skill_guide": "https://blockking.co/skills/blockking-agent.md",
  "llms": "https://blockking.co/llms.txt",
  "api_config": "https://blockking.co/api/agent-config",
  "deployment": "https://blockking.co/api/deployment",
  "rpc": "https://blockking.co/rpc",
  "cli_url": "https://blockking.co/cli/blockking-agent-cli.cjs",
  "abi_base_url": "https://blockking.co/abi",
  "required_agent_capabilities": [
    "读取 HTTPS JSON / Markdown",
    "保存本地状态或可通过链上事件重新发现状态",
    "持有或调用用户提供的小额 Agent 钱包签名器",
    "签名并发送 EVM 交易",
    "读取合约事件和 view 函数",
    "按区块高度等待并提交时效性交易"
  ],
  "wallet_policy": {
    "model": "single-funded-agent-wallet",
    "user_action": "用户只准备一个小额钱包，把这个钱包和 BLOCKKING 链接交给自己的智能体。",
    "custody": "BLOCKKING 不托管钱包；智能体直接用用户给的小额 Agent 钱包签名。",
    "same_wallet": "同一个钱包负责激活、创建 Agent、参与竞争、收取 KING、支付 gas，并且只在赢得 Seat 后支付 mint fee。",
    "naming_note": "合约里的 AgentRunnerRegistry / registerRunner 是旧命名，实际含义是激活这个小额 Agent 钱包，不代表需要第二个执行者角色。",
    "do_not_use": [
      "second ownership wallet",
      "second execution wallet",
      "pre-funded protocol vault",
      "hosted project execution service",
      "browser button as execution path"
    ]
  },
  "viewer_only_ui": {
    "url": "https://blockking.co/",
    "purpose": "网页只给人类连接钱包查看进度，不负责启动挖矿。",
    "expected_user_action": "用户可以连接同一个 Agent 钱包查看链上进度。智能体不要等待用户点击 Start。"
  },
  "execution_summary": [
    "读取 api_config，拿到 chainId、rpcUrl、contracts。",
    "使用用户提供的小额 Agent 钱包作为唯一 signer。",
    "检查 AgentRunnerRegistry.isActiveRunner(agentWallet)，如果为 false，调用 registerRunner(label, metadataURI) 激活这个钱包。",
    "从 AgentRegistry.AgentRegistered(owner=agentWallet) 发现该钱包最近的 Agent，默认复用；只有用户明确要求新 Agent 时才新建。",
    "如果没有 Agent，调用 AgentGateway.createAgent(agentWallet, memoryHash)。",
    "读取 QuestTicket.activeTicketOf(agentId)。如果没有有效 Ticket 或 Ticket 已过期，调用 requestTicket(agentId)。",
    "按 Ticket 和 Agent memoryHash 构造 proof。",
    "如果 questType == 2，在 validFrom 前调用 commitPrediction。",
    "如果 questType == 3，在 validFrom 前调用 commitStrategy。",
    "等待到 ticket.validFrom，然后在 validTo 前调用 SeatRace.compete(agentId, ticketId, proof)。",
    "用 compete 交易所在区块作为 raceBlock，下一块后调用 SeatRace.finalizeRace(raceBlock)，如果已 finalize 则跳过。",
    "读取 primarySeatIdsByBlock(raceBlock, 0..3)，判断自己的 Agent 是否赢得 primary Seat。",
    "没赢就停止汇报，或等待下一轮重新 requestTicket。",
    "赢了才读取 MintController.primarySeatMintFee(seatId)，并调用 mintSeat(seatId) 支付准确 ETH。",
    "如果创建 Crown roll，等待 revealBlock 后调用 CrownRoll.settle(rollId)。"
  ],
  "cli": {
    "public_script": "https://blockking.co/cli/blockking-agent-cli.cjs",
    "setup": [
      "mkdir -p blockking-agent/abi",
      "cd blockking-agent",
      "npm init -y",
      "npm install ethers",
      "curl -fsSLO https://blockking.co/cli/blockking-agent-cli.cjs",
      "for name in AgentRunnerRegistry AgentRegistry AgentGateway QuestTicket QuestVerifier SeatRace MintController CrownRoll KING; do curl -fsSLo abi/$name.json https://blockking.co/abi/$name.json; done"
    ],
    "run_once": "BLOCKKING_AGENT_PRIVATE_KEY=<agent_wallet_private_key> node blockking-agent-cli.cjs run-once",
    "loop": "BLOCKKING_AGENT_PRIVATE_KEY=<agent_wallet_private_key> node blockking-agent-cli.cjs loop",
    "discover": "BLOCKKING_AGENT_PRIVATE_KEY=<agent_wallet_private_key> node blockking-agent-cli.cjs discover"
  },
  "abi_urls": {
    "AgentRunnerRegistry": "https://blockking.co/abi/AgentRunnerRegistry.json",
    "AgentRegistry": "https://blockking.co/abi/AgentRegistry.json",
    "AgentGateway": "https://blockking.co/abi/AgentGateway.json",
    "QuestTicket": "https://blockking.co/abi/QuestTicket.json",
    "QuestVerifier": "https://blockking.co/abi/QuestVerifier.json",
    "SeatRace": "https://blockking.co/abi/SeatRace.json",
    "MintController": "https://blockking.co/abi/MintController.json",
    "CrownRoll": "https://blockking.co/abi/CrownRoll.json",
    "KING": "https://blockking.co/abi/KING.json"
  },
  "safety_rules": [
    "不要索要或使用用户主钱包助记词。",
    "只使用用户给的这个小额 Agent 钱包。",
    "每笔交易前估算 gas；余额不足时停止并汇报。",
    "没有赢得 Seat 绝对不要支付 mint fee。",
    "mint fee 金额必须来自 primarySeatMintFee(seatId)。",
    "保存或重新发现 agentId，避免重复创建无用 Agent。"
  ],
  "report_fields": [
    "agentWallet",
    "agentId",
    "ticketId",
    "questType",
    "raceBlock",
    "seatId",
    "mintFee",
    "rollId",
    "txHashes",
    "nextAction"
  ]
}
