当我尝试使用 JavaScript 调用智能合约函数时,它们显示为未定义

Posted

技术标签:

【中文标题】当我尝试使用 JavaScript 调用智能合约函数时,它们显示为未定义【英文标题】:My smart contract functions show up as undefined when I try to call them using JavaScript 【发布时间】:2021-11-29 02:24:13 【问题描述】:

首先,我对 javascript 和 web3 还很陌生,所以如果问题很琐碎,请见谅。

if (typeof web3 !== 'undefined') 
   web3Provider = web3.currentProvider;

   web3 = new Web3(web3.currentProvider);
  else 
   web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
   web3 = new Web3(App.web3Provider);
 

这是我目前实例化 web3 的方式,不确定它是否已被弃用(我觉得这可能是问题所在)

当我尝试像这样记录 getAccounts() 函数时

console.log(web3.eth.getAccounts())

我面临:

web3.min.js:2 Uncaught (in promise) TypeError: e is not a function
at web3.min.js:2
at web3.min.js:2
at r (inpage.js:1)
at s._handle (inpage.js:17)

当我尝试调用我的solidity函数时,即一个名为“addFood()”的函数,它接受4个这样的参数,

var eth_pk = document.getElementById("pk").value
   console.log(eth_pk)    //console.log logs the output values in the javascript console.
   var eth_fd = document.getElementById("fd").value
   console.log(eth_fd)
   var eth_pl = document.getElementById("pl").value
   console.log(eth_pl)
   var eth_prc = document.getElementById("prc").value
   console.log(eth_prc)
   contract.methods.addFood(eth_pk, eth_fd, eth_pl, eth_prc).send( from: web3.eth.defaultAccount , function(error, result)
 
   console.log(result)
 )

我遇到了

Uncaught TypeError: Cannot read properties of undefined (reading 'addFood')
at htmlFormElement.<anonymous> (sell.html:208)

我将提供解决此问题所需的任何其他代码。如果有人能解决这个问题,我将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

你可能正在使用 MetaMask,在这种情况下你的提供者是 window.ethereum

【讨论】:

以上是关于当我尝试使用 JavaScript 调用智能合约函数时,它们显示为未定义的主要内容,如果未能解决你的问题,请参考以下文章

通过 web3.js 调用智能合约函数没有响应

执行智能合约时的 Solidity 错误消息:“如果您发送价值,则应支付被调用的函数......”

合约代码无法存储,请检查您的gas限制:以太坊智能合约部署失败:

没有明显原因的智能合约函数调用上的ValidationError(web3py)?

回调智能合约 web3.php 中的 PHP 数组

如何使用 Python 和 web3.py 调用智能合约函数