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.使用内部函数
使用内部函数将使错误消失。例如,我们可以将其分为三个函数调用,每个函数调用加起来会包含三个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;
}
}