使用 web3 (call) 读取方法时出现错误
I have an error when reading a method with web3 (call)
我正在尝试学习如何与 web3 集成,但我遇到了一些问题。 (正常我刚开始)
但是有个问题我解决不了
Uncaught TypeError: Cannot read property 'retrieve' of undefined
我尝试调用一个函数,但它不起作用,我不知道如何解决它。
代码如下:
const abi_c = [{"inputs": [],"name": "retrieve","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "num","type": "uint256"}],"name": "store","outputs": [],"stateMutability": "nonpayable","type": "function"}];
const account = "0x644f1439DBfc743853031d79021890af54bCA8Ae";
const web3js = new Web3(window.ethereum);
ethereum.autoRefreshOnNetworkChange = false;
var contract = web3js.eth.contract(abi_c, account);
var result = contract.methods.retrieve().call();
console.log(result);
您需要使用 new
关键字实例化 web3js.eth.Contract
class。
var contract = new web3js.eth.Contract(abi_c, account);
没有它,var contract
仅指向未实例化的定义和静态属性。
此外,请注意 Contract
(docs) 中的大写字母 C
。
然后你将运行进入另一个问题。
.call()
方法returns一个Promise,所以你需要使用await
表达式(在async
函数中)或回调函数。
// needs to be in an async function
async function getResult() {
var result = await contract.methods.retrieve().call();
console.log(result);
}
contract.methods.retrieve().call().then(function (result) {
// callback function
console.log(result);
});
我正在尝试学习如何与 web3 集成,但我遇到了一些问题。 (正常我刚开始)
但是有个问题我解决不了
Uncaught TypeError: Cannot read property 'retrieve' of undefined
我尝试调用一个函数,但它不起作用,我不知道如何解决它。
代码如下:
const abi_c = [{"inputs": [],"name": "retrieve","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "num","type": "uint256"}],"name": "store","outputs": [],"stateMutability": "nonpayable","type": "function"}];
const account = "0x644f1439DBfc743853031d79021890af54bCA8Ae";
const web3js = new Web3(window.ethereum);
ethereum.autoRefreshOnNetworkChange = false;
var contract = web3js.eth.contract(abi_c, account);
var result = contract.methods.retrieve().call();
console.log(result);
您需要使用 new
关键字实例化 web3js.eth.Contract
class。
var contract = new web3js.eth.Contract(abi_c, account);
没有它,var contract
仅指向未实例化的定义和静态属性。
此外,请注意 Contract
(docs) 中的大写字母 C
。
然后你将运行进入另一个问题。
.call()
方法returns一个Promise,所以你需要使用await
表达式(在async
函数中)或回调函数。
// needs to be in an async function
async function getResult() {
var result = await contract.methods.retrieve().call();
console.log(result);
}
contract.methods.retrieve().call().then(function (result) {
// callback function
console.log(result);
});