链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

web3.js 1.0中文手册:web
清风慕竹
2021-10-12 20:44:32

web3.version

web3.version属性记录了web3容器对象的版本。

调用方法:

Web3.version
web3.version

返回值:

String: 当前版本字符串

示例代码:

web3.version;
> "1.0.0"

web3.modules

web3.modules属性返回一个包含所有子模块类的对象,可以用来 手工实例化这些子模块类。

调用方法:

Web3.modules
web3.modules

返回值:

Object: 子模块列表:

  • Eth - Function: Eth模块类,用来与以太坊网络进行交互。参见web3.eth。
  • Net - Function: Net模块类,用来与网络属性进行交互。参见web3.eth.net。
  • Personal - Function: Personal模块类,用来与以太坊账户进行交互。参见web3.eth.personal。
  • Shh - Function: Shh模块类,用来与whisper协议交互。参见web3.shh。
  • Bzz - Function: Bzz模块类,用来与swarm网络交互。参见web3.bzz。 示例代码:
web3.modules
> {
    Eth: Eth function(provider),
    Net: Net function(provider),
    Personal: Personal function(provider),
    Shh: Shh function(provider),
    Bzz: Bzz function(provider),
}

web3.setProvider

web3.setProvider()方法用来修改指定模块的底层通讯服务提供器。

调用:

web3.setProvider(myProvider)
web3.eth.setProvider(myProvider)
web3.shh.setProvider(myProvider)
web3.bzz.setProvider(myProvider)
...

注意:当在web3上直接调用setProvider()方法时,将为所有其他子模块设置服务提供器,例如web3.eth和web3.shh。 但web3.bzz不受影响,因为该子模块始终使用独立的服务提供器。

参数:

Object - myProvider: 有效的服务提供器对象。

返回值:

Boolean

示例代码:

var Web3 = require('web3');
var web3 = new Web3('http://localhost:8545');
// 或者
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

// 改变服务提供器
web3.setProvider('ws://localhost:8546');
// 或者
web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546'));

// 在node.js中使用IPC服务提供器
var net = require('net');
var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os 路径
// 或者
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path
// 在windows下的路径是: "\\\\.\\pipe\\geth.ipc"
// 在linux下的路径是: "/users/myuser/.ethereum/geth.ipc"

web3.providers 返回当前有效的通信服务提供器。

调用:

web3.providers
web3.eth.providers
web3.shh.providers
web3.bzz.providers
...

返回值:

Object, 参见以下服务提供器对象:

  • Object - HttpProvider: HTTP服务提供器已经被弃用,因为它不支持订阅。
  • Object - WebsocketProvider: Websocket服务提供器是用于传统的浏览器中的标准方法。
  • Object - IpcProvider: 当运行一个本地节点时,IPC服务提供器用于node.js下的DApp环境,该方法提供最安全的连接。 示例代码:
var Web3 = require('web3');
// 使用指定的服务提供器(例如在Mist中)或实例化一个新的websocket提供器
var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546');
// 或者
var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546'));

// 在node.js中使用IPC服务提供器
var net = require('net');

var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os 路径
// 或者
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os 路径
// windows路径是: "\\\\.\\pipe\\geth.ipc"
// linux路径是: "/users/myuser/.ethereum/geth.ipc"

web3.givenProvider

在以太坊兼容的浏览器中使用web3.js时,web3.givenProvider属性将返回浏览器设置的原生 服务提供器,否则返回null。

调用:

web3.givenProvider
web3.eth.givenProvider
web3.shh.givenProvider
web3.bzz.givenProvider
...

返回值:

Object: 浏览器设置好的提供器,或者null;

web3.currentProvider

web3.currentProvider属性返回当前在用的通信服务提供器,如果没有的话则返回null。

调用:

web3.currentProvider
web3.eth.currentProvider
web3.shh.currentProvider
web3.bzz.currentProvider
...

返回值:

Object: 当前在用的服务提供器,或者null。

web3.BatchRequest

web3.BatchRequest类用来创建并执行批请求。

调用:

new web3.BatchRequest()
new web3.eth.BatchRequest()
new web3.shh.BatchRequest()
new web3.bzz.BatchRequest()

参数:

返回值:

一个对象,具有如下方法:

  • add(request): 将请求对象添加到批调用中
  • execute(): 执行批请求 示例代码:
var contract = new web3.eth.Contract(abi, address);

var batch = new web3.BatchRequest();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(contract.methods.balance(address).call.request({from: '0x0000000000000000000000000000000000000000'}, callback2));
batch.execute();

web3.extend

使用web3.extend()方法来继承扩展web3的模块类。

调用:

web3.extend(methods)
web3.eth.extend(methods)
web3.shh.extend(methods)
web3.bzz.extend(methods)

参数:

methods - Object: 扩展对象,包含一组如下的方法描述对象:

  • property - String: 可选,要添加到模块上的属性名称。 如果没有设置属性,则直接添加到模块上。
  • methods - Array: 方法描述对象数组,每个描述对象包含以下字段:
  • name - String: 要添加的方法名称
  • call - String: RPC方法名称
  • params - Number: 可选,方法的参数个数,默认值为0
  • inputFormatter - Array: 可选,输入格式化函数数组,每个成员对应一个函数参数,或者使用null来对应不需要进行格式化处理的参数
  • outputFormatter - Function: 可选,用来格式化输出 返回值:

Object: 扩展后的模块

示例代码:

web3.extend({
    property: 'myModule',
    methods: [{
        name: 'getBalance',
        call: 'eth_getBalance',
        params: 2,
        inputFormatter: [web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: web3.utils.hexToNumberString
    },{
        name: 'getGasPriceSuperFunction',
        call: 'eth_gasPriceSuper',
        params: 2,
        inputFormatter: [null, web3.utils.numberToHex]
    }]
});

web3.extend({
    methods: [{
        name: 'directCall',
        call: 'eth_callForFun',
    }]
});

console.log(web3);
> Web3 {
    myModule: {
        getBalance: function(){},
        getGasPriceSuperFunction: function(){}
    },
    directCall: function(){},
    eth: Eth {...},
    bzz: Bzz {...},
    ...
}

合作伙伴