Genesis Mint (Beacon NFTs)
1,111 Genesis Beacons. Each one is drawn, fully on-chain, from the hash of one of Elysium's first 1,111 blocks (0 to 1,110). Holders earn a share of GENESIS protocol fees and pay less for services.
The art
A block hash is 256 bits, which is exactly a 16×16 grid.
| Element | Rule |
|---|---|
| Lit cells | Cell i (row by row) is lit when bit i of the hash is 1 |
| Brightness | Each lit cell's opacity comes from its 4-bit nibble: 35% + (nibble + 1) × 65% / 16 |
| Palette | From the hash's first byte: Ember (50%), Amber (25%), Ice (15%), Violet (8%), Mono (2%) |
| Genesis | Block 0 is the only gold Genesis 1/1 |
The traits on Elysium's real first 1,111 blocks:
| Palette | Beacons |
|---|---|
| Ember | 661 |
| Amber | 217 |
| Ice | 126 |
| Violet | 88 |
| Mono | 18 |
| Genesis | 1 |
Density goes by lit-cell count. Balanced covers 1,052 Beacons, while Dense (33) and Sparse (26) are rare.
tokenURI returns base64 JSON with an on-chain SVG. The SDK's beaconSvg(block, hash) produces the identical string, so off-chain previews match the minted art exactly.
Fairness
- Snapshot and lock. The 1,111 hashes are uploaded, then locked permanently. The public
hashesDigest = keccak256(all hashes)lets anyone check the art pool against Elysium before minting. The snapshot lives indata/elysium-first-1111-blockhashes.json, andnpm run fetch-hashes -w contractsregenerates it from the chain. - Mint sealed. Beacons #1–#1,111 are minted in HYPE and start sealed.
- Reveal with GENESIS VRF. One verifiable draw sets an
offset, and Beacon #id then shows block(id − 1 + offset) mod 1111. Nobody, including the team, can pick which Beacon gets the Genesis block. The draw is paid from the project's prepaid credits.
Holder rewards
Share of protocol fees
A configurable share goes to holders, 10% by default:
- every VRF fee, including subscription charges
- the automation keeper premium (gas reimbursement stays whole)
The holders' share accrues in each contract until someone calls flushHolderRewards(token). The operator node does this every few minutes, and anyone can call it. It's then split equally across all Beacons minted so far.
- Rewards accrue per Beacon, so unclaimed rewards move with the NFT when it's sold.
- A Beacon only earns from distributions after its mint.
- Claim with
GenesisBeaconRewards.claim(token, tokenIds), in HYPE or, after launch, GENESIS.
Fee discounts
Holding Beacons counts as a discount tier, alongside staking GENESIS. You get whichever is better.
| Beacons held | Discount |
|---|---|
| 1 | 10% |
| 5 | 25% |
| 10 | 40% |
Contracts
| Contract | Key functions |
|---|---|
GenesisBeacons | mint(quantity) (payable, HYPE), tokenURI, blockOf(id), getHashes(start, count), hashesDigest |
GenesisBeaconRewards | claimable(token, id), claimableMany, claim(token, ids), distribute(token, amount) |
Royalties are 5% under ERC-2981, and the owner can change them.
Operating the mint
BEACONS_ACTION=seed npm run beacons:elysium # upload + LOCK the 1,111 hashes (permanent)
BEACONS_ACTION=open BEACON_MINT_PRICE=<HYPE> BEACON_MAX_PER_WALLET=10 npm run beacons:elysium
BEACONS_ACTION=reveal npm run beacons:elysium # after the mint: the VRF draw that assigns art
BEACONS_ACTION=status npm run beacons:elysiumChange the holder share or Beacon tiers later:
HOLDER_SHARE_BPS=1000 BEACON_TIER_COUNTS=1,5,10 BEACON_TIER_DISCOUNTS_BPS=1000,2500,4000 npm run pricing:elysiumRehearse the whole flow locally with npm run mint-demo -w node.