The mint and its ten tranches
Revised mint-tranches page: all four fact-check refutations and the missing explorer link fixed from the contracts (Minted event fields, once-rounded 1.08^(n-1) formula, vector test pins wei via cents
You mint a sealed card in one transaction. A $CARDS leg is burned from your wallet and a small ETH leg goes to the treasury. The price climbs ten steps with mint order, from 20,000 $CARDS to 39,980 $CARDS, plus a flat $2.00 ETH leg, and nobody can edit the table.
Before this page This page assumes a wallet on Robinhood Chain that already holds $CARDS, and the loop from Start here. Every constant named here has a row on Reference.
What it is #
A tranche is a price step. The 5,040 table cards mint in strict id order, and the price moves every 500 cards. Tranche 1 is mint numbers 1 to 500, tranche 2 is 501 to 1,000, and tranche 10 takes 4,501 to 5,040, the last 540. Mint number and token id are the same number, so trancheIndex(mintNo) is (mintNo - 1) / 500, clamped to 9.
The ladder exists so that price tracks order, not the clock. Tranche n costs 20,000 x 1.08^(n-1) $CARDS, rounded to whole $CARDS, and the ETH leg is a flat $2.00 in every tranche. Early minters pay less, and the burn at sellout lands at 14.65% of the 1 B supply. The odd part is that you do not pick your tranche. Ids go out in sequence, so your price depends on how many cards minted before you.
Rules #
mint(count)mintscountsealed cards in one transaction.burnFromdestroys the $CARDS leg straight from your wallet. The ETH leg goes in full to the immutable TREASURY and the excess comes back in the same call, elseEthTransferFailed.- Approve MinersNFT for the $CARDS total first. The app asks once, for a max allowance.
- The price is read from the first id in the call and applied to every card in it.
countis 1 or more, elseZeroCount.- The last id in the call is 5,040 at most, else
SoldOut. - One call stays inside one tranche, else
TrancheBoundary. - No per-wallet cap. A wallet mints as many as it pays for. One call takes up to 100 cards (
MAX_PER_TX), elseTooManyPerTx; call again for more. - The value sent covers the ETH leg times
count, elseInsufficientEth. mintPrice(mintNo)andtrancheIndextake 1 to 5,040, elseMintNoOutOfRange.mintopens at MINT_START when GTD_MERKLE_ROOT is zero, and 30 min later when a root is set, elsePublicMintNotOpen. Listed wallets callmintGtd(count, proof)from MINT_START, with no cutoff and no tranche restriction, elseMintNotStartedorNotOnGtdList. On this build the deploy script sets the root to zero, so everyone mints from MINT_START; the allowlist is open before mainnet. No other entry point exists in code.- The mint has no end time and no pause, and it stays open after reveal. MINT_START is set at deploy.
- Cards go out with
_mintrather than_safeMint, so noonERC721Receivedhook runs. Each call emitsMinted(to, firstId, count, cardsBurned, ethPaid). - You receive a sealed card. Element, design and edition are readable from the id; tier and stars come with reveal. The app says "Traits reveal when the seed drops."
Figure 2.1 One mint transaction
your wallet → approve, once → MinersNFT allowance contracts/interfaces/ICards.sol:9-11; app/web/src/app/mint/MintApp.tsx:403-411
your wallet → burnFrom(cardsTotal) → $CARDS supply, destroyed contracts/src/MinersNFT.sol:201
your wallet → msg.value → MinersNFT → ethTotal → TREASURY MinersNFT.sol:203
your wallet ← msg.value less ethTotal ← MinersNFT MinersNFT.sol:206-210
the second approval, of MinePool for the bond, belongs to the deck page contracts/src/MinePool.sol:288-291
Numbers #
The table is a bytecode constant with no setter; its ETH column is frozen to wei at 2,500 USD/ETH and re-frozen at the live rate before mainnet. The USD figure is the one that holds; the wei is read live from mintPrice(). The vector test pins the $CARDS column and derives the wei from the cent figures at that rate, so a re-frozen column changes the test's rate factor too (contracts/test/MinersNFT.t.sol:131-150). At sellout 146,464,700 $CARDS are burned and 4.032 ETH, $10,080 nominal, goes to the treasury. Both totals are derived.
| Tranche | Mint numbers | $CARDS per card (burned) | ETH leg (USD) | ETH leg (ETH, frozen at 2,500 USD/ETH; set at deploy, read live from mintPrice()) | Cumulative $CARDS burned (derived) | Source |
|---|---|---|---|---|---|---|
| 1 | 1 to 500 | 20,000 | $2.00 | 0.0008 | 10,000,000 | MinersNFT.sol:224,236 |
| 2 | 501 to 1,000 | 21,600 | $2.00 | 0.0008 | 20,800,000 | MinersNFT.sol:225,237 |
| 3 | 1,001 to 1,500 | 23,328 | $2.00 | 0.0008 | 32,464,000 | MinersNFT.sol:226,238 |
| 4 | 1,501 to 2,000 | 25,194 | $2.00 | 0.0008 | 45,061,000 | MinersNFT.sol:227,239 |
| 5 | 2,001 to 2,500 | 27,210 | $2.00 | 0.0008 | 58,666,000 | MinersNFT.sol:228,240 |
| 6 | 2,501 to 3,000 | 29,387 | $2.00 | 0.0008 | 73,359,500 | MinersNFT.sol:229,241 |
| 7 | 3,001 to 3,500 | 31,737 | $2.00 | 0.0008 | 89,228,000 | MinersNFT.sol:230,242 |
| 8 | 3,501 to 4,000 | 34,276 | $2.00 | 0.0008 | 106,366,000 | MinersNFT.sol:231,243 |
| 9 | 4,001 to 4,500 | 37,019 | $2.00 | 0.0008 | 124,875,500 | MinersNFT.sol:232,244 |
| 10 | 4,501 to 5,040 (540 cards) | 39,980 | $2.00 | 0.0008 | 146,464,700 | MinersNFT.sol:233,245,251-256 |
| Condition | Revert | Plain trigger | Source |
|---|---|---|---|
count is 0 | ZeroCount | You asked for nothing | MinersNFT.sol:172 |
| Last id above 5,040 | SoldOut | The table is sold out, or your count runs past it | MinersNFT.sol:173-175 |
| First and last id in different tranches | TrancheBoundary | Your call straddles a price step; lower count | MinersNFT.sol:176-178 |
count above 100 | TooManyPerTx | One call mints at most 100; split the order | MinersNFT.sol:48,173 |
Value below ETH leg times count | InsufficientEth | Send the figure read live from mintPrice(mintNo) | MinersNFT.sol:181-184 |
| mintNo is 0 or above 5,040 | MintNoOutOfRange | mintPrice or trancheIndex asked outside 1 to 5,040 | MinersNFT.sol:252 |
| Before MINT_START, or before MINT_START + 30 min with a root set | PublicMintNotOpen | mint called too early | MinersNFT.sol:46,153-155 |
mintGtd before MINT_START | MintNotStarted | Listed wallet called too early | MinersNFT.sol:161 |
| Proof fails against GTD_MERKLE_ROOT | NotOnGtdList | Wallet not on the list; use mint once it opens | MinersNFT.sol:163-164 |
| Forward to TREASURY or refund to you fails | EthTransferFailed | The receiving address rejected ETH | MinersNFT.sol:203-209 |
Worked example #
Alice mints the wallet maximum, two cards in each of the first three tranches.
tranche 1 approve MinersNFT for at least 40,000 $CARDS
2 x 20,000 = 40,000 $CARDS burned
2 x 0.0008 = 0.0016 ETH to the treasury
she sent 0.0020 ETH, so 0.0020 - 0.0016 = 0.0004 ETH refunded
a third, a tenth or a hundredth card in tranche 1 is fine; there is no wallet cap
tranche 2 2 x 21,600 = 43,200 $CARDS; 2 x 0.0008 = 0.0016 ETH
tranche 3 2 x 23,328 = 46,656 $CARDS; 2 x 0.0008 = 0.0016 ETH
lifetime 40,000 + 43,200 + 46,656 = 129,856 $CARDS burned
0.0016 + 0.0016 + 0.0016 = 0.0048 ETH ($12 nominal)
101 cards in one call revert TooManyPerTx; 100 + 1 in two calls go through
one call for mint numbers 500 and 501 reverts TrancheBoundary
MinersNFT.sol:178-184,201-210,224-226,236-238
| Tranche | Cards | $CARDS per card | $CARDS burned | ETH leg per card | ETH sent | Refund (ETH) | Running $CARDS burned | Running ETH to treasury | Source |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 20,000 | 40,000 | 0.0008 | 0.0020 | 0.0004 | 40,000 | 0.0016 | MinersNFT.sol:181-183,201-210,224,236 |
| 2 | 2 | 21,600 | 43,200 | 0.0008 | 0.0016 | 0.0000 | 83,200 | 0.0032 | MinersNFT.sol:225,237 |
| 3 | 2 | 23,328 | 46,656 | 0.0008 | 0.0016 | 0.0000 | 129,856 | 0.0048 | MinersNFT.sol:226,238 |
| Total | 6 | 129,856 | 0.0052 | 0.0004 | 129,856 | 0.0048 | MinersNFT.sol:180 |
Edge cases #
- No team reserve and no airdrop allocation. The only held-back cards are the 10 one-of-ones, minted to TREASURY in the constructor. A mint never yields a one-of-one.
- If a merkle list ships at mainnet, listed wallets mint from MINT_START and everyone else 30 min later. Nothing else changes; the limits and the table are the same through both entry points.
- The app caps the number you can pick from a poll up to 10 s old. If the tranche turns between poll and transaction, the contract prices from the first id and reverts
TrancheBoundaryorInsufficientEth. - Reveal follows sellout or REVEAL_DEADLINE, set at deploy, and the table does not change after it.
Verify it on-chain #
Open the MinersNFT read-contract tab (address on Reference) and call
mintPrice(1),mintPrice(5040),trancheIndex(500),trancheIndex(501),totalMinted(),totalSupply(),MAX_PER_TX(),GTD_MERKLE_ROOT(),MINT_START()andTREASURY().mintPrice(1)returns800000000000000wei, 0.0008 ETH, and20000e18, 20,000 $CARDS.trancheIndex(501)returns 1; the index is zero-based, so that is tranche 2 here.totalSupply()is minted table cards plus 10, less cards burned by merge.GTD_MERKLE_ROOT()returns zero on this build (MinersNFT.sol:41-49,63-69,132,221-256,264-266; contracts/script/Deploy.s.sol:97).
Not in the game #
- "$1 in GTD and FCFS, $2 public" (opensea-description.txt:7; site/index.html:106,454-455). Tranche 1 is 20,000 $CARDS burned plus a $2.00 ETH leg; no flat or ETH-only price exists (MinersNFT.sol:224,236).
- "2 per tranche, 6 lifetime" (older builds and posts). No per-wallet cap exists; only 100 per call (MinersNFT.sol:48,173).
- "200 team cards" (opensea-description.txt:7). Only the 10 one-of-ones are held back (MinersNFT.sol:140-144).
Next #
Read this if you are here to... Top up a bond, read the bond rule. Claim, read Claiming. Merge two of a kind, read Merge. Sell a card, read Locked; a card in a deck cannot move.
Next page, Sealed cards, reveal and traits, what the id tells you before the seed drops.