ZYCORD 文档
简体中文
Zycord文档公共 testnet

公共 testnet

公共 testnet 在自己的链 id 之下承载 mainnet 的共识规则,因此它测出来的是 mainnet 的行为,而不是它自己的。它的币毫无价值,而且本就该如此。

它是什么#

zcd genesis --testnet
network        zycord-testnet
chain id       2
params hash    0xc4a670f04575ac3aa6e670888e1a42ec877779fda8e5519e2637f4df93815b57
launch commit  0x83aeb709b14b43a0296666f006d99378049064f3e30d8191e074e09d485e2ff7
genesis id     0x81094507a4a083d01e24af21bddbf4d7eb496472a69c4b5dfb0d7a27c6b03b55
state root     0x4f45e604e1fd7ccf066e20e5fd41105373a0ba0d28aea8fc825b8795e880384f
genesis time   1791158400
cells written  6
allocations    0

在你相信本页之前,先运行那条命令。一个打印出不同 创世区块 id 的构建,是另一条链上的构建,它连不上这一条 — 握手会在任何区块被求值之前就拒绝。allocations 0 就是关于预挖的那项主张, 它可核查,而不是靠承诺。

创世时间是 2026-10-05T00:00:00Z(unix 1791158400),比 mainnet 早两天:testnet 用同一个二进制文件和同一套流程预演了这次启动。现在它是Era 1 率先运行的地方 — cEVM、定序器、意图与 fill、定序器目录以及强制路径,自高度 2,880(它的第一天)起就已在这里启用,而 mainnet 要到高度 80,640 才到达同一道关口。你可以在 testnet.zycord.com 上观察这条链。

它与 mainnet 只有十个取值不同,其余一概相同#

name、chain_id、genesis_target、max_target、genesis_time、randomx_key_interval、h1_bond、h1_vm、coinbase_maturity 和 launch_commit。这里的启用高度是刻意调低的:testnet 在它的第一天就达到了它们,所以这台机器会在 mainnet 走到同一道关口之前被检验好几周。h1_bond 随 h1_vm 一起变动,而且在两个网络上都不开启任何东西:绑定不属于Era 1。发布承诺是 testnet 自己的,所以它的区块 1 预演了 mainnet 的发布,却不会泄露 mainnet 的那一份。其余一切 — undo_depth、target_block_seconds、补贴划分,以及整张 gas 计价表 — 都刻意沿用 mainnet 的。尤其是 gas 计价表,因为正是它让这里测得的基础费行为属于 mainnet,而不是这个网络自己的。一个使用自己那张 gas 计价表的 testnet,测量的是另一条链。

参数公共 testnetMainnet
namezycord-testnetzycord
chain_id21
genesis_time1791158400 — 2026-10-05T00:00:00Z1791331200 — 2026-10-07T00:00:00Z
randomx_key_interval512 个区块2048 个区块
h1_bond、h1_vm2,880 — 约第 1 天80,640 — 约第 28 天
coinbase_maturity100 个区块240 个区块
target_block_seconds30 — 完全相同
epoch_length2880 个区块,约一天 — 完全相同
ttl_max240 个区块,约两小时 — 完全相同
emission_ramp_blocks86,400,即 30 天的奖励爬坡期 — 完全相同
founder_share、treasury_share_bps94% 矿工,3% 创始人直至 3,153,600,3% 国库 — 完全相同
加入一个已被重置的网络之前,请先删除你的数据目录

testnet 可能会从创世区块重置。一旦重置,它的币、它的历史和它的对等节点列表都不复存在, 网络会取得一个全新的链 id,而持有旧链的数据目录会在启动时被拒绝,而不是被悄悄混在一起。 这两个网络在握手时也会断开,所以没有任何东西会不声不响地带过来。

加入#

make build-randomx        # the testnet is randomx-v2; see below
                          #   -> bin/zcd-randomx, bin/zycordd-randomx

./bin/zycordd-randomx --testnet --dir ./testnet

用 make build-randomx,不是 make build。testnet 的 pow_engine 是 randomx-v2,与 mainnet 是同一个工作函数。不带该构建标签编出的 二进制文件在面对它时会拒绝启动,而不会回退到开发用引擎——那个引擎会把单次 BLAKE3 运算当作它见过的每一个区块头的工作量证明来接受。

带标签的二进制文件把标签写在名字里,这样两个都构建之后,两个都留在磁盘上, 而文件名会说明里面是哪个引擎。本站其他页面为求简洁把命令写作 zcd 和 zycordd; 在这个网络上,它们指的是 -randomx 那一对。

引导启动#

二进制文件内置了 testnet 的种子节点:端口 19421 上的 seed1.zycord.com 到 seed4.zycord.com。mainnet 的种子节点是同一批主机,端口为 9421,两个网络会在握手时互相拒绝,因此不会混在一起。一个 把 testnet.zycord.com 作为种子节点的旧版二进制文件应当被替换,而不是 设法绕过。要改为提供其他对等节点,或额外提供:

zycordd --testnet --dir ./testnet --peers-file peers.txt
zycordd --testnet --dir ./testnet --peers host:19421,otherhost:19421
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 | awk '/^persistent/ {print $3}')

收益地址必须是一个持久(0x02)地址 — 即 zcd wallet address 输出中的 persistent 那一行,该命令也会打印下一个一次性 地址 — 而 zycordd 会拒绝其他任何类型,而不是只给个警告。为什么。

coinbase_maturity 是 100,所以在你拿到第一笔奖励之后的大约头一百个区块里, 只有矿工能进行交易。这段爬坡期来自 mainnet,也是这个网络在预演的内容之一 — 而这正是水龙头 在这里存在、在那里不可能存在的原因:对于想练习使用钱包的人来说,水龙头缩短了这段爬坡, 而这是唯一一个缩短它不付任何代价的网络。

挖矿会分配 RandomX 数据集 — 约 2 GiB,外加每持有一个 密钥纪元约 256 MiB。一台能从容验证的机器未必就能挖矿;预算列在 挖矿之下。

testnet 的币毫无价值#

这是刻意的设计,且永久如此。这个网络可以从创世区块重置,而这正是 testnet 的用途。 任何提出买卖它们的人都在行骗,这种骗局甚至不需要编个故事。

这个网络在测量什么#

它不是一个演示。它的存在是为了给以下四件事产出数字:

  • 换密钥时的停顿。在 512 个区块的设定下,RandomX 重新换密钥大约每四小时发生一次,而不是 mainnet 的十七小时,因此数据集重建被预演得足够频繁,可以拿来测量,而不只是空谈。
  • 在 mainnet 那张 gas 计价表之下的基础费行为,这也正是这里不去调整该计价表的原因。
  • 可被拨入的节点占比,这是关于不做 NAT 穿透这一决定的首要重开条件。
  • 真实负载下的Era 1:定序器、fill 和强制路径在一个活跃网络上运行,比 mainnet 到达它的关口早好几周。

当有东西看起来不对劲时#

运行一个节点那页有节点同步不上时的排查路径,以及 当一个数据目录让节点拒绝启动时所用的修复命令。发现和复现步骤应当提交到 问题追踪器;这个项目宁愿收到报告,也不愿被 姑且相信。