gpt4 book ai didi

ethereum - 如何解决此 Hardhat 编译器错误? (编译内联汇编时堆栈太深)

转载 作者:行者123 更新时间:2023-12-03 08:13:04 26 4
gpt4 key购买 nike

我正在分析 Chainrunners 智能合约,因此我在 Etherscan 上复制了 verified contract source code .

当我尝试编译不使用 Solidity 优化器时,我收到此警告:

thatguyintech@albert chainrunners % npx hardhat compile
Compiling 5 files with 0.8.4
Warning: Unused local variable.
--> contracts/ChainRunnersBaseRenderer.sol:232:124:
|
232 | ... kenPalettes, uint8 numTokenLayers, string[NUM_LAYERS] memory traitTypes) = getTokenData(_dna);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries.
--> contracts/ChainRunnersBaseRenderer.sol:48:1:
|
48 | contract ChainRunnersBaseRenderer is Ownable, ReentrancyGuard {
| ^ (Relevant source part starts here and spans across multiple lines).

于是我尝试按照Harhat官方文档开启优化器:https://hardhat.org/config/

这就是我的 Hardhat 配置 hardhat.config.js 的样子:

/**
* @type import('hardhat/config').HardhatUserConfig
*/
module.exports = {
solidity: {
version: "0.8.4",
settings: {
optimizer: {
enabled: true,
runs: 2000,
}
}
}
};

现在,当我尝试运行 npx Hardhatcompile 时,我遇到了这个 HardhatCompilerError:

thatguyintech@albert chainrunners % npx hardhat compile
Compiling 5 files with 0.8.4
CompilerError: Stack too deep when compiling inline assembly: Variable value0 is 3 slot(s) too deep inside the stack.

有人知道我该如何解决这个问题吗?从与安全帽相关的线程上进行的几次谷歌搜索来看,似乎打开优化器应该可以解决这个问题,所以我很困惑。

这是我在 OpenZeppelin 论坛上找到的一个对我不起作用的示例:https://forum.openzeppelin.com/t/stack-to-deep-when-compiling-inline-assembly/11391/11

最佳答案

啊,原来 Etherscan 页面中有一个部分显示了确切的 Solidity 优化器集。 (h/t @alcuadadro)

看起来像这样:

enter image description here

所以我将其复制到我的 hardhat.config.js 中:

/**
* @type import('hardhat/config').HardhatUserConfig
*/
module.exports = {
solidity: {
version: "0.8.4",
settings: {
optimizer: {
enabled: true,
runs: 2000,
details: {
yul: true,
yulDetails: {
stackAllocation: true,
optimizerSteps: "dhfoDgvulfnTUtnIf"
}
}
}
},
},
};

这样就成功了!

不知道yul内容是关于什么的

关于ethereum - 如何解决此 Hardhat 编译器错误? (编译内联汇编时堆栈太深),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70310087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com