松露细雨和Web3Modal

问题描述 投票:0回答:1

我正在尝试在Truffle Drizzle中设置Web3Modal(https://github.com/Web3Modal/web3modal)。我设法出现了模态显示,其中出现了电子钱包选项,但是一旦我单击它,就什么也没有发生。在Drizzle中,没有Web3提供程序更改。毛毛雨初始化为true,但没有重新加载发生,但是如果我重新加载页面,则它返回为false。看起来状态没有保存在内存中。我已经坚持了几天,所以我想知道是否有人已经进行了类似的设置或有什么想法要分享:)

非常感谢!

reactjs truffle web3js drizzle
1个回答
0
投票

我在将web3modal与drizzle集成时也遇到了同样的困难。

我遇到以下错误:

Error initializing Drizzle:
TypeError: Cannot read property 'address' of undefined
    at getOrCreateWeb3Contract (32.chunk.js:33633)
    at Drizzle.addContract

您能告诉我您的代码吗?

我将ganache用作json-rpc提供程序(运行于127.0.0.1:8545)。

我正在尝试使用像这样的反应挂钩实例化毛毛雨(例如squarelink的例子:

import React, { useState, useEffect } from 'react'
import Web3 from 'web3'
import { Drizzle, generateStore } from '@drizzle/store'
import { DrizzleContext } from '@drizzle/react-plugin'
import Web3Modal from 'web3modal'
import Squarelink from 'squarelink'
import A from 'abi/A.json'
import B from 'abi/B.json'
import C from 'abi/C.json'

const DrizzleLoader = props => {
  const { children } = props

  const [drizzleInstance, setDrizzleInstance] = useState(null)

  useEffect(() => {
    async function createDrizzle() {
      const providerOptions = {
        squarelink: {
          package: Squarelink, // required
          options: {
            id: "client-id", // required
            url: "http://127.0.0.1:8545"
          }
        },
      }

      const web3Modal = new Web3Modal({
        providerOptions,
      })

      const web3ModalProvider = await web3Modal.connect()

      const customProvider = new Web3(web3ModalProvider)

      const drizzleOptions = {
        web3: {
          customProvider,
          block: false,
          fallback: {
            type: 'ws',
            url: 'ws://127.0.0.1:8545',
          },
        },
        contracts: [A, B, C],
        polls: {
          blocks: 3000,
        },
      }

      const drizzleStore = generateStore(drizzleOptions)

      setDrizzleInstance(new Drizzle(drizzleOptions, drizzleStore))
    }
    createDrizzle()
  }, [setDrizzleInstance])

  if (!drizzleInstance) {
    return <div>loading</div>
  }
  return (
    <DrizzleContext.Provider drizzle={drizzleInstance}>
      <DrizzleContext.Consumer>
        {drizzleContext => {
          const { drizzle, drizzleState, initialized } = drizzleContext

          if (!initialized) {
            return 'Loading...'
          }

          return {children}
        }}
      </DrizzleContext.Consumer>
    </DrizzleContext.Provider>
  )
}

export default DrizzleLoader
© www.soinside.com 2019 - 2024. All rights reserved.