Ethereum 无法读取属性错误(无法调用函数getNum)
合同在html文件代码上方给出。 基本上就是获取和设置数字。 我在代码中使用了承诺。这就是问题所在吗? ABI和合同地址正确无误。 我使用web3.currentProvider是因为我使用的是metamask。 我是区块链的初学者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
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])