Web3.providers.HttpProvider("")的作用是什么?

16

我希望使用web3js与智能合约进行交互。每个示例都将从以下内容开始

Translated:

I want to interact with a smart contract using web3js. Every example will start with following

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

我不理解 Web3.providers.HttpProvider('Address') 的用途。我的猜测是:在建立私有网络时,每个节点都应该提供不同的 rpcport 来标识它,并连接到网络。我错了吗?例如,上述代码用于前端网站,以便连接前端并在以太坊私有网络中部署合约。因此,前端代码必须是通用的,这意味着它不应在代码中添加特定的以太坊节点地址。那么,Web3.providers.HttpProvider('Address') 的用途是什么?

3个回答

18
这与使用私有或公共区块链无关。
您需要为客户提供连接到区块链的方式。具体而言,web3js库需要包括连接协议和要连接到的节点的地址/端口的Provider对象。
Web3js支持三种不同的提供者HttpProviderWebsocketProviderIpcProvider。HTTP和WS都需要节点的地址(IPC使用文件)。如果您在客户端上运行对等节点(即使用Parity或Geth),地址本身将是localhost。如果您使用像Infura这样的集中式提供者,则会使用https://mainnet.infura.io/API_KEY

1
在建立以太坊私有网络时,我们提供的是rpc端口吗? - Divya Galla

1

它不与私有或公共区块链相链接。在以太坊网络中,所有节点彼此连接。当一个节点执行交易时,提供者用于通知其他节点关于此交易的信息。


1

提供者: 您需要一个提供者来从区块链中读取数据。简单来说,它是一个运行节点(本地或像“infura”这样的服务)的服务器,可以直接查询区块链。

HttpProvider: 一个节点(本地或云端)可以为客户端提供HTTP、IPC或WSS以与节点交互。“Web3.providers.HttpProvider()”需要节点的http url。

文档参考: https://docs.ethers.io/v5/api/providers/

代码示例:

const Web3 = require("web3");


const HttpProvider =
  "https://eth-mainnet.g.alchemy.com/v2/YOUR_API";

async function main() {
  try {
    
    // Creating an instance of the Provider
    const web3 = new Web3(new Web3.providers.HttpProvider(HttpProvider));

    console.log("Connection Successful");
    console.log("Latest Block Number: ");

    // Querying the Blockchain using the Provider and Web3.js
    console.log(await web3.eth.getBlockNumber());
  } 
  catch (error) {
    console.log("Connection Error! ", error);
  }
}

main();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接