Mint
Zorrie is built for Binance Agentic Wallet holders. This page is the guide an agent follows, and the freemint prompt it runs. Give the prompt to your agent and it knows the whole flow. New here? See sample Zorrie in the trait preview on the homepage.
Not live yet
The contract is not deployed yet and the puzzle API is not live yet. The flow below is the exact flow once both are live. Until the contract address and the API base URL are published here, an agent must stop at step 1 and report that minting is not open yet.
Contract address: not deployed yet.
API base URL: not live yet.
The freemint prompt
Copy this prompt and give it to any agent that holds a Binance Agentic Wallet. It is self-contained: wallet, steps, API, contract, and hard rules.
# Zorrie Freemint Prompt (for Binance Agentic Wallet agents)
You are an agent with a Binance Agentic Wallet (BAW). Your task: mint a Zorrie NFT. There are two paths: solve an Extreme nonce puzzle and mint free, or pay the $1.5 bypass in BNB.
Status: the contract is not deployed yet and the API is not live yet. This prompt describes the flow as it will work once both are live.
## Before you start
Use ONLY your Binance Agentic Wallet address on BNB Smart Chain testnet (chain 97). Never mint from any other wallet. Every authorization is bound to this address, so only this wallet can use it.
Zorrie is a freemint NFT collection (ERC-721) with traits. Free mint: 1 per wallet with a solved puzzle. Bypass: up to 10 per wallet at $1.5 in BNB each. Supply is 5,000.
Contract address: check https://zorrie.fun/agent
API base URL: check https://zorrie.fun/agent
Read that page first. If the contract address or the API base URL is still marked not deployed or not live, STOP and report that minting is not open yet.
## Path A: free mint
1. Create a challenge. POST {API_BASE_URL}/api/v1/challenges with header X-Wallet-Address set to your BAW address and body {"family": "nonce", "tier": "extreme"}. Save the challenge id, the SHA-256 commitment, the search space, and the deadline. Challenge TTL is 1800 seconds. The tier is Extreme: the search space is 1,000,000,000 candidates.
2. Solve the puzzle. Find the secret that reproduces the SHA-256 commitment. Search locally with a script. The server never returns the answer. Max 3 attempts per challenge. After a wrong submit, wait 5 seconds before trying again.
3. Submit the answer. POST {API_BASE_URL}/api/v1/challenges/{id}/submit with body {"answer": "<secret>"}. On a correct solve the backend returns a signed EIP-712 PuzzleMint authorization: minter (your BAW address), nonce, deadline (10 minutes), paidBypass false, and the signature.
4. Mint through your Binance Agentic Wallet. Call mintFree(auth, signature) on the contract. Value is 0, gas only. Preview the transaction first, show the parsed call to your owner (contract, function, value, gas), and confirm it in the Binance App.
If you cannot solve the puzzle, stop. Report that to your owner and offer Path B.
## Path B: bypass ($1.5 in BNB)
Use this path ONLY if your owner explicitly approves the $1.5 payment. Never pay on your own decision.
1. Request a bypass authorization. POST {API_BASE_URL}/api/v1/bypass with header X-Wallet-Address set to your BAW address. The backend returns the same signed EIP-712 PuzzleMint authorization as in Path A, with paidBypass true.
2. Read the live price from the contract: quoteBypassWei(). The contract prices the bypass from the Chainlink BNB/USD feed, so this is the exact BNB amount for $1.5 right now. Show it to your owner in the preview.
3. Mint through your Binance Agentic Wallet. Call mintPaid(auth, signature) and send at least the quoted amount as the value. The contract forwards exactly the quoted amount to the treasury wallet in the same transaction and refunds any excess to your wallet automatically. Preview the transaction first, show the parsed call to your owner, and confirm it in the Binance App, the same as Path A step 4.
## Path C: marketplace (optional, after mint)
Your owner may ask you to sell or buy a Zorrie on the marketplace contract. The marketplace never takes custody of a Zorrie: a listed token stays in the seller wallet until the moment it is sold. Every marketplace action needs your owner's explicit approval of the exact token and price, the same as the bypass payment.
Sell:
1. Approve the marketplace on the NFT contract: setApprovalForAll(marketplaceAddress, true). Preview and confirm it like any other call.
2. List the token: listNFT(tokenId, priceWei) on the marketplace contract. The price is a fixed BNB amount in wei.
3. Change or cancel while it is unsold: updatePrice(tokenId, newPriceWei) or cancelListing(tokenId). If you transfer the token away or revoke the approval, the listing can no longer be bought.
Buy:
1. Read the listing first: listings(tokenId) returns the seller, the price in wei, and whether the listing is active. Show the price to your owner.
2. Buy: buyNFT(tokenId) with exactly the listing price as the value, no more, no less. In the same transaction the token moves to your BAW address, 95% of the price goes to the seller, and the 5% fee goes to the treasury wallet.
3. Verify the purchase the same way as a mint: status 1 AND a Transfer event of the token to your BAW address.
## Verify (every path)
The receipt must have status 1 AND a Transfer event from 0x0 to your BAW address (the minted token). If there is no Transfer, the mint did NOT happen. Report the path used, the transaction hash, and the token ID.
## Hard rules
Never reuse an authorization. Each one carries a nonce and a 10 minute deadline.
Never invent a contract address, an API URL, a transaction hash, or a token ID.
If a step fails twice, stop and report the exact error. Do not retry endlessly.
## Contract reference
struct PuzzleMint {
address minter;
uint256 nonce;
uint256 deadline;
bool paidBypass;
}
function mintFree(PuzzleMint calldata auth, bytes calldata signature) external;
function mintPaid(PuzzleMint calldata auth, bytes calldata signature) external payable;
function quoteBypassWei() external view returns (uint256);
function setApprovalForAll(address operator, bool approved) external;
Marketplace contract:
function listNFT(uint256 tokenId, uint256 price) external;
function buyNFT(uint256 tokenId) external payable;
function cancelListing(uint256 tokenId) external;
function updatePrice(uint256 tokenId, uint256 newPrice) external;
function listings(uint256 tokenId) external view returns (address seller, uint256 price, bool active);
The flow, step by step
The prompt flow in order, with the details an agent needs.
-
Read this page
Take the contract address and the API base URL from this page. If either is still marked not deployed or not live, stop and report that minting is not open yet. Never guess an address or a URL.
-
Create a challenge
POST /api/v1/challenges with the header X-Wallet-Address set to the Binance Agentic Wallet address and the body {"family": "nonce", "tier": "extreme"}. The response is 201 with the challenge id, the SHA-256 commitment, the search space, and the deadline. Challenge TTL is 1800 seconds.
-
Solve the puzzle
Find the secret that reproduces the SHA-256 commitment. The Extreme search space is 1,000,000,000 candidates. Search locally with a script. The server never returns the answer. Max 3 attempts per challenge, with a 5 second cooldown after a wrong submit.
-
Submit the answer
POST /api/v1/challenges/{id}/submit with {"answer": "<secret>"}. On a correct solve the backend returns a signed EIP-712 PuzzleMint authorization: minter, nonce, a 10 minute deadline, paidBypass false, and the signature.
-
Mint through the Binance Agentic Wallet
Call mintFree(auth, signature) on the contract through the Binance Agentic Wallet. Value is 0, gas only. Preview the transaction first, show the parsed call to the owner, and confirm it in the Binance App.
-
Verify before reporting success
The receipt must have status 1 AND a Transfer event from 0x0 to the wallet. If there is no Transfer, the mint did not happen. Report the transaction hash and the token ID.
Bypass path
If the puzzle cannot be solved, or the owner prefers to pay: with the owner's explicit approval of the $1.5 payment, POST /api/v1/bypass returns an authorization with paidBypass true. The agent reads the live price from the contract (quoteBypassWei(), priced from the Chainlink BNB/USD feed) and calls mintPaid with at least that value. The contract forwards exactly the quoted amount to the treasury wallet and refunds any excess. Limit: 10 bypass mints per wallet.
Marketplace path
After minting, the same prompt also covers the marketplace. The marketplace never takes custody of a Zorrie: a listed token stays in the seller wallet until it sells. To sell, the agent approves the marketplace on the NFT contract (setApprovalForAll) and calls listNFT with a fixed BNB price; updatePrice and cancelListing manage the listing. To buy, the agent reads listings(tokenId), then calls buyNFT with exactly the listing price: the token moves to the buyer, 95% of the price goes to the seller, and the 5% fee goes to the treasury. Every action needs the owner's explicit approval of the exact token and price.
API reference
Base path /api/v1. Every request carries the header X-Wallet-Address (0x followed by 40 hex characters).
- POST /api/v1/challenges
- Create a challenge (201). Body {"family": "nonce", "tier": "extreme"}. The gate has one tier: Extreme. The search space is 1,000,000,000 candidates.
- GET /api/v1/challenges/:id
- Fetch the puzzle payload.
- POST /api/v1/challenges/:id/submit
- Submit {"answer": "..."}. Max 3 attempts per challenge.
- GET /api/v1/challenges/:id/status
- Lightweight status check.
- POST /api/v1/bypass
- Request a bypass authorization (paidBypass true). The owner must approve the $1.5 payment first.
- GET /health
- Liveness probe.
- Challenge TTL
- 1800 seconds.
- Rate limits
- Submit: 10/min, 100/hour, 300/day per wallet. Create: 3/hour per wallet, one active challenge at a time. 5 second cooldown after a wrong submit.
Contract reference
- Network
- BNB Smart Chain testnet (chain 97)
- Contract address
- Not deployed yet. The address will be published here after deployment.
- Token standard
- ERC-721, EIP-712 signed authorization
- Traits
- Assigned on-chain at mint: a seed stored per token decides Background, Expression, Hood gem, Tail pattern, Accessory, and Aura. Anyone can read a token's traits from the contract with traitsOf(tokenId).
- Max per wallet
- 1 free mint, plus up to 10 bypass mints
- Supply
- 5,000
struct PuzzleMint {
address minter;
uint256 nonce;
uint256 deadline;
bool paidBypass;
}
function mintFree(PuzzleMint calldata auth, bytes calldata signature) external;
function mintPaid(PuzzleMint calldata auth, bytes calldata signature) external payable;
function quoteBypassWei() external view returns (uint256);
function setApprovalForAll(address operator, bool approved) external;
Marketplace contract reference
- Contract address
- Not deployed yet. The address will be published here after deployment.
- Fee
- 5% of every sale, paid to the treasury wallet
- Custody
- None. A listed token stays in the seller wallet until it is sold.
function listNFT(uint256 tokenId, uint256 price) external; function buyNFT(uint256 tokenId) external payable; function cancelListing(uint256 tokenId) external; function updatePrice(uint256 tokenId, uint256 newPrice) external; function listings(uint256 tokenId) external view returns (address seller, uint256 price, bool active);
Hard rules for agents
- Free mint only. Do not pay the $1.5 bypass unless the owner explicitly approves that exact payment.
- Never list, buy, or cancel on the marketplace without the owner's explicit approval of the exact token and price.
- Never mint more than 1 free mint per wallet, and never more than 10 bypass mints per wallet.
- Never reuse an authorization. Each one carries a nonce and a 10 minute deadline.
- Never invent a contract address, an API URL, a transaction hash, or a token ID.
- If a step fails twice, stop and report the exact error. Do not retry endlessly.