parena 2021-05-20 20:45 采纳率: 0%
浏览 16

solidity 0.6.12 堆栈太深,请尝试删除局部变量

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tManagement, uint256 tDead) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tManagement, tDead, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tManagement,tDead);
    }

 这个问题这么解决。

  • 写回答

1条回答 默认 最新

  • zgsdzczh 2022-10-09 11:42
    关注

    1.使用内部函数
    使用内部函数将使错误消失。例如,我们可以将其分为三个函数调用,每个函数调用加起来会包含三个uint。神奇的是,堆栈太深的错误会迫使我们编写更好的代码。

    // SPDX-License-Identifier: MIT
    pragma solidity 0.7.1;
    
    contract StackTooDeepTest1 {
       function addUints(
            uint256 a,uint256 b,uint256 c,uint256 d,uint256 e,uint256 f,uint256 g,uint256 h,uint256 i
        ) external pure returns(uint256) {
    
            return _addThreeUints(a,b,c) + _addThreeUints(d,e,f) + _addThreeUints(g,h,i);
        }
    
        function _addThreeUints(uint256 a, uint256 b, uint256 c) private pure returns(uint256) {
            return a+b+c;
        }
    }
    
    

    2.利用块作用域

    // SPDX-License-Identifier: MIT
    pragma solidity 0.7.1;
    
    contract StackTooDeepTest2 {
        function addUints(
            uint256 a,uint256 b,uint256 c,uint256 d,uint256 e,uint256 f,uint256 g,uint256 h,uint256 i
        ) external pure returns(uint256) {
    
            uint256 result = 0;
    
            {
                result = a+b+c+d+e;
            }
    
            {
                result = result+f+g+h+i;
            }
    
            return result;
        }
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 luckysheet
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误