以太坊2.0开发更新—Prysmatic Labs

作者: Unitimes_独角时代 | 来源:发表于2019-01-05 20:36 被阅读1次

点击上方“Unitimes” 可以订阅哦!

unitimes.io

全球视角,独到见解

Prysmatic Labs 团队每两周更新一次以太坊2.0 Serenity路线图开发进展情况。

最新研究进展更新

01

信标链 CBC Casper

有关Casper CBC (Correct by Construction) 和 Casper FFG (Friendly Finality Gadget) 自被提出以来便引起了广泛的讨论。然而,我们需要知道的是,这两者并不是两种竞争性的权益证明(PoS)模式:CBC是一种对共识协议进行推理的方式,而FFG是一个基于权益证明的共识协议实现的具体提案。在过去一段时间,CBC一直被抨击在保证复杂度和协议效率方面负担过重,尽管CBC存在较高的安全性,而Vitalik已经很好地解释了以太坊Serenity客户端可以如何在不牺牲效率的情况下从CBC理念中获益,见下图:

两者主要的区别在于CBC的分叉选择规则:与FFG模式相比,CBC模式由于在交换消息方面需要的验证者数量更多,因此在时间复杂度方面更为低效(备注:时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。)Vitalik建议通过在一个伪随机选择的验证者子集中运行CBC,从而来修改CBC分叉选择规则,同时牺牲少量容错性。最终,这将给客户端带来CBC的稳健性,即便存在一些折衷,但也是值得的。更多信息可以参阅Vitalik发布的ETHResearch(以太坊研究)文章,链接:

https://ethresear.ch/t/beacon-chain-friendly-cbc-casper/4710

02

验证者抵押合约最新变更

Prysmatic团队已经更新了验证者抵押合约(

https://github.com/prysmaticlabs/prysm/blob/master/contracts/validator-registration-contract/validator_registration.sol),以此来实现 Solidity 0.51 规则,并与 spec 2.0 规范中的Vyper 示例代码相匹配。该团队发现,使用abi.encodePacked 花费的gas费用要比使用mergeBytes更少,但差别并不是很大。

团队对toBytes()、mergeBytes()和getReceiptRoot() 的运行进行了最优化和全面测试。此外,还增加了 Safemath 库,以此来阻止抵押时间戳单位的上溢(overflow)和下溢(underflow)。

代码合并,Pull Request & 其他事件

01

最新的区块处理操作已经完成

在最新的规范中,信标链状态转换包含了3个主要场景:未接收区块的定期时隙处理(rugular slot processing);区块处理(block processing);epoch处理(epoch processing)。也就是说,即便在某个时隙(slot)没有区块,信标链依旧会执行一些记账工作。但是,当区块被接收时,信标链的某些重要的细节已经进行了变更。

以太坊2.0 Prysmatic Labs开发者 Raul Jordan 在推文中说道:根据最新的规范,所有以太坊2.0的操作包括了Casper罚没,验证处理,抵押金处理,以及100%测试的RANDAO :) - 2019年将会是很棒的一年 #Ethereum @prylabs

在状态转换中,区块处理(block processing)将按照以下顺序来进行:

  • 区块RANDAO处理,作为以太坊Serenity RNG(随机数生成器)的一部分

  • 区块提议者罚没处理

  • Casper FFG 验证者罚没处理

  • 验证者证明处理

  • 将验证者抵押金从PoW链转移至信标链

  • 验证者退出的处理

该团队已经根据规范,完成了上述所有事项。团队的区块处理实现已经完成了100%测试,这是该团队代码库中的关键代码路径的最佳实践。具体可参阅:

https://github.com/prysmaticlabs/prysm/blob/master/beacon-chain/core/blocks/block_operations.go

02

最新的epoch操作已经通过权益证明

Epoch处理是状态转换的下一个部分,这在信标链中每64个时隙就会进行。在新的epoch开始时,对验证者进行奖励或处罚之后,将对验证者进行轮换,区块会基于Casper权益证明进行最终敲定,且分片跨联(crosslinks)也会全部被处理。Prysmatic Labs团队成员Terence Tsao完成了一系列的提案,包括这个在内:

https://github.com/prysmaticlabs/prysm/pull/1158

03

状态转换函数已经完成

当前的规范变更涉及到必须重构该团队大多数的核心操作,以此来适应这些变更。最大的变更是如何进行状态转换以及这将对该团队的区块链服务造成的影响。当前,状态转换(state transitions)分成两种转换方式,即per-slot transitions和per-epoch transitions,其中per-slot transitions主要集中于聚合签名验证和临时记录的存储(除了证明记录);per-epoch transitions则主要负责验证者登记记录的变更和管理区块证明和敲定。在epoch转换时期,验证者抵押的余额会根据其获得的奖励/惩罚而相应作出调整,验证者也会得以激励/被驱逐出去。

基于规范的状态转换函数

由于规范中发生了这些重大变更,该团队不得不重构主要的区块链服务,以适应这些变更。当前,Prysmatic Labs 节点的内部进度依赖于区块的处理(block processing),即在接收到区块之前,将不会发生状态转换。因此,状态会保持一段时间的潜伏期,期间没有接收到任何区块,直到信标节点接收到了一个区块,状态才会更新到正确的时隙(slot)。当前,区块被处理的方式如下:

  • 信标节点接收区块

  • 信标节点将该区块传递至预处理(pre-processing)之前,需验证该区块是否有效

  • 信标节点之后会检查该区块是否满足了预处理条件

一旦对该区块进行了如上验证,该区块就会被发送至状态转换函数,并在该函数中进行一些列操作,也即上文提到的 per-slot transition (执行相关的区块操作)和 per-epoch transition (对验证者注册表进行挑战,且如果当前的slot处于epoch范围,则该区块将被敲定/证明)。

04

通过Tree Hashing算法完成了Simple Serialize

Prysmatic Labs 团队的贡献者 Jie Hou 完成了以太坊Serenity 序列化格式的全部Simple Serialize规范。在以太坊1.0阶段,RLP(递归长度前缀编码)被用于序列化中,Simple Serialize (SSZ)是RLP的替代者。SSZ的整个规范已经有Jie完成,并通过一些列的提案进行了合并,详情见:

https://github.com/prysmaticlabs/prysm/issues/631

SSZ规范

此外,SSZ也规范了一个默克尔树哈希算法(Merkle Tree hashing algorithm),该算法通过适当的序列化,使得访问轻客户端和状态变得更为简单和高效。详情见:

https://github.com/prysmaticlabs/prysm/pull/1211

05

纯状态转换函数端对端测试

对以太坊来说,跨客户端兼容性是具有关键性的。如果Prysmatic Labs的代码不能兼容与Lighthouse、Pegasys或者Lodestar等客户端(反之亦然),那该团队将不能读取同一个协议,这样一来Prysmatic Labs的工作就没有实际意义了。因此,Prysmatic Labs正遵循以太坊1.0的传统,以常用格式(如YAML语言)来进行大量测试。通过使用YAML,该团队为可以运行在所有客户端上的一些内部信标链逻辑编写一个简单的测试案例,以此来确保符合性。该团队称之为符合性测试。比如,下图展示了测试一个在一些slots之前的状态转换,并验证该状态确实是以正确的方式进行转换。

Prysmatic Labs 将使用YAML来编写所有的端对端测试,使任何人都能够很方便地在信标链中进行状态转换操作,并验证相关操作按照预期进行。Prysmatic Labs已经进行了相关操作,见:

https://github.com/prysmaticlabs/prysm/pull/1221

Prysmatic Labs也有一个CLI工具,可以使YAML测试更容易在Prysm上运行,见:

https://github.com/prysmaticlabs/prysm/blob/master/beacon-chain/chaintest/README.md

06

Go-BLS 签名项目准备就绪

Prysmatic Labs将工作的1/4时间用于对BLS签名聚合的研发,期间经历了多次实现失败,最终锁定了一个由前Dfinity项目的密码学者Herumi的代码库,他将一个非常棒的纯C/C++实现组合在一起,链接:https://github.com/herumi 。Prysmatic Labs已经创建了自己的Go包装器,且奖励了$1000使用 Prysmatic Labs 的构建系统Bazel来搭建该项目。这个项目能够完成,需要感谢Robin Thomas (https://github.com/robin-thomas)的努力付出!Prysmatic Labs 将根据以太坊Serenity规范的要求,在所有聚合签名&信标链验证时使用这一项目。

基本上所有以太坊Serenity阶段0的关键部分都已经被完成或正在进行中,包括RANDAO、BLS、Simple Serialize等等 :)

接下来的工作

01

2019年第一季度

Prysmatic 计划在2019年第一季度发布以太坊 Serenity 阶段0测试网。Prysmatic Labs当前正全力以赴提供一个强劲的实现,当前几乎没有确实的组件了。请在接下来几周时间密切关注Prysm客户端如何运行的相关文档和信息,同时还有有关测试网的信息。

02

完成验证者轮换

对于每个epoch的信标链验证者轮换,在规范中仍然会有少量返工和优化,这是在规范中需要完成的最后几项工作之一,以便完全符合核心的逻辑。总体而言,大多数的规范变更本质上来说都是基于优化的。Serenity 阶段0的核心理念已经设定了一些合理的变更。

03

信标区块的成批同步模式

Prysmatic Labs已经合并到一项提案中,这将允许节点批量请求区块,而无需一个接一个地请求。这种方式与之前的方式相比,优势在于更具效率,因为发送多个区块时只需广播一条消息,这就减少了一个节点同步到区块头的时间。未来的提案还将研究验证接收批量区块的方法,以及如何处理不完整的批量区块或者如何处理由恶意参与者发送的响应。

04

测试网准备:服务健康检查

Prysmatic Labs团队成员 Preston Van Loon 一直在致力于将该团队的测试网架构的部分组合在一起,并强调了对信标链节点的所有组件进行服务安全检查(service health checks)的重要性。通过允许用户了解RPC服务的状态、区块链服务、某个节点的p2p以及更多信息,使用户更有信心去运行信标节点。这些部分对于扩展Prysmatic Labs的测试网集群、决定架构的稳定性都至关重要。Prysmatic Labs已经对Prysm多项服务进行了安全检查,详情见:

https://github.com/prysmaticlabs/prysm/issues

05

验证者客户端返工

由于当前的规范出现变更,这使Prysmatic Labs必须重新审视其验证者客户端架构,详情见:

https://docs.google.com/document/d/1LygmeNSivUo4OMl7s0SuXJl8gQKMMezJrtl0YEzpoVo/edit?ts=5bfca994#heading=h.4d4hnezaletr

规范的变更将要求验证者客户端在提议区块时签署区块提议数据(proposal data),之后再将该区块发送给信标节点。区块提议者在提议区块时,也将需要向信标节点请求状态根(state root)。在客户端之间发送和接收这些数据结构,将需要全新的RPC方式。当前,这个提案正在致力于解决这一问题:

https://github.com/prysmaticlabs/prysm/pull/1224

杂项

01

Gitcoin 资助计划

特别感谢Hibero、Econoar、tyndallm 和 wbobeirne对Prysmatic Lab获得的Gitcoin Grants提供的资金支持,也非常感谢Gitcoin创建了这么个非常棒的计划来为开源项目提供资金。这些资助将允许Prysmatic Labs团队在2019年度招募更多的开发者,进一步推进以太坊2.0的实现。

02

信标链实施者电话会议

最近一次的以太坊2.0实施者电话会议发生在2019年1月3日。点击下方链接查看会议讨论的主题内容:

https://github.com/ethereum/eth2.0-pm/issues/21

有兴趣参与进来?

Prysmatic Clabs 团队一直都在寻找想为该团队贡献力量的开发者。如果你了解Go或者Solidity语言,并想要为以太坊研究的最前线做出贡献,可以加入该团队 :)

可以在Github上查看该团队的参与指南:

https://github.com/prysmaticlabs/geth-sharding#contribution-guidelines)

该团队的开源项目:

https://github.com/prysmaticlabs/geth-sharding/projects

Prysmatic Clabs推特:

https://twitter.com/prylabs

也可以在 Discord 服务端给进行留言:

https://discordapp.com/invite/jeZCTPP

Prysmatic Labs 官方以太币捐助地址:

0x9B984D5a03980D8dc0a24506c968465424c81DbE

Prysmatic Labs官方ENS域名:

prysmatic.eth

原文作者:Raul Jordan

编译:Jhonny

原文链接:

https://medium.com/prysmatic-labs/ethereum-2-0-development-update-19-prysmatic-labs-d4767f0bd6d7

【文章版权归原作者所有,其内容与观点不代表Unitimes立 场。转载文章仅为传播更有价值的信息,合作或授权联系请发邮件至 contact@unitimes.media或添加微信unitimes2017】

相关文章

网友评论

    本文标题:以太坊2.0开发更新—Prysmatic Labs

    本文链接:https://www.haomeiwen.com/subject/gpjdrqtx.html