Web3.js 中文Api文档

🌙
手机阅读
本文目录结构

这是 web3.js 库的主类。

var Web3 = require('web3');

> Web3.utils
> Web3.version
> Web3.givenProvider
> Web3.providers
> Web3.modules
WEB3 -> ETH网络: 老铁,当前网络的最新高度是多少 
ETH网络 --> WEB3: 搜索查询后的结果是:12345678
WEB3 -> ETH网络: 谢谢老铁

Web3.modules


Web3.modules

将返回具有所有子模块的对象,以便能够手动实例化它们。


返回值

Object: 构造函数的列表:

  • Eth - Constructor: 用于与以太坊网络(web3.eth)交互的Eth模块。
  • Net - Constructor: 用于与网络属性进行交互的Net模块(web3.eth.net)。
  • Personal - Constructor: 用于与以太坊账户进行交互的个人模块(web3.eth.personal)。
  • Shh - Constructor: 用于与加密协议交互的Shh模块(web3.shh)。
  • Bzz - Constructor: 用于与群体网络(web3.bzz)进行交互的Bzz模块。

例子

Web3.modules
> {
    Eth: Eth(provider),
    Net: Net(provider),
    Personal: Personal(provider),
    Shh: Shh(provider),
    Bzz: Bzz(provider),
}

Web3 实例

Web3类是一个伞包,用于容纳所有与以太坊相关的模块。

var Web3 = require('web3');

// "Web3.providers.givenProvider" will be set if in an Ethereum supported browser.
var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546');

> web3.eth
> web3.shh
> web3.bzz
> web3.utils
> web3.version

version

Web3类的静态可访问属性以及实例的属性。下面两种方式都可以获取到。

Web3.version
web3.version

这个属性是包含 web3.js 库的当前软件包版本。


返回值

String: 当前版本。


例子

web3.version;
> "1.2.3"

utils

Web3类的静态可访问属性以及实例的属性。下面两种方式都可以获取到。

Web3.utils
web3.utils

setProvider


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

将更改其模块的提供程序。

When called on the umbrella package web3 it will also set the provider for all sub modules web3.eth, web3.shh, etc. EXCEPT web3.bzz which needs a separate provider at all times.


参数

  1. Object - myProvider: 有效的 provider 。

返回值

Boolean


例子

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

// change provider
web3.setProvider('ws://localhost:8546');
// or
web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546'));

// Using the IPC provider in node.js
var net = require('net');
var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path
// or
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path
// on windows the path is: "\\\\.\\pipe\\geth.ipc"
// on linux the path is: "/users/myuser/.ethereum/geth.ipc"

providers

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

包含当前可用的提供程序。


Object 与以下提供商:

  • Object - HttpProvider: 不建议使用HTTP提供程序,因为它不适用于订阅。(没办法推送)
  • Object - WebsocketProvider: Websocket提供程序是在旧版浏览器中使用的标准。
  • Object - IpcProvider: 运行本地节点时,将使用IPC提供程序的node.js dapps。提供最安全的连接。

例子


var Web3 = require('web3');
// use the given Provider, e.g in Mist, or instantiate a new websocket provider
var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546');
// or
var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546'));

// Using the IPC provider in node.js
var net = require('net');

var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path
// or
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path
// on windows the path is: "\\\\.\\pipe\\geth.ipc"
// on linux the path is: "/users/myuser/.ethereum/geth.ipc"

Configuration


// ====
// Http
// ====

var Web3HttpProvider = require('web3-providers-http');

var options = {
    keepAlive: true,
    withCredentials: false,
    timeout: 20000, // ms
    headers: [
        {
            name: 'Access-Control-Allow-Origin',
            value: '*'
        },
        {
            ...
        }
    ],
    agent: {
        http: http.Agent(...),
        baseUrl: ''
    }
};

var provider = new Web3HttpProvider('http://localhost:8545', options);

// ==========
// Websockets
// ==========

var Web3WsProvider = require('web3-providers-ws');

var options = {
    timeout: 30000, // ms

    // Useful for credentialed urls, e.g: ws://username:password@localhost:8546
    headers: {
        authorization: 'Basic username:password'
    },

    clientConfig: {
        // Useful if requests are large
        maxReceivedFrameSize: 100000000,   // bytes - default: 1MiB
        maxReceivedMessageSize: 100000000, // bytes - default: 8MiB

        // Useful to keep a connection alive
        keepalive: true,
        keepaliveInterval: 60000 // ms
    },

    // Enable auto reconnection
    reconnect: {
        auto: true,
        delay: 5000, // ms
        maxAttempts: 5,
        onTimeout: false
    }
};

var ws = new Web3WsProvider('ws://localhost:8546', options);

有关Http和Websocket提供程序模块的更多信息,可以在这里找到:


givenProvider

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

在以太坊兼容的浏览器中使用web3.js时,它将由该浏览器使用当前的本机提供程序进行设置。将通过(浏览器)环境返回给定的提供程序,否则 null


返回值

Object: 给定的 provider 集 或者 null;


例子

web3.setProvider(web3.givenProvider || "ws://remotenode.com:8546");

currentProvider

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

将返回当前 provider ,否则 null


返回值

Object: 当前 provider 集或null


例子

if(!web3.currentProvider) {
    web3.setProvider("http://localhost:8545");
}

BatchRequest

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

用于创建和执行批处理请求的类。


参数

none


返回值

Object: 使用以下方法:

  • 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(methods)
    web3.eth.extend(methods)
    web3.shh.extend(methods)
    web3.bzz.extend(methods)
    ...

允许扩展web3模块。

.. note:: You also have *.extend.formatters as additional formatter functions to be used for input and output formatting. Please see the source file <https://github.com/ethereum/web3.js/blob/1.x/packages/web3-core-helpers/src/formatters.js>_ for function details.


参数

  1. methods - Object: 带有方法描述对象数组的扩展对象,如下所示:
    • property - String: (可选)要添加到模块的属性的名称。如果未设置任何属性,则将其直接添加到模块中。
    • methods - Array: 方法描述数组:
      • name - String: 要添加的方法的名称。
      • call - String: RPC方法名称。
      • params - Number: (可选)该功能的参数数量。默认值0。
      • inputFormatter - Array:(可选)inputformatter函数的数组。每个数组项都对一个函数参数做出响应,因此,如果您不希望某些参数格式化,请添加一个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 {...},
    ...
}

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了