注意:这里是对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
参考网址