[ 不必相信我们 ]

每一句话,你都能自己查。

下面每一行要么是链上的一个数字,要么是这个仓库里的一个文件。 没有一条需要你相信我们说的话。

PROVENANCE HASH0x53b350520c11391cd39538a24b96a96d815cc6c69b52cea9db8caf646bad1a0b

对全部 888 张图的哈希再取一次哈希,部署时写进合约且不可更改。 用本仓库重新生成一遍,再和链上的数字比对——一致就说明美术没有被换过。

node scripts/generate-art.mjs

美术不可掉包

合约里的 provenanceHash 是对全部 888 张图哈希的哈希,部署时写死,没有修改函数。用仓库重新生成一次,比对这个数字。

provenanceHash()

稀有度不可修改

FlorkClubRarity 在部署时把 888 个档位打包进六个字,合约里没有 setter。distribution() 会把每档数量算出来给你。

distribution()

floor 有 ETH 真实兜底

reserve 是合约持有的原生 ETH,floorPrice() = reserve ÷ 流通量。储备只能通过销毁 NFT 取出,没有管理员通道。

reserve() / floorPrice()

储备比例写死在合约里

reserveBps 是 immutable,部署后没有任何函数能改它。读出来应该是 9500,也就是每次铸造的 95%。

reserveBps()

揭晓只能开一次,且我们无法重摇

revealCommitment 是 immutable,在开铸之前就已公布。只有一个 secret 能通过它,而种子还要混入 entropyAccumulator——那是每一次铸造累积出来的,开铸前谁也算不出结果。我们唯一能做的是不揭晓,而那对我们没有好处。owner 和 treasury 都被禁止铸造,所以知道 secret 的人无法同时影响熵。这条链上没有 VRF,这是它能支持的最强做法,但它确实弱于 VRF——上一版在 BNB 链上用的是 VRF。

revealCommitment() / entropyAccumulator()

总量永不追加

MAX_SUPPLY 是常量 888,合约没有任何增发入口。

MAX_SUPPLY()

单张图的哈希

全部 888 条在 provenance.json 里。这里是八位传奇加第一张:

artworkkeccak256
#0010xab4f654288a72cbfcd6d11a1de17f46984083a571dde30fa16dd6d661ab74d19
#0080xb2cda1d96bcbcc6fbd9ab25c1f8ba7552cb82a80c3a54e023d0e9e179dcc97ce
#0880x609092496b747a86003692cc62eae35fe6b2f3d3fb899438ae0d8db2556c26d5
#1880xdff1192a8462e02bec8198ca7cfdcc4248efdb9b58f4b94072cf2948f602c5f0
#2880xf30bff1107b57b07d024e002a0c0ee7eae8d1e9eb0b076b18daa180d14f8650a
#3880x890217863ea246ec94dcb8b96ff7dc901f7fb5871b156b8ad9a7f7ad0687cb33
#4880xd83a19fb0342ce8ebe62d0a00e3a2eb3f0e84e8f059a3c17349d97b21ba0f91e
#6880xf7e8937a5408c6523a56fd446f88ef69285d8a27082073c4feea19703c9839a7
#8880xa0ba09f06fbe9fc623fb3f92bb7972b4a9ae0d2943850cb2f7478b787fe94a90

合约地址

尚未部署。上线后已验证地址会先出现在首页的合约面板, 也会出现在这里。在此之前流通的任何地址都不是我们的。