不检索价值简单彩票以太坊合约管理器方法

Eri*_*uez 0 reactjs ethereum solidity

我正在用 React 构建一个简单的应用程序,但是var manager = wait lottery.methods.manager().call(); 永远不会检索值,我怎么会错呢?

彩票.js

import web3 from './web3';

const address = '0x430b45dcf781d58e73CeeA288b4196B6ddeE4d7E';

const abi = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"enter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getPlayers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pickWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"players","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"random","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}];
const cont = new web3.eth.Contract(abi,address);
export default cont;
Run Code Online (Sandbox Code Playgroud)

应用程序.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 {
  
  constructor (props){
    super(props);
    this.state = {"manager":''};
  }

  async componentDidMount(){
    console.log("componentDidMount fired");
    var manager = await lottery.methods.manager().call();//never set  manager var
    this.setState({manager});
  }

  render() {
    return (
      <div>
        <h2>Lottery contract</h2>
        <p>This contract is managed by {this.state.manager}</p>
      </div>
    );
  }
}

export default App;

Run Code Online (Sandbox Code Playgroud)

web3.js

import Web3 from "web3";

const web3 = new Web3(window.ethereum);//Web3(window.web3.currentProvider);


export default web3;

Run Code Online (Sandbox Code Playgroud)

结果查看

欢迎任何帮助我的建议,谢谢

小智 5

对我有用的是在https://remix.ethereum.org/上编译我的合约并从那里复制 abi。

const abi = [ 
    {
        "inputs": [],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [],
        "name": "enter",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getPlayers",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "",
                "type": "address[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "manager",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "pickWinner",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "name": "players",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    }
];
Run Code Online (Sandbox Code Playgroud)