Nextjs 13.0.2和Ethers为什么我的Provider未定义?

fhity93d  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(275)

我尝试访问ethers提供程序,如下所示:

import { ethers } from "ethers";

export const signMessage = () => {
  
  const provider = new ethers.providers.Web3Provider(window.ethereum);
  const signer = provider.getSigner();

  try {
    signer.signMessage("Hey hey").then((result) => {
      console.log(result);
    });
  } catch (error) {
    // handle error
    console.log(error);
  }
};

但它总是给我错误:

Unhandled Runtime Error
TypeError: Cannot read properties of undefined (reading 'Web3Provider')

我试过不同的供应商,但总是得到上面的错误信息.
有人知道为什么它对Nextjs12有效,而对Next13无效吗?

j7dteeu8

j7dteeu81#

我认为您在next 13中使用的是版本6。如果您安装

"ethers": "^5.6.4",

在接下来13年里,它将发挥作用。
我认为您以前有版本5的next-12项目,现在在next-13上安装新版本
ethers v6中所有这些

export {
    getDefaultProvider,
    Block, FeeData, Log, TransactionReceipt, TransactionResponse,
    AbstractSigner, NonceManager, VoidSigner,
    AbstractProvider,
    FallbackProvider,
    JsonRpcApiProvider, JsonRpcProvider, JsonRpcSigner,

    BrowserProvider,
    AlchemyProvider, AnkrProvider, CloudflareProvider, EtherscanProvider,
    InfuraProvider, PocketProvider, QuickNodeProvider,
    IpcSocketProvider, SocketProvider, WebSocketProvider,
    EnsResolver,
    Network
} from "./providers/index.js";

都是这样进口的

import { BrowserProvider } from "ethers";

const providerr = new BrowserProvider(window.ethereum);

这是我设置组件连接的方式

const Test = () => {
  const [provider, setProvider] = useState();
  useEffect(() => {
    const browserProvider = new BrowserProvider(window.ethereum);
    setProvider(browserProvider);
  }, []);
  const connect = async () => {
    await provider.send("eth_requestAccounts");
  };
  return (
    <div>
      <button onClick={connect}>connect</button>
    </div>
  );
};

export default Test;

相关问题