[ DO NOT TRUST US ]

Every line here is something you can check.

Each row below is either a number on-chain or a file in this repository. Not one of them asks you to take our word for it.

PROVENANCE HASH0xbf220a73c71fed25b0f5331fe6c829ca06a0f9a1b2508ac7ec394c2bdcd9e2a6

A hash of all 888 image hashes, written into the contract at deployment and unchangeable. Regenerate it from this repository and compare with the on-chain number — a match proves the art was never swapped.

node scripts/generate-art.mjs

The art cannot be swapped

The contract's provenanceHash is a hash of all 888 image hashes, fixed at deployment with no function to change it. Regenerate from the repo and compare the number.

provenanceHash()

Rarity cannot be edited

MicroDuckClubRarity packs all 888 tiers into eleven words at deployment, and the contract has no setter. distribution() counts each tier back for you.

distribution()

The floor is backed by real ETH

The reserve is native ETH held by the contract, and floorPrice() = reserve ÷ circulating supply. It can only leave by burning an NFT — there is no admin path.

reserve() / floorPrice()

The reserve share is fixed in the contract

reserveBps is immutable — no function can change it after deployment. It should read 9500, which is 95% of every mint.

reserveBps()

The reveal draws once, and we cannot re-roll it

revealCommitment is immutable and published before minting opens. Exactly one secret satisfies it, and the seed also mixes in entropyAccumulator, which every mint folds into — so nobody can work out the result before minting starts. The only move available to us is to withhold the reveal, which does us no good. The owner and the treasury are both barred from minting, so the party who knows the secret cannot also influence the entropy. There is no VRF on this chain; this is the strongest construction it supports, but it is genuinely weaker than VRF, which the previous BNB Chain version used.

revealCommitment() / entropyAccumulator()

The revenue split is a contract, not a promise

MicroDuckClubSplitter has no owner, no rescue and no sweep. Every wei that reaches it leaves to one of two addresses fixed at deployment — 60% to the NFT, which raises the floor for everyone, 40% to the reward buyer. Anyone can call distribute(); you do not have to wait for us.

totalToFloor() / totalToRewards()

Supply is never extended

MAX_SUPPLY is the constant 888, and the contract has no mint path beyond it.

MAX_SUPPLY()

Per-image hashes

All 888 of them live in provenance.json. Here are the eight legendaries plus the first:

artworkkeccak256
#0010xf0072abf320a57804d4543685f1b4d69b06ad4761050d85c98deffd8e5c829b5
#0080x68a82affad193e7d403df12abf3e8c10d18f44d98d202d7b44eef499d9dc3183
#0880x3cfbe9f4a0818b0c5f892c6f987f2fdf9be1c7043e376bc925a8d99fd09d5d9d
#1880x3edd16a59100319f9f9d919d6c528cb704517d0d58c90d3e2689d398e6e4919d
#2880x033be11dfabf070761855f53db9458525121c3071f9cc266e898d6d781b15fd2
#3880x706259178b214649c0483f86728659a13cceab084c07d75f33e2b296c909e5d3
#4880x9a7b0318e2ff889c282f4edee4dd81a3af70294bb001bc04a906c02cf3c80986
#6880xc79f94f541f53b186b981418509e78a99d9885cdaa80a6bb931c77d5ccab2014
#8880xc62aed1508f3c5055d577d25c8629320a3d95b1ca1966df7caf6fcdb474cff6c

Contract address

0x407473e40ffc43c8bb17d3735455248683f466df