想知道關於更多的區塊鏈技術問題,請搜索【鏈客區塊鏈技術問答社區】node
概念web
什麼是web3.js呢?express
答:
Web3.js是以太坊提供的一個JavaScript庫,它封裝了以太坊的RPC通訊API,提供了一系列與區塊鏈交互方法,使JavaScript與以太坊交互變得簡單。
以太坊節點經過JSON-RPC提供外部訪問接口,Web3.js是基於JavaScript和Node.js的JSON-RPC封裝
JSON-RPC是一個無狀態、輕量級的遠程過程調用協議(RPC),與傳輸協議無關,可以使用socket、HTTP或者其它協議,它使用JSON(RFC4627)做爲數據格式。
二、咱們怎麼用web3.js和以太坊的geth進行交互呢?npm
安裝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 "*" consoleapi
這裏咱們指定了‘db,net,eth,web3,personal’等方式來操做geth。所以咱們安裝好以後,能夠經過web3.js來操做以太坊相關函數。數組
web3.js不一樣版本的安裝方式安全
一、web3.js的0.2.0版本
(1)安裝
//新建一個文件夾,而後初始化
npm init -f //此處的-f會自動給你配好配置文件
npm install web3@^0.20.0
(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);
二、web3.js的1.0版本
(1)安裝cors
//新建一個文件夾,而後初始化
npm init -f //此處的-f會自動給你配好配置文件
npm install web3 --save
(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.0版本則是經過函數獲取的,其餘的API差距也很大。
兩個版本的差別dom
一、v 0.2x.x
v0.2x.x對於JSONRPC的封裝不夠完善,基於v0.2x.x開發咱們不得不借助一些第三方的封裝,好比: accounts,v0.2x.x官方文檔中就推薦使用第三方的accounts封裝。
這裏咱們不是說第三方的封裝就不能用或者比官方的封裝差,而這從側面反應了v0.2x.x的不完善,這並不利於咱們的後續開發和維護,會提供咱們的開發成本下降咱們的開發效率。
二、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.0版本更可能是異步調用,0.2用起來更順手簡單一些。你們能夠根據本身的需求來選用不一樣的版本。不過1.0版本多是將來的趨勢,功能也更增強大。異步
以上就是web3.js1.0版本和web3.js0.2.0的區別了。我也是在安裝的時候發現二者的差異。能夠根據本身的需求來選擇哪一個會更加的適合你,用法上也徹底不一樣,但願能幫到你們。
以太坊web3.js的1.0版本和0.2.0版本的安裝及區別,我也是在安裝的時候發現的,如今來分享給你們。