diff --git a/nucypher/blockchain/eth/sol/source/contracts/MinersEscrow.sol b/nucypher/blockchain/eth/sol/source/contracts/MinersEscrow.sol index b1df7158a..717d991a9 100644 --- a/nucypher/blockchain/eth/sol/source/contracts/MinersEscrow.sol +++ b/nucypher/blockchain/eth/sol/source/contracts/MinersEscrow.sol @@ -64,7 +64,7 @@ contract MinersEscrow is Issuer { uint16 confirmedPeriod2; // downtime uint16 lastActivePeriod; - Downtime[] downtime; + Downtime[] pastDowntime; StakeInfo[] stakes; } @@ -448,7 +448,7 @@ contract MinersEscrow is Issuer { // miner was inactive for several periods if (_lastActivePeriod < currentPeriod) { - info.downtime.push(Downtime(_lastActivePeriod + 1, currentPeriod)); + info.pastDowntime.push(Downtime(_lastActivePeriod + 1, currentPeriod)); } emit ActivityConfirmed(_miner, nextPeriod, _lockedValue); } @@ -681,21 +681,21 @@ contract MinersEscrow is Issuer { } /** - * @notice Return the length of the downtime array + * @notice Return the length of the array of past downtime **/ - function getDowntimeLength(address _miner) public view returns (uint256) { - return minerInfo[_miner].downtime.length; + function getPastDowntimeLength(address _miner) public view returns (uint256) { + return minerInfo[_miner].pastDowntime.length; } /** - * @notice Return the information about downtime + * @notice Return the information about past downtime **/ - function getDowntime(address _miner, uint256 _index) + function getPastDowntime(address _miner, uint256 _index) // TODO change to structure when ABIEncoderV2 is released // public view returns (Downtime) public view returns (uint16 startPeriod, uint16 endPeriod) { - Downtime storage downtime = minerInfo[_miner].downtime[_index]; + Downtime storage downtime = minerInfo[_miner].pastDowntime[_index]; startPeriod = downtime.startPeriod; endPeriod = downtime.endPeriod; } @@ -728,11 +728,11 @@ contract MinersEscrow is Issuer { /** * @dev Get Downtime structure by delegatecall **/ - function delegateGetDowntime(address _target, address _miner, uint256 _index) + function delegateGetPastDowntime(address _target, address _miner, uint256 _index) internal returns (Downtime memory result) { bytes32 memoryAddress = delegateGetData( - _target, "getDowntime(address,uint256)", 2, bytes32(_miner), bytes32(_index)); + _target, "getPastDowntime(address,uint256)", 2, bytes32(_miner), bytes32(_index)); assembly { result := memoryAddress } @@ -764,10 +764,11 @@ contract MinersEscrow is Issuer { infoToCheck.confirmedPeriod2 == info.confirmedPeriod2 && infoToCheck.lastActivePeriod == info.lastActivePeriod); - require(uint256(delegateGet(_testTarget, "getDowntimeLength(address)", miner)) == info.downtime.length); - for (i = 0; i < info.downtime.length && i < MAX_CHECKED_VALUES; i++) { - Downtime storage downtime = info.downtime[i]; - Downtime memory downtimeToCheck = delegateGetDowntime(_testTarget, minerAddress, i); + require(uint256(delegateGet(_testTarget, "getPastDowntimeLength(address)", miner)) == + info.pastDowntime.length); + for (i = 0; i < info.pastDowntime.length && i < MAX_CHECKED_VALUES; i++) { + Downtime storage downtime = info.pastDowntime[i]; + Downtime memory downtimeToCheck = delegateGetPastDowntime(_testTarget, minerAddress, i); require(downtimeToCheck.startPeriod == downtime.startPeriod && downtimeToCheck.endPeriod == downtime.endPeriod); } diff --git a/nucypher/blockchain/eth/sol/source/contracts/PolicyManager.sol b/nucypher/blockchain/eth/sol/source/contracts/PolicyManager.sol index 40f220643..e8e63befa 100644 --- a/nucypher/blockchain/eth/sol/source/contracts/PolicyManager.sol +++ b/nucypher/blockchain/eth/sol/source/contracts/PolicyManager.sol @@ -176,7 +176,7 @@ contract PolicyManager is Upgradeable { nodeInfo.rewardDelta[policy.startPeriod] = nodeInfo.rewardDelta[policy.startPeriod] .add(startReward); nodeInfo.rewardDelta[endPeriod] = nodeInfo.rewardDelta[endPeriod].sub(policy.rewardRate); - policy.arrangements.push(ArrangementInfo(node, escrow.getDowntimeLength(node), 0)); + policy.arrangements.push(ArrangementInfo(node, escrow.getPastDowntimeLength(node), 0)); } emit PolicyCreated(_policyId, msg.sender); @@ -231,13 +231,13 @@ contract PolicyManager is Upgradeable { uint16 maxPeriod = AdditionalMath.min16(getCurrentPeriod(), _policy.lastPeriod); uint16 minPeriod = AdditionalMath.max16(_policy.startPeriod, _arrangement.lastRefundedPeriod); uint16 downtimePeriods = 0; - uint256 length = escrow.getDowntimeLength(_arrangement.node); + uint256 length = escrow.getPastDowntimeLength(_arrangement.node); for (indexOfDowntimePeriods = _arrangement.indexOfDowntimePeriods; indexOfDowntimePeriods < length; indexOfDowntimePeriods++) { (uint16 startPeriod, uint16 endPeriod) = - escrow.getDowntime(_arrangement.node, indexOfDowntimePeriods); + escrow.getPastDowntime(_arrangement.node, indexOfDowntimePeriods); if (startPeriod > maxPeriod) { break; } else if (endPeriod < minPeriod) { @@ -264,7 +264,8 @@ contract PolicyManager is Upgradeable { if (lastActivePeriod < _policy.startPeriod - 1) { refundValue = _policy.firstPartialReward; } else if (_arrangement.indexOfDowntimePeriods < length) { - (startPeriod, endPeriod) = escrow.getDowntime(_arrangement.node, _arrangement.indexOfDowntimePeriods); + (startPeriod, endPeriod) = escrow.getPastDowntime( + _arrangement.node, _arrangement.indexOfDowntimePeriods); if (_policy.startPeriod > startPeriod && _policy.startPeriod - 1 <= endPeriod) { refundValue = _policy.firstPartialReward; } diff --git a/tests/blockchain/eth/contracts/contracts/PolicyManagerTestSet.sol b/tests/blockchain/eth/contracts/contracts/PolicyManagerTestSet.sol index 41f9bcfe8..49b540a81 100644 --- a/tests/blockchain/eth/contracts/contracts/PolicyManagerTestSet.sol +++ b/tests/blockchain/eth/contracts/contracts/PolicyManagerTestSet.sol @@ -105,14 +105,14 @@ contract MinersEscrowForPolicyMock { /** * @notice Emulate getDowntimeLength **/ - function getDowntimeLength(address) public view returns (uint256) { + function getPastDowntimeLength(address) public view returns (uint256) { return downtime.length; } /** * @notice Emulate getDowntime **/ - function getDowntime(address, uint256 _index) + function getPastDowntime(address, uint256 _index) public view returns (uint16 startPeriod, uint16 endPeriod) { Downtime storage data = downtime[_index]; diff --git a/tests/blockchain/eth/contracts/main/miners_escrow/test_mining.py b/tests/blockchain/eth/contracts/main/miners_escrow/test_mining.py index aa0e1da33..611bd4b1e 100644 --- a/tests/blockchain/eth/contracts/main/miners_escrow/test_mining.py +++ b/tests/blockchain/eth/contracts/main/miners_escrow/test_mining.py @@ -66,12 +66,12 @@ def test_mining(testerchain, token, escrow_contract): assert period == policy_manager.functions.getPeriod(ursula1, 0).call() assert period == policy_manager.functions.getPeriod(ursula2, 0).call() # Check downtime parameters - assert 1 == escrow.functions.getDowntimeLength(ursula1).call() - downtime = escrow.functions.getDowntime(ursula1, 0).call() + assert 1 == escrow.functions.getPastDowntimeLength(ursula1).call() + downtime = escrow.functions.getPastDowntime(ursula1, 0).call() assert 1 == downtime[0] assert period == downtime[1] - assert 1 == escrow.functions.getDowntimeLength(ursula2).call() - downtime = escrow.functions.getDowntime(ursula2, 0).call() + assert 1 == escrow.functions.getPastDowntimeLength(ursula2).call() + downtime = escrow.functions.getPastDowntime(ursula2, 0).call() assert 1 == downtime[0] assert period == downtime[1] assert period + 1 == escrow.functions.getLastActivePeriod(ursula1).call() @@ -91,7 +91,7 @@ def test_mining(testerchain, token, escrow_contract): tx = escrow.functions.confirmActivity().transact({'from': ursula1}) testerchain.wait_for_receipt(tx) - assert 1 == escrow.functions.getDowntimeLength(ursula1).call() + assert 1 == escrow.functions.getPastDowntimeLength(ursula1).call() # Checks that no error from repeated method call tx = escrow.functions.confirmActivity().transact({'from': ursula1}) @@ -110,8 +110,8 @@ def test_mining(testerchain, token, escrow_contract): assert 1046 == escrow.functions.minerInfo(ursula1).call()[VALUE_FIELD] assert 525 == escrow.functions.minerInfo(ursula2).call()[VALUE_FIELD] # Check that downtime value has not changed - assert 1 == escrow.functions.getDowntimeLength(ursula1).call() - assert 1 == escrow.functions.getDowntimeLength(ursula2).call() + assert 1 == escrow.functions.getPastDowntimeLength(ursula1).call() + assert 1 == escrow.functions.getPastDowntimeLength(ursula2).call() assert period + 1 == escrow.functions.getLastActivePeriod(ursula1).call() assert period - 1 == escrow.functions.getLastActivePeriod(ursula2).call() @@ -153,8 +153,8 @@ def test_mining(testerchain, token, escrow_contract): testerchain.wait_for_receipt(tx) assert period + 1 == escrow.functions.getLastActivePeriod(ursula2).call() - assert 2 == escrow.functions.getDowntimeLength(ursula2).call() - downtime = escrow.functions.getDowntime(ursula2, 1).call() + assert 2 == escrow.functions.getPastDowntimeLength(ursula2).call() + downtime = escrow.functions.getPastDowntime(ursula2, 1).call() assert period - 1 == downtime[0] assert period == downtime[1] @@ -221,8 +221,8 @@ def test_mining(testerchain, token, escrow_contract): tx = escrow.functions.lock(500, 2).transact({'from': ursula2}) testerchain.wait_for_receipt(tx) - assert 3 == escrow.functions.getDowntimeLength(ursula2).call() - downtime = escrow.functions.getDowntime(ursula2, 2).call() + assert 3 == escrow.functions.getPastDowntimeLength(ursula2).call() + downtime = escrow.functions.getPastDowntime(ursula2, 2).call() assert period == downtime[0] assert period == downtime[1] @@ -236,8 +236,8 @@ def test_mining(testerchain, token, escrow_contract): assert 1152 == escrow.functions.minerInfo(ursula1).call()[VALUE_FIELD] assert 1025 == escrow.functions.minerInfo(ursula2).call()[VALUE_FIELD] - assert 4 == escrow.functions.getDowntimeLength(ursula2).call() - downtime = escrow.functions.getDowntime(ursula2, 3).call() + assert 4 == escrow.functions.getPastDowntimeLength(ursula2).call() + downtime = escrow.functions.getPastDowntime(ursula2, 3).call() assert period - 3 == downtime[0] assert period == downtime[1] @@ -255,7 +255,7 @@ def test_mining(testerchain, token, escrow_contract): testerchain.time_travel(hours=1) tx = escrow.functions.confirmActivity().transact({'from': ursula2}) testerchain.wait_for_receipt(tx) - assert 4 == escrow.functions.getDowntimeLength(ursula2).call() + assert 4 == escrow.functions.getPastDowntimeLength(ursula2).call() testerchain.time_travel(hours=1) tx = escrow.functions.confirmActivity().transact({'from': ursula2}) testerchain.wait_for_receipt(tx) diff --git a/tests/blockchain/eth/contracts/main/miners_escrow/test_tracking.py b/tests/blockchain/eth/contracts/main/miners_escrow/test_tracking.py index 914316884..0a2312f81 100644 --- a/tests/blockchain/eth/contracts/main/miners_escrow/test_tracking.py +++ b/tests/blockchain/eth/contracts/main/miners_escrow/test_tracking.py @@ -157,7 +157,7 @@ def test_pre_deposit(testerchain, token, escrow_contract): period = escrow.functions.getCurrentPeriod().call() assert 1 == policy_manager.functions.getPeriodsLength(owner).call() assert period == policy_manager.functions.getPeriod(owner, 0).call() - assert 0 == escrow.functions.getDowntimeLength(owner).call() + assert 0 == escrow.functions.getPastDowntimeLength(owner).call() assert 0 == escrow.functions.getLastActivePeriod(owner).call() # Can't pre-deposit tokens again for the same miner twice @@ -195,7 +195,7 @@ def test_pre_deposit(testerchain, token, escrow_contract): assert 0 == escrow.functions.getLockedTokens(owner, 50 * (index + 1) + 1).call() assert 1 == policy_manager.functions.getPeriodsLength(owner).call() assert period == policy_manager.functions.getPeriod(owner, 0).call() - assert 0 == escrow.functions.getDowntimeLength(owner).call() + assert 0 == escrow.functions.getPastDowntimeLength(owner).call() assert 0 == escrow.functions.getLastActivePeriod(owner).call() events = deposit_log.get_all_entries()