简单介绍web3.js
- 简介
- Web3 JavaScript app API
- Web3.js是一个JavaScript API库。要使DApp在以太坊上运行,我们可以使用web3.js库提供的web3对象
- Web3.js通过RPC调用与本地节点通信,它可以用于任何暴露了RPC层的以太坊节点
- web3包含了eth对象-web3.eth(专门与以太坊区块链交互)和shh对象-web3.shh(用于与Whisper交互,Whisper是以太坊生态一部分,用于消息传递)
- 组件:db操纵数据库,eth,net等等
- web3模块加载
- 安装Node.js
//ubuntu sudo apt install nodejs sudo apt install npm //centos sudo yum install nodejs sudo yum install npm
- 需要将web3模块安装在项目中
npm install web3
- 然后创建一个web3实例,设置一个“provider”
- 为了保证我们的MetaMask设置好的provider不被覆盖掉,在引入web3之前我们一般要做当前环境检查:
if(typeof web3 !== 'undefined'){ web3 = new Web3(web3.currentProvider); }else{ web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); }
- 安装Node.js
- 异步回调(callback)
- web3js API设计的最初目的,主要是为了和本地RPC节点共同使用,所以默认情况下发送的是同步HTTP请求
- 如果要发送异步请求,可以在函数的最后一个参数位置上,传入一个回调函数。回调函数是可选(optional)的
- 我们一般采用的回调风格是所谓的“错误优先”,例如:
web3.eth.getBlock(48,function(error,result){ if(!error) console.log(JSON.stringfy(result)); else console.error(error); })
- 回调Promise事件(v1.0.0)
- 为了帮助web3集成到不同标准的所有类型项目中,1.0.0版本提供了多种方式来处理异步函数。大多数的web3对象允许将一个回调函数作为最后一个函数参数传入,同时会返回一个promise用于链式函数调用。
- 以太坊作为一个区块链系统,一次请求具有不同的结束阶段。为了满足这样的要求,1.0.0版本将这类函数调用的返回值包成一个“承诺事件”(promiEvent),这是一个promise和EventEmitter的结合体。
- PromiEvent的用法就像promise一样,另外还加入了
.on
,.once
和.of
方法web3.eth.sendTransaction({from:'0x123...,data:'0x432...) .once('transactionHash',function(hash){...)) .once('receipt,function(receipt)...)) .on('confirmation',function(confNumber,receipt)...) .on('error,function(error)...)) .then(function(receipt){ //will be fired once the receipt is mined });
- 应用二进制接口(ABI)
- web3.js通过以太坊智能合约的json接口(Application Binary Interface,ABl)创建一个JavaScript对象,用来在js代码中描述
- 函数(functions)
-type:函数类型,默认“function”,也可能是“constructor”
-constant,payable,stateMutability:函数的状态可变性
-inputs,outputs:函数输入、输出参数描述列表 - 事件(events)
-type:类型,总是“event”
-inputs:输入对象列表,包括name、type、indexed
Leave a Reply