---
name: event-horizon
description: Mint Event Horizon ($HRZN) on BNB Smart Chain (chainId 56) from a wallet that owns a .ai Agent ID. Use when the user asks to mint, claim, refund, or call devour on Event Horizon.
---

# Event Horizon ($HRZN) — agent guide

Independent community project. Not affiliated with Binance. Not investment advice. Price can go to zero. Burns and buybacks pay the caller nothing and guarantee no return.

**Status: mint is LIVE on BSC mainnet since 2026-11-03 15:22 UTC.** Sale contract `0xe7b69Fb13c2816d59698BBDa6A0B7DB9AC3c4e7c`. Call quote(units) on-chain right before sending; the chain is the source of truth.

Sale, token, singularity and pair below are the configured deployment. If they ever disagree with the chain, trust the chain.

- Chain: BNB Smart Chain, chain id **56**. Native gas and payment are BNB.
- Sale (the only address that accepts mint BNB): `0xe7b69Fb13c2816d59698BBDa6A0B7DB9AC3c4e7c`
- Token (HRZN, 18 decimals): `0x1Ac15cb7FD6c02Dfcfd8610ABC69C5E52834Ee3b`
- Singularity (devour / mass): `0x0B8b2A5526D86D594e3011F3332021F877A4f54C`
- PancakeSwap V2 pair: `0x38D190265631ab2Eb1Ae75f8166142070FF30f40`
- Marketing & Development treasury wallet: read `treasury()` on the sale. Do not copy an address from this file.
- Buyback wallet: read `buyback()` on the sale. Manual buybacks only. This is not the singularity / devour contract.
- Agent ID registry (SPACE ID): `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F`
- Config the site loads: https://www.hrzn.lol/deployed.local.json
- ABI: https://www.hrzn.lol/abi.json
- Dead address for burned LP: `0x000000000000000000000000000000000000dEaD`

## Rules the contract actually enforces

1. `accrete(uint256 units)` (`0x39b23d5a`) is payable. The argument is **how many units to buy**, not an agent id. The contract derives the id from `msg.sender`.
2. Eligibility: `handleOf(wallet)` (`0xc50a1514`). If the returned string is empty, the wallet cannot mint. Otherwise `id = uint256(keccak256(utf8Bytes(handle)))` using that exact string — do not append `.ai`. `ownerOf(id)` (`0x6352211e`) must equal the wallet.
3. Quota is stored on that id (`quotaOf(address)` → id, eligible, used, remaining). Published quota is 10 units per id. `maxUnitsPerTx` is 10. One `accrete` per address per block.
4. `quote(uint256 units)` (`0xed1bd76c`) returns the wei to send. Overpayment is returned. Underpayment reverts.
5. Genesis is units 1–10,000 at 0.002 BNB. Unit `n` after that costs `0.002 + (floor((n - 10001) / 1000) + 1) × 0.0002` BNB, through unit 50,000 at 0.010 BNB. Every unit pays the buyer the same `tokensPerUnit` (1,000 HRZN, 18 decimals), at every tier. Price changes. The HRZN amount does not.
6. Genesis tokens are escrowed in `unitsOwed` until the pool opens, then `claim()` (`0x4e71d92d`) mints them. The transaction that fills unit 10,000 claims in that same call. Units bought after the horizon mint immediately.
7. If the 72-hour deadline passes before the horizon opens, phase is 3 and `refund()` (`0x590e1ae3`) returns 100% of `paidWei`. There is no second deadline. Genesis tokens were not minted. During genesis the whole payment stays in the sale. The 20% and the 10% are sent only when unit 10,000 fills, so on the refund path those wallets receive nothing.
8. When the cap fills, and on every later step mint: 70% to PancakeSwap V2 liquidity (LP burned), 20% to the Marketing & Development treasury wallet, 10% to the buyback wallet. Rounding dust stays in the LP slice. Unpaired LP BNB still goes to devour mass, not to either wallet.
9. Buy tax 1.5% (0.5% burn + 1.0% swapped to BNB). Sell tax 2.5% (1.0% burn + 1.5% swapped to BNB). Swapped BNB is split 50/50 between Marketing & Development and devour mass. Wallet-to-wallet transfers are not taxed.
10. `devour()` (`0x36bdd63d`) on the **singularity** contract, value 0, pays the caller **nothing**. It spends mass BNB on a buy and burns the HRZN. The caller pays gas. It reverts unless mass ≥ threshold, the cooldown has elapsed, and the pool is inside the anchor band.

## Reads

| Call | Selector | On |
| --- | --- | --- |
| quote(uint256 units) | 0xed1bd76c | sale |
| quotaOf(address) | 0xef23b3a3 | sale |
| agentOf(address) | 0xac3c0e30 | sale |
| lens() | 0x112666b7 | sale |
| totalUnits() | 0x6d86acc4 | sale |
| genesisCap() | 0x5de5f890 | sale |
| maxUnitsPerTx() | 0xd64ff9ae | sale |
| tokensPerUnit() | 0xf8d28768 | sale |
| unitsOwed(address) | 0xb9165185 | sale |
| paidWei(address) | 0x31f06868 | sale |
| treasury() | 0x61d027b3 | sale |
| buyback() | 0xf8ec6911 | sale |
| handleOf(address) | 0xc50a1514 | registry |
| ownerOf(uint256) | 0x6352211e | registry |
| sky() | 0x69231804 | singularity |

`lens()` returns phase (1 accreting, 2 horizon open, 3 collapsed / refunds), raised wei, units sold, next unit price, seconds left before the deadline, declared max supply, whether authority is dissolved, and the pair.

`sky()` returns mass, threshold, spend preview, cooldown left, rounds, cumulative tokens burned, cumulative BNB spent, ready, calm, progress bps.

## Writes

Preview every write. Show the user the contract, the BNB value, and the gas. Send only after they confirm. Never ask for a private key or a seed. Developer Mode is required for external signing: Binance App → Agentic Wallet → Settings → Developer Mode (valid 7 days).

Mint `U` units. `value` is `quote(U)` wei. Calldata is selector `0x39b23d5a` plus `U` as a 32-byte uint256.

```bash
baw contract-call preview --binanceChainId 56 --from <your-wallet> --to 0xe7b69Fb13c2816d59698BBDa6A0B7DB9AC3c4e7c --value <quote-wei> --inputData <accrete-calldata> --json
baw contract-call execute --requestId <id> --json
```

Claim (value 0), only after the horizon is open and `unitsOwed` is non-zero. Selector `0x4e71d92d`.

Refund (value 0), only in phase 3, and only if `paidWei` is non-zero. Selector `0x590e1ae3`.

Devour (value 0) goes to the singularity, not the sale. Selector `0x36bdd63d`. Tell the user it pays them nothing.

```bash
baw contract-call preview --binanceChainId 56 --from <your-wallet> --to 0xe7b69Fb13c2816d59698BBDa6A0B7DB9AC3c4e7c --value 0 --inputData 0x36bdd63d --json
baw contract-call execute --requestId <id> --json
```

Stop if the sale address is the zero address. Minting never needs a token approval.
