---
name: daemon-mint
description: How any agent mints DAEMON ($DAEMON) on BSC — Agent ID gate, free first share via mint(0), paid shares via mint(n) at 0.001 BNB
---

# DAEMON · 守护进程 — Agent Mint Guide

## Status

- Chain: BNB Smart Chain (56)
- Mint contract (DaemonMint): `0xb668dBFc903230e0dE50eA68Bc5eB763710666cb`
- Token (DaemonToken): `0x3d4eD15Aae7308c0d98AB32DF1824A6619A4272d`
- Pair (PancakeSwap V2 DAEMON/WBNB): `0xa39BcB4c8D9A4A680FfF3E27A1Fe19500fC8EC41`
- Deploy tx: `0x3ec6a4ff4ee05f9a2b636b582c0987268cf4fe37c7d832446f29a84a531a5748` (block 132753138, 2026-11-10)
- Website: https://daemonbsc.pages.dev (bilingual 中文/EN)

## Rules (fixed)

- 1 share = 1,000,000 DAEMON
- First share **FREE** per Agent ID — auto-appended on the first mint
- Paid shares: **0.001 BNB** each, max **10 paid** per wallet (11 total with the free one)
- Cap: **100,000 shares**; mint window: **72h** from deploy or until sold out
- Transfers locked until the pool opens · No owner, no admin, no tax, no upgrade

## Eligibility (preflight, no tx)

1. `handle = registry.handleOf(wallet)` (returns bare handle, no `.ai`)
2. `tokenId = uint256(keccak256(bytes(handle)))`
3. eligible ⇔ `registry.ownerOf(tokenId) == wallet` — or simply `registry.balanceOf(wallet) > 0`

Registry (Space ID Agent ID): `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F`

## Views on DaemonMint (read-only)

| Function | Returns | Meaning |
|---|---|---|
| `mintingOpen()` | bool | window open (before deadline, before pool open) |
| `hasAgentId(addr)` | bool | wallet holds a .ai Agent ID |
| `freeAvailable(addr)` | bool | free share still claimable |
| `quote(paid)` | uint256 | cost in wei = `paid × 10^15` |
| `paidRemainingFor(addr)` | uint256 | paid shares left under the 10-share quota |

## Mint (write)

| Action | Call | Value |
|---|---|---|
| Claim free share only | `mint(0)` | `0` |
| Buy `n` paid shares | `mint(n)` | exactly `n × 0.001 BNB` (`n × 10^15` wei) |
| Open the pool after the 72h deadline | `openPool()` | `0` |

`msg.value` must match exactly — over/underpayment reverts.

Reverts (custom errors → 4-byte selector): `AgentIdRequired()` `0x41aaf0fd` · `WalletQuota()` `0x368d2737` · `SoldOut()` `0x52df9fe5` · `WrongPayment()` `0x788a686f` · `MintingClosed()` `0xa7e4d9bd` · `NothingToMint()` `0x448694d6` · `TreasuryTransferFailed()` `0x0e373cf8` · `AlreadyOpen()` `0x965f8d94` · `TooEarly()` `0x085de625`

To tell "gate passed" from "gate failed" cheaply: a wallet with no Agent ID reverts `AgentIdRequired()`, while an eligible wallet that already took its quota reverts `WalletQuota()`.

## After mint

- Balance received = `(paid + free) × 1,000,000` DAEMON; `freeClaimed[wallet]` becomes true
- 30% of the BNB goes to the treasury instantly; 70% is held for liquidity
- Pool (PancakeSwap V2 DAEMON/WBNB) opens automatically at sellout. If the cap is not filled, **anyone** must call `openPool()` after the 72h deadline — until that call, tokens stay non-transferable and the 70% stays in the mint contract
