web3.js学习(二)
- 获取abi文件(使用solcjs编译合约代码)
- solcjs安装
npm install -g solc
- solc进行编译(以下指令会生成abi文件以及bin文件,abi文件内容为合约的接口描述,bin文件内容为EVM虚拟机可识别的合约的bytecode)
solcjs --abi --bin *.sol
- ABI文件内容详解
ABI文件中各参数
- name:函数名称
- type:方法类型,包括function,constructor,event等,默认为function
- constant:布尔值,如果为true,指明方法不会修改合约字段的状态变量
- payable:布尔值,标明方法是否可以接收ether
- stateMutability:状态类型,包括pure (不读取区块链状态),view (只能查看,不会修改合约字段),nonpayable(和payable含义一样),payable(和payable含义一样)。其实保留payable和constant是为了向后兼容
- inputs:数组,描述参数的名称和类型
- name:参数名称
- type:参数类型
- indexed:对于以后希望检索数据可进行设置为true
- outputs:和inputs一样,如果没有返回值,缺省是一个空数组
- solcjs安装
- web3的初步使用
- 启动本地节点(详细可参考以太坊学习博客)
geth --datadir ./data --networkid 15 --http console
- 使用node命令行连接使用
node > var Web3 = require('web3') > Web3 > var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))
- 启动本地节点(详细可参考以太坊学习博客)
- 批处理请求(batch requests)
- 批处理请求允许将请求排序,然后一起处理。
- 注意:批量请求不会更快。实际上,在某些情况下,一次性发出许多请求会更快,因为请求是异步处理的
- 批处理请求主要用于确保请求的顺序吗,并串行处理。
var batch = web3.createBatch(); batch.add(web3.eth.getBalance.request('0x000000000000000000000000000000000000000','latest',callback)); batch.add(web3.eth.contract(abi).at(address).balance.request(address,callback2)); batch.execute();
- 注意:大数处理(big numbers)
- JavaScript中国呢磨人的数字精度较小,所以web3.js会自动添加一个依赖库BigNumber,专门用于大数处理
- 对于数值,应习惯把它转换成BigNumber对象处理
var BigNumber = require('bignumber.js') var balance = new BigNumber('1243252454253646464645'); balance.plus(21).toString(10);
- BigNumber.toString(10)对小数只保留20位浮点精度。所以推荐做法是,内部使用wei来表示余额(大整数),只有在需要显示给用户看的时候才转换为ether或其它单位
Leave a Reply