web3.js的1.0版本和0.2.0版本的安装及区别

2018年07月27日 23:51:27 李长念 阅读数:260 标签: 以太坊web3.jsweb3的不同版本 更多

个人分类: 区块链

所属专栏: 从了解区块链到发布智能合约

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LJFPHP/article/details/81255836

一、前言

      博主在安装web3.js的时候,偶然间安装了不同版本的web3.js,API操作也不相同,虽然都能达到目标,但是到底区别在哪呢?网上查找半天并没有人专门总结一下这块,所以今天斗胆总结一下,也算是加深对web3.js的理解。

二、概念

1、什么是web3.js呢?

答: 
      Web3.js是以太坊提供的一个JavaScript库,它封装了以太坊的RPC通信API,提供了一系列与区块链交互方法,使JavaScript与以太坊交互变得简单。

      以太坊节点通过JSON-RPC提供外部访问接口,Web3.js是基于JavaScript和Node.js的JSON-RPC封装

      JSON-RPC是一个无状态、轻量级的远程过程调用协议(RPC),与传输协议无关,可使用socket、HTTP或者其它协议,它使用JSON(RFC4627)作为数据格式。

2、我们怎么用web3.js和以太坊的geth进行交互呢?

在我前几篇的文章中【以太坊】搭建测试网络之ubuntu系统安装geth客户端以及同步区块数据,安装geth的时候有这样一段命令:

geth --testnet --fast --cache=512 --datadir "/data/ethereum/block_data" --rpc --rpcapi db,net,eth,web3,personal --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*" console
  • 1

这里我们指定了‘db,net,eth,web3,personal’等方式来操作geth。因此我们安装好之后,可以通过web3.js来操作以太坊相关函数。

三、web3.js不同版本的安装方式

1、web3.js的0.2.0版本

(1)安装

//新建一个文件夹,然后初始化
 npm init -f  //此处的-f会自动给你配好配置文件
 npm install web3@^0.20.0
  • 1
  • 2
  • 3

0.2中文手册:http://web3.tryblockchain.org/Web3.js-api-refrence.html#toc_1 
0.2API手册:具体api参考:https://github.com/ethereum/wiki/wiki/JavaScript-API

(2)大致用法

var Web3 = require('web3');  //这里可以直接引入web3
if (typeof web3 !== 'undefined') {
  web3 = new Web3(web3.currentProvider);
} else {
  // set the provider you want from Web3.providers
  web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); //这一步是连接到以太坊节点
}
var version = web3.version.node;
//console.log(version);
var a = web3.eth.accounts[0];  //用web3获取第一个账户的地址,
console.log(a);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、web3.js的1.0版本

(1)安装

//新建一个文件夹,然后初始化
 npm init -f    //此处的-f会自动给你配好配置文件
 npm install web3 --save
  • 1
  • 2
  • 3

1.0的中文手册:http://cw.hubwiz.com/card/c/web3.js-1.0/1/1/1/

(2)大致用法

var Web3 = require('web3'); //引入web3
//console.log(Web3);
if (typeof web3 !== 'undefined') {
//console.log(1);
  web3 = new Web3(web3.currentProvider);
} else {
//console.log(2);
  // set the provider you want from Web3.providers
  web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
//此处是获取所有的用户列表,在回调中直接打印出来
 web3.eth.getAccounts().then(console.log);
var v = web3.version;  //获取web3的版本
console.log(v);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

      这里大家可以注意获取账号的部分。一个是直接取数组中的第一个用户地址。而1.0版本则是通过函数获取的,其他的API差距也很大。

四、两个版本的差异

1、v 0.2x.x

      v0.2x.x对于JSONRPC的封装不够完善,基于v0.2x.x开发我们不得不借助一些第三方的封装,比如: accounts,v0.2x.x官方文档中就推荐使用第三方的accounts封装。

      这里我们不是说第三方的封装就不能用或者比官方的封装差,而这从侧面反应了v0.2x.x的不完善,这并不利于我们的后续开发和维护,会提供我们的开发成本降低我们的开发效率。

2、v1.0-beta

      在我们的钱包开发选型时,综合各种因素,最终选择了Web3.js v1.0。即使在开发基于Web的以太坊应用时,有条件的情况下,我也建议大家选用1.0,我们可以基于express构建Node.js Webserver来给我们的Web应用提供服务。

      我开发的钱包服务共有三大服务,监听服务、交易服务和HTTP服务,其中HTTP服务就是基于express构建的,结合Spring Cloud / Nodejs client注册到交易网关上,提供了非常稳定的服务支撑。

      安全也是一个非常重要的因素,前段时间以太坊爆出一个非常严重的安全问题,某些应用开发者通过unlockAccount方式解锁账户以便于基于该解锁账户进行各类交易,但是交易完成后并没有lockAccount,那么这一波漏洞被有心的黑客发现并利用,不间断的盗取了unlockAccount上的大量以太坊,造成了巨大损失。

      Web3.js对象包含以太坊开发的一些基本单元,其中Eth和Utils为最常用的单元。Eth单元中则封装以太坊交易的核心模块,包括Subscribe、Contract、Accounts、Iban、Abi等。

Subscribe – 订阅接口,可以通过该模块的接口订阅/监听新区块、日志等,注意该模块为WebSocket模式独有;

Contract – 合约接口,与智能合约部署、调用相关,开发Token类应用(或者DAPP)的玩家多多关注;;
Accounts – 账户接口,用户新建账户、账户交易签名等等
  • 1
  • 2
  • 3
  • 4

3、两个版本在函数调用上也不同。

      1.0版本更多是异步调用,0.2用起来更顺手简单一些。大家可以根据自己的需求来选用不同的版本。不过1.0版本可能是未来的趋势,功能也更加强大。

      以上就是web3.js1.0版本和web3.js0.2.0的区别了。博主也是在安装的时候发现两者的差别。用法上也完全不同,希望能帮到大家。

end

猜你喜欢

转载自blog.csdn.net/jevior/article/details/82805122