公共 testnet
公共 testnet 在自己的链 id 之下承载 mainnet 的共识规则,因此它测出来的是 mainnet 的行为,而不是它自己的。它的币毫无价值,而且本就该如此。
它是什么#
zcd genesis --testnet
network zycord-testnet
chain id 2
params hash 0x0b732489dee8fd2bcb5fa37b513b2ea10edc616bd664ba5b55c69952f63e2c1b
genesis id 0xc1b21b079b3dfe781c40a187326bb8dbbcf0fb97164d6fdf7a7d6a536c74705b
state root 0x6974f84b8088039ab721fd6be6ac72b73845e5dc93f0b5625b4e9c564ccf73e3
genesis time 1789430400
cells written 6
allocations 0
在你相信本页之前,先运行那条命令。一个打印出不同
创世区块 id 的构建,是另一条链上的构建,它连不上这一条 —
握手会在任何区块被求值之前就拒绝。allocations 0 就是关于预挖的那项主张,
它可核查,而不是靠承诺。
创世是 2026-09-15T00:00:00Z(unix 1789430400)。你可以在
testnet.zycord.com 观看这条链。
它与 mainnet 只在八个取值上不同,别处一概相同#
name、chain_id、genesis_target、max_target、
genesis_time、randomx_key_interval、h1_bond 和
h1_vm。后两个是启用高度,在这里刻意调得更低:
testnet 在第 1 天和第 3 天就会走到它们,所以在 mainnet 抵达同样的闸口之前,这台机器已经被操练了好几周。其余的一切 —
undo_depth、target_block_seconds、coinbase_maturity,以及
整张 gas 计价表 — 都刻意与 mainnet 一致。尤其是 gas 计价表,
因为正是它让这里测到的基础费行为属于 mainnet,而不属于这个网络自己。一个用自己那套 gas 计价表的 testnet,测的是另一条链。
| 参数 | 公共 testnet | Mainnet |
|---|---|---|
name | zycord-testnet | zycord |
chain_id | 2 | 1 |
genesis_time | 1789430400 — 2026-09-15T00:00:00Z | 1790812800 — 2026-10-01T00:00:00Z |
randomx_key_interval | 512 个区块 | 2048 个区块 |
h1_bond | 2,880 — 约第 1 天 | 40,320 — 约第 14 天 |
h1_vm | 8,640 — 约第 3 天 | 80,640 — 约第 28 天 |
target_block_seconds | 30 — 完全相同 | |
coinbase_maturity | 100 — 完全相同 | |
epoch_length | 2880 个区块,约一天 — 完全相同 | |
ttl_max | 240 个区块,约两小时 — 完全相同 | |
treasury_share_bps | 300,即 3% — 完全相同 | |
testnet 可能会从创世区块重置。一旦重置,它的币、它的历史和它的对等节点列表都不复存在, 网络会取得一个全新的链 id,而持有旧链的数据目录会在启动时被拒绝,而不是被悄悄混在一起。 这两个网络在握手时也会断开,所以没有任何东西会不声不响地带过来。
加入#
make build-randomx # the testnet is randomx-v1; see below
# -> bin/zcd-randomx, bin/zycordd-randomx
./bin/zycordd-randomx --testnet --dir ./testnet
用 make build-randomx,不是 make build。testnet 的
pow_engine 是 randomx-v1,与 mainnet 是同一个工作函数。不带该构建标签编出的
二进制文件在面对它时会拒绝启动,而不会回退到开发用引擎——那个引擎会把单次 BLAKE3 运算当作它见过的每一个区块头的工作量证明来接受。
带标签的二进制文件把标签写在名字里,这样两个都构建之后,两个都留在磁盘上,
而文件名会说明里面是哪个引擎。本站其他页面为求简洁把命令写作 zcd 和 zycordd;
在这个网络上,它们指的是 -randomx 那一对。
引导启动#
二进制文件内置了这个网络的一个种子地址,别的网络一个都没有。 你不必先找到一个对等节点才能开始 — 上面那条命令就是从内置种子加入的。若想改用你自己的种子地址,或者在此之外再加上几个:
zycordd --testnet --dir ./testnet --peers-file peers.txt
zycordd --testnet --dir ./testnet --peers host:9421,host2:9421
zycordd --testnet --dir ./testnet --no-seeds --peers-file peers.txt
如果可以,请让自己可被拨入#
Zycord 不做 NAT 穿透。一个在可达端口上带 --listen 运行的节点,是别人可以
从中引导启动的地方,而这类节点的占比正是整个不做穿透的决定所依赖的那个可证伪条件 — 它是被测量出来的,不是被假定的。
zycordd --testnet --dir ./testnet \
--listen 0.0.0.0:9421 --advertise <public-address>:9421
如果你无法做端口转发,那就不加 --listen,做一个边缘节点。这是完全没问题的参与方式。
用 curl -s
localhost:9420/network 查看你属于哪一种 — 几分钟后仍是 listening: true 而 inbound: 0,
意味着那个端口实际上并不可达。
获取币#
有两条路线,而第二条正是这个网络围绕其设计的那一条。
水龙头#
testnet 区块浏览器运行着一个。它会向你给它的任何地址支付一小笔 金额,好让一次发送、一次退款和一次归集可以被预演,而不必先为 RandomX 分配两个吉字节。它是什么,以及为什么这样 构建,自成一页。
它只存在于这个网络上,别的网络一个都没有。水龙头是区块浏览器的一项功能,
默认关闭,而开启它需要指名一个网络 — 这个名字会与该区块浏览器实际索引的那条链相核对,
且 mainnet 会被直接拒绝。
Mainnet 没有水龙头,也没有预挖,而这是二进制文件里的一项检查,不是某个人得记住的政策。
没有任何币是为它铸造的。水龙头持有一个普通的密钥,通过命令行所用的同一个
wallet/session 签署一次普通的转账,并且每个区块只支付一次领取——因为一份凭证
携带着它读到的状态,两份基于同一次读取其存储单元而构建的凭证会互相竞争。
它的余额来自挖矿,所以空掉的水龙头会一直空着,直到有人把它重新填满。
自行挖矿#
这条路线没有排队,也没有运营者,分配方式与 mainnet 完全相同:
zcd wallet new --out miner.json
zycordd --testnet --dir ./testnet \
--mine --payout $(zcd wallet address --key miner.json)
你要是愿意,可以在网络开放之前就启动它 — 这正是它预期的用法。 如果一个节点的时钟还没到下一个区块可以携带的最早时间戳,它会拒绝构建区块,说明还要等多久, 并在时间到了时自行开始挖矿。 没有什么需要排定,也没有什么需要重启,而且它在整个等待期间都在建立对等连接并同步。
收益地址必须是一个持久(0x02)地址 —
zcd wallet address 默认就打印一个,而 zycordd 会拒绝其他任何
类型,而不是只给个警告。为什么。
coinbase_maturity 是 100,所以在你拿到第一笔奖励之后的大约头一百个区块里,
只有矿工能进行交易。这段爬坡期来自 mainnet,也是这个网络在预演的内容之一 — 而这正是水龙头
在这里存在、在那里不可能存在的原因:对于想练习使用钱包的人来说,水龙头缩短了这段爬坡,
而这是唯一一个缩短它不付任何代价的网络。
挖矿会分配 RandomX 数据集 — 约 2 GiB,外加每持有一个 密钥纪元约 256 MiB。一台能从容验证的机器未必就能挖矿;预算列在 挖矿之下。
testnet 的币毫无价值#
这是刻意的设计,且永久如此。这个网络可以从创世区块重置,而这正是 testnet 的用途。 任何提出买卖它们的人都在行骗,这种骗局甚至不需要编个故事。
这个网络在测量什么#
它不是一个演示。它的存在是为了给以下四件事产出数字:
- 换密钥时的停顿。在 512 个区块的设定下,RandomX 重新换密钥大约每四小时发生一次,而不是 mainnet 的十七小时,因此数据集重建被预演得足够频繁,可以拿来测量,而不只是空谈。
- 在 mainnet 那张 gas 计价表之下的基础费行为,这也正是这里不去调整该计价表的原因。
- 可被拨入的节点占比,这是关于不做 NAT 穿透这一决定的首要重开条件。
- 创世之前的等待,以及一次诚实的提前启动是否真的会变成一次准时的启动,且无需重启任何东西。
当有东西看起来不对劲时#
运行一个节点那页有节点同步不上时的排查路径,以及 当一个数据目录让节点拒绝启动时所用的修复命令。发现和复现步骤应当提交到 问题追踪器;这个项目宁愿收到报告,也不愿被 姑且相信。