From fa9f37ee93477cc633c6d31966c7c83be011688c Mon Sep 17 00:00:00 2001 From: Ashitaka <96790496+ashitakah@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:03:06 -0300 Subject: [PATCH] fix: unlock without pledge (#48) --- .../modules/dispute/BondEscalationModule.sol | 2 +- .../dispute/BondEscalationModule.t.sol | 30 +++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/solidity/contracts/modules/dispute/BondEscalationModule.sol b/solidity/contracts/modules/dispute/BondEscalationModule.sol index 1e453b90..af6d0f34 100644 --- a/solidity/contracts/modules/dispute/BondEscalationModule.sol +++ b/solidity/contracts/modules/dispute/BondEscalationModule.sol @@ -126,7 +126,7 @@ contract BondEscalationModule is Module, IBondEscalationModule { uint256 _pledgesForDispute = _escalation.amountOfPledgesForDispute; uint256 _pledgesAgainstDispute = _escalation.amountOfPledgesAgainstDispute; - if (_pledgesAgainstDispute > 0) { + if (_pledgesAgainstDispute > 0 || _pledgesForDispute > 0) { uint256 _amountToPay = _won ? _params.bondSize + FixedPointMathLib.mulDivDown(_pledgesAgainstDispute, _params.bondSize, _pledgesForDispute) diff --git a/solidity/test/unit/modules/dispute/BondEscalationModule.t.sol b/solidity/test/unit/modules/dispute/BondEscalationModule.t.sol index 02f7b83d..551d66ed 100644 --- a/solidity/test/unit/modules/dispute/BondEscalationModule.t.sol +++ b/solidity/test/unit/modules/dispute/BondEscalationModule.t.sol @@ -786,9 +786,11 @@ contract BondEscalationModule_Unit_OnDisputeStatusChange is BaseTest { * the users that pledged in favor of the dispute, as they have won. */ function test_shouldChangeBondEscalationStatusAndCallPayPledgersWon( - IBondEscalationModule.RequestParameters memory _params + IBondEscalationModule.RequestParameters memory _params, + uint256 _numPledgers ) public assumeFuzzable(address(_params.accountingExtension)) { - vm.assume(_params.bondSize < type(uint256).max / 2); + vm.assume(_params.bondSize < type(uint128).max / 2); + vm.assume(_numPledgers > 0 && _numPledgers < 30); IOracle.DisputeStatus _status = IOracle.DisputeStatus.Won; @@ -798,11 +800,8 @@ contract BondEscalationModule_Unit_OnDisputeStatusChange is BaseTest { mockDispute.requestId = _requestId; bytes32 _disputeId = _getId(mockDispute); - uint256 _numForPledgers = 2; - uint256 _numAgainstPledgers = 2; - // Set bond escalation data to have pledgers and to return the winning for pledgers as in this case they won the escalation - _setBondEscalation(_requestId, _numForPledgers, _numAgainstPledgers); + _setBondEscalation(_requestId, _numPledgers, _numPledgers); // Set this dispute to have gone through the bond escalation process bondEscalationModule.forTest_setEscalatedDispute(_requestId, _disputeId); @@ -839,7 +838,7 @@ contract BondEscalationModule_Unit_OnDisputeStatusChange is BaseTest { address(_params.accountingExtension), abi.encodeCall( IBondEscalationAccounting.onSettleBondEscalation, - (_requestId, _disputeId, _params.bondToken, _params.bondSize << 1, _numForPledgers) + (_requestId, _disputeId, _params.bondToken, _params.bondSize << 1, _numPledgers) ), abi.encode() ); @@ -865,9 +864,11 @@ contract BondEscalationModule_Unit_OnDisputeStatusChange is BaseTest { * the users that pledged against the dispute, as those that pledged in favor have lost . */ function test_shouldChangeBondEscalationStatusAndCallPayPledgersLost( - IBondEscalationModule.RequestParameters memory _params + IBondEscalationModule.RequestParameters memory _params, + uint256 _numPledgers ) public assumeFuzzable(address(_params.accountingExtension)) { - vm.assume(_params.bondSize < type(uint256).max / 2); + vm.assume(_params.bondSize < type(uint128).max / 2); + vm.assume(_numPledgers > 0 && _numPledgers < 30); // Set to Lost so the proposer and againstDisputePledgers win IOracle.DisputeStatus _status = IOracle.DisputeStatus.Lost; @@ -877,11 +878,8 @@ contract BondEscalationModule_Unit_OnDisputeStatusChange is BaseTest { mockDispute.requestId = _requestId; bytes32 _disputeId = _getId(mockDispute); - uint256 _numForPledgers = 2; - uint256 _numAgainstPledgers = 2; - // Set bond escalation data to have pledgers and to return the winning for pledgers as in this case they won the escalation - _setBondEscalation(_requestId, _numForPledgers, _numAgainstPledgers); + _setBondEscalation(_requestId, _numPledgers, _numPledgers); // Set this dispute to have gone through the bond escalation process bondEscalationModule.forTest_setEscalatedDispute(_requestId, _disputeId); @@ -905,13 +903,13 @@ contract BondEscalationModule_Unit_OnDisputeStatusChange is BaseTest { ); // Mock and expect IBondEscalationAccounting.onSettleBondEscalation to be called - vm.mockCall( + _mockAndExpect( address(_params.accountingExtension), abi.encodeCall( IBondEscalationAccounting.onSettleBondEscalation, - (_requestId, _disputeId, _params.bondToken, _params.bondSize << 1, _numAgainstPledgers) + (_requestId, _disputeId, _params.bondToken, _params.bondSize << 1, _numPledgers) ), - abi.encode(true) + abi.encode() ); // Check: is th event emitted?