自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

庫(kù)對(duì)比:Web3.js 與 Ethers.js

區(qū)塊鏈
自 1995 年 Brendan Eich 發(fā)明 JavaScript 以來(lái),它已發(fā)展成為互聯(lián)網(wǎng)上最常用的編程語(yǔ)言,用于構(gòu)建當(dāng)今使用的許多工具。據(jù)Statista[1]稱(chēng),軟件開(kāi)發(fā)人員中最常用的語(yǔ)言是 JavaScript。

每一個(gè)可編程的區(qū)塊鏈都有一套SDK或庫(kù),幫助連接并與特定的區(qū)塊鏈通信。今天的大多數(shù)區(qū)塊鏈都依賴(lài)于以太坊網(wǎng)絡(luò),使其與EVM兼容。如果創(chuàng)建了ETH庫(kù),就有可能在任何與EVM兼容的區(qū)塊鏈上使用它。然而,通信是可以使用JSON-RPC協(xié)議的。

在這篇文章中,我們將對(duì)兩個(gè)流行的ETH庫(kù)進(jìn)行比較。你可以了解到他們之間的差異,他們的優(yōu)點(diǎn)和缺點(diǎn)。這篇文章也可以幫助你決定在未來(lái)的項(xiàng)目中使用什么庫(kù)。

用于區(qū)塊鏈的 JavaScript

自 1995 年 Brendan Eich 發(fā)明 JavaScript 以來(lái),它已發(fā)展成為互聯(lián)網(wǎng)上最常用的編程語(yǔ)言,用于構(gòu)建當(dāng)今使用的許多工具。據(jù)Statista[1]稱(chēng),軟件開(kāi)發(fā)人員中最常用的語(yǔ)言是 JavaScript。

想象一下你需要解決一個(gè)特定的問(wèn)題;你知道的唯一語(yǔ)言是 JavaScript。應(yīng)該可以使用 JavaScript 來(lái)解決這個(gè)問(wèn)題,而不是學(xué)習(xí)一門(mén)新的高級(jí)語(yǔ)言來(lái)解決問(wèn)題。許多開(kāi)發(fā)人員都面臨著這個(gè)障礙,并找到了通過(guò)構(gòu)建可以通過(guò)節(jié)點(diǎn)提供商連接到區(qū)塊鏈的 SDK/庫(kù)來(lái)使用 JavaScript 構(gòu)建 dApp 的方法。

然而,這種變通降低了在區(qū)塊鏈空間中構(gòu)建的入門(mén)級(jí)別。您無(wú)需學(xué)習(xí) Rust 和 Solidity 等高級(jí)語(yǔ)言即可為Solana[2]或以太坊鏈構(gòu)建dApp[3]。

此外,降低區(qū)塊鏈開(kāi)發(fā)的入門(mén)水平是JavaScript的眾多好處之一。

什么是庫(kù)

在編寫(xiě) dApp 時(shí),您可能會(huì)發(fā)現(xiàn)需要為區(qū)塊鏈上的特定交易重復(fù)的特定代碼。此代碼/程序可能很長(zhǎng),您必須為新項(xiàng)目繼續(xù)編寫(xiě)此代碼。無(wú)需重復(fù)此程序,您可以使用代碼片段自動(dòng)執(zhí)行該過(guò)程。您可以在需要時(shí)隨時(shí)將此庫(kù)插入到您的項(xiàng)目中。這種方法可以加快開(kāi)發(fā)速度并消除重復(fù)。

JavaScript 模塊

Javascript 模塊是包含 JavaScript 函數(shù)或代碼簇的典型文件。您可以將它們提取到不同的文件中,而不是讓函數(shù)遍布您的代碼。創(chuàng)建模塊使更改變得非常容易,因?yàn)槟槐亻_(kāi)始查看大型代碼庫(kù)來(lái)查找特定函數(shù)來(lái)更新變量或模式。

由于Javascript本身不支持類(lèi),所以JavaScript模塊模仿了類(lèi)。類(lèi)幫助開(kāi)發(fā)人員在單個(gè)對(duì)象中將方法和字段設(shè)為公共和私有。通過(guò)這種模式,我們可以使用 export 和 import 關(guān)鍵字在我們的 JavaScript 項(xiàng)目中創(chuàng)建和使用函數(shù)。請(qǐng)參見(jiàn)下面的示例:

export function myFunction(value1, value2) {
return value1 * value2;
}

從上面的代碼中,我們已經(jīng)將這個(gè)函數(shù)公開(kāi)。為了使用這個(gè)函數(shù),我們可以使用如下所示的 import 關(guān)鍵字:

import myFunction from "./value.js"

現(xiàn)在我們了解了 JavaScript 模塊。讓我們?cè)谙乱还?jié)中討論 ethers.js 庫(kù)。

Ethers.js

自 Ethers.js 誕生以來(lái),它經(jīng)歷了穩(wěn)定的增長(zhǎng),甚至成為以太坊開(kāi)發(fā)人員中最常用的基于 JavaScript 的 web3 庫(kù)之一。

該工具可幫助 Javascript 開(kāi)發(fā)人員與以太坊鏈和任何以太坊虛擬機(jī) (EVM) 兼容的區(qū)塊鏈進(jìn)行交互。

一位名叫 Richard Moore 的加拿大軟件工程師在 2015 年創(chuàng)建了 ethers.js 作為 web3.js 的替代品。

Ethers.js 以輕量級(jí)著稱(chēng)。它的不同之處在于它管理密鑰和與區(qū)塊鏈交互的方式。在 ethers.js 中,有兩個(gè)實(shí)體處理上述問(wèn)題:

  1. 1. 使用私鑰簽署交易的錢(qián)包。
  2. 2. 使用 JSON-RPC URL 連接到區(qū)塊鏈的提供程序。Ethers.js 檢查狀態(tài)并發(fā)送交易。

Ethers.js 的優(yōu)勢(shì)

  • 庫(kù)大小 - Ethers.js 壓縮后為 88KB,未壓縮時(shí)為 284KB。
  • ENS - ENS 就像區(qū)塊鏈中的 DNS。無(wú)論在哪里使用以太坊地址,也可以在那里使用 .eth 地址。您無(wú)需樣板代碼即可輕松設(shè)置域名。
  • 測(cè)試 - ethers.js經(jīng)過(guò)廣泛測(cè)試。其中許多測(cè)試用例都是由 Richard Moore 親自編寫(xiě)的。有超過(guò) 10,000 個(gè)測(cè)試用例。
  • 許可 - 由于 ethers.js 是在 MIT 許可下發(fā)布的,任何人都可以免費(fèi)使用和修改它。盡管如此,只要修改的源代碼在 LGPL-3.0 許可下可用,就可以更改庫(kù)。
*  **Performance** - Considering the small size, it will be a good idea to use it on the front end as it will drastically improve performance.


## Drawbacks of Ether.js

* Ethers.js is relatively new. Having bugs in your code is unavoidable, so finding answers in places like StackOverflow might not be enough.

* Many foundational companies actively use web3.js for their core projects, and if you need to work for such companies, you might need to spend some more time learning web3.js.

Ethers.js 模塊

在最近的部分中,在我們討論 Ethers.js 之前,我們查看了 JavaScript 模塊,ethers.js 有四 (4) 個(gè)模塊,它們是 ethers.js API 的核心。

Ethers.Provider

要了解Ethers.Provider模塊的作用,必須了解什么是節(jié)點(diǎn)。

要訪問(wèn)區(qū)塊鏈網(wǎng)絡(luò),您需要在您的機(jī)器上運(yùn)行一個(gè)節(jié)點(diǎn)來(lái)訪問(wèn)它。該節(jié)點(diǎn)連接到其他節(jié)點(diǎn)以檢查人與人之間的交易是否有效,同時(shí)它存儲(chǔ)有關(guān)區(qū)塊鏈狀態(tài)的信息。

區(qū)塊鏈完全由節(jié)點(diǎn)構(gòu)建或組成。這些節(jié)點(diǎn)由世界各地的個(gè)人運(yùn)行。這意味著沒(méi)有中央服務(wù)器或單一的事實(shí)來(lái)源。這就是它去中心化的原因。將節(jié)點(diǎn)想象成汽車(chē)的汽油,如果它是空的,它就不會(huì)啟動(dòng)。

節(jié)點(diǎn)的建立可能是一個(gè)痛苦的過(guò)程,它可能需要一個(gè)星期或更長(zhǎng)時(shí)間。幸運(yùn)的是,存在 Alchemy、infura 和 Quicknode 等提供商。他們?yōu)槟O(shè)置了節(jié)點(diǎn)。他們所需要的只是讓您建立連接,并且您可以訪問(wèn)區(qū)塊鏈。

Ethers.Contract

該模塊用于部署智能合約并與之交互。它提供了監(jiān)聽(tīng)智能合約事件的能力(打包函數(shù))。但是,您可以使用該模塊來(lái)調(diào)用有關(guān)智能合約的信息以及智能合約提供的功能。

Ethers.utils

該模塊可以幫助您格式化錢(qián)包余額等數(shù)據(jù)并處理其他用戶(hù)輸入。

const accountChangedHandler = async (newAccount) => {
const address = await newAccount.getAddress();
setDefaultAccount(address);
const balance = await newAccount.getBalance()
setUserBalance(ethers.utils.formatEther(balance));
await getuserBalance(address)
}

從上面的代碼中,在從錢(qián)包中獲取地址后,我們檢索錢(qián)包的余額,但由于返回值以 Wei 格式輸出,我們使用 .formatEther 使其更易于閱讀。

Ethers.Wallet

該模塊允許您連接到現(xiàn)有地址。但是,您可以無(wú)縫地簽署和創(chuàng)建新錢(qián)包。

Web3.js

Web3.js 也是一種流行的基于 JavaScript 的庫(kù),可將客戶(hù)端連接到區(qū)塊鏈。該庫(kù)使用 HTTP、IPC 或 Websockets 運(yùn)行本地或遠(yuǎn)程以太坊節(jié)點(diǎn)并與之交互。

Web3.js 于 2015 年發(fā)布,它是一個(gè)由以太坊基金會(huì)自行創(chuàng)建的開(kāi)源庫(kù)。這意味著 web3.js 擁有最大的社區(qū),這與一年后發(fā)布的 Ethers.js 不同。web3.js 庫(kù)是比任何其他庫(kù)都多的項(xiàng)目和包的一部分。

然而,Web3.js 不像 Ethers.js 那樣管理密鑰。錢(qián)包和提供商沒(méi)有分開(kāi),而是假設(shè)本地節(jié)點(diǎn)連接到處理密鑰存儲(chǔ)、交易簽名和檢查區(qū)塊鏈狀態(tài)的應(yīng)用程序。

web3.js 的優(yōu)勢(shì)

支持Ethereum基金會(huì)

Web3.js 由以太坊基金會(huì)開(kāi)發(fā)。這意味著它有許多開(kāi)發(fā)人員為它做出貢獻(xiàn),而且當(dāng)問(wèn)題出現(xiàn)時(shí)你肯定比它的對(duì)應(yīng)物 Ethers.js 更快地找到解決方案是最理想的

受歡迎

我們可以用 GitHub star 的數(shù)量來(lái)衡量它在區(qū)塊鏈開(kāi)發(fā)者中的受歡迎程度。根據(jù) Github,web3.js 擁有超過(guò)一萬(wàn)七千 (17,000) 顆星,而 ethers.js 擁有七千 (7000) 顆星。它的流行很大程度上是因?yàn)橄刃姓叩挠绊?,這使它擁有更大的社區(qū)。

Web3.js 的缺點(diǎn)

大小

Web3.js 比 Ethers.js 相對(duì)更大,這使得在前端使用它是不可取的,因?yàn)樗鼤?huì)降低 dApps 的性能。

靈活性

由于 ethers.js 通過(guò)關(guān)注點(diǎn)分離處理密鑰的方式,允許開(kāi)發(fā)人員以不同方式處理密鑰的存儲(chǔ)和管理,因此 web3.js 在這方面存在不足。

許可證

Web3.js 在更嚴(yán)格的許可下工作,如果不公開(kāi)發(fā)布則不允許修改。

Web3.js 模塊

Web3.eth:-該模塊用于連接以太坊區(qū)塊鏈和智能合約。它還允許您訂閱區(qū)塊鏈上的事件。

Web3.net:-此模塊允許您與網(wǎng)絡(luò)節(jié)點(diǎn)屬性進(jìn)行交互。

Web3.shh:-該模塊允許與 Whisper(一種 dApp 用于相互通信的通信技術(shù))協(xié)議進(jìn)行通信。

Web3.utils:-該模塊為以太坊 dApp 和其他 web3 包提供實(shí)用功能。

Web3.bzz:-此模塊允許您與Swarm 網(wǎng)絡(luò)進(jìn)行交互[4]

Web3.js 和 Ethers.js 的比較

在本次會(huì)議中,我們將使用以下標(biāo)準(zhǔn)比較這兩個(gè)庫(kù):

  • 開(kāi)發(fā)者體驗(yàn)
  • 人氣
  • 文檔
  • 易用性
  • 性能
  • 維護(hù)

開(kāi)發(fā)者體驗(yàn)

這兩個(gè)庫(kù)都可以用幾行代碼創(chuàng)建真正強(qiáng)大的區(qū)塊鏈應(yīng)用程序,但 ethers.js 被認(rèn)為更干凈,因?yàn)樘峁┱吆湾X(qián)包之間的關(guān)注點(diǎn)分離。

然而,許多基金會(huì)項(xiàng)目使用 web3.js。這種情況使得大多數(shù)可用的教程都是用 web3.js 編寫(xiě)的,這為新開(kāi)發(fā)人員提供了一個(gè)非常容易學(xué)習(xí)的曲線。與 Ethers.js 相比,有更多的資源和解決各種問(wèn)題的方法。

人氣

GitHub

GitHub 上的一個(gè)熱門(mén)項(xiàng)目,如你所想是真實(shí)的。

Web3.js 作為最流行的以太坊 JavaScript 庫(kù)位居榜首,在 GitHub 上有超過(guò) 16000 個(gè)啟動(dòng),但在我看來(lái),GitHub stars 只能證明先發(fā)優(yōu)勢(shì)。

另一方面,ethers.js 在 GitHub 上擁有超過(guò) 6k 星。

NPM 下載量

NPM 下載顯示開(kāi)發(fā)人員為他們的項(xiàng)目每周下載庫(kù)的次數(shù)。

Web3.js 每周下載量超過(guò) 265000 次,而 ethers.js 每周下載量超過(guò) 610 次。

此下載顯示從 web3.js 到 ethers.js 發(fā)生了變化或轉(zhuǎn)變。

文檔

這兩個(gè)庫(kù)都有相當(dāng)詳盡的文檔。無(wú)論哪種方式,ethers.js 都比 web3.js 有優(yōu)勢(shì),這要?dú)w功于它的入門(mén)和游戲區(qū)域。

使用的便利性

Web3 將錢(qián)包和供應(yīng)商的處理變成一個(gè)單一的對(duì)象,但它的以太坊使讀取區(qū)塊鏈、修改其狀態(tài)和管理密鑰成為所有單獨(dú)的操作。

性能表現(xiàn)

在性能方面,Ethers.js 是一個(gè)更好的庫(kù)。由于其緊湊的尺寸,它適合在前端應(yīng)用程序上使用。以太是 248 kB 未壓縮和 77 kB 壓縮。

維護(hù)

Web3.js 由以太坊基金會(huì)維護(hù),但在 2020 年秋季獲得了 ChainSafe 的資助[5],用于使用現(xiàn)代 Typescript 重寫(xiě) web3.js。

隨著這一發(fā)展,Chainsafe 致力于帶來(lái)改變,以緩解使用 Web3.js 的痛點(diǎn)。

根據(jù) Chainsafe 的說(shuō)法,他們計(jì)劃修復(fù)的領(lǐng)域是:

  • 高效地過(guò)渡到 Typescript。
  • 完全擁有 Typescript 中的整個(gè)庫(kù)。
  • 創(chuàng)建靈活統(tǒng)一的庫(kù)版本。
  • 支持 eth2 的各種功能。

總之,Chainsafe 似乎致力于做好維護(hù) web3.js 的工作。

然而,ethers.js 由一位加拿大軟件工程師 Richard Moore 維護(hù)。在 GitHub 上,只列出了 15 名貢獻(xiàn)者。

下一步是什么

使用這些庫(kù)時(shí)要自己判斷哪一個(gè)最適合您的要求?;ヂ?lián)網(wǎng)上有很多教程可以幫助您盡快入門(mén)。

結(jié)論

Web3.js 和 Ethers.js 都有強(qiáng)大的生態(tài)系統(tǒng),可用于創(chuàng)建極快的 dApp。

令人驚奇的是,在我對(duì)這篇文章的研究過(guò)程中,這些庫(kù)已經(jīng)擴(kuò)展了多少并且仍在使用。我希望這能讓您有所了解,并讓您更清楚地選擇適合工作的工具。

資源

ethers.js[6]

Web3.js[7]

原文:[Godwin Alexander Ekainu] https://flutterpage.hashnode.dev/comparison-of-libraries-web3js-vs-ethersjs

責(zé)任編輯:武曉燕 來(lái)源: 李留白
相關(guān)推薦

2019-08-29 10:58:02

Web 開(kāi)發(fā)框架

2025-01-17 09:29:42

2019-02-21 10:38:10

Web 開(kāi)發(fā)代碼

2016-11-14 15:51:42

JavaScriptAngular.jsReact.js

2022-04-04 16:53:56

Vue.js設(shè)計(jì)框架

2019-03-21 08:28:23

框架AngularVue

2015-07-28 10:43:38

js\height\

2013-07-12 13:34:44

JSWeb開(kāi)發(fā)

2025-03-27 03:30:00

Web框架組件

2017-09-27 16:44:23

前端

2019-12-26 16:21:59

ReactJSAngularJSVue.js

2021-10-03 23:11:55

Node.jsWeb框架

2012-03-07 14:32:41

Node.js

2023-09-26 15:22:02

2013-09-10 14:01:40

WebEmber.jsAngular.js

2012-12-24 14:40:54

iosjs

2015-08-17 09:46:15

UIjs

2016-11-03 13:46:08

javascript測(cè)試工具

2015-08-05 09:37:34

PHPNode.js 對(duì)比挑戰(zhàn)

2021-12-13 11:21:46

NodePython開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)