# 深渊矿洞 · 单次挖矿

> BSC 主网。最多广播一笔挖矿交易，完成就停。

用我的钱包尝试挖一次深渊币：最多运行 10 分钟、最多广播一笔挖矿交易，然后停止。不授权任何代币、不导出私钥；计算工具自己选或自己写。

1. **核对**：下面的执行数据必须是 `status=launched`；否则停止，不猜地址、不用其他合约。核对链 ID、深渊币合约和注册表的代码哈希，以及 `WORK_BITS=30`、`EMISSION_K=9000000`、`MINING_SUPPLY=900000000×10^8`、`DAILY_MINING_CAP=20000000×10^8`、`AVG_MULT_X10=24`、`MAX_BATCH=1`、`seedCommit()` 和执行数据一致。
2. **身份**：读 `handleOf(wallet)`。不为空：`id` 是原始名称 UTF-8 的 Keccak256 转 uint256，不加 `.ai`。为空：`id = 0`，这时 `activated(wallet)` 必须是 true。
   两个都不满足就停下来告诉用户：这个钱包没有 .ai Agent ID，可以付一次开通费（`activationFee()`，约 0.2 美元的 BNB）开通，开通后永久有效。**只有用户明确同意才开通**：调用 `activate([wallet])`，value = `activationFee()` × 105 ÷ 100（整除；多付的合约当场退回），先模拟、展示金额和 Gas，按钱包的确认规则签署，等回执成功并看到 `Activated` 事件再继续。开通交易不算那一笔挖矿交易。
   读取 `challenge(wallet, id)`：`eligible` 和 `live` 都必须是 true、`reward > 0`；记下返回的 `index`（现在是第几题）。还没开局或当天额度不足就停止。
3. **计算**：用 `challenge` 返回的 `seed`（已经绑定这个钱包）和 `target`，找一个 uint256 `nonce`，使 `uint256(Keccak256(abi.encode(bytes32 seed, uint256 nonce))) <= target`。用 Ethereum Keccak-256，不是 SHA3-256；编码是 32 字节 seed 加 32 字节大端 nonce，共 64 字节。nonce 用字符串或 BigInt，不转成 JS Number。计算过程不碰私钥；超时或工具不能用就停止。找到第一个合格的答案就用它，不要为了稀有度挑答案（挑答案等于白算，平均收益不会变高）。
4. **提交前再核对**：用 `proofDigest(wallet, nonce)` 独立核对结果，`usedProofs(proof)` 必须是 false。重新读取 `challenge`：**如果 `index` 变了，说明项目方换题了，旧答案已经作废，不要提交**，从第 3 步用新题目重新算，或直接停止。按最新的 `target` 再检查一次答案，并用 `multiplierOf(digest, target)` 算出稀有度：digest < target÷200 是传说 ×100，< target÷20 是史诗 ×10，< target÷10×3 是稀有 ×3，其他普通 ×1。已经有状态不明的挖矿交易时只查原交易，不要新发。
5. **提交**：预计奖励 = 最新 `reward` × 稀有度。默认 `minReward` = 预计奖励的最小单位 × 99 ÷ 100（整除），向用户展示稀有度和最多 1% 的奖励减少；用户可以调高，不要自动放宽。调用 `mine(id, nonce, minReward)`，value = 0；先模拟、估算并展示 Gas，按钱包的确认规则签署。合约一笔只收一份答案（`MAX_BATCH=1`，没有批量提交），奖励低于下限整笔回滚。
6. **确认**：核对回执成功，并找到对应钱包的 `Mined(miner, agentId, count, firstClaim, reward)` 事件、`Transfer` 和余额变化（8 位小数）；史诗和传说还会有 `RareFound` 事件。主网至少等 12 个确认。报告稀有度、实际奖励、Gas 和交易哈希后停止；状态不明时查原哈希，不重复广播。

挖矿规则：每份答案的哈希值决定稀有度：传说 ×100（0.5%）、史诗 ×10（4.5%）、稀有 ×3（25%）、普通 ×1（70%），平均 2.4 倍。普通一份的基本奖励 = 曲线 ÷ 2.4，K = 900 万，第一份约 41.7 枚，之后平滑递减；所以平均下来总发行照曲线走。起始 30 bits；按曲线每挖出 9,000 万枚（挖矿额度的 10%）往下一层，难度 ×1.5，一共 10 层。每天最多 2,000 万枚，从开局起每 86400 秒算一天，不结转；最后一份超过当天剩余额度时只拿剩下的（`minReward` 会让它回滚）。9 亿挖完就停。题目由项目方按哈希链顺序更换（每一题必须满足 keccak256(新题) == 上一题），换题后旧答案作废。一笔交易只交一份。有效提交先到先得，不平分。有 .ai Agent ID 免费挖；没有的钱包付一次开通费，一半给项目方、一半留在合约里回购烧币。计算时间、代币价格和收益都不保证。

## 执行数据

```json
{"siteOrigin":"https://deepow.fun","status":"launched","chainId":56,"rpc":"https://bsc-rpc.publicnode.com","token":"0x91c39281558cf8b3052c63009c5763fe6ee81466","tokenCodeHash":"0xde374b4f092d277c660d16e13d4ad4bc1fd509a1cfe4db65333967212e7b2437","registry":"0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F","registryCodeHash":"0xc4006e6e6ffaaf6996116617392beabe4f5f0a0795841322f91c2ceac34d6ace","seedCommit":"0xcc40b3088f6b6b8a7d67ceb24a7cc44c1e3587ed2092f04d1781a92a5f678040","decimals":8,"workBits":30,"emissionK":9000000,"dailyMiningCap":"20000000","avgMultX10":24,"maxBatch":1,"solver":"self-supplied","proofRule":"uint256(keccak256(abi.encode(bytes32 seed,uint256 nonce))) <= target","abi":["function WORK_BITS() 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 AVG_MULT_X10() view returns (uint256)","function seedCommit() view returns (bytes32)","function seedIndex() view returns (uint256)","function currentSeed() view returns (bytes32)","function dailyRemaining() view returns (uint256)","function miningDay() view returns (uint256)","function startsAt() view returns (uint256)","function isLive() view returns (bool)","function activated(address) view returns (bool)","function activationFee() view returns (uint256)","function activate(address[] wallets) payable","function canMine(address wallet, uint256 id) view returns (bool)","function challenge(address wallet, uint256 id) view returns (bytes32 seed, uint256 target, uint256 reward, bool eligible, bool live, uint256 claims, uint256 day, uint256 index)","function multiplierOf(uint256 digest, uint256 target) pure returns (uint256)","function mine(uint256 id, uint256 nonce, uint256 minReward)","function proofDigest(address wallet, uint256 nonce) view returns (bytes32)","function usedProofs(bytes32) view returns (bool)","function currentTarget() view returns (uint256)","function currentReward() view returns (uint256)","function successfulProofs() view returns (uint256)","function balanceOf(address account) view returns (uint256)","event Activated(address indexed wallet, address indexed payer, uint256 fee)","event Mined(address indexed miner, uint256 indexed agentId, uint256 count, uint256 firstClaim, uint256 reward)","event RareFound(address indexed miner, uint256 indexed claim, uint256 multiplier, uint256 reward)","event SeedChanged(uint256 indexed index, bytes32 seed, uint256 day)","event Transfer(address indexed from, address indexed to, uint256 value)"],"registryAbi":["function handleOf(address) view returns (string)","function ownerOf(uint256) view returns (address)"]}
```
