围绕web3.js有很多炒作。

在本文中,我们将了解什么是web3.js和ethers.js技术,以及它们如何用于与以太坊区块链交互。

我们还将学习如何开始使用web3.js 库,这是与以太坊区块链交互的主要 JavaScript 库。

文章概述

1. 什么是 web3.js?2. Web3.js 与 ethers.js。3. 如何在 web3.js 中运行 JavaScript 代码。4. web3.js 是做什么用的?

事不宜迟,让我们深入web3.js的世界;让我们彻底了解它的含义以及如何在我们的智能合约[1]程序中实现它。

什么是 Web3.js?

Web3.js[2]是一个库集合,允许您使用 HTTP、IPC 或 WebSocket 与本地或远程以太坊节点进行交互。

Web3.js允许您开发与区块链交互的网站或客户端。例如,它允许您将以太币从一个账户发送到另一个账户、从智能合约读取和写入数据、创建智能合约等等!

以下文档将指导您安装和运行 web3.js[3],并提供带有示例的 API 参考文档。

使用以太坊开发区块链应用程序有几个不同的方面:

• 智能合约开发——使用 Solidity 编程语言编写部署到区块链的代码。• 开发与区块链交互的网站或客户端——编写代码,通过智能合约从区块链读取和写入数据。

如果您有 Web 开发背景,您可能已经使用 jQuery 对 Web 服务器进行 Ajax 调用。这是理解web3.js功能的一个很好的起点。您可以使用web3.js来读取和写入以太坊区块链,而不是使用 jQuery 从 Web 服务器读取和写入数据。

下图说明了web3.js如何与以太坊区块链交互:

图片来源:iotbl[4]。

Web3.js 与 ethers.js

web3.js和ethers.js都是以太坊 JavaScript 库。

Ether.js由加拿大开发人员 Rick Moore 开发和维护。

Web3.js由以太坊基金会开发和维护。因此,对web3.js有更广泛的支持,因为有更多的开发人员支持它。

ethers.js和web3.js之间的一个主要区别是它们如何处理密钥管理以及与以太坊区块链的交互。

Web3.js假设有一个本地节点连接到应用程序。假设节点存储密钥、签署交易、读取以太坊区块链并与之交互。实际上,这种情况并不常见——大多数用户并没有在本地运行geth 。[5]Metamask 通过浏览器应用程序有效地模拟了该环境,因此大多数 web3 应用程序都需要 Metamask 来保存密钥、签署交易并与以太坊主[6]网交互。

另一方面,**ethers.js[7]采用了一种不同的方法,我们认为这为开发人员提供了更大的灵活性。Ethers.js**将“节点”分成两个不同的角色:

• 一个保存密钥和签署交易的“钱包”,以及• 充当与以太坊网络的匿名连接、检查状态和发送交易的“提供者”。

想到的ethers.js的两个主要优点是:

1. ENS 名字是一等公民。2. 密钥管理和状态 - 关注点分离。

如何在 Web3.js 中运行 JavaScript 代码

要在web3.js中运行 Javascript 代码,您需要将web3.js放入您的项目中。这可以使用以下方法完成:

依赖项

有一些依赖项可以帮助您开始使用web3.js进行开发。

节点包管理器 (NPM)

我们需要的第一个依赖项是Node.js 附带的Node Package Manager或 NPM。[8]要检查您是否已经安装了 Node,请转到您的终端并输入:

node -v

Web3.js 库

您可以在终端中使用 NPM 安装 Web3.js 库,如下所示:

npm install web3

或使用yarn:

yarn add web3

Infura RPC URL

要在主网上使用 JSON RPC 连接到以太坊节点,我们需要访问以太坊节点。有几种方法可以做到这一点。

你可以做到这一点的一种方法是使用Geth[9]或Parity 运行你自己的以太坊节点。[10]但这需要你从区块链下载大量数据并保持同步。如果您以前从未尝试过这样做,这将是一个巨大的头痛。

主要是为了方便,您可以使用Infura[11]访问以太坊节点,而无需自己运行。Infura 是一项免费提供远程以太坊节点的服务。您需要做的就是注册,并为您想要连接的网络获取 API 密钥和 RPC URL。注册后,您的 Infura RPC URL 应如下所示:

glossary/what-are-smart-contracts[2] Web3.js: 2017/03/ethereum-and-blockchain-2.html[5] geth 。: glossary/what-is-mainnet[7] ethers.js: ethereum/go-ethereum/wiki/geth[10] Parity 运行你自己的以太坊节点。: ethereumjs/ethereumjs-tx[14] 您可以从Ropsten 测试网络: http://faucet.ropsten.be:3001/[15] Metamask 水龙头: https://faucet.metamask.io/