庫對比:Web3.js 與 Ethers.js
每一個可編程的區塊鏈都有一套SDK或庫,幫助連接并與特定的區塊鏈通信。今天的大多數區塊鏈都依賴于以太坊網絡,使其與EVM兼容。如果創建了ETH庫,就有可能在任何與EVM兼容的區塊鏈上使用它。然而,通信是可以使用JSON-RPC協議的。
在這篇文章中,我們將對兩個流行的ETH庫進行比較。你可以了解到他們之間的差異,他們的優點和缺點。這篇文章也可以幫助你決定在未來的項目中使用什么庫。
用于區塊鏈的 JavaScript
自 1995 年 Brendan Eich 發明 JavaScript 以來,它已發展成為互聯網上最常用的編程語言,用于構建當今使用的許多工具。據Statista[1]稱,軟件開發人員中最常用的語言是 JavaScript。
想象一下你需要解決一個特定的問題;你知道的唯一語言是 JavaScript。應該可以使用 JavaScript 來解決這個問題,而不是學習一門新的高級語言來解決問題。許多開發人員都面臨著這個障礙,并找到了通過構建可以通過節點提供商連接到區塊鏈的 SDK/庫來使用 JavaScript 構建 dApp 的方法。
然而,這種變通降低了在區塊鏈空間中構建的入門級別。您無需學習 Rust 和 Solidity 等高級語言即可為Solana[2]或以太坊鏈構建dApp[3]。
此外,降低區塊鏈開發的入門水平是JavaScript的眾多好處之一。
什么是庫
在編寫 dApp 時,您可能會發現需要為區塊鏈上的特定交易重復的特定代碼。此代碼/程序可能很長,您必須為新項目繼續編寫此代碼。無需重復此程序,您可以使用代碼片段自動執行該過程。您可以在需要時隨時將此庫插入到您的項目中。這種方法可以加快開發速度并消除重復。
JavaScript 模塊
Javascript 模塊是包含 JavaScript 函數或代碼簇的典型文件。您可以將它們提取到不同的文件中,而不是讓函數遍布您的代碼。創建模塊使更改變得非常容易,因為您不必開始查看大型代碼庫來查找特定函數來更新變量或模式。
由于Javascript本身不支持類,所以JavaScript模塊模仿了類。類幫助開發人員在單個對象中將方法和字段設為公共和私有。通過這種模式,我們可以使用 export 和 import 關鍵字在我們的 JavaScript 項目中創建和使用函數。請參見下面的示例:
從上面的代碼中,我們已經將這個函數公開。為了使用這個函數,我們可以使用如下所示的 import 關鍵字:
現在我們了解了 JavaScript 模塊。讓我們在下一節中討論 ethers.js 庫。
Ethers.js
自 Ethers.js 誕生以來,它經歷了穩定的增長,甚至成為以太坊開發人員中最常用的基于 JavaScript 的 web3 庫之一。
該工具可幫助 Javascript 開發人員與以太坊鏈和任何以太坊虛擬機 (EVM) 兼容的區塊鏈進行交互。
一位名叫 Richard Moore 的加拿大軟件工程師在 2015 年創建了 ethers.js 作為 web3.js 的替代品。
Ethers.js 以輕量級著稱。它的不同之處在于它管理密鑰和與區塊鏈交互的方式。在 ethers.js 中,有兩個實體處理上述問題:
- 1. 使用私鑰簽署交易的錢包。
- 2. 使用 JSON-RPC URL 連接到區塊鏈的提供程序。Ethers.js 檢查狀態并發送交易。
Ethers.js 的優勢
- 庫大小 - Ethers.js 壓縮后為 88KB,未壓縮時為 284KB。
- ENS - ENS 就像區塊鏈中的 DNS。無論在哪里使用以太坊地址,也可以在那里使用 .eth 地址。您無需樣板代碼即可輕松設置域名。
- 測試 - ethers.js經過廣泛測試。其中許多測試用例都是由 Richard Moore 親自編寫的。有超過 10,000 個測試用例。
- 許可 - 由于 ethers.js 是在 MIT 許可下發布的,任何人都可以免費使用和修改它。盡管如此,只要修改的源代碼在 LGPL-3.0 許可下可用,就可以更改庫。
Ethers.js 模塊
在最近的部分中,在我們討論 Ethers.js 之前,我們查看了 JavaScript 模塊,ethers.js 有四 (4) 個模塊,它們是 ethers.js API 的核心。
Ethers.Provider
要了解Ethers.Provider模塊的作用,必須了解什么是節點。
要訪問區塊鏈網絡,您需要在您的機器上運行一個節點來訪問它。該節點連接到其他節點以檢查人與人之間的交易是否有效,同時它存儲有關區塊鏈狀態的信息。
區塊鏈完全由節點構建或組成。這些節點由世界各地的個人運行。這意味著沒有中央服務器或單一的事實來源。這就是它去中心化的原因。將節點想象成汽車的汽油,如果它是空的,它就不會啟動。
節點的建立可能是一個痛苦的過程,它可能需要一個星期或更長時間。幸運的是,存在 Alchemy、infura 和 Quicknode 等提供商。他們為您設置了節點。他們所需要的只是讓您建立連接,并且您可以訪問區塊鏈。
Ethers.Contract
該模塊用于部署智能合約并與之交互。它提供了監聽智能合約事件的能力(打包函數)。但是,您可以使用該模塊來調用有關智能合約的信息以及智能合約提供的功能。
Ethers.utils
該模塊可以幫助您格式化錢包余額等數據并處理其他用戶輸入。
從上面的代碼中,在從錢包中獲取地址后,我們檢索錢包的余額,但由于返回值以 Wei 格式輸出,我們使用 .formatEther 使其更易于閱讀。
Ethers.Wallet
該模塊允許您連接到現有地址。但是,您可以無縫地簽署和創建新錢包。
Web3.js
Web3.js 也是一種流行的基于 JavaScript 的庫,可將客戶端連接到區塊鏈。該庫使用 HTTP、IPC 或 Websockets 運行本地或遠程以太坊節點并與之交互。
Web3.js 于 2015 年發布,它是一個由以太坊基金會自行創建的開源庫。這意味著 web3.js 擁有最大的社區,這與一年后發布的 Ethers.js 不同。web3.js 庫是比任何其他庫都多的項目和包的一部分。
然而,Web3.js 不像 Ethers.js 那樣管理密鑰。錢包和提供商沒有分開,而是假設本地節點連接到處理密鑰存儲、交易簽名和檢查區塊鏈狀態的應用程序。
web3.js 的優勢
支持Ethereum基金會
Web3.js 由以太坊基金會開發。這意味著它有許多開發人員為它做出貢獻,而且當問題出現時你肯定比它的對應物 Ethers.js 更快地找到解決方案是最理想的
受歡迎
我們可以用 GitHub star 的數量來衡量它在區塊鏈開發者中的受歡迎程度。根據 Github,web3.js 擁有超過一萬七千 (17,000) 顆星,而 ethers.js 擁有七千 (7000) 顆星。它的流行很大程度上是因為先行者的影響,這使它擁有更大的社區。
Web3.js 的缺點
大小
Web3.js 比 Ethers.js 相對更大,這使得在前端使用它是不可取的,因為它會降低 dApps 的性能。
靈活性
由于 ethers.js 通過關注點分離處理密鑰的方式,允許開發人員以不同方式處理密鑰的存儲和管理,因此 web3.js 在這方面存在不足。
許可證
Web3.js 在更嚴格的許可下工作,如果不公開發布則不允許修改。
Web3.js 模塊
Web3.eth:-該模塊用于連接以太坊區塊鏈和智能合約。它還允許您訂閱區塊鏈上的事件。
Web3.net:-此模塊允許您與網絡節點屬性進行交互。
Web3.shh:-該模塊允許與 Whisper(一種 dApp 用于相互通信的通信技術)協議進行通信。
Web3.utils:-該模塊為以太坊 dApp 和其他 web3 包提供實用功能。
Web3.bzz:-此模塊允許您與Swarm 網絡進行交互[4]
Web3.js 和 Ethers.js 的比較
在本次會議中,我們將使用以下標準比較這兩個庫:
- 開發者體驗
- 人氣
- 文檔
- 易用性
- 性能
- 維護
開發者體驗
這兩個庫都可以用幾行代碼創建真正強大的區塊鏈應用程序,但 ethers.js 被認為更干凈,因為提供者和錢包之間的關注點分離。
然而,許多基金會項目使用 web3.js。這種情況使得大多數可用的教程都是用 web3.js 編寫的,這為新開發人員提供了一個非常容易學習的曲線。與 Ethers.js 相比,有更多的資源和解決各種問題的方法。
人氣
GitHub
GitHub 上的一個熱門項目,如你所想是真實的。
Web3.js 作為最流行的以太坊 JavaScript 庫位居榜首,在 GitHub 上有超過 16000 個啟動,但在我看來,GitHub stars 只能證明先發優勢。
另一方面,ethers.js 在 GitHub 上擁有超過 6k 星。
NPM 下載量
NPM 下載顯示開發人員為他們的項目每周下載庫的次數。
Web3.js 每周下載量超過 265000 次,而 ethers.js 每周下載量超過 610 次。
此下載顯示從 web3.js 到 ethers.js 發生了變化或轉變。
文檔
這兩個庫都有相當詳盡的文檔。無論哪種方式,ethers.js 都比 web3.js 有優勢,這要歸功于它的入門和游戲區域。
使用的便利性
Web3 將錢包和供應商的處理變成一個單一的對象,但它的以太坊使讀取區塊鏈、修改其狀態和管理密鑰成為所有單獨的操作。
性能表現
在性能方面,Ethers.js 是一個更好的庫。由于其緊湊的尺寸,它適合在前端應用程序上使用。以太是 248 kB 未壓縮和 77 kB 壓縮。
維護
Web3.js 由以太坊基金會維護,但在 2020 年秋季獲得了 ChainSafe 的資助[5],用于使用現代 Typescript 重寫 web3.js。
隨著這一發展,Chainsafe 致力于帶來改變,以緩解使用 Web3.js 的痛點。
根據 Chainsafe 的說法,他們計劃修復的領域是:
- 高效地過渡到 Typescript。
- 完全擁有 Typescript 中的整個庫。
- 創建靈活統一的庫版本。
- 支持 eth2 的各種功能。
總之,Chainsafe 似乎致力于做好維護 web3.js 的工作。
然而,ethers.js 由一位加拿大軟件工程師 Richard Moore 維護。在 GitHub 上,只列出了 15 名貢獻者。
下一步是什么
使用這些庫時要自己判斷哪一個最適合您的要求。互聯網上有很多教程可以幫助您盡快入門。
結論
Web3.js 和 Ethers.js 都有強大的生態系統,可用于創建極快的 dApp。
令人驚奇的是,在我對這篇文章的研究過程中,這些庫已經擴展了多少并且仍在使用。我希望這能讓您有所了解,并讓您更清楚地選擇適合工作的工具。
資源
ethers.js[6]
Web3.js[7]
原文:[Godwin Alexander Ekainu] https://flutterpage.hashnode.dev/comparison-of-libraries-web3js-vs-ethersjs





























