6月份的ethers.js亮點更新

語言: CN / TW / HK

關鍵的BigNumber修復

本季度最大的新聞,就是在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版本中添加的一些更新的快速總結。

  • WebWorker ESM 支持
  • Skynet 和 IPNS Content Hash支持
  • 默認的L2支持:Matic, Optimism,等等
  • Hardhat的兼容性
  • 遺留環境的子類支持
  • 將Ankr加入到默認後端家族中

當前的v5文檔將大多數ether函數和類鏈接到相關的TypeScript源代碼上,但仍然需要在源代碼和文檔之間來回切換,而且有很多地方的文檔要麼不同步,要麼就在源代碼或文檔中才進行了完整描述。

通過向Flatworm添加JSDoc提取,現在文檔將保持同步,併為所有功能提供文檔。在構建時,如果有未歸檔的操作或缺少導出的話,就會發出警吿,

Source: http://medium.com/ricmoo/highlights-ethers-js-june-2022-f5328932e35d

關於

ChinaDeFi– ChinaDeFi.com 是一個研究驅動的DeFi創新組織,同時我們也是區塊鏈開發團隊。每天從全球超過500個優質信息源的近900篇內容中,尋找思考更具深度、梳理更為系統的內容,以最快的速度同步到中國市場提供決策輔助材料。

Layer 2道友– 歡迎對Layer 2感興趣的區塊鏈技術愛好者、研究分析人與Gavin(微信: chinadefi)聯繫,共同探討Layer 2帶來的落地機遇。敬請關注我們的微信公眾號 “去中心化金融社區”