天天看点

web3.js 介绍和下载安装以及访问区块链网络

作者:区块软件开发

一:介绍

开发以太坊区块链应用程序,涉及到以下部分:

智能合约开发 – 使用solidity语言编写代码,部署到区块链。网站或客户端开发 – 与区块链中的智能合约进行交互,读写数据。

在进行网站或客户端开发时,就需要用到web3.js。web3.js库是一个javascript库,可以让你执行很多与区块链进行交互的任务,例如:

以太币转账读写智能合约中的数据创建智能合约

如果你有web开发背景,对使用Ajax与web服务器进行通信的机制应该很熟悉。与Ajax类似,可以使用Web3.js读写以太坊区块链。

区块链网络是一个点对点的对等网络,网络由各个节点相互连接构成,智能合约的代码与数据存储在区块链中。使用web3.js可以向区块链网络中某个以太坊节点发出请求,与区块链网络进行交互。

此过程如下图所示:

web3.js 介绍和下载安装以及访问区块链网络

web3.js使用JSON RPC与Ethereum区块链通信(JSON RPC即JSON远程调用),对区块链网络进行数据读写。这有点像使用jQuery ajax库来读写web服务器上的数据。

二:安装与下载

NPM

首先要安装Node包管理器,即NPM,它与Node.js一起安装。

从Node.js官网上下载Node并安装: https://nodejs.org

查看node版本,npm版本:

Kevin@QIKEGU C:\Users\Kevin
> node-v
v10.16.3
Kevin@QIKEGU C:\Users\Kevin
> npm-v
6.11.3           

web3.js

安装Web3.js库:

$ npm install web3           

连接以太坊节点

要访问以太坊网络,需要连接到Ethereum节点。

有几种方法可以做到这一点,可以使用Geth或Parity运行自己的Ethereum节点。但这需要从区块链下载大量数据并保持同步,很麻烦。

比较方便的方法是,使用Infura访问Ethereum节点。Infura是一个免费提供Ethereum节点的服务。

在Infura上注册账号,创建项目,在项目详情页上可以查看API KEY:

web3.js 介绍和下载安装以及访问区块链网络

使用API KEY,就可以访问以太坊网络节点。

三:web3.js访问区块链网络

web3.js访问区块链网络,我们将读取某个账号的余额。

创建web3连接

首先启动node:

$ node           

在node控制台中加载Web3.js库:

const Web3 = require('web3')           

接下来,使用Infura URL,创建Web3连接。声明Infura URL变量:

const rpcURL = "https://mainnet.infura.io/YOUR_INFURA_API_KEY"           

确保使用之前获得的实际Infura API密钥替换此处的 YOUR_INFURA_API_KEY。创建Web3连接:

const web3 = new Web3(rpcURL)           

读取余额

现在有了这个Web3连接,就可以与以太坊主网进行通信。

让我们使用这个连接来检查这个帐户的余额: 0x03118E2c88676d31ee397E1eEf7789fECfbC40b9。通过使用 web3.eth.getBalance()检查帐户余额,我们可以看一下这个帐户下有多少以太币。

首先,将地址赋给一个变量:

const address = "0x03118E2c88676d31ee397E1eEf7789fECfbC40b9"           

检查账户余额:

// 读取address中的余额,余额单位是wei
web3.eth.getBalance(address, (err, wei) => {
    // 余额单位从wei转换为ether
    balance = web3.utils.fromWei(wei, 'ether')
    console.log("balance: " + balance)
})           

输出:

balance: 6.97320381           

小结

以下是本教程中编写的代码概要:

const Web3 = require('web3')
const rpcURL = '' // RPC URL
const web3 = new Web3(rpcURL)
const address = '' // 账户地址
// 读取address中的余额,余额单位是wei
web3.eth.getBalance(address, (err, wei) => {
    // 余额单位从wei转换为ether
    balance = web3.utils.fromWei(wei, 'ether')
    console.log("balance: " + balance)
})           

Web3.js更多使用细节,可以参考官方文档:

https://web3js.readthedocs.io/

注意,Web3.js正在积极开发中,可以访问Web3.js github存储库,了解它的进展,也可以阅读代码更好地理解库本身。

web3.js github库: https://github.com/ethereum/web3.js/

继续阅读