本文首发于深入浅出区块链社区
原文链接:Web3.js 0.20.x API 中文版翻译原文已更新,请读者前往原文阅读
文档原始链接为: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