使用 Web3 从 Solidity 调用函数
Posted
技术标签:
【中文标题】使用 Web3 从 Solidity 调用函数【英文标题】:Call Function From Solidity With Web3 【发布时间】:2019-03-28 01:00:52 【问题描述】:我无法从我的 Solidity 合约中调用一个简单的函数。到目前为止,代码的结构如下:
在我的web3Api.js
文件中,我有:
export function getContract(contractDefinition)
initWeb3();
const contract = initContract(contractDefinition);
contract.setProvider(web3.currentProvider);
if (typeof contract.currentProvider.sendAsync !== 'function')
contract.currentProvider.sendAsync = function ()
return contract.currentProvider.send.apply(
contract.currentProvider, arguments
);
;
return contract.deployed();
然后在我的projectApi.js
文件中:
import getContract from './web3Api';
import CompiledContract '../../../build/contracts/compiledContract.json';
let globalVariable;
export async function testing123()
const contractInstance = await getContract(CompiledContract)
globalVariable = contractInstance;
注意:当我在整个文件中调用全局变量时,它会成功返回我的所有合约函数
TruffleContract constructor: ƒ, abi: Array(33), contract: Contract, PracticeEvent: ƒ, Transfer: ƒ, …
所以下一部分是我遇到麻烦的地方。
为了这篇文章,我只是想从我的合约中调用这个简单的函数:
function smartContractFunction() public
emit PracticeEvent("practice event has been called");
现在回到我的projectApi.js
文件中,我正在使用 globalVariable 来尝试从我的合约中获取这个函数。这是我写的:
export async function practiceInteract()
const submitTest = await globalVariable.smartContractFunction().call();
console.log(submitTest);
当我运行应用程序时,我收到一条错误消息“formatters.js:274 Uncaught (in promise) Error: invalid address”
知道为什么我不能在我的 projectAPI.js 文件中调用这个solidity 函数吗?
如果我没有清楚地写出我的问题,很高兴澄清这一点。 谢谢!
【问题讨论】:
你能检查一下合约地址是否正确并且实际上指向你的合约吗? 【参考方案1】:您的问题是您根本没有定义调用该函数的地址。如果您以您的方式使用web3
,您需要定义谁在调用该函数。正确的代码是:
export async function practiceInteract()
const submitTest = await globalVariable.smartContractFunction().call(from: web3.eth.accounts[0]);
console.log(submitTest);
【讨论】:
当你call
一个函数时这不是必需的。仅当您发送transaction
时才需要。您可以在文档中了解更多信息:web3js.readthedocs.io/en/1.0/web3-eth-contract.html以上是关于使用 Web3 从 Solidity 调用函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python Web3.py 调用 Solidity 函数