我正试图在我的专用以太坊网络上部署一个Solidity程序。但是,当我调用一个方法时,它无法正常工作。
这是我在调用方法之前所做的事情。
$ truffle console
truffle(development)> var dApp
undefined
truffle(development)> Hello.deployed().then(function(instance) { dApp = instance; })
undefined
truffle(development)> dApp.message.call()
测试环境低于
truffle@5.0.28
solc@0.5.10
linux centOS 7
geth@1.8.23
我尝试了所有解决方案,以解决以下有关堆栈溢出的错误,但这没有用。
奇怪的是,我使用相同的发行版本在macOS上安装了geth,但其版本与我的centOS上安装的版本不同。在macOS上为1.8.27,在centOS 7上为1.8.23。
顺便说一句,当我在macOS上尝试相同的进度时,它运行良好。 它的返回值在下面。
truffle(development)> dApp.message.call()
'Hello, World : This is a Solidity Smart ' +
'Contract on the Private Ethereum ' +
'Blockchain'
Bammmmmmmmmmmm。
下面是我部署的一个稳定程序。
pragma solidity >=0.4.15 <0.6.0;
contract Hello {
string public message;
function HelloEth() public {
message = "Hello, World : This is a Solidity Smart Contract on the Private Ethereum Blockchain";
}
}
这是返回的错误。
Thrown:
Error: Returned values aren't valid, did it run Out of Gas?
at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:318:1)
at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:208:1)
at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request-event-target.js:34:1)
at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-providers-http/src/index.js:96:1)
at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-provider/wrapper.js:112:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/web3-core-requestmanager/src/index.js:147:1
at sendTxCallback (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-eth-contract/~/web3-core-method/src/index.js:473:1)
at Method.formatOutput (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-eth-contract/~/web3-core-method/src/index.js:163:1)
at Method.outputFormatter (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-eth-contract/src/index.js:818:1)
at Contract._decodeMethodReturn (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-eth-contract/src/index.js:465:1)
at ABICoder.decodeParameters (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-eth-abi/src/index.jsa:226:1)
我真的很想知道,因为我尝试了将近1个月...如果您有任何想法或解决方案,请告诉我。 :(
答案 0 :(得分:0)
您定义为public的所有变量将始终成为方法。因此,您可以像在智能合约中调用方法一样访问/调用您的公共变量。 希望对您有帮助。
答案 1 :(得分:0)
我也遇到了类似的问题,当我在Geth Github中发布该问题后,他们指出该问题可能是由最新的Solidity编译器引起的,该编译器依赖于Constantinople中引入的功能。
因此,您可能需要在您的genesis.json中添加"constantinopleBlock": 0
,以让您的私有区块链标识您使用的是哪个版本。
"config": {
"chainId": 1515,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"clique": {
"period": 2,
"epoch": 30000
}
},...
希望这个答案可以为您提供帮助。