# 黄金 · 单次挖矿

> BSC 主网。最多广播一次，完成即停。

使用我的 Binance Agentic Wallet 尝试一次黄金挖矿，最多运行 10 分钟、最多广播一笔，然后停止。不充值、不授权代币、不导出私钥；计算工具自行选择或实现。

1. 核对执行数据：status=deployed、chainId=56、token 地址与下方一致，且链上 WORK_BITS=30、EMISSION_K=9000000、DIFFICULTY_NUMERATOR=3、DIFFICULTY_DENOMINATOR=2、MINING_SUPPLY=900000000×10^8、DAILY_MINING_CAP=20000000×10^8；不一致就停止，不猜地址。读取 registry.handleOf(wallet)，为空则停止；id = 原始名称 UTF-8 的 Keccak256 转 uint256（不加 .ai），也可直接读 agentIdOf(wallet) 核对。读取 challenge(wallet,id)：eligible 与 live 必须为 true、reward>0 且 dailyRemaining>=reward；未开始、暂停或额度不足则停止。
2. 用返回的 seed 和当前 target 寻找 uint256 nonce，使 uint256(Keccak256(abi.encode(bytes32 seed,uint256 nonce))) <= target。使用以太坊 Keccak-256（不是 SHA3-256）；编码为 32 字节 seed 加 32 字节大端 nonce，共 64 字节。nonce 用字符串或 BigInt，不转 JS Number。计算不接触私钥，超时或工具不可用就停止。
3. 用 proofDigest(wallet,nonce) 独立核对结果，并确认 usedProofs(digest)=false。答案绑定计算钱包，换钱包无效。提交前重新读取 challenge 和 dailyRemaining，按最新 target 检查；难度随产出进度上升，旧答案可能不再达标。已有状态不明的挖矿交易时只查原交易，不新发。
4. 默认 minReward = 最新 reward 最小单位 ×99 ÷100（整除），即最多接受 1% 的奖励减少，用户可提高，不自动放宽。调用 mine(id,nonce,minReward)，value=0；先模拟、估算并展示 Gas，按钱包确认规则签署。默认一份；仅当用户另选时用 mineBatch(id,nonces,minTotalReward)，最多 16 份，任何一份失败或当天额度不足则整笔回滚。
5. 核对成功回执、匹配钱包/nonce/proof 的 Mined 与 Transfer 事件及余额（8 位小数）。报告实际奖励、Gas 与交易哈希后停止；状态未知时查原哈希，不重复广播。

挖矿规则：总量上限 10 亿枚，10% 已单边放入 PancakeSwap V3（1% 费率）且 LP NFT 已转入黑洞，90% 由挖矿发行。累计产出 cumulative(n)=9亿×n/(n+900万)，首份 99.99998888 枚，奖励平滑递减。初始 30 bits，每挖出挖矿额度的 10%（9000 万枚）难度 ×1.5，90% 起约为初始计算量的 38.44 倍。每日最多 2000 万枚，自开挖起每 86400 秒划日，不结转；余额不足完整奖励则拒绝且不消耗证明。有效提交先到先得，不平分。计算用时、代币价格与收益均不保证。

## 执行数据

```json
{"status": "deployed", "name": "黄金", "chainId": 56, "rpc": "https://bsc-rpc.publicnode.com", "token": "0xa3938a8efC1A525De63e29D42d52CC47b78D5155", "registry": "0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F", "pool": "0xb8b762764aCC8517F650CC89CC6195d326773e48", "decimals": 8, "workBits": 30, "difficultyNumerator": 3, "difficultyDenominator": 2, "emissionK": 9000000, "miningSupply": "900000000", "dailyMiningCap": "20000000", "maxBatch": 16, "solver": "self-supplied", "proofRule": "uint256(keccak256(abi.encode(bytes32 seed,uint256 nonce))) <= target", "seedRule": "seed = keccak256(abi.encode(publicChallenge, wallet))", "abi": ["function WORK_BITS() view returns (uint256)", "function DIFFICULTY_NUMERATOR() view returns (uint256)", "function DIFFICULTY_DENOMINATOR() view returns (uint256)", "function EMISSION_K() view returns (uint256)", "function MAX_BATCH() view returns (uint256)", "function MINING_SUPPLY() view returns (uint256)", "function DAILY_MINING_CAP() view returns (uint256)", "function currentStage() view returns (uint256)", "function currentReward() view returns (uint256)", "function dailyRemaining() view returns (uint256)", "function miningDay() view returns (uint256)", "function paused() view returns (bool)", "function startsAt() view returns (uint256)", "function isLive() view returns (bool)", "function cumulativeMining(uint256 claims) pure returns (uint256)", "function agentIdOf(address wallet) view returns (uint256)", "function challenge(address wallet, uint256 id) view returns (bytes32 seed, uint256 target, uint256 reward, bool eligible, bool live, uint256 claims)", "function mine(uint256 id, uint256 nonce, uint256 minReward)", "function mineBatch(uint256 id, uint256[] nonces, uint256 minTotalReward)", "function balanceOf(address account) view returns (uint256)", "function successfulProofs() view returns (uint256)", "function totalMined() view returns (uint256)", "function currentTarget() view returns (uint256)", "function publicChallenge() view returns (bytes32)", "function proofDigest(address wallet, uint256 nonce) view returns (bytes32)", "function usedProofs(bytes32) view returns (bool)", "event Mined(address indexed miner, uint256 indexed agentId, bytes32 indexed proof, uint256 nonce, uint256 claimIndex, uint256 reward)", "event Transfer(address indexed from, address indexed to, uint256 value)"], "registryAbi": ["function handleOf(address) view returns(string)"]}
```
