Ethereum 无法读取属性错误(无法调用函数getNum)

Ethereum 无法读取属性错误(无法调用函数getNum),ethereum,solidity,web3,web3js,Ethereum,Solidity,Web3,Web3js,合同在html文件代码上方给出。 基本上就是获取和设置数字。 我在代码中使用了承诺。这就是问题所在吗? ABI和合同地址正确无误。 我使用web3.currentProvider是因为我使用的是metamask。 我是区块链的初学者 pragma solidity ^0.5.0; contract sample { uint number; constructor () public { number = 5; } function getNu

合同在html文件代码上方给出。 基本上就是获取和设置数字。 我在代码中使用了承诺。这就是问题所在吗? ABI和合同地址正确无误。 我使用web3.currentProvider是因为我使用的是metamask。 我是区块链的初学者

pragma solidity ^0.5.0;

contract sample {

    uint number;
    constructor () public {
        number = 5;
    }
    function getNum () public view returns (uint) {
        return number;
    }

    function setNum (uint n) public {
        number = n;
    }
}
在控制台上,错误:

未捕获的TypeError:无法读取未定义的属性“getNum” html:51

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Test for Web3</title>
    <!--<script src="https://cdn.jsdelivr.net/npm/web3@1.2.1/src/index.min.js"></script>-->
</head>
<body>
    <script>
        var web3;
        web3 = new Web3(web3.currentProvider);
        var contract = web3.eth.contract(
            [
    {
        "constant": false,
        "inputs": [
            {
                "name": "n",
                "type": "uint256"
            }
        ],
        "name": "setNum",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getNum",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }
],"0x0c094f6ffbf8dbfde107e819e5060c509eab8951");
    contract.methods.getNum().call().then(function(result){
        console.log("Number: " + JSON.stringify(result));
    });
    </script>
</body>
</html>

Web3的测试
var-web3;
web3=新的web3(web3.currentProvider);
var合同=web3.eth.contract(
[
{
“常数”:假,
“投入”:[
{
“名称”:“n”,
“类型”:“uint256”
}
],
“名称”:“setNum”,
“产出”:[…],
“应付”:虚假,
“状态可变”:“不可支付”,
“类型”:“功能”
},
{
“投入”:[],
“应付”:虚假,
“状态可变”:“不可支付”,
“类型”:“构造函数”
},
{
“常量”:正确,
“投入”:[],
“名称”:“getNum”,
“产出”:[
{
“名称”:“,
“类型”:“uint256”
}
],
“应付”:虚假,
“状态可变性”:“视图”,
“类型”:“功能”
}
]“0x0c094f6ffbf8dbfde107e819e5060c509eab8951”);
contract.methods.getNum().call().then(函数(结果){
log(“编号:+JSON.stringify(结果));
});

看起来您正在使用1.X web3.js版本。在这种情况下,使用
var contract=new web3.eth.contract
。有关更多信息,请参阅:

new web3.eth.Contract(jsonInterface[, address][, options])