文件原始連結為:https://web3.learnblockchain.cn/0.2x.x/,歡迎大家前往查閱,本文只是節選開頭部分的介紹及API列表索引,以下為翻譯正文:
為了開發一個基於以太坊的去中心化應用程式,可以使用web3.js庫提供的web3物件, 在底層實現上,web3通過RPC呼叫與本地節點通訊, web3.js可以與任何暴露了RPC介面的以太坊節點連線。
web3
包含下面幾個物件:
web3.eth
用來與以太坊區塊鏈及合約的互動web3.shh
用來與Whisper協議相關互動web3.net
用來獲取網路相關資訊web3
包含一些工具
web3使用示例:
想要學習去中心化應用(DAPP)開發,這門課程不容錯過區塊鏈全棧-以太坊DAPP開發實戰
引入web3
首先你需要將web3引入到應用工程中,可以通過如下幾個方法:
- npm:
npm install web3
- bower:
bower install web3
- meteor:
meteor add ethereum:web3
- vanilla: link the
dist./web3.min.js
然後你需要建立一個web3的例項,設定一個provider。為了保證你不會覆蓋一個已有的provider(Mist瀏覽器或安裝了MetaMak的瀏覽器會提供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了。
使用回撥
由於這套API被設計來與本地的RPC結點互動,所有函式預設使用同步的HTTP的請求。
如果你想發起一個非同步的請求。大多數函式允許傳一個跟在引數列表後的可選的回撥函式來支援非同步,回撥函式支援Error-first回撥的風格。
web3.eth.getBlock(48, function(error, result){
if(!error)
console.log(JSON.stringify(result));
else
console.error(error);
})
批量請求
可以允許將多個請求放入佇列,並一次執行。
注意:批量請求並不會更快,在某些情況下,同時發起多個非同步請求,也許更快。這裡的批量請求主要目的是用來保證請求的序列執行。
var batch = web3.createBatch();
batch.add(https://web3.learnblockchain.cn/0.2x.x/web3.eth.getBalance.request(`0x0000000000000000000000000000000000000000`, `latest`, callback));
batch.add(https://web3.learnblockchain.cn/0.2x.x/web3.eth.contract(abi).at(address).balance.request(address, callback2));
batch.execute();
web3.js中的大數處理
如果是一個資料型別的返回結果,通常會得到一個BigNumber物件,因為Javascript不能正確的處理BigNumber,看看下面的例子:
"101010100324325345346456456456456456456"
// "101010100324325345346456456456456456456"
101010100324325345346456456456456456456
// 1.0101010032432535e+38
所以web3.js依賴BigNumber Library,且已經自動引入。
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.version.api
- web3.version.node
- web3.version.network
- web3.version.ethereum
- web3.version.whisper
- web3.isConnected
- web3.setProvider
- web3.currentProvider
- web3.reset
- web3.sha3
- web3.toHex
- web3.toAscii
- web3.fromAscii
- web3.toDecimal
- web3.fromDecimal
- web3.fromWei
- web3.toWei
- web3.toBigNumber
- web3.isAddress
web3.net
web3.eth
- web3.eth.defaultAccount
- web3.eth.defaultBlock
- web3.eth.syncing
- web3.eth.isSyncing
- web3.eth.coinbase
- web3.eth.mining
- web3.eth.hashrate
- web3.eth.gasPrice
- web3.eth.accounts
- web3.eth.blockNumber
- web3.eth.register
- web3.eth.unRegister
- web3.eth.getBalance
- web3.eth.getStorageAt
- web3.eth.getCode
- web3.eth.getBlock
- web3.eth.getBlockTransactionCount
- web3.eth.getUncle
- web3.eth.getTransaction
- web3.eth.getTransactionFromBlock
- web3.eth.getTransactionReceipt
- web3.eth.getTransactionCount
- web3.eth.sendTransaction
- web3.eth.sendRawTransaction
- web3.eth.sign
- web3.eth.call
- web3.eth.estimateGas
- web3.eth.filter
- web3.eth.contract
- Contract Methods
- Contract Events
- Contract allEvents
- web3.eth.getCompilers
- web3.eth.compile.solidity
- web3.eth.compile.lll
- web3.eth.compile.serpent
- web3.eth.namereg
- web3.eth.sendIBANTransaction
- web3.eth.iban
- web3.eth.iban.fromAddress
- web3.eth.iban.fromBban
- web3.eth.iban.createIndirect
- web3.eth.iban.isValid
- web3.eth.iban.isDirect
- web3.eth.iban.isIndirect
- web3.eth.iban.checksum
- web3.eth.iban.institution
- web3.eth.iban.client
- web3.eth.iban.address
- web3.eth.iban.toString