详解Ethers.js:以太坊的Javascript库

 2024-03-23 12:10:54发布 2024-03-23 12:11:04更新

以太坊是一种以其工具包、智能合约和代码对齐生态系统而闻名的区块链协议,严重依赖 ethers.js(一个 Javascript 库)来为其以开发人员为中心的方法提供所需的效力。虽然 ethers.js 不是唯一的以太坊原生 JavaScript 库,但对于小型 dApp 来说,它是更好的选择。

Ethers.js是什么

Ethers.js 是一个 JavaScript 库,一组可自动执行多个功能的预先编写的代码,使用 JavaScript 库进行开发可以最大限度地减少代码编写的工作量。

这个过程变得更加用户友好,对于 dApp 开发人员来说,这些库有助于以捆绑包的形式提供基本的区块链特定功能。

ethers.js 和开发周期

ethers.js 和开发周期

JavaScript库是什么

JavaScript 库是预先编写的 JavaScript 代码集,可以自动执行特定的常见任务。使用 ethers.js 等库可以加快 DApp 创建过程,甚至加快其他特定于区块链的交互。

以太坊已经发展成为一个去中心化的软件开发平台。从智能合约到 DeFi 应用再到 dApp,编码是以太坊生态系统不可或缺的一部分。

这正是以太坊定制的 JavaScript 库(如 ethers.js)存在的原因。使用这些库,开发人员可以连接到网络,部署智能合约并与之交互,并轻松管理区块链数据。

Ethers.js的重要性

Ethers.js 旨在为与以太坊区块链互动的开发人员提供支持。至于重要性,这个由 Richard Moore 开发的库,以 “Ethers” 之名推广,对以下工作非常有用:

  1. 简化多个以太坊交易
  2. 提供全面的文档和资源访问
  3. 促进 dApp 的开发
Ethers.js 生态系统及其可以承担的角色

Ethers.js 生态系统及其可以承担的角色

以下是用于获取以太坊账户当前余额的代码片段示例:

在这个示例中,可以清楚地看到命令 “ethers.providers.JsonRpcProvider” 调用了一个 Infura 端点,并且 getBalance 方法获取了余额。不需要直接处理以太坊的 JSON RPC 或远程过程调用。

在这种情况下,可以将 ethers.js 视为一个使以太坊变得更容易和更熟悉的翻译器。

想象一下,ethers.js 就像一个旧的图书馆借书卡。还记得那些卡上有目录,让用户通过定位通道,然后使用书架号码找到正确的书吗?这就是 ethers.js 的目标。它简化并组织了以太坊的庞大功能,使开发人员能够准确找到他们所需的东西。

Ethers.js的版本

多年来,出现了多个 ethers.js 版本,每个版本都引入了新功能或错误修复。

此外,版本控制遵循标准语义,例如 v1.2.3,其中第一个数字表示主要版本,第二个和第三个数字表示次要版本和补丁。

我们现在只考虑主要版本升级,可能不向后兼容的更改。

  • 版本 1.x(旧版):这是最初的版本,随后提供了与交易签名、钱包管理等相关的功能。
  • 版本 2.x(以太坊钱包):专注于钱包实用程序和功能,包括私钥的安全存储。
  • 版本 3.x(以太坊提供商):引入了用于连接以太坊节点的抽象。可以容纳不同类型的玩家,包括 Infura、WebSocket 等。
  • 版本 4.x(以太坊合约):扩展了智能合约主导的属性,提供了更多用于编码和解码数据、事件过滤器等的实用程序。
  • 版本 5.x:提供模块化架构、增强的ENS支持、全面的错误处理等。
  • 版本 6.x:包含 ES6 功能、BigInt 介绍、重载可访问性等。
ethers.js 架构和组件

Ethers.js架构和组件

如何使用ethers.js

在利用 ethers.js 的潜力之前,有必要了解它在 DApp 或智能合约开发的哪个阶段被调用。对于那些需要从头开始了解和理解这些元素的人来说,这里有一个快速细分。

首先,需要打开计算机并设置开发环境。这包括 Node.js 和集成开发环境。

请注意,JavaScript 通常在浏览器上运行,但使用 Node.js,同样可以在计算机上运行。它是 Node.js 运行时环境,安装了像 ethers.js 这样的 Javascript 库。

至于软件开发人员需要测试的IDE,可以考虑VS Code、Sublime Text 或其他任何东西。

安装ethers.js支持

下一步是安装 Ethers,这是托管 ethers.js 的库。

npm 安装以太坊:使用以太币连接到以太坊钱包,因为与区块链的交互将需要此步骤来验证凭据。为此,可以使用已安装的 Ethers 库。这是示例命令:

const { 以太 } = require(‘以太’);

// 连接到MetaMask钱包

const 提供者 = new ethers.providers.Web3Provider(window.ethereum);

完成后,可以使用 IDE 编写 Solidity 代码并为 DApp 创建智能合约。Ethers.js 将用于部署相同的内容。甚至可以使用Truffle和 Hardhat等环境在本地测试 DApp 或合约。然后,将合约部署到以太坊网络上,为此需要 ethers.js。

const 合约 = new ethers.ContractFactory(abi, 字节码, 签名者);

const已部署合同=等待合同.部署();

对于不熟悉的 abi 来说,Bytecode、Signer 是无缝智能合约开发的必要术语。Abi 或应用程序二进制接口更像是帮助网络识别你的智能合约的标签。字节码是智能合约的编译版本,或者更确切地说是网络就绪版本,签名者是签名生成实体。

前端的ethers.js

部署智能合约后,需要构建 dApp 的前端或用户界面。为此,可以使用 Angular 或 React。甚至可以将 ethers.js 集成到前端,以确保它可以与以太坊智能合约交互。这是相同的示例代码:

const 提供者 = new ethers.providers.Web3Provider(window.ethereum);

const 合约 = new ethers.Contract(contractAddress,contractABI,provider.getSigner());

之后,需要在测试网上测试 DApp,例如 Rinkeby 或 Ropsten 等。一旦满意,就可以在主网上启动 dApp。

需要注意的是,在整个过程中需要与 Ethers 或 ethers.js 交互多少次。

Ethers.js的特点

Ethers.js 是一个综合性的以太坊库,以下是一些可以让开发人员的生活变得轻松的独家产品:

供应商

Ethers.js 提供商充当以太坊网络和正在开发的 dApp 之间的桥梁。这涉及简化区块链数据查询,也有助于广播交易。Infura 是 Ethers.js 使用的提供商之一。

这是相同的示例代码:

const { 以太 } = require(‘以太’);

// 使用 Infura 连接

const 提供商 = new ethers.providers.JsonRpcProvider(‘https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID’);

// 检查当前块号

provider.getBlockNumber().then((blockNumber) => {

console.log(“当前区块号:”, blockNumber);

});

钱包

Ethers.js 可让用户管理钱包、创建新帐户、导入现有帐户、安全管理用于签署交易的私钥等等。

合约

Ethers.js 的这个组件支持对象实例化。这使得调用特定的合约函数变得更容易,更像原生 Javascript 方法。

ethers.js 和智能合约交互

Ethers.js和智能合约交互

ENS 集成

Ethers.js 可以将 ENS 名称解析为其以太坊地址,反之亦然。此功能降低了出错的风险。

下面是一个示例代码片段:

除了上述功能之外,Ethers.js 还拥有以下方面或功能,可以帮助开发人员直接访问以太坊特定的功能:

  • 签名者
  • 公用事业
  • 事件监听器和过滤器(用于激活对区块链操作的实时响应)
  • 交易
  • 多路通话支持
  • TypeScript 支持(旨在提高代码可靠性和整体开发人员体验)

如何利用ethers.js

像 BeInCrypto 这样的媒体出版物,可以利用 ethers.js 从头开始​​创建先进且资源丰富的 web3 工具。这样,就可以使用区块链或更确切地说,以太坊驱动的功能来增强可用性。

以下是可以考虑的选项:

  1. 数据馈送:Ethers.js 功能可用于集成实际的实时加密数据源,例如网络统计数据、gas 费等,以保持文章和资源的更新。
  2. 互动内容:出版物可以创建一些交互式内容,允许用户直接与智能合约交互、参与民意调查,甚至在需要时玩小游戏。
  3. 去中心化出版:媒体出版物还可以考虑去中心化出版,即在区块链网络上发布文章的剩余内容。这有助于抵抗审查甚至内容完整性。

这些只是媒体出版物的少数用例。但还有其他领域可以利用 ethers.js :

  • 区块链开发人员(预期)
  • 使用DeFi指标的金融分析师
  • 游戏开发商
  • 内容创作者
  • 供应链经理

Ethers.js的实际应用

除了在 DeFi 、NFT 和游戏项目中有用之外,还有一些现有的 dApp 支持使用 ethers.js。其中包括以下内容:

Uniswap

ether.js 与 Uniswap 固有的智能合约交互,用于执行交易、增加流动性,甚至查询矿池统计数据。在这种情况下,dApp 开发人员计划构建与 Uniswap 交互的工具,例如交易机器人、投资组合管理工具等。

Aave

dApp 开发人员和其他感兴趣的各方可以利用 ether.js 功能与 Aave 特定的智能合约进行交互。这样,他们就可以为借入资产、存入抵押品以及做更多事情做好准备。

Ethers.js的安全性

使用 ethers.js 需要考虑一系列相当广泛的安全注意事项。以下是一些需要遵循的内容:

  • 建议不要在应用程序的代码库中对私钥进行硬编码。
  • 每次智能合约交互之前都应该对合约进行测试和广泛的审核。
  • 每当与智能合约交互时,请使用“调用”等安全模式来执行只读任务。
  • 为了优化 ethers.js 的使用,可以考虑请求批处理。在这里可以批量处理只读请求,以最大限度地减少网络调用的数量。

以下是其工作原理的示例:

// 使用 Ethers.js 批量调用合约的伪代码(概念示例)

const 合约 = new ethers.Contract(地址, abi, 提供者);

const [值1,值2,值3] =等待Promise.all([

合约.viewFunction1(),

合约.viewFunction2(),

合约.viewFunction3()

]);

Ethers.js和Web3.js

Web3.js 和 Ethers.js 都是 JavaScript 库,其作用是使开发者可以与以太坊区块链交互。这两个库都很实用,都能满足大多数以太坊开发者的需求。

Web3.js 拥有一个与以太坊基金会相关的用户和维护者社区。它提供实用的 API 参考。从大约 2015 年开始,它在许多项目中被广泛使用。因此,该库已经成为许多“构建去中心化应用新手入门”教程的“必备资源”。

Ethers.js 的优势之处在于紧凑小巧,同时又包含大量测试案例。它提供实用的“新手入门”文档,因此新用户也可使用。许多开发者评价 ethers.js 使用起来“简单、直观”,并且该库在近两年越来越受欢迎,下载量和在项目中的使用量也不断增加。

推荐阅读