首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >web3-react似乎没有公开Ethers.js实例。

web3-react似乎没有公开Ethers.js实例。
EN

Ethereum用户
提问于 2020-11-20 11:14:23
回答 1查看 3.5K关注 0票数 2

我已经在我的项目中配置了web3-react包(使用React设置),但是我似乎没有在上下文中获得一个ethers.js实例。

根据包页web3-react上下文提供"library:实例化的ethers.js或web3.js实例(或低级提供程序对象)“。看来我得到的是低级提供者对象。

我设置如下(我在本地配置了networkId 13):

App.js

代码语言:javascript
复制
export default function App() {
  const { InjectedConnector } = Connectors;
  const MetaMask = new InjectedConnector({ supportedNetworks: [1, 4, 13] });
  const connectors = { MetaMask };
  return (
    <Web3Provider connectors={connectors} libraryName={'ethers.js'}>
      <Router>
        <Switch>
          <Route exact path='/simple-storage' component={SimpleStorage} />
        </Switch>
      </Router>
    </Web3Provider>
  );
}

SimpleStorage.js

代码语言:javascript
复制
import React, { useEffect, useState } from 'react';
import { useWeb3Context } from 'web3-react';
import SimpleStorageContract from './contracts/SimpleStorage.json'; // ABI

export default function SimpleStorage() {
  const context = useWeb3Context();
  const [storageValue, setStorageValue] = useState(0);
  const [contract, setContract] = useState(null);
  useEffect(() => context.setFirstValidConnector(['MetaMask']), [context]);
  const { account, active, error, library, networkId } = context;

  if (!active && !error) return <div>loading</div>;
  if (error) return <div>error</div>;

  const { Contract, providers } = ethers;

  const instantiate = () => {
    const { networks, abi } = SimpleStorageContract;
    const { address } = networks[networkId];
    const provider = new providers.Web3Provider(library.provider);
    const signer = provider.getSigner();
    const instance = new Contract(address, abi, signer);
    setContract(instance);
  };
...

下面是我从上下文中得到的信息,我认为它是元掩码注入的web3提供程序:

react3-web library

代码语言:javascript
复制
{
  "_isProvider": true,
  "_events": [],
  "_emitted": {
    "block": -2
  },
  "formatter": {
    "formats": {
      "transaction": {},
      "transactionRequest": {},
      "receiptLog": {},
      "receipt": {},
      "block": {},
      "blockWithTransactions": {},
      "filter": {},
      "filterLog": {}
    }
  },
  "anyNetwork": false,
  "_networkPromise": {},
  "_maxInternalBlockNumber": -1024,
  "_lastBlockNumber": -2,
  "_pollingInterval": 4000,
  "_fastQueryDate": 0,
  "connection": {
    "url": "metamask"
  },
  "_nextId": 42,
  "provider": {
    "_events": {},
    "_eventsCount": 3,
    "_maxListeners": 100,
    "isMetaMask": true,
    "_state": {
      "sentWarnings": {
        "enable": true,
        "experimentalMethods": false,
        "send": false,
        "events": {
          "chainIdChanged": false,
          "close": false,
          "data": false,
          "networkChanged": true,
          "notification": false
        },
        "autoRefresh": true,
        "publicConfigStore": false
      },
      "isConnected": true,
      "accounts": [
        "0x8cab72aad873e9450b10fa785df981986c3dea18"
      ],
      "isUnlocked": true
    },
    "_metamask": {},
    "selectedAddress": "0x8cab72aad873e9450b10fa785df981986c3dea18",
    "networkVersion": "13",
    "chainId": "0xd",
    "_publicConfigStore": {
      "_events": {
        "update": [
          null,
          null,
          null
        ]
      },
      "_eventsCount": 1,
      "_state": {
        "isUnlocked": true,
        "chainId": "0xd",
        "networkVersion": "13"
      }
    },
    "_rpcEngine": {
      "_events": {},
      "_eventsCount": 0,
      "_middleware": [
        null,
        null,
        null
      ]
    },
    "autoRefreshOnNetworkChange": false
  }
}

如何从上下文中获取实例化的Ethers.js?正如您所看到的,我已经导入了以太来与契约进行交互,但这是否违背了(想必)从上下文中获得它的目的?

EN

回答 1

Ethereum用户

发布于 2021-07-28 01:48:30

事实上,对于web3-反应:

代码语言:javascript
复制
const provider = new providers.Web3Provider(library.provider);

等于:

代码语言:javascript
复制
const context = useWeb3React();
const { library } = context;

然后,您可以使用库完成提供程序所做的一切。

票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/90340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档