Skip to content

合约变量写入异常 #882

@fiboswap

Description

@fiboswap

System information

Geth version: geth version
OS & Version: OSX
Commit hash : 0x557aae04475cfd47c1107b3a504490f438bc829f66d439ce913ba8be43c9ce33

Expected behaviour

合约地址:0x6a627aa43836ce66a4ee8767bfc432e1f9a94af6

合约 里同样的 算法
当最后一步设置为保存计算结果时,交易会出现很高评率的失败,并且失败的执行在 estimateGas 调用中并不会报错

经过上百笔的 生产测试后

我们明确 该问题仅出现在 合约 修改变量时执行报错

出现异常的接口

function upDateNet() public lock {
        uint time = block.timestamp;
        uint256 _min = minerPool.mining(time);
        uint256 _newEarn = _min - beforeEarnTokenBalance;
        (,,_newEarn) = minerRate(_newEarn);
        if ( _newEarn > 0 ) {
            uint _deRewards = (EPX_RATE - shareNetRateEPX_RATE) * _newEarn / EPX_RATE;
            _newEarn -= _deRewards;
            if ( totalDeposits > 0 ) { 
                uint mulD = EPX * _deRewards;
                uint divD = mulD / totalDeposits;
                // 这里 对 depositsNetEPX1 变量累加操作
                // depositsNetEPX1 += divD;
                _addDepositiNet(divD);
           
            }
            if ( totalShare > 0 ) {
                _addShareNet(EPX * _newEarn / totalShare);
            }
            beforeEarnTokenBalance = _min;
        }
    }

不会报错的接口

    event UpDate(uint min, uint balance, uint time);
    function upDateNet1() public returns(uint _depositsNetEPX1, uint _shareNet1) {
        uint time = block.timestamp;
        uint256 _min = minerPool.mining(time);
        emit UpDate(_min, beforeEarnTokenBalance, time);
        uint256 _newEarn = _min - beforeEarnTokenBalance;
        (,,_newEarn) = minerRate(_newEarn);
        if ( _newEarn > 0 ) {
            uint _deRewards = (EPX_RATE - shareNetRateEPX_RATE) * _newEarn / EPX_RATE;
            _newEarn -= _deRewards;
            if ( totalDeposits > 0 ) { 
                _depositsNetEPX1 += EPX * _deRewards / totalDeposits;
            }
            if ( totalShare > 0 ) {
                _shareNet1 += EPX * _newEarn / totalShare;
            }
        }
    }

两个接口的却别仅只是 对 变量 depositsNetEPX1 是否写入

该问题按一定概率出现 需要多次连续调用

这个问题再多个合约中都出现过,但概率很低,只有这个合约,在升级后合约后高频率出现该问题

Metadata

Metadata

Labels

questionFurther information is requested

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions