【问题标题】:Compiling Solidity Error - RangeError: Maximum call stack size exceeded编译 Solidity 错误 - RangeError:超出最大调用堆栈大小
【发布时间】:2021-08-19 06:16:31
【问题描述】:

我正在关注 Stephen Grider 的 this 课程,学习 Solidity。 我无法使用 compile.js 来编译solidity。我正在使用 node.js 版本 12.18.3。 solc 版本 0.4.25 和 npm 版本 6.14.16。

编译.js代码:

const path = require('path');
const fs = require('fs');
const solc = require('solc');

const inboxPath = path.resolve(__dirname, 'contracts', 'Inbox.sol');
const source = fs.readFileSync(inboxPath, 'utf8');

module.exports = solc.compile(source, 1).contracts[':Inbox'];

Course

Inbox.sol 代码:

pragma solidity ^0.4.25;

contract Inbox {
    string public message;

    function Inbox(string initialMessage) public {
        message = initialMessage;
    }

    function setMessage(string newMessage) public {
        message = newMessage;
    }
}

这是完整的错误:

RangeError: Maximum call stack size exceeded
    at Object.$db [as dynCall_viiiiii] (C:\Users\iluka\Desktop\Solidity\Inbox\no
de_modules\←[4msolc←[24m\soljson.js:12:120931)
    at invoke_viiiiii (C:\Users\iluka\Desktop\Solidity\Inbox\node_modules\←[4mso
lc←[24m\soljson.js:1:1118207)
    at Array.pva (C:\Users\iluka\Desktop\Solidity\Inbox\node_modules\←[4msolc←[2
4m\soljson.js:13:29030)
    at Object.M9a [as dynCall_vi] (C:\Users\iluka\Desktop\Solidity\Inbox\node_mo
dules\←[4msolc←[24m\soljson.js:12:99033)
    at invoke_vi (C:\Users\iluka\Desktop\Solidity\Inbox\node_modules\←[4msolc←[2
4m\soljson.js:1:1115011)
    at Array.xta (C:\Users\iluka\Desktop\Solidity\Inbox\node_modules\←[4msolc←[2
4m\soljson.js:10:704784)
    at Object.Dfb [as dynCall_iii] (C:\Users\iluka\Desktop\Solidity\Inbox\node_m
odules\←[4msolc←[24m\soljson.js:12:130740)
    at invoke_iii (C:\Users\iluka\Desktop\Solidity\Inbox\node_modules\←[4msolc←[
24m\soljson.js:1:1119442)
    at Array.vta (C:\Users\iluka\Desktop\Solidity\Inbox\node_modules\←[4msolc←[2
4m\soljson.js:10:703080)
    at Object.Yfb [as dynCall_iiiiii] (C:\Users\iluka\Desktop\Solidity\Inbox\nod
e_modules\←[4msolc←[24m\soljson.js:12:131900)

【问题讨论】:

  • 这能回答你的问题吗? Unexpected token '[' when running Solidity test
  • 我在这里看到了这个问题的几个变体。该课程似乎使用了一种已弃用的方式来编译合同。请参阅我在副本中的答案,以获取您需要在 node.js 代码中进行的更改列表以编译合同。简而言之,您需要传递一个包含少量其他参数(包括源代码)的对象——而不仅仅是源代码文本。

标签: javascript ethereum solidity callstack


【解决方案1】:

就我而言,我正在使用

pragma solidity ^0.4.17;

constructor() public {...}

代替函数

Lottery() public{...}

如果您使用的是 0.4.25 solc 版本,则支持 constructor()。否则我们会得到类似“RangeError: Maximum call stack size exceeded”和“Cannot destruct property 'interface' of 'require(...)' as it is undefined”之类的错误。

我在运行 mocha 测试时遇到上述错误。

【讨论】:

    【解决方案2】:

    我有同样的错误。试试这个,它对我有用。

    npm 卸载 solc

    npm install --save solc@0.4.17

    【讨论】:

      【解决方案3】:

      考虑在 package.json 文件中降级模块版本,然后使用 npm install。上面的代码 sn-p 与以下依赖项一起工作正常

        "dependencies": {
          "ganache-cli": "^6.12.2",
          "mocha": "^8.4.0",
          "solc": "^0.4.26",
          "web3": "^1.0.0-beta.26"
        }
      

      【讨论】:

        猜你喜欢
        • 2021-09-21
        • 1970-01-01
        • 2018-02-06
        • 2019-05-14
        • 2021-07-31
        • 2019-02-07
        • 2012-08-14
        相关资源
        最近更新 更多