如何正确集成我的智能合约?

时间:2021-04-05 20:54:29

标签: javascript json solidity

几个星期以来,我一直在为智能合约而苦苦挣扎,我正在认真地取得进展,但我被困在了这一点上......

class App extends Component {
  
    async componentWillMount() {
      await this.loadWeb3()
      await this.loadBlockchainData()
    }
      async loadBlockchainData() {
      const web3 = window.web3
  
      const accounts = await web3.eth.getAccounts()
      this.setState({ account: accounts[0] })
  
      const networkId = await web3.eth.net.getId() 

      
    const Musketeer = Musketeer.networks[networkId]
    if(Musketeer) {
      const Musketeer = new web3.eth.Contract(Musketeer.abi, Musketeer.address)

/// I DONT NEED THIS PART ANYMORE I"LL SKIP DISPLAYING THE BALANCE ///
    
this.setState({ Musketeer })
      let MusketeerBalance = await Musketeer.methods.balanceOf(this.state.account).call()
      this.setState({ MusketeerBalance: MusketeerBalance.toString() })

//////////////////////////////////

    } else {
      window.alert('Musketeer contract not deployed to detected network.')
    }
  
      this.setState({ loading: false })
    }
  
    async loadWeb3() {
      if (window.ethereum) {
        window.web3 = new Web3(window.ethereum)
        await window.ethereum.enable()
      }
      else if (window.web3) {
        window.web3 = new Web3(window.web3.currentProvider)
      }
      else {
        window.alert('Non-Ethereum browser detected. You should consider trying MetaMask!')
      }
    }

我在这里尝试将合同火枪手放在 App.js 中,但我不完全明白我必须做些什么来整合它。如果有人能用尼安德特人的语言向我解释这一点,我会感激我的余生..我现在根本不明白。

提前致谢!

1 个答案:

答案 0 :(得分:1)

从 React App.js 连接到此合约的步骤如下:

先决条件:合同已部署并且您拥有它的地址。如果您使用的是松露,truffle develop 那么 truffle migrate --reset 应该在本地部署您的合约。见this truffle blog

  1. 加载 web3,如果用户有钱包
  2. (可选)将来自 web3.eth.getAccounts() 的 web3 对象和帐户对象放入您的状态
  3. 使用部署地址创建合约实例。您也可以从应用动态部署合约,但这更复杂。
  4. 将合同添加到您的州
  5. 调用合约上的方法

查看此 github repo 并添加您需要的内容。