NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

注意:這裡是對web3.js 0.2x.x版本的,若使用1.0版本,則參閱網址

要使得app在以太坊上工作,可使用web3.js庫的web3物件,在其下是通過RPC呼叫與本地節點通訊。web3.js與任意以太坊節點通訊,它向外暴露一個RPC層。

web3包含eth物件 – web3.eth(用於以太坊區塊鏈互動)和shh物件 – web3.shh(用於Whisper互動),今後還將為web3協議引入其他物件,可通過此地址檢視到有效例項。

若想要檢視web3.js的更復雜例項可檢視這些有用的app模式

開始:

1.新增web3

首先需要將web3.js載入工程中,可使用如下方式:

npm:npm install web3

brower:brower install web3

meteor:meteor add ethereum:web3

vanilla:連線dist./web3.min.js

之後需要建立一個web3例項,設定一個provider。為了避免在mist內時覆寫已經設定的provider,首先要檢測一下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"));
}

之後就可使用web3物件的API了。

2.使用回撥函式

由於這個API設計與本地RPC節點工作,所有函式預設使用同步HTTP請求。

若想使用非同步請求,可以以最後一個引數的方式來傳一個可選的回撥函式到大多數函式。所有回撥函式正在使用一個錯誤優先回撥風格:

web3.eth.getBlock(48, function(error, result){
if(!error)
console.log(JSON.stringify(result));
else
console.error(error);
})

3.批量請求

批量請求支援將請求排隊,然後一次性對它們進行處理。

注意:批量請求不一定會更快,實際上一次性產生許多請求在某些情況下比如請求被非同步處理時是會更快的。批量請求確保對請求的序列處理時有用。

var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
batch.execute();

web3.js關於大數的注意事項:

當JavaScript不能夠正確處理大數時,則需要為數值獲取一個BigNumber物件,參考如下例項:

"101010100324325345346456456456456456456"
// "101010100324325345346456456456456456456"
101010100324325345346456456456456456456
// 1.0101010032432535e 38

web3.js依賴於BigNumber庫並且會自動新增它。

var balance = new BigNumber('131242344353464564564574574567456');
// or var balance = web3.eth.getBalance(someAddress);
balance.plus(21).toString(10); // toString(10) converts it to a number string
// "131242344353464564564574574567477"

下面的例項由於有超過20個浮點而不起作用,因此推薦將餘額以wei為單位儲存同時當呈現給使用者時將它轉換為其他單位。

var balance = new BigNumber('13124.234435346456466666457455567456');
balance.plus(21).toString(10); // toString(10) converts it to a number string, but can only show upto 20 digits
// "13145.23443534645646666646" // your number will be truncated after the 20th digit

Web3.js API參考:

web3

web3物件提供所有方法。

例項:

var Web3 = require('web3');
// create an instance of web3 using the HTTP provider.
// NOTE in mist web3 is already available, so check first if it's available before instantiating
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

使用HTTP基本認證

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545", 0, BasicAuthUsername, BasicAuthPassword));
//Note: HttpProvider takes 4 arguments (host, timeout, user, password)

web3.version.api

web3.version.api

返回值

String – 以太坊js api版本號

例項:

var version = web3.version.api;
console.log(version); // "0.2.0"

web3.version.node

web3.version.node
// or async
web3.version.getNode(callback(error, result){ ... })

返回值

String – 客戶端/節點版本

例項

var version = web3.version.node;
console.log(version); // "Mist/v0.9.3/darwin/go1.4.1"

web3.version.network

web3.version.network
// or async
web3.version.getNetwork(callback(error, result){ ... })

返回值

String – 網路協議版本

例項:

var version = web3.version.network;
console.log(version); // 54

web3.version.ethereum

web3.version.ethereum
// or async
web3.version.getEthereum(callback(error, result){ ... })

返回值

String – 以太坊協議版本

例項

var version = web3.version.ethereum;
console.log(version); // 60

參考網址

相關文章

程式語言 最新文章