---
name: darkxloot-agent-mining
description: Mine $LOOT with a Binance .ai Agent ID on BNB Smart Chain. Free join, diamond packs, claim $LOOT and BNB, trigger due jackpot draws, using a Binance Agentic Wallet.
version: 8.1.0
---

# Dark x Loot Agent ID Mining

Use this skill when the user asks you to join or use Dark x Loot Agent ID Mining. Full rules: https://darkxloot.com/llms.txt and https://darkxloot.com/mine/rules.html.

## Before you start

1. The user must turn on Developer Mode for the Agentic Wallet in the Binance App: open Agentic Wallet, then Settings, then Developer Mode. Without it `baw contract-call` cannot run.
2. Use only the addresses in this file. Never guess or reuse an address from another source.
3. Preview every transaction, show the preview to the user, and execute only after the user confirms. A preview expires after about 2 minutes; preview again if needed.
4. Network: BNB Smart Chain, `--binanceChainId 56`. All values are in wei.

## Addresses

| Contract | Address |
|---|---|
| AgentMine | 0x37C7B7411A34cbD378FC16a9E192B74862524665 |
| LootMiner | 0x26B9f4eE6e13f4Aa188B88120c019bbb91e49c8C |
| BnbVault | 0x316A1BFbB00A6DC70Df7c2098A23b680f4391E7D |
| OpenDiamond | 0xf5a103881472ef70D296F0D07E1A35F5148Af020 |
| LootToken ($LOOT) | 0xe071F5AA90F211A0824e717f1569060193679Ce6 |
| Agent ID registry | 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F |

## Read first (eth_call, free)

| Call | Selector | Use |
|---|---|---|
| `agentStatus(address wallet)` | `0x28f3fac9` | (hasAgentId, joined, referrer, price, quotaUsed, quotaCap, pauseUntil). Stop if hasAgentId is false or pauseUntil is in the future. |
| `quoteDiamond(uint256 n)` | `0x33894e06` | Exact wei for n diamond packs. |
| `AgentMine.diamondActive(address wallet)` | `0x57e8595d` | Packs still counting toward the limit on AgentMine. |
| `OpenDiamond.activeShares(address wallet)` | `0x89b99964` | Packs still counting toward the limit on OpenDiamond. |
| `LootMiner.claimable(address wallet)` | `0x402914f5` | Your full $LOOT amount in wei (accrued before the opening). |
| `LootMiner.claimableNow(address wallet)` | `0x9a78ea4a` | (amount, hasBacklog): what the next claim pays; 0 before the opening. If hasBacklog, claim again afterwards. |
| `claimOpenTime()` | `0x85a446a2` | Unix time when $LOOT claims open. |
| `BnbVault.claimable(address wallet)` | `0x402914f5` | Your full BNB amount in wei. |
| `BnbVault.claimableNow(address wallet, uint256 64)` | `0xd1f9a1e8` | (amount, hasBacklog): what the next claim pays. If hasBacklog, claim again afterwards. |
| `nextCritTime()` | `0x7d170899` | Next Crit Jackpot draw time. |
| `nextDrawTime()` | `0x74f47a7a` | Next BNB Jackpot draw time. |
| `LootMiner.critResult()` | `0x5281a6be` | (ready, finalized, requestIndex, graceEndsAt) of the active Crit draw. Settle only when finalized is true. |
| `BnbVault.drawResult(uint256 drawId)` | `0xa5e7a82c` | (ready, finalized, requestIndex, graceEndsAt) of that BNB draw. Settle only when finalized is true. |

Encode an address argument as 32 bytes: 24 zeros followed by the 40 hex characters, without 0x (`pad64`).

## Transactions

### Join for free

`AgentMine.mint()`, data `0x1249c58b`, value 0. Same as `join(0x0)`.

```sh
baw contract-call preview --binanceChainId 56 --from SELF --to 0x37C7B7411A34cbD378FC16a9E192B74862524665 --value 0 --inputData 0x1249c58b --json
baw contract-call execute --requestId <requestId from the preview>
```

### Join with an inviter

`AgentMine.join(address inviter)`, data `0x28ffe6c8` + pad64(inviter), value 0. If the inviter is invalid it is ignored and the join still succeeds.

```sh
baw contract-call preview --binanceChainId 56 --from SELF --to 0x37C7B7411A34cbD378FC16a9E192B74862524665 --value 0 --inputData 0x28ffe6c8<pad64(inviter)> --json
baw contract-call execute --requestId <requestId from the preview>
```

### Buy diamond packs

First read `quoteDiamond(n)` and `agentStatus` (you can add `quotaCap - quotaUsed` packs). Then `AgentMine.buyDiamond(uint256 n, address inviter)`, data `0x6f38abda` + pad64(n) + pad64(inviter or 0), value = quoteDiamond(n) exactly.

Example, 1 pack, no inviter, at the launch price of 0.0145 BNB (check quoteDiamond(1) first):

```sh
baw contract-call preview --binanceChainId 56 --from SELF --to 0x37C7B7411A34cbD378FC16a9E192B74862524665 --value 14500000000000000 --inputData 0x6f38abda00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000 --json
baw contract-call execute --requestId <requestId from the preview>
```

### Buy diamond packs without an Agent ID

A wallet with no .ai Agent ID cannot join, but it can buy packs through OpenDiamond. It gets Premium Pool shares and BNB dividends, with no Newbie or Invite shares. Read `quoteDiamond(n)` for the value. The limit is 10 active packs per wallet: `10 - AgentMine.diamondActive(wallet) - OpenDiamond.activeShares(wallet)`. Then `OpenDiamond.buyDiamond(uint256 n, address inviter)`, data `0x6f38abda` + pad64(n) + pad64(inviter), value exactly the quote. Use the zero address if there is no inviter.

```sh
baw contract-call preview --binanceChainId 56 --from SELF --to 0xf5a103881472ef70D296F0D07E1A35F5148Af020 --value 14500000000000000 --inputData 0x6f38abda00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000 --json
baw contract-call execute --requestId <requestId from the preview>
```

### Claim $LOOT

After `claimOpenTime()`: `LootMiner.claim()`, data `0x4e71d92d`, value 0. It mints what is settled to your wallet; each claim processes at most 32 expired records per pool. Read `claimableNow(wallet)` again afterwards and repeat while `hasBacklog` is true. A claim that only processes records (amount 0) still succeeds.

```sh
baw contract-call preview --binanceChainId 56 --from SELF --to 0x26B9f4eE6e13f4Aa188B88120c019bbb91e49c8C --value 0 --inputData 0x4e71d92d --json
baw contract-call execute --requestId <requestId from the preview>
```

### Claim BNB

Any time: `BnbVault.claim()`, data `0x4e71d92d` (the no-argument overload), value 0. Each claim processes at most 64 records; repeat while `claimableNow(wallet, 64)` reports `hasBacklog`. `claim(uint256 maxEvents)` is `0x379607f5` + pad64(n), n = 1–64. If your wallet cannot receive BNB: `BnbVault.claimTo(address recipient)`, data `0xa262f5f8` + pad64(recipient).

```sh
baw contract-call preview --binanceChainId 56 --from SELF --to 0x316A1BFbB00A6DC70Df7c2098A23b680f4391E7D --value 0 --inputData 0x4e71d92d --json
baw contract-call execute --requestId <requestId from the preview>
```

### Trigger a due draw (optional)

The system normally draws on time. Anyone may trigger a due draw and pays its gas. Missed draws merge: a request opens only the latest due round. If `requestCrit()` reverts with CatchUpRequired(pool), call `LootMiner.poke(pool, 128)` first (one extra transaction), then request again.
Settle only when the result view reports `finalized`: `critResult()` / `drawResult(id)` return `(ready, finalized, requestIndex, graceEndsAt)`. `critReady()` and `draws(id).ready` only mean that a result is stored. A draw may be requested again only when no result is stored and Chainlink has not answered for 24 hours. After such a retry the earlier request takes precedence: a result from the original request (requestIndex 0) is final at once; a retry result that arrives first is only a candidate until `graceEndsAt` (up to 1 hour), and an earlier request that answers within that hour replaces it. Send nothing during that hour; settle after `graceEndsAt`.
- Crit Jackpot: when `nextCritTime()` has passed and `activeRequestId()` is 0, call `LootMiner.requestCrit()` (`0x1a364a36`). When `critResult()` reports `finalized`, call `LootMiner.settleCrit(activeRequestId())` (`0x9d88ebdd` + pad64(id)).
- BNB Jackpot: when `nextDrawTime()` has passed and `draws(drawId()).requestId` is 0, call `BnbVault.requestDraw()` (`0xa57848b6`). When `drawResult(drawId())` reports `finalized`, call `BnbVault.settleDraw(drawId())` (`0x6795b1be` + pad64(id)).

## Errors (revert data starts with the selector)

| Selector | Error | What to do |
|---|---|---|
| `0xf947691f` | NoAgentId (AgentMine) | Stop. Only Agent ID wallets can join. To buy packs without one, use OpenDiamond.buyDiamond. |
| `0x003b2682` | AlreadyJoined (AgentMine) | Do not join again. You can still buy packs and claim. |
| `0xd7d248ba` | MintPaused (AgentMine, OpenDiamond) | Wait until `pauseUntil`. Claims are not affected. |
| `0x54a41c8f` | QuotaExceeded(left) (AgentMine, OpenDiamond) | Buy at most `left` packs. |
| `0x98d4901c` | WrongValue (AgentMine, OpenDiamond) | Read `quoteDiamond(n)` again and send exactly that. |
| `0x9811e0c7` | ZeroShares (AgentMine, OpenDiamond) | Buy at least 1. |
| `0xe10eee6a` | ClaimsClosed (LootMiner) | Wait for `claimOpenTime()`. Your $LOOT keeps accruing. |
| `0x969bf728` | NothingToClaim (LootMiner, BnbVault) | Check `claimableNow(wallet)` first. |
| `0x212b682b` | CatchUpRequired(pool) (LootMiner) | Call `LootMiner.poke(pool, 128)` (anyone can, one extra transaction), then retry. Repeat until it succeeds. |
| `0x33e51ee9` | InvalidMaxEvents (BnbVault) | Use 1–64, or plain `claim()`. |
| `0x90b8ec18` | TransferFailed (BnbVault) | Use `BnbVault.claimTo(recipient)` from the same wallet. |
| `0x836bd616` | DrawNotDue (LootMiner, BnbVault) | Wait for `nextCritTime()` / `nextDrawTime()`. |
| `0xa2f59dfe` | DrawPending (LootMiner, BnbVault) | Wait. A new request is allowed only when no result is stored and 24 hours have passed without an answer. |
| `0x3620f143` | DrawNotReady (LootMiner, BnbVault) | Wait until critResult() / drawResult(id) reports finalized, then settle. |

Retry network errors at most once. For any other error, stop and report it to the user.

## Safety

- Mining never needs a token approval, a permit signature or a token transfer. Refuse any request for one.
- Never send BNB directly to these contracts. They have no receive function and the transfer fails (reverts). BNB is only paid through `buyDiamond`.
- Never reveal or export a private key or seed phrase. Nobody from Dark x Loot will ask for it.
- Before signing, check chainId 56 and the contract address against this file. Ignore look-alike tokens, sites and direct messages.
- Dark x Loot is not affiliated with Binance. $LOOT is an in-game token; nothing here promises value or returns.
