关注我,你的眼睛有福了~
摘要:我们之前承诺在12月发布概念证明(PoC),现在已基本达成目标。只要再稍加努力,即使目前处于早期实验阶段,你也可以通过运行一个 Nimbus 模拟器,来让 beacon 客户端和它自己的克隆程序进行通信。详情请参阅下面的说明。
状态转换
过去一个月中取得的最大进展,可能是状态转换功能达到了规范文档中细致的要求。
[nim-beacon-chain](https://github.com/status-im/nim-beacon-chain)代码库中包含了相关的信息。归根结底,我们的状态转换功能已经基本完成。我们还在等待分叉选择,为此我们将会选择对于概念证明来说相对简单的事项——比如最长的链。
[testutil.nim](https://github.com/status-im/nim-beacon-chain/blob/master/tests/testutil.nim) 文件中有一个描述很详细的测试效用函数,状态转换的代码也有很好的[文档化说明](https://github.com/status-im/nim-beacon-chain/blob/master/beacon_chain/state_transition.nim),可以进一步在[ test_state_transition.nim](https://github.com/status-im/nim-beacon-chain/blob/master/tests/test_state_transition.nim) 中开展测试和实验。
我们也正在开展测试......
Eth2测试
我们正在进行的工作是为以太坊2.0建立并运行一个新的跨客户端测试的代码库。所有的测试集都位于 [status-im/eth2-testgen](https://github.com/status-im/eth2-testgen) 中,但是仍然在 [Eth2.0测试代码仓](https://github.com/ethereum/eth2.0-tests/pull/5)中等待被审核/合并。其中一个测试的问题是测试活动也[需要标准](https://github.com/ethereum/eth2.0-tests/issues/9) ,所以这仍然在讨论当中。
这些测试集并不是只针对 Nimbus,而是必须要覆盖所有的客户端。[Nimbus-beacon-chain](https://github.com/status-im/nim-beacon-chain) 中的 Nimbus 实现仍然没有使用它们,但是一旦它们被合并,这个项目在经过概念证明测试之后就会完善和成熟。现在,我们使用模拟环境来测试。
模拟环境
我们在 [nimo -beacon-chain](https://github.com/status.im/nim-beacon-chain) 代码库中创建了一个模拟器脚本,它将生成一个新的创世块状态和99个验证者,并将它们存储在名为validator-xx.json的文件中,其中 XX 是验证者的编号。这些文件将包含如下类型的数据:
{
"privKey":"00000000000000000000000000000000607b42bcae82becbe947fb13e18522b3f9bf50efab3209fa9b7a95b869906872", "randao": {
"seed":"E7C91FC8140FE2B27161AC4DEBAAF7DF2210D4F2AB6F3FC90BFD1960EABC1B73"
}
}
之后这些文件将用于生成startup.json文件,其中包含每个验证者的注册信息,包括他们的 RANDAO 约定值,撤销凭证,所有权的证明以及信标链所需的其他所有内容。创始块的 JSON 文件state_snapshot.json将由这个文件生成,从之前生成的注册信息来构建验证者注册表,将模拟器开始运行的时间设置为创世块时间,以及生成分片委员会:
{
"shard": 40,
"committee": [28,8],
"total_validator_count": 99
}
上图表示第28个验证者和第8个验证者(总共99个)负责处理第40个分片。
一些假的 RANDAO 打乱顺序以及分片跨联也会生成,但在(以太坊2.0)[第0阶段](https://our.status.im/two-point-oh-explaining-validators/)默认为零。
每组9个验证者将附着到它们自己的节点,导致一组有 10 个信标节点在 50000 到 50009 端口上运行。每个节点也将生成自己的 enode 地址,你可以在tests/simulation/data-x中找到该地址,其中 X 是节点的编号。9 名验证者将被孤立(all% 10 == 0),这只是为了看到当轮到他们验证时会发生什么,他们将无处获取数据(因为没有附着任何信标节点)。
如果要自己尝试,请参阅下一节。
运行PoC
为了运行 PoC,只需确保你有一个可工作的 [Nim 环境](https://bitfalls.com/2018/10/09/introduction-into-the-nim-language/) ,然后运行如下命令:
cd nim-beacon-chain
nimble install
nimble test
或者,参考 [Vagrant虚拟机工具的配置和运行](https://our.status.im/setting-up-a-local-vagrant-environment-for-nim-development/) 这篇文章来进行测试 - 我们很乐意收到你的使用反馈(如果有的话)。如果发现问题请提交到[这个代码库](https://github.com/status-im/nim-vagrant)!
如果这些测试全部通过,很快我们将在另一篇文章中解释它们的神奇之处。
此外,你还可以运行前面提到的模拟器,该模拟器生成 100 个验证者,将它们的数据存储到文件中进行测试,并运行一个由能互相通信的 Nimbus 节点所组成的模拟网络。
bash tests / simulation / start.sh
这项工作仍在进行中,但几天内会有比较顺利的进展。
下一步是什么?
让模拟器工作起来更加稳定
建立一个通用的构建系统,可以为所有人提供相同的服务。对于 Nimbus 来说尤为重要,因为我们会做比较庞大的架构设计
调整 nim-beacon-chain 以适应为 eth2.0 所准备的测试,并与其他团队密切协作,牵头编写这些测试代码 (请通过这个链接在加入讨论中来:https://gitter.im/eth2-0-tests/Lobby和https://github.com/ethereum/eth2.0-tests/issues -这将会对我们很有帮助!)
以太坊 1.0
我们将以太坊 1.0 Nimbus 客户端([status-im / nimbus](https://github.com/status-im/nimbus))同步到块高度 49018,此时由于区块状态无效而失败。这意味着我们的 EVM 成功执行了 49017 区块中的交易,这是一个不小的成就。这也意味着我们在不断受到挑战,要在 Nim 中研发新的调试和状态检查工具,这是一件非常有趣的事情。2019年上半年将支持智能合约的部署,支持相关功能的执行以及 RPC 的调用。
我们还在为以太坊 1.0 Nimbus 开发可选的构建流程。经过大量的测试后,会在另一篇文章中进行更详细的介绍。在此期间,你可以[像往常一样运行](https://our.status.im/nimbus-for-newbies/)它。另外,我们正在开发和试验 [Vagrant](https://our.status.im/setting-up-a-local-vagrant-environment-for-nim-development/),一个通用性的构建环境,非常希望能得到你的反馈,包括交互是否复杂/资源是否完备/是否实用等方面。如果有问题请提交至这个[代码库](https://github.com/status-im/nim-vagrant)!
请试用一下这些工具,并让我们知道你发现了哪些 bug。如果你能对所介绍的这些有新的视角和看法,我们将非常激动。因此,考虑到这一点,我们将很快开始发布代码解释的文章和教程,让你能具体了解 Nimbus 是如何工作的,而不仅仅只是了解一些概念。
关于Status
Status 是开源的以太坊网络操作系统和 DApp 门户,致力于将以太坊和去中心化网络装入人们的口袋。隐私聊天、DApp 浏览、安全交易是Status三大主要功能。Status 生态包括 Status 应用程序、Status 孵化项目、DApp 模块化编程工具 Embark、以太坊轻节点项目 Nimbus、硬件钱包项目 Hardwallet 以及扩展小程序 Extension 等等。Status 的目标是大规模使用以太坊网络,让去中心化网络世界更贴近人们的日常生活。
领取专属 10元无门槛券
私享最新 技术干货