微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

该合约对象尚未设置地址,请先设置地址

如何解决该合约对象尚未设置地址,请先设置地址

我正在尝试学习如何使用 web3 开发加密货币,但我遇到了一些麻烦。一切都已基本完成,但是当我尝试在我的网站上兑换硬币时,它会中断。我已经尝试对地址进行硬编码,但我遇到了同样的错误

我正在使用带有 Metamask 的 firefox

操作系统 macOS

完全错误

App/_this.buyTokens src/components/App.js:72

  70 | buyTokens = (etherAmount) => {
  71 |   this.setState({ loading: true })
> 72 |   this.state.cypherSite.methods.buyTokens().send({value: etherAmount,from: this.state.account}).on('transactionHash',(hash) => {
     | ^  73 |     this.setState({loading: false})
  74 |   })
  75 | }
onSubmit
src/components/BuyForm.js:23

  20 |   let etherAmount 
  21 |   etherAmount = this.input.value.toString()
  22 |   etherAmount = window.web3.utils.toWei(etherAmount,'Ether')
> 23 |   this . props . buyTokens(etherAmount)

App.js


class App extends Component {

  async loadBlockchainData(){
    const web3 = window.web3
    const accounts = await web3.eth.getAccounts()
    
    this.setState({account: accounts[0]})
    //console.log(this.state.account)

    const ethBalance = await web3.eth.getBalance(this.state.account)
    this.setState({ethBalance: ethBalance})
    
    const networkId = await web3.eth.net.getId()
    const coinData = CypherCoin.networks[networkId]
    if(coinData){
    const coin = new web3.eth.Contract(CypherCoin.abi,coinData.address)
    this.setState({coin})
    let coinBalance = await coin.methods.balanceOf(this.state.account).call()
    //console.log("coin balance",coinBalance.toString())
    this.setState({coinBalance: coinBalance.toString()})
    //console.log("coin add: ",coin)
    }
    else{
      window.alert('Token contrat not deployed to detected network.')
    }

    const siteData = CypherSite.networks[networkId]
    if(siteData){
    const cypherSite = new web3.eth.Contract(CypherSite.abi,CypherSite.address)
    this.setState({cypherSite: cypherSite})
    console.log(this.state.cypherSite)
    }
    else{
      window.alert('CypherSite contrat not deployed to detected network.')
    }

    //console.log(this.state.cypherSite)
    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.ethereum)
    }
    else{
      window.alert('Non-Ethereum browser detected. You should consider trying MetaMask.')
    }
  }

  buyTokens = (etherAmount) => {
    this.setState({ loading: true })
    this.state.cypherSite.methods.buyTokens().send({value: etherAmount,(hash) => {
      this.setState({loading: false})
    })
  }

  constructor(props){
    super(props);
    this.state = { 
      account: '',coin: {},cypherSite: {},ethBalance: '0',coinBalance: '0',loading: true
    };
  }

  render() {

    let content
    
    if(this.state.loading){
      content = <p id="loader" className="text-center">Loading...</p>
    }
    else{
      content = <Main 
      ethBalance={this.state.ethBalance} 
      coinBalance={this.state.coinBalance}
      buyTokens={this.buyTokens}
      />
    }
  }
}

export default App;

Main.js


class Main extends Component {

  constructor(props){
    super(props)
    this.state = {
      output: '0'
    }
  }
  
  render() {
    return (
      <div id="content">

        <div className="card mb-4">

        <div className="card-body">

          < BuyForm 
          ethBalance={this.props.ethBalance}
          coinBalance={this.props.coinBalance}
          buyTokens={this.props.buyTokens}
          />
        </div>
</div>

      </div>
    );
  }
}

export default Main;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?