Holorium Ten thousand, BNB Chain
Ten thousand Columns
Crystal ore

Each column is drawn from a single ore vein, and its weave and bloom are fixed by the token hash before minting. Every piece enters through a Binance agent wallet.

Holorium crystal column
Supply
10,000
Price
First piece free
Second piece
Paid in BNB, oracle rate
Limit
One mint per wallet
Delivery
Two pieces, one transaction
Entry
Agent ID
Royalty
5 percent

0 of 10,000

Minted so far, read from the chain, 0 percent

Reading the chain One piece free, one mint per wallet

Built for agents

Contract, gate, price, errors, traits, and trading, 14,000 characters
HOLORIUM, AGENT BRIEF
A complete operating guide for software agents that hold a Binance Agentic Wallet and want to mint, read, or trade Holorium. Written to be followed literally. Every number, address, and selector in this document was read from BNB Smart Chain and can be re-read at any time.

SECTION 1. WHAT THIS COLLECTION IS
Holorium is a fixed set of 10,000 crystal columns on BNB Smart Chain. Each piece is a vector drawing of a standing hexagonal crystal with glowing ore veins climbing its faces. There is no character, no frame, no text inside the artwork, and no background plate, so the piece sits directly on whatever colour the page uses.
Every piece is decided before it exists. The token number is hashed, and that hash fixes the rarity grade, the number of veins, the weave, the core reading, the height and width of the column, the exact position of every vein joint, and the placement of the mineral inclusions. Two calls with the same token number always produce the same drawing, so any piece can be reproduced and verified from its number alone. The art is deterministic, and the metadata is the authority on what the art contains.

SECTION 2. NETWORK AND ADDRESSES
Chain: BNB Smart Chain, chain id 56, native token BNB.
Collection contract: 0x66CfaaA0e3D394abBBA970786bdA174f9984A14E
Agent ID registry: 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F
Price feed, Chainlink BNB/USD, eight decimals: 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE
Metadata host: https://holorium.pages.dev/metadata/<token id>.json
Art host: https://holoriumart.pages.dev/art/<token id>.svg
Site: https://holorium.pages.dev
Secondary market: https://element.market/collections/holoriumnft
Explorer page: https://bscscan.com/address/0x66CfaaA0e3D394abBBA970786bdA174f9984A14E
If any address in this brief disagrees with what the site shows, trust the site, then re-read the chain. A redeploy changes the collection address and nothing else. Metadata, art, and hostnames stay the same.

SECTION 3. THE MINT RULES, IN ONE PARAGRAPH
Minting sends exactly two pieces in a single transaction. Sending one piece is refused. A wallet may mint once in its lifetime, so the same wallet cannot come back for a second pair. The wallet that signs must hold a Binance Agent ID, checked on chain at the moment of the mint. Supply stops at 10,000 pieces, and the contract refunds any excess value in the same transaction.

SECTION 4. PRICE MECHANICS
The first piece of a pair is free. The second piece costs 0.25 USD, paid in BNB at the rate the Chainlink feed reports at the moment of the mint. The contract computes the amount itself, in wei, with this expression: price_usd_8 * paid_pieces * 1e18 / bnb_usd_8, where price_usd_8 is 25000000 and bnb_usd_8 is the feed answer, which carries eight decimals.
Worked example. If the feed reports 750.00000000 USD, then bnb_usd_8 is 75000000000, and the amount for a pair is 25000000 * 1 * 1e18 / 75000000000, which is 333333333333333 wei, or about 0.000333 BNB. If BNB trades at 1500 USD, the same pair costs about 0.000167 BNB, because half the dollars buy the same fraction of a coin. Never hardcode this number. Always read it.
The contract refuses to price a mint when the feed answers zero or less, and it reverts with BadFeed instead of charging a nonsense amount. If you see that error, wait and retry rather than guessing a value.

SECTION 5. THE AGENT ID GATE
Minting is closed to plain wallets. The contract asks the registry for the handle of the calling address, hashes that handle with keccak256, and asks the registry who owns the resulting id. The call is allowed only when the answer is the calling address itself. In practice this means the wallet must own an Agent ID that resolves to it. A wallet that holds a handle owned by somebody else fails the check, and a wallet with no handle fails the check. The gate reads the address that signs the transaction, so no agent can mint on behalf of another address, and no agent can bypass the gate by relaying a call through a helper contract.

SECTION 6. RUNBOOK FOR MINTING
Step 1. Confirm the collection address against the site. Never mint against an address you have not confirmed in this session.
Step 2. Read mintOpen() and paused(). Both must be open. If either is closed, stop and report that state instead of sending anything.
Step 3. Read PIECES_PER_MINT(), MAX_PER_WALLET(), and remaining(). The mint quantity is fixed at two, so there is nothing to decide.
Step 4. Read mintedBy(your address). If it is not zero, this wallet has already minted and the contract will refuse a second mint. Do not try.
Step 5. Read hasAgentId(your address). If it is false, the wallet cannot mint, no matter what else is true. Report this and stop.
Step 6. Call cost(2) from your own address. The answer is the exact amount in wei. Read it every time, because it moves with the market.
Step 7. Send mint(2) with exactly that value, in one transaction, from the wallet that owns the Agent ID. Do not split the mint, do not send it in two calls, and do not send a rounded-up amount larger than a few percent, because the refund path costs gas and buys nothing.
Step 8. Wait for one confirmation, then read totalSupply() before and after, and read ownerOf() on the two new ids to confirm the pieces landed in your wallet.
Step 9. Report the two token ids, the amount actually paid, the transaction hash, and the block number. Quote the metadata, not your own description of the art.

SECTION 7. FUNCTION REFERENCE
Read functions, with the four byte selector of each.
name(), 0x06fdde03, returns the string Holorium.
symbol(), 0x95d89b41, returns HLRM.
totalSupply(), 0x18160ddd, how many pieces exist.
remaining(), 0x55234ec0, how many pieces are still unclaimed.
MAX_SUPPLY(), 0x32cb6b0c, 10000.
MAX_PER_WALLET(), 0x0f2cdd6c, 2.
PIECES_PER_MINT(), 0x3d3adfb6, 2.
ROYALTY_BPS(), 0x49c657db, 500, meaning five percent.
baseURI(), 0x6c0360eb, the metadata prefix, currently https://holorium.pages.dev/metadata/
mintOpen(), 0x24bbd049, whether the owner has opened minting.
paused(), 0x5c975abb, whether the owner has stopped everything.
cost(uint256), 0x9097548d, the price in wei for a quantity, read as the caller.
mintedBy(address), 0x3cef28d2, how many pieces an address has taken.
hasAgentId(address), 0x4eab3ef2, whether an address passes the gate.
balanceOf(address), 0x70a08231, how many pieces an address holds.
ownerOf(uint256), 0x6352211e, who holds a token id.
tokensOfOwner(address), 0x8462151c, the full list of ids an address holds, useful because it spares you from walking the whole supply.
tokenURI(uint256), 0xc87b56dd, the metadata address of a piece.
royaltyInfo(uint256,uint256), 0x2a55205a, the royalty receiver and amount for a sale price.
vitalityOf(uint256), 0x7aa8bcf6, the current vitality reading of a piece.
Write functions, all requiring the owner key except the mint and the attestation.
mint(uint256), 0xa0712d68, payable, quantity must be two.
attest(uint256), 0x4af6ffc2, holder only, once per day, raises vitality by two points up to a cap of one hundred.
setMintOpen(bool), 0xf8004d31, owner only.
setPaused(bool), 0x16c38b3c, owner only.
setBaseURI(string), 0x55f804b3, owner only.
withdraw(address), 0x51cff8d9, owner only, sends the whole contract balance to an address.
transferOwnership(address), 0xf2fde38b, owner only.

SECTION 8. ERROR REFERENCE
TwoOnly(), 0x2261ff77. The quantity was not two. Send two.
WalletLimit(), 0x5426a580. Either the wallet has already minted, or the quantity exceeded the per wallet limit of two. One mint per wallet, ever.
NoAgentId(), 0xf947691f. The signing wallet does not own a Binance Agent ID. Mint with a wallet that does, or claim an Agent ID first.
MintClosed(), 0x589ed34b. The owner has not opened minting. Read mintOpen() first.
IsPaused(), 0x1309a563. The owner has stopped the contract. Read paused() first.
SoldOut(), 0x52df9fe5. Fewer than two pieces remain. Read remaining() first.
Underpaid(uint256), 0xa5cc3e35. The value sent was below cost(2). The error carries the required amount in wei. Re-read cost(2), it changes with the market, then retry with that value.
BadFeed(), 0xb0171a5d. The price feed answered zero or less, so the contract refused to price the mint. Wait, then retry.
NotOwner(), 0x30cd7471, and NotAuthorized(), 0xea8e4eb5. The caller is not allowed to run that function.
AlreadyAttestedToday(), 0xfa88208e. Vitality can be raised once per day. Wait for the window to pass.
When a mint fails, the gas is spent and nothing else changes. A failed mint never takes a piece.

SECTION 9. WHAT A PIECE CONTAINS
Metadata is JSON at the metadata host, one file per token id. Each file carries the name, a one line description, the image address, the external address, and four attributes.
Name: Holorium followed by the token number.
Description: One crystal column, drawn from a single ore vein. Its bloom and weave are fixed by the token hash before it is minted.
Image: the SVG at the art host for that id, one thousand by one thousand units, vector, no background.
Attributes: Rarity, Veins, Weave, Core.
Rarity is decided by token number range. Common covers 0 to 5999. Rare covers 6000 to 8499. Epic covers 8500 to 9699. Legendary covers 9700 to 9999.
Veins counts the ore threads climbing the column. Common carries two to three, Rare three to four, Epic four to five, Legendary five to seven.
Weave is one of open, soft, even, dense, tight, braided.
Core is one of faint, warm, bright, blazing.
Read these values from the metadata. Never infer a trait from the picture, and never state a trait the metadata does not contain.

SECTION 10. TRADING
Secondary trading runs on the Element market for this collection. The collection charges five percent royalty through ERC-2981, the receiver is the contract owner wallet, and Element reads the same figure from its own collection settings, which are also set to five percent.
Selling on Element works per piece. The seller connects a browser wallet, approves that single token, sets a price, and lists it. Approvals are per token, and a blanket approval for the whole collection is neither required nor recommended.
Accepting an offer is the same flow in reverse, and offers can be made on any piece that is not listed.
Royalties are paid on chain and the amount is the sale price multiplied by 500 and divided by 10000. For a sale of one BNB the royalty is 0.05 BNB.

SECTION 11. READING THE CHAIN WITHOUT AN INDEXER
There is no private indexer for this collection. Any address, supply, or price figure can be read straight from a public BNB Smart Chain node with eth_call. Use at least three endpoints and fall back in order, because public nodes occasionally answer execution reverted for every call in one moment and behave again the next.
Suitable endpoints include bsc-dataseed.binance.org, bsc-dataseed1.defibit.io, bsc-dataseed1.bnbchain.org, and bsc-dataseed2.defibit.io.
Two pitfalls, learned the hard way. First, a price or history answer of Free API access is not supported for this chain from an explorer API means your plan does not cover that endpoint, not that the data is missing; read the node directly instead. Second, function selectors must be computed with keccak256, never with sha256. A wrong selector answers execution reverted with empty data, which looks exactly like a dead contract. If every call fails at once, check the selector before you believe the contract is broken.
The contract emits Minted(address indexed to, uint256 indexed token id) on every piece, so a mint can be followed from the transaction receipt alone.

SECTION 12. RULES OF ENGAGEMENT FOR AGENTS
Do not mint unless the wallet you sign with owns a Binance Agent ID.
Do not send more than cost(2). The contract refunds the excess, but the value belongs to your owner and a refund costs gas.
Do not split a pair across two transactions, and do not attempt a one piece mint. It is refused by design, because a single free piece is the exact shape of a farm.
Do not mint on behalf of another address. The gate reads the signer.
Do not publish prices, traits, supply, or addresses that you have not read from the chain in this session.
Do not describe the artwork beyond what the metadata states. The metadata is the authority.
Do not promise rarity outcomes. Which id you receive depends on how many pieces exist at the moment of your mint, and the next pair is always the next two ids in order.
Do not attempt to move funds out of the collection contract. Only the owner wallet can, and that is not your role.

SECTION 13. CHECKLIST BEFORE AND AFTER A MINT
Before: collection address confirmed, mintOpen true, paused false, remaining at least two, mintedBy zero, hasAgentId true, cost(2) read in this session.
After: totalSupply increased by exactly two, ownerOf returns the signing wallet for both new ids, the metadata file for each id answers with a valid document, and the paid amount equals the value you computed. Report all of it with the transaction hash and the block number.

SECTION 14. WHOSE PIECE IS IT
The wallet that signs owns the pieces. An agent acting for a user mints into that user's wallet, and the pieces are the user's property from the moment of the mint. An agent must not sell, transfer, or list anything without an explicit instruction from the owner of the wallet, and must not treat a mint as a position it can trade on its own initiative.

SECTION 15. IF SOMETHING LOOKS WRONG
If the site and the chain disagree, the chain wins. If the collection address in this brief does not match the collection address on the site, the brief is out of date: use the site, then re-read this document from the site itself.
If a mint fails with an error not listed in section eight, quote the raw revert data and stop. Do not invent a cause, and do not retry with a larger value hoping it passes.
If the feed is unreadable, the contract will refuse to price the mint with BadFeed. Wait. A refusal is cheaper than a wrong price.
Every figure in this brief can be re-read from the chain with the selectors in section seven. Nothing here needs to be taken on trust.
Market on Element Contract on BscScan Copied

Cut by the chain

Four grades, from common steel through rare cyan, epic violet, and legendary gold. Every column keeps a vein count, a weave, and a core reading. No two pieces share the same shape, and each one can be reproduced from its token number alone.