这些天,为了录制以太坊DAPP开发实战课程,我准备把web3文档全部翻译一下(并做适当的补充),目前web3.js 0.20.x 版本 已经翻译完成,欢迎大家前往查阅。
这里还几个实用DEMO,供大家参考:
web3.js 1.0 文档中文版 正在翻译中,请大家关注更新。
web3介绍
Web3是一套和以太坊节点进行通信的API,如果我们需要基于以太坊来开发去中心化应用,则web3是必须要了解的内容,例如需要通过Web3来获取节点状态,获取账号信息,调用合约、监听合约事件等等。
注: 智能合约是运行在节点提供的虚拟机上,因此调用智能合约也需要像节点发送请求。
Web3其实是对节点暴露出来的JSON-RPC接口进行了封装,它有多个语言版本的实现:
- JavaScript Web3.js
- Python Web3.py
- Haskell hs-web3
- Java web3j
- Scala web3j-scala
- Purescript purescript-web3
- PHP web3.php
- PHP ethereum-php
web3.js版本说明
web3.js 有两个不兼容的版本:0.20.x 及 1.0beta,1.0对0.20版本做了重构,并且引入了Promise来简化异步编程,避免层层的回调嵌套。
做一个对比,下面使用两个版本来获取当前块号:
// 0.20 版本
web3.eth.getBlockNumber(function callback(err, value) {
console.log("BlockNumber:" + value)
});
// 1.0 版本
web3.eth.getBlockNumber().then(console.log);
在来看看获取账号余额:
// 0.20 版本
web3.eth.getAccounts(function callback1(error, result){
web3.eth.getBalance(result[0], function callback2(error, value) {
console.log("value" + value);
});
})
// 1.0 版本
web3.eth.getAccounts()
.then((res) => web3.eth.getBalance(res[0]))
.then((value) => console.log(value) );
使用1.0版本代码上要比0.2版本简洁一些,有一点需要特别注意,web3的多数接口都是异步调用形式,通常最后一个参数是回调函数。
再次厚脸皮的给大家推荐,
想要学习去中心化应用开发,这门课程不容错过区块链全栈-以太坊DAPP开发实战