我正在尝试与Solidity和React签订一个简单的彩票合同

问题描述

文件会编译并渲染,但是一旦我按下Enter Lottery按钮,就会出现此错误

未处理的拒绝(TypeError):彩票__WEBPACK_IMPORTED_MODULE_5 _ .. default.method不是函数

我认为我在部署的合同中缺少什么?但不知道如何解决

app.js代码

import React,{ Component } from 'react';
import logo from './logo.svg';
import './App.css';
import web3 from './web3';
import lottery from './lottery';

class App extends Component {
  state = {
    manager: '',players: [],balance: '',value: '',message: ''
  };

  async componentDidMount() {
    const manager = await lottery.methods.manager().call();
    const players = await lottery.methods.getPlayers().call();
    const balance = await web3.eth.getBalance(lottery.options.address);

    this.setState({ manager,players,balance });
  }

  onSubmit = async (event) => {
    event.preventDefault();

    const accounts = await web3.eth.getAccounts

    this.setState({ message: 'Waiting on transactions success...'});

    await lottery.methods().send({
      from: accounts[0],value: web3.utils.toWei(this.state.value,'ether')
    });

    this.setState({ message: 'You have been entered!'});
  };

  render() {
      return (
        <div>
          <h2>Lottery Contract </h2>
          <p>This contract is managed by {this.state.manager}
            There are currently {this.state.players.length} people entered,competing to win {web3.utils.fromWei(this.state.balance,'ether')} ether!
          </p>

          <hr />

          <form onSubmit={this.onSubmit}>
            <h4>Want to try your luck? </h4>
            <div>
            <label> Amount of ether to enter </label>
            <input
              value={this.state.value}
              onChange={event => this.setState({ value: event.target.value })}
              />
            </div>
            <button> Enter </button>
          </form>

          <hr />

          <h1> {this.state.message} </h1>
        </div>
      );
  }
}

export default App;

解决方法

lottery.methods()有问题,请尝试console.log它。是功能吗?