首頁 >web前端 >js教程 >比較 ethers.js 和 web,Web 重新流行

比較 ethers.js 和 web,Web 重新流行

Patricia Arquette
Patricia Arquette原創
2024-12-30 12:25:11751瀏覽

Comparing ethers.js and webs as Webegains Popularity

原文連結


隨著 Web3 重新流行,比較 ethers.js 和 web3.js

隨著 Web3 重新獲得關注,人們對 ethers.js 和 web3.js(用於基於以太坊的 DApp(去中心化應用程式)開發的主要 JavaScript 程式庫)的興趣也在增加。雖然這兩個庫都可以與以太坊區塊鏈交互,但它們存在一些關鍵差異,特別是在開發方法方面。本文檔對這兩個函式庫進行了比較,探討了它們的特點、優點、缺點以及開發風格的差異。


web3.js

web3.js 是一個較舊的函式庫,出現在以太坊生態系的早期。它提供了廣泛的功能,提供了從單一 web3 物件與區塊鏈互動的所有方法。它主要使用基於回調函數的 API 風格。

優點:

  • 它有著悠久的歷史,並在許多遺留項目中使用。
  • 與 ethers.js 相比,提供更廣泛的功能。

缺點:

  • 相對較大且較重,這會影響性能。
  • API 有點複雜,導致學習曲線更陡。
  • 與 ethers.js 相比,更新速度較慢。
  • 基於回呼的 API 會讓非同步程式碼編寫變得有些複雜。

以太坊.js

ethers.js 是一個相對較新的函式庫,它遵循現代 JavaScript 標準,並專注於提供更好的開發人員體驗。它簡潔、輕量級,提供模組化的API。特別是,它透過明確分離提供者和簽署者來提高開發靈活性和安全性。它使用基於 Promise 的 API,允許簡潔的非同步程式碼。

優點:

  • 簡潔輕量,提供更快的效能。
  • 具有清晰的 API 結構,分為簽署者和提供者。
    • 簽署者:管理私鑰並處理交易簽章(增強安全性)。
    • 供應商:管理區塊鏈網路連接(輕鬆支援各種網路)。
  • 提供增強的安全功能,更重視私鑰管理。
  • 積極開發維護,快速反映最新功能。
  • 提供優秀的文件。
  • 基於 Promise 的 API 讓非同步程式碼簡潔易讀。

缺點:

  • 作為一個相對較新的函式庫,它在遺留專案中的使用並不像 web3.js 那麼多。

提供者和簽署者:ethers.js 和 web3.js 的核心概念

在區塊鏈,尤其是以太坊生態中,Provider和Signer是至關重要的概念。它們定義了 DApp 如何與區塊鏈互動。 ethers.js 和 web3.js 對這兩個概念的處理方式不同,導致開發方法有顯著差異。


提供者:與區塊鏈的唯讀連接

提供者提供對區塊鏈網路的唯讀存取。它就像一個圖書館員。您可以閱讀書籍(區塊鏈數據)並獲取信息,但不能添加或修改書籍中的內容。

主要功能:

  • 檢索區塊資訊(區塊高度、時間戳記等)
  • 檢索交易資訊
  • 查看帳戶餘額
  • 呼叫智能合約的唯讀函數(視圖函數)
  • 檢查網路狀態

簽名者:交易簽名和執行

簽署者提供使用私鑰簽署交易並將其提交到區塊鏈的能力。就好像有人帶著印章一樣。正如文件(交易)只有在蓋章後才生效一樣,簽署者會對交易進行簽名,以便將其記錄在區塊鏈上。

主要功能:

  • 私鑰管理(安全儲存與存取)
  • 交易建立與簽署
  • 呼叫智能合約的狀態改變函數
  • 發送以太幣

ethers.js 中的提供者和簽署者

ethers.js 透過明確分離 Provider 和 Signer 來建立其 API。這大大增強了開發靈活性和安全性。

Provider:透過ethers.providers模組提供各種Provider。您可以使用 Infura、Alchemy、Etherscan 等服務進行連接,或直接使用 RPC URL。

  • 範例:const provider = new ethers.providers.InfuraProvider("mainnet", "YOUR_INFURA_PROJECT_ID");

簽署者:您可以使用 ethers.Wallet 類別管理私鑰或與 MetaMask 等錢包連接。

  • 範例(使用私鑰): const wallet = new ethers.Wallet("YOUR_PRIVATE_KEY",provider);
  • 範例(連接 MetaMask): const provider = new ethers.providers.Web3Provider(window.ethereum); const 簽署者=provider.getSigner();

透過在ethers.js中分離Provider和Signer,你可以獲得以下優勢:

  • 增強安全性:私鑰可以透過錢包安全管理,無需直接管理。
  • 增加靈活性:可以輕鬆切換和使用各種提供者。
  • 輕鬆測試:您可以在測試環境中使用模擬簽名者執行測試。

web3.js 中的提供者和簽署者

web3.js 沒有明確區分 Provider 和 Signer。雖然它透過 web3.eth.accounts 來管理帳戶和簽署交易,但它並沒有像 ethers.js 那樣清晰分離。

Provider: 使用 web3.setProvider() 設定 Provider。

  • 範例: const web3 = new Web3(new Web3.providers.HttpProvider('YOUR_RPC_URL'));

簽署者: 使用 web3.eth.accounts.signTransaction() 簽署交易。在此過程中,您通常必須直接使用私鑰,這可能會產生安全漏洞。您也可以使用 MetaMask 等錢包,但整合不像 ethers.js 那麼乾淨。


總結比較

Feature ethers.js web3.js
Provider Clearly separated, supports various Providers (Infura, Alchemy, etc.) Set with web3.setProvider()
Signer Clearly separated, Wallet class, easy wallet integration Managed through web3.eth.accounts, may require direct private key management
Security Secure private key management, enhanced security Risk of private key exposure
Flexibility High flexibility, supports various Providers and wallets Relatively low flexibility

ethers.js 透過明確分離 Provider 和 Signer,大大提高了開發靈活性、安全性和便利性。另一方面,web3.js 沒有這種明確的分離,這可能會使開發變得有些複雜並產生安全漏洞。因此,在開始一個新的Web3專案時,一般建議使用ethers.js。


開發方式差異

Feature web3.js ethers.js
API Style Single web3 object, callback-based Signer and Provider separated, Promise-based
Asynchronous Processing Handles asynchronous code using callback functions, which can reduce code readability Can write asynchronous code concisely and clearly using Promises (easy to use async/await)
Private Key Management Requires direct private key management (potential security vulnerabilities) Abstracted private key management through Signer (enhanced security)
Network Connection Connection setup using web3.setProvider() Supports various networks and connection methods through Provider (Infura, Alchemy, etc.)

結論

開始新的Web3專案時,建議使用ethers.js。 它提供更好的開發體驗、效能、安全性和最新功能。尤其是Provider和Signer的分離以及基於Promise的API,符合現代開發實踐,提高了程式碼的可讀性和可維護性。然而,對於維護現有的 web3.js 專案或在特定情況下,web3.js 可能仍然是一個不錯的選擇。


參考

  • ethers.js 官方文檔
  • web3.js 官方文檔
  • 如何使用兩個大型以太坊庫 web3.js 和 ethers.js

以上是比較 ethers.js 和 web,Web 重新流行的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn