web3.js的provider

web3是所有ethereum交互模块的总包。

web3.setProvider()

  • 参数:
    Object - myProvider: 有效的服务提供者对象。

  • 返回值:
    Boolean

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

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

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

示例代码:

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"

web3.providers

返回当前有效的通信服务提供者。

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

返回值:
Object, 参见以下服务提供者对象:

  • Object - HttpProvider: The HTTP provider is deprecated, as it won’t work for subscriptions.
    HTTP服务提供器已经被弃用,因为它不支持订阅。
  • Object - WebsocketProvider: The Websocket provider is the standard for usage in legacy browsers.
    Websocket服务提供器是用于传统的浏览器中的标准方法。
  • Object - IpcProvider: The IPC provider is used node.js dapps when running a local node. Gives the most secure connection.
    当运行一个本地节点时,IPC服务提供器用于node.js的DApp,该方法提供最安全的连接。

示例代码:

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'
    },

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

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

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

相关内容:
https://web3js.readthedocs.io/en/v1.2.9/web3.html#setprovider
http://cw.hubwiz.com/card/c/web3.js-1.0/1/1/4/

web3的provider的正确使用

Web3.js和Ethers.js都是用于与以太坊(Ethereum)交互的JavaScript库,但它们在设计和使用上存在一些差异: 1. **API设计**[^1]: - Web3.js提供了一个基础的以太坊交互接口,其API可能更为直接,但可能相对底层,需要开发者手动处理更多的细节,如设置gas价格。 - Ethers.js则更倾向于简化用户体验,它封装了一些高级功能,如`getBalance()`函数,可以直接获取账户余额并自动转换为以太(ETH)的数量(除以1e18),这减少了对开发者的需求。 2. **易用性**: - Ethers.js倾向于提供异步操作的承诺(promises)版本,使得调用更加直观和易于管理错误,比如`await ethprovider.getBalance(account)`。 - Web3.js虽然也支持 Promises,但在一些地方可能需要显式地处理回调函数。 3. **安全性**: - Ethers.js有时会提供更好的安全特性,比如签名交易时可以自动处理默认的零知识证明(Zero-Knowledge Proofs,ZKP)和其他最佳实践。 4. **社区和更新**: - Web3.js作为较早的库,拥有较大的社区和历史积累,但是更新速度可能不如Ethers.js新库快。 5. **特定功能**: - Ethers.js可能包含针对特定场景优化的功能,如钱包管理、合约交互等。 要使用Ethers.js获取余额示例: ```javascript const ethers = require('ethers'); const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_PROJECT_ID'); // 替换为实际的Infura API async function getBalance(accountAddress) { const signer = provider.getSigner(); const balance = await signer.get_balance(accountAddress); return parseFloat(balance.toString()) / 1e18; } // 使用账户地址调用函数 let accountBalance = await getBalance('0xYourAccountAddressHere'); console.log(`Account Balance (in ETH): ${accountBalance}`); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值