一、前言

博主在安装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

这里我们指定了‘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

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.providersweb3 = 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);

2、web3.js的1.0版本

(1)安装

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

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.providersweb3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
//此处是获取所有的用户列表,在回调中直接打印出来web3.eth.getAccounts().then(console.log);
var v = web3.version;  //获取web3的版本
console.log(v);

这里大家可以注意获取账号的部分。一个是直接取数组中的第一个用户地址。而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 – 账户接口,用户新建账户、账户交易签名等等

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

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

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

end

【以太坊】web3.js的1.0版本和0.2.0版本的安装及区别相关推荐

  1. 以太坊web3.js文档翻译及说明

    这些天,为了录制以太坊DAPP开发实战课程,我准备把web3文档全部翻译一下(并做适当的补充),目前**web3.js 0.20.x 版本** 已经翻译完成,欢迎大家前往查阅. 这里还几个实用DEMO ...

  2. 以太坊Web3.js开发基础

    简介 web3.js是一个通过RPC调用和本地以太坊节点进行通信的js库.web3.js可以与任何暴露了RPC接口的以太坊节点连接 .web3中提供了eth对象 - web3.eth来与以太坊区块链进 ...

  3. 以太坊PHP离线交易签名生成,以太坊web3.sendRawTransaction离线签名交易

    工作中需要复现短地址攻击和thedao重入攻击,重入攻击可以直接通过eth.sendTransaction和remix来发送交易,但是短地址攻击由于钱包和remix这些都对input做了长度检测,无法 ...

  4. 区块链2.0以太坊漫谈(3)

    进一步的应用: (1)储蓄钱包. 假设Alice想确保她的资金安全,但她担心丢失或者被黑客盗走私钥.她把以太币放到和Bob签订的一个合约里,如下所示,这合同是一个银行: (1)Alice单独每天最多可 ...

  5. eth转入地址_ETH周报 | 资金净流入再创年内新高;以太坊2.0验证者数量增加(4.20-4.26)...

    作者 | 秦晓峰 编辑 | 郝方舟 出品 | Odaily星球日报 一.整体概述 两名消息人士透露,以太坊开发商ConsenSys将再次裁员.其中一名消息人士称,ConsenSys公司上周一宣布将裁员 ...

  6. 对标以太坊的EOS再火,也拼不过InterValue的区块链4.0

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 2017年6月26日上线的数字货币EOS,仅用5天时间,就融了1.85亿美元,一举打破ICO的融资记录. 至2018年4 ...

  7. 以太坊开发者证实 Eth2.0 不会在7月上线

    作者 |  Shaurya Malwa 来源 | Unitimes 封图 |   CSDN 付费下载于东方 IC 以太坊期待已久的使用 PoS 机制的 Eth2.0 (Serenity) 升级阶段0上 ...

  8. 以太坊2.0文档------以太坊2.0阶段(一)

    以太坊2.0阶段 由于以太坊2.0正在进行大量的研究和开发,这一页可能会自动过时.它是在尽力而为的基础上不断更新的.最近更新日期为2019年11月16日. 介绍 以太坊主网的升级,被称为Ethereu ...

  9. 以太坊开发者工具的最新清单

    以太坊开发者工具的最新终极清单,用于在以太坊上开发应用程序的可用工具,组件,框架和平台的指南. 对于任何开发者,无论你是一个睁大眼睛的Web3新手还是一个头发灰白的OG加密无政府主义技术霸主,Gith ...

  10. 区块链开发之搭建以太坊私有链

    (一)区块链开发之搭建以太坊私有链 本文链接:https://blog.csdn.net/rwdxll/article/details/82929417 1.安装ethereum/Go client( ...

最新文章

  1. 开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...
  2. SAP CRM Fiori BP overview page design
  3. v4l2视频采集摄像头
  4. 光驱怎么挂载第二个光驱_电脑光驱经常自己打开自己关闭,怎么回事
  5. 数据库-MySQL-搭建服务器
  6. SpringBoot (14)---使用Redis缓存
  7. AntV 数据可视化解决方案发布
  8. Oracle11g在Windows和Linux下imp导入表,exp导出表,sqluldr2导出表,sqlldr导入表
  9. UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
  10. Xxmm_Move_Order_Print
  11. 关于Sign in with Apple (Apple 登录) PHP的后端验证
  12. 快速解决Kubernetes从k8s.gcr.io仓库拉取镜像失败问题
  13. CodeForces - 272C Dima and Staircase (线段树区间更新)
  14. 【未完成】【甄选靶场】Vulnhub百个项目渗透——项目四十一:DEFCON Toronto-Galahad(图像深层分析,流量分析)
  15. 使用手机号登录、注册、重置密码
  16. 终于懂了汇编代码为什么从键盘上输入字符,将该字符的ASCII显示在屏幕上必须要加30或37(附汇编代码)
  17. JAVA面向对象(2)
  18. python主题壁纸下载_Python开发专属壁纸下载与轮换程序
  19. python爬虫数据分析项目 双十一_基于Python爬取京东双十一商品价格曲线
  20. 【毕业设计_课程设计】基于大数据个性化音乐推荐算法分析

热门文章

  1. 追求极致:Repvgg重参数化对YOLO工业落地的实验和思考
  2. MXNET学习笔记(二):模型的保存与加载
  3. python文件排序
  4. python 图像频谱
  5. all the input arrays must have same number of dimensions
  6. 我的csdnmark
  7. 用 Python 和 OpenCV 来测量相机到目标的距离
  8. Proguard 部分类不混淆的技巧
  9. LSD-SLAM 编译过程(Ubuntu 14.04 + ROS Indigo
  10. 基于直方图均衡化的激光水下图像处理