区块链

简单介绍web3.js

  1. 简介
    • 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等等
  1. 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"));
      }
      
  2. 异步回调(callback)
    • web3js API设计的最初目的,主要是为了和本地RPC节点共同使用,所以默认情况下发送的是同步HTTP请求
    • 如果要发送异步请求,可以在函数的最后一个参数位置上,传入一个回调函数。回调函数是可选(optional)的
    • 我们一般采用的回调风格是所谓的“错误优先”,例如:
      web3.eth.getBlock(48,function(error,result){
        if(!error)
          console.log(JSON.stringfy(result));
        else
          console.error(error);
      })
      
  3. 回调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 
      });
      
  4. 应用二进制接口(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

Your email address will not be published.