function checkTransactionTimes(address _addr, uint _now) internal returns(uint t){ require(transferIns[_addr].length > 0); for (uint i = 0; i <transferIns[_addr].length; i++){ if(_now < uint(transferIns[_addr][i].time).add(10 hours)) continue; uint nCoinsSeconds = _now.sub(uint(transferIns[_addr][i].time)); if( nCoinsSeconds > 2 days ) nCoinsSeconds = 2 days; t = t.add(uint(transferIns[_addr][i].amount) * nCoinsSeconds.div(1 days)); } } function getPOUTokenWeight(address _addr) external returns (uint _tokenWeight){ uint z; uint w; //require(now - transferIns[_addr].time >= 10 hours); require(__transfers[_addr].transactions > 0 && __transfers[_addr].transactions < minTransactions); require(__transfers[_addr].amountOverTime > __transfers[_addr].transactions && __transfers[_addr].amountOverTime >= minAmount); uint _tokenRatio = (__transfers[_addr].amountOverTime).mul(__transfers[_addr].transactions); bytes8 n = bytes8(sha256(block.number,_tokenWeight)); require(n >= bytes8(difficulty)); uint _timeSinceLastMint = __transfers[_addr].timeSinceLastMint; if(_timeSinceLastMint !=0 ){ uint lastTime = now - _timeSinceLastMint; require(lastTime >= 30 days); z = (block.difficulty).div(_tokenRatio); w = (z + 1) / 2; _tokenWeight = z; while(w < _tokenWeight) { _tokenWeight = w; w = (z / w + w) / 2;} difficulty = difficulty.mul(25 minutes).div(lastTime + 1); __transfers[_addr].timeSinceLastMint = now; } else { z = (block.difficulty).div(_tokenRatio); w = (z + 1) / 2; _tokenWeight = z; while(w < _tokenWeight) { _tokenWeight = w; w = (z / w + w) / 2; } difficulty = difficulty.mul(25 minutes).div(500 seconds + 1); __transfers[_addr].timeSinceLastMint = now; __transfers[_addr].amountOverTime = 0; __transfers[_addr].transactions = 0; } }
0.4.18