源代码
一个仓库,采用 MIT 许可:节点、钱包、命令行、参数集,以及定义协议的黄金向量。这个网络运转所需的一切都在里面。
这个站点上的任何东西,都不比你不用求人就能自己核对的东西更值钱,而核对就从这里开始。一个匿名作者拿不出声誉;他能拿出来的,是一棵你可以读、可以构建、可以拿去和别人递给你的二进制文件作比对的代码树。
克隆它#
git clone https://gitlab.com/zycord-group/zycord-node.git
cd zycord-node
或者先在浏览器里读一读: gitlab.com/zycord-group/zycord-node。
这个项目的规范位置 — 包括这一处 — 都钉在公告帖子里那份签名的证明中,使用的项目密钥是 E724 39CE DD85 11F9 D607 550B 87FD 60D5 EB4A 0B29。托管在别处的代码树是副本:它可能诚实,可能陈旧,也可能怀有恶意,而这个页面无法告诉你是哪一种。在信任任何镜像之前,先核对那份签名的清单,并且只从你亲自验证过哈希的标签去构建。
里面有什么#
| 目录 | 里面装着什么 |
|---|---|
spec/ | 协议本身。参数集、黄金向量,以及预先部署的库镜像。一个能通过这些向量的实现是同侪,不是分叉。 |
core/ | 共识关键代码,只用标准库:存储单元模型、无状态有效性、折叠 (fold)、为凭证改造过的 EVM,以及藏在构建标签后面的 RandomX。 |
node/ | 围绕那个内核的节点 — 存储、内存池、矿工、对等层、同步、只读 RPC、Stratum。 |
wallet/ | 密钥管理与凭证构造器。是一份参考,不是共识。 |
cmd/ | zycordd,节点;zcd,命令行和钱包。 |
sim/ | 模拟器和模糊测试装置,一个刻意写得笨拙、用来与真正那份对拍模糊测试的第二份折叠 (fold),以及让真实节点跑在真实套接字上的混沌浸泡测试。 |
contracts/ | 参考合约,用 Solidity 写的。 |
packaging/ | 安装脚本和各平台的打包件,在你运行之前就可以审阅。 |
docs/ | 架构、协议参考、运营指南和白皮书。 |
协议就是那些向量#
这棵树里的 Go 代码是一份参考实现,而且刻意不是那个定义。定义这个网络的是
参数集和黄金向量:每一条折叠 (fold)、区块和有效性规则都是一个
(前置状态, 区块) → (后置状态, 费用) 用例,正例和反例都有。用你喜欢的任何语言写你自己的节点 — 只要它通过这套语料,它就是同侪,而这份实现对它没有任何优先地位。
启用高度也住在同一个地方。h1_bond 和 h1_vm 是
创世时冻结下来的参数,而不是一次发布:机器被编译进每一个二进制文件,并在其高度之下被拒绝,所以一个时代之所以到来,是因为链走到了某个数字,绝不是因为有人请求运营者升级。
构建它#
make build # no cgo, reproducible, development engine only
make build-randomx # the network binary: mainnet and the public testnet
只有 RandomX 那个构建能接入网络。默认构建是逐字节可复现的,跑的是本地 devnet;这两者刻意写出不同的文件,这样一个无法与 mainnet 通话的二进制文件,永远不会被错当成可以的那个。Go 工具链被钉死在
go1.26.2,构建在别的版本下会拒绝运行,因为同一份源码被两个 Go 版本编译出来就是两个不同的二进制文件。
重建一个已发布的标签并比对哈希,正是那项取代“信任发布者”的检查 — 验证下载里有完整流程,而 安装讲的是为日常使用而构建。
问题与安全#
缺陷、问题和补丁请提到 问题追踪器,而 CONTRIBUTING.md 写明了一个改动在被合并之前需要具备什么。
漏洞请走 SECURITY.md 里的披露流程,而不是提到追踪器上。这个项目宁愿收到报告,也不愿被姑且相信,而在 mainnet 之前发现的缺陷不会让任何人付出代价。
许可证#
整棵树都是 MIT。分叉它、发布它、拿去卖、改个名字 — 这份许可证只要求保留一份
版权声明,别无他求。它唯一给不了你的,是这个网络:那由那些接受你区块的节点决定,而它们是按
spec/ 里的规则来接受的。