【问题标题】:How do I fix Stack Too Deep Error on Solidity?如何修复 Solidity 上的 Stack Too Deep 错误?
【发布时间】:2021-06-08 09:19:41
【问题描述】:

在solidity 上,我不断收到“堆栈太深”的错误。我想知道是否有人可以通过以下代码帮助我解决此问题:

function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tDev = calculateDevFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tCharity = calculateCharityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
                tTransferAmount = tTransferAmount.sub(tDev);
                tTransferAmount = tTransferAmount.sub(tCharity);
                tTransferAmount = tTransferAmount.sub(tBurn);

        return (tTransferAmount, tFee, tLiquidity, tDev, tBurn, tCharity);
    }

谢谢!

【问题讨论】:

    标签: token solidity remix


    【解决方案1】:

    您不能拥有超过 16 个局部变量 (iirc),但在这种特殊情况下,您并不需要全部。 Safemoon 有很多冗余代码,尤其是在getValuestransfer 函数中。我建议你看看SafeToken - https://github.com/solidity-guru/safetoken/blob/main/safetoken.sol 中的完成方式

    _getTValues 计算所有这些 t 值的唯一原因是从tTransferAmount 中减去它们……但您可以只使用所有费用的总和,例如

    function _getTValues(uint256 tAmount) ... {
        uint256 tFeesSum = calculateSumOfFees(tAmount);
        uint256 tTransferAmount = tAmount - tFeesSum; // no need to use SafeMath in solidity ^0.8
        return tTransferAmount;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多