当每个人都在12月1日下午12点惊奇地盯着UTC期待ETH 2.0 Beaconchain Genesis,但在JavaScript团队中,我们悄悄准备了自己在阴影中的小创世记。尽管如此,我们还是非常兴奋的是,我们对此也感到非常兴奋。 😀
一些背景故事: 以太列赛 周围的生态系统 VM 由一个非常模块化的库集(VM,区块链,Merkle-Patricia-Tree,TX,…)组成,每个库都封装了自己的专用功能集。虽然这对用户非常有用,但事实证明,它对于开发而言并不是那么好,因为通常有必要一次对几个库进行更改,这很难且耗时,以一种具有一致性的方式,使图书馆具有一致性的方式在不同的存储库中。因此,今年年初,我们决定更新我们的设置,并将与VM相关的库组合在一起 monorepo。这是一个单一的存储库,可以在单个拉请请求中对几个库的更改进行定位,并沿着所有人一起运行所有不同的库测试套件以确保一致性。同时,将多个软件包单独释放而受益。
自从转移到MonorePo以来,我们的开发活动实际上爆炸了。 😋我们发现了很多东西,我们想变得更好,以至于无法停止,尤其是因为一个变化经常触发了另一个变化,而这只是“如此明显的事情”。 😜
所以我们发展了。并开发。并开发。基本上是全年。这就是为什么您在过去几个月中听到我们相对较少的声音的主要原因,我们只是忙于所有这些东西。
虽然在过程结束时,我们有时想知道我们是否会再次聚在一起(请参阅我们的广泛发行说明以了解我的意思),今天我感到非常自豪,我能够最终宣布:我们 做到了。 😋感谢一支出色的团队为此提供了所有伟大而敬业的工作。 🎉
这不是我们的虚拟机在最前沿的主库上在我们的主要库上的六个主要版本:
在这篇文章中,我们不会介绍技术细节,而是给出高级概述。有关更完整的图片,请参见上面链接的发行说明,我们真的很关心这些内容构成和可读性,并概述了所有相关(破坏)更改。
也许只是一个重要的说明:我们切换到 新的命名计划 沿这些版本,您需要使用新名称来获取新版本。前者 Ethereumjs-Vm 包现在安装如下:
npm install @ethereumjs/vm
好的。实际上是什么?让我们快速看一下。
所有的硬叉
Ethereumjs VM V5 现在支持所有的硬叉回到创世纪。这是JavaScript以太坊史上的入门,我们希望这将为各种可能令人兴奋的新用例开放。我们有自己的内容,以下更多。
特定HF上的VM可以开始:
import VM from '@ethereumjs/vm'; import Common from '@ethereumjs/common'; const common = new Common({ chain: 'mainnet', hardfork: 'spuriousDragon' }); const vm = new VM({ common });
以EIP为中心的VM
虽然硬叉非常适合将一组商定的更改捆绑在一起,但以硬构fork为中心的VM却没有足够的灵活性来实现未来驱动的开发,在这种开发中,它在相当长的一段时间内无法完成,EIP将其变成一个新的硬架。 (这 柏林 Hardfork似乎是迄今为止的最好例子)。
随着新的VM释放,内部功能模块化层已重新设计。这使EIP现在可以成为VM内的土著公民。具有特殊EIP的VM可以实例化如下:
import Common from '@ethereumjs/common'; import VM from '@ethereumjs/vm'; const common = new Common({ chain: 'mainnet', eips: [2537] }); const vm = new VM({ common });
作为初学者,我们支持以下新的EIP(主要针对 柏林 hardfork)与VM V5发布:
打字稿
在这个以太埃里米人的发行周期中,我们可以自信地说,我们将图书馆从整体上将现代技术堆栈带入了现代技术堆栈。其中的一部分是:随着新版本的结束,我们将在打字稿过渡和所有主要库以及内部依赖项上完成的长期计划和执行,现在用打字稿编写。
只是一个使打字稿如此出色的峰值,并有助于使我们的库更健壮和安全:打字稿是JavaScript的超集,并让开发人员知道代码中每个变量和每个对象的数据类型。被称为变量 地址 弦或二进制 缓冲 目的?尽管您在JavaScript中没有明确的暗示(这很大程度上增加了后续开发人员错误的风险),但在打字稿中,您可以肯定会知道。
直接在我们的库上工作或在第三方项目中使用库也变得更加有趣,因为作为开发人员,您现在可以在整个代码库中获得这样的提示:
您的开发环境通过适当的打字稿键入现在只知道 区块链 变量是一个 @ethereumjs/区块链 对象(持有您的言论,Go and Rust Developers😅),而不仅仅是“某物”。因此,我们自己的代码分别获得您的(打字稿)代码在使用新库版本时将获得更多可读性。
承诺
如果您不太喜欢JavaScript,则可以跳过本节,但是如果您是JavaScript开发人员,您很可能会在这些新闻中叹息,因此我们至少会简短提及:
另一个过渡最终确定,所有库API现在正在与JavaScript承诺一起工作。因此,整个堆栈中的任何地方都没有更多的回调。
库的使用情况从以下方式变化:
blockchain.getBlock(blockId, block => { console.log(block); });
新的API示例:
const block = await blockchain.getBlock(blockId); console.log(block);
第一个示例的小凹痕似乎并不意味着一见钟情。在嵌套在一起的几个旧样式呼叫中,您会变得越来越深,并且在某些时候代码变得不可读。如果您对它的外观感兴趣,只是Google“回调地狱”。 🙂承诺允许编写更明显的可读代码。
图书馆重构
有时候,如果汽车仍在运行时,有时很难想象需要更换发动机,但是在某个时候,如果您想安全地穿过接下来的10.000英里,则需要一定的。通过在软件中进行重构,通常有点相似。 😀通过此发行系列,我们重新设计了一些最中央图书馆的基础知识和我们的基础知识 堵塞, 我们的 TX 部分是我们的 区块链 图书馆获得了重大改写。
现在,与这些图书馆一起工作应该更容易,并且应该为它们提供充分的准备,以提供稳固而安全的基础,以在以太坊JavaScript生态系统中建立在未来几年中。
前景
我们希望您喜欢我们的新版本。这篇文章只能在最重要的更改上提供一个偷偷摸摸的峰值,并且在本文开头链接的发行说明中涵盖了更多详细信息。我们很高兴听到您对我们的反馈 不和谐 服务器或我们的新 @efjavascript Twitter帐户。
对于我们自己来说,这些发行版提供了一些坚实的基础,可以转移到一个更加未来的开发周期,我们非常期待看到这一点发挥作用。随着VM的所有硬构架,现在就有可能将VM集成到我们的改进中 Ethereumjs客户 项目。我们不会很快与此客户一起加入Mainnet。但是,我们将能够分享我们的分享,以帮助改善客户多样性。新客户在其第一阶段将使我们能够加入开发测试网络 Yolo V2 (并关注),并积极帮助发现和防止客户之间的共识错误。我们还将能够更积极地为未来的协议研究做出贡献,并最终遵循研究实施。一旦我们准备好了客户的第一个可用版本,您就会听到更多信息(针对FullSync Yolo V2),这将在明年年初。
目前,我们希望每个人都沉思的结局,并得到令人兴奋的Beaconchain发射日(周)的补充! 🚀
EF JavaScript团队