一种以太坊固体方法无法正常工作出现错误返回值无效,用完了气吗

时间:2019-07-24 04:00:33

标签: ethereum solidity

我正试图在我的专用以太坊网络上部署一个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个月...如果您有任何想法或解决方案,请告诉我。 :(

2 个答案:

答案 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
    }
  },...

希望这个答案可以为您提供帮助。