本季度最大的新闻,就是在BN.js库中发现了一个关键的字符串序列化漏洞,由Alex Dupre发现,他也提供了必要的补丁。
本季度最大的新闻,就是在BN.js库中发现了一个关键的字符串序列化漏洞,由Alex Dupre发现,他也提供了必要的补丁。
v5的ethers库使用BN.js,其理由是以太坊操作需要一个VLI库,同时也是因为JavaScript只提供IEEE 754浮点数。椭圆需要BN.js,ethers使用的是椭圆曲线密码术(ECC)库,所以对secp256k1和BigNumber重复使用意味着我们只需要一个VLI库。
此外,由于ether中的所有对象都是不可变的,所以BigNumber对象将所有值存储为十六进制字符串,其原因就是因为它们是快速而简单的不可变对象,同时又可以高效地转换回数学中的大数字。
然而,幸运的是,该错误只会在非常大的值上表现出来,远远超出了大多数以太坊用途的范围。以太坊中的所有值都是256位,当值超过337位时,这个bug才成为问题。
当然,在极少数情况下,这也仍然会产生问题,因为256位的数字乘以另一个256位的数字会得到512位的数字,这可能会受到影响,或者如果将大量的值相加(例如,在计算平均值时),分子的大小可能会超过337位。
但是,EVM的大多数值都不接近256位。例如,1ether (10 ^ 18 wei)只是一个60位的值(EVM中前196位为0)。
尽管这个bug不太可能成为一个问题,但仍然强烈建议每个人都更新到最新版本。
现在,原生VLI在大多数JavaScript环境中都是一个可行的方案,以及使用它们的现代ECC库,v6使用了Paul Miller的noble库,这些库都非常棒,快速,并已被充分审计。
这只是对v5版本中添加的一些更新的快速总结。
当前的v5文档将大多数ether函数和类链接到相关的TypeScript源代码上,但仍然需要在源代码和文档之间来回切换,而且有很多地方的文档要么不同步,要么就在源代码或文档中才进行了完整描述。
通过向Flatworm添加JSDoc提取,现在文档将保持同步,并为所有功能提供文档。在构建时,如果有未归档的操作或缺少导出的话,就会发出警告。
Source:https://medium.com/ricmoo/highlights-ethers-js-june-2022-f5328932e35d
ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!