From 118e3b501c9ea54ba3b0dd2c67b8d3ed85375644 Mon Sep 17 00:00:00 2001 From: Ashitaka Date: Fri, 27 Sep 2024 10:12:16 -0300 Subject: [PATCH 1/3] fix: tests --- src/contracts/EBORequestModule.sol | 4 --- src/contracts/HorizonAccountingExtension.sol | 3 +-- test/unit/EBORequestCreator.t.sol | 26 ++++++++++---------- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/contracts/EBORequestModule.sol b/src/contracts/EBORequestModule.sol index 40f3877..accd4f1 100644 --- a/src/contracts/EBORequestModule.sol +++ b/src/contracts/EBORequestModule.sol @@ -36,10 +36,6 @@ contract EBORequestModule is Module, IEBORequestModule { /// @inheritdoc IEBORequestModule function createRequest(bytes32 _requestId, bytes calldata _data, address _requester) external onlyOracle { if (!_eboRequestCreatorsAllowed.contains(_requester)) revert EBORequestModule_InvalidRequester(); - - RequestParameters memory _params = decodeRequestData(_data); - - // TODO: Bond for the rewards } /// @inheritdoc IEBORequestModule diff --git a/src/contracts/HorizonAccountingExtension.sol b/src/contracts/HorizonAccountingExtension.sol index d1e4323..1d08f05 100644 --- a/src/contracts/HorizonAccountingExtension.sol +++ b/src/contracts/HorizonAccountingExtension.sol @@ -210,7 +210,7 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { // If not enough balance, slash some users to get enough balance uint256 _balance = GRT.balanceOf(address(this)); - // TODO: How many iterations should we do? + // Claim one by one until the balance is enough while (_balance < _claimAmount) { _balance += _slash(_disputeId, 1, MAX_USERS_TO_CHECK, _result, _status); } @@ -273,7 +273,6 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { _unbond(_payer, _amount); // Slash a payer to pay the receiver - // TODO: Check if will provision that amount or we will send it directly HORIZON_STAKING.slash(_payer, _amount, _amount, _receiver); emit Paid({_requestId: _requestId, _beneficiary: _receiver, _payer: _payer, _amount: _amount}); diff --git a/test/unit/EBORequestCreator.t.sol b/test/unit/EBORequestCreator.t.sol index 5f78987..5851a0f 100644 --- a/test/unit/EBORequestCreator.t.sol +++ b/test/unit/EBORequestCreator.t.sol @@ -434,19 +434,19 @@ contract EBORequestCreator_Unit_SetRequestModuleData is EBORequestCreator_Unit_B _; } - // TODO: IF WE USE THIS TEST, WE HAVE TO CHANGE THE SETTINGS TO USE --VIA-IR BECAUSE WE HAVE TO CREATE A LOT OF VARIABLES - // /** - // * @notice Test params are setted properly - // */ - // function test_requestModuleDataParams( - // address _requestModule, - // IEBORequestModule.RequestParameters calldata _requestModuleData - // ) external happyPath(_requestModule, _requestModuleData) { - // eboRequestCreator.setRequestModuleData(_requestModule, _requestModuleData); - - // (,,,,,,, bytes memory _getRequestModuleData,,,,) = eboRequestCreator.requestData(); - // assertEq(abi.encode(_requestModuleData), _getRequestModuleData); - // } + /** + * @notice Test params are setted properly + */ + function test_requestModuleDataParams( + address _requestModule, + IEBORequestModule.RequestParameters calldata _requestModuleData, + address _arbitrator + ) external happyPath(_arbitrator) { + eboRequestCreator.setRequestModuleData(_requestModule, _requestModuleData); + + IOracle.Request memory _requestData = eboRequestCreator.getRequestData(); + assertEq(abi.encode(_requestModuleData), _requestData.requestModuleData); + } /** * @notice Test the emit request module data set From 0787fa27ef1bc2969bb0f553fe6e758ec6a43b2a Mon Sep 17 00:00:00 2001 From: Ashitaka Date: Mon, 30 Sep 2024 18:05:25 -0300 Subject: [PATCH 2/3] feat: remove todo and set params --- .solhint.json | 3 +- src/contracts/CouncilArbitrator.sol | 7 +- src/contracts/EBORequestCreator.sol | 27 +++--- src/contracts/EBORequestModule.sol | 20 +--- src/contracts/HorizonAccountingExtension.sol | 70 ++++++++++---- src/interfaces/IEBORequestCreator.sol | 3 +- src/interfaces/IEBORequestModule.sol | 13 --- .../IHorizonAccountingExtension.sol | 63 ++++++++++++ test/unit/CouncilArbitrator.t.sol | 18 ++-- test/unit/EBOFinalityModule.t.sol | 2 +- test/unit/EBORequestCreator.t.sol | 36 +++---- test/unit/EBORequestModule.t.sol | 80 ++-------------- test/unit/HorizonAccountingExtension.t.sol | 96 +++++++++++++++++-- 13 files changed, 258 insertions(+), 180 deletions(-) diff --git a/.solhint.json b/.solhint.json index 94f58b2..1df920d 100644 --- a/.solhint.json +++ b/.solhint.json @@ -13,6 +13,7 @@ "immutable-name-snakecase": "warn", "avoid-low-level-calls": "off", "no-console": "off", - "max-line-length": ["warn", 120] + "max-line-length": ["warn", 120], + "no-unused-vars": "off" } } diff --git a/src/contracts/CouncilArbitrator.sol b/src/contracts/CouncilArbitrator.sol index 4cf392f..bf63e98 100644 --- a/src/contracts/CouncilArbitrator.sol +++ b/src/contracts/CouncilArbitrator.sol @@ -1,13 +1,10 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import {IOracle} from '@defi-wonderland/prophet-core/solidity/interfaces/IOracle.sol'; import {ValidatorLib} from '@defi-wonderland/prophet-core/solidity/libraries/ValidatorLib.sol'; import {IArbitrator} from '@defi-wonderland/prophet-modules/solidity/interfaces/IArbitrator.sol'; -import {IArbitratorModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/resolution/IArbitratorModule.sol'; -import {IArbitrable, ICouncilArbitrator} from 'interfaces/ICouncilArbitrator.sol'; +import {IArbitrable, IArbitratorModule, ICouncilArbitrator, IOracle} from 'interfaces/ICouncilArbitrator.sol'; /** * @title CouncilArbitrator @@ -52,7 +49,7 @@ contract CouncilArbitrator is ICouncilArbitrator { IOracle.Request calldata _request, IOracle.Response calldata _response, IOracle.Dispute calldata _dispute - ) external onlyArbitratorModule returns (bytes memory /* _data */ ) { + ) external onlyArbitratorModule returns (bytes memory _data) { bytes32 _disputeId = _dispute._getId(); resolutions[_disputeId] = ResolutionParameters(_request, _response, _dispute); diff --git a/src/contracts/EBORequestCreator.sol b/src/contracts/EBORequestCreator.sol index ab73ebd..d500f60 100644 --- a/src/contracts/EBORequestCreator.sol +++ b/src/contracts/EBORequestCreator.sol @@ -1,18 +1,18 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import {IOracle} from '@defi-wonderland/prophet-core/solidity/interfaces/IOracle.sol'; -import {IBondEscalationModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/dispute/IBondEscalationModule.sol'; -import {IArbitratorModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/resolution/IArbitratorModule.sol'; -import {IBondedResponseModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/response/IBondedResponseModule.sol'; import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; -import {IEpochManager} from 'interfaces/external/IEpochManager.sol'; -import {IArbitrable, IEBORequestCreator} from 'interfaces/IEBORequestCreator.sol'; -import {IEBORequestModule} from 'interfaces/IEBORequestModule.sol'; +import { + IArbitrable, + IArbitratorModule, + IBondEscalationModule, + IBondedResponseModule, + IEBORequestCreator, + IEBORequestModule, + IEpochManager, + IOracle +} from 'interfaces/IEBORequestCreator.sol'; contract EBORequestCreator is IEBORequestCreator { using EnumerableSet for EnumerableSet.Bytes32Set; @@ -161,15 +161,12 @@ contract EBORequestCreator is IEBORequestCreator { emit ResolutionModuleDataSet(_resolutionModule, _resolutionModuleData); } - // TODO: Why set finality module data? - // TODO: Change module data to the specific interface when we have /// @inheritdoc IEBORequestCreator - function setFinalityModuleData(address _finalityModule, bytes calldata _finalityModuleData) external { + function setFinalityModuleData(address _finalityModule) external { ARBITRABLE.validateArbitrator(msg.sender); requestData.finalityModule = _finalityModule; - requestData.finalityModuleData = _finalityModuleData; - emit FinalityModuleDataSet(_finalityModule, _finalityModuleData); + emit FinalityModuleDataSet(_finalityModule, new bytes(0)); } /// @inheritdoc IEBORequestCreator diff --git a/src/contracts/EBORequestModule.sol b/src/contracts/EBORequestModule.sol index accd4f1..223b106 100644 --- a/src/contracts/EBORequestModule.sol +++ b/src/contracts/EBORequestModule.sol @@ -34,28 +34,10 @@ contract EBORequestModule is Module, IEBORequestModule { } /// @inheritdoc IEBORequestModule - function createRequest(bytes32 _requestId, bytes calldata _data, address _requester) external onlyOracle { + function createRequest(bytes32 _requestId, bytes calldata _data, address _requester) external view onlyOracle { if (!_eboRequestCreatorsAllowed.contains(_requester)) revert EBORequestModule_InvalidRequester(); } - /// @inheritdoc IEBORequestModule - function finalizeRequest( - IOracle.Request calldata _request, - IOracle.Response calldata _response, - address _finalizer - ) external override(Module, IEBORequestModule) onlyOracle { - if (!_eboRequestCreatorsAllowed.contains(_request.requester)) revert EBORequestModule_InvalidRequester(); - - // TODO: Redeclare the `Request` struct - // RequestParameters memory _params = decodeRequestData(_request.requestModuleData); - - if (_response.requestId != 0) { - // TODO: Bond for the rewards - } - - emit RequestFinalized(_response.requestId, _response, _finalizer); - } - /// @inheritdoc IEBORequestModule function addEBORequestCreator(IEBORequestCreator _eboRequestCreator) external { ARBITRABLE.validateArbitrator(msg.sender); diff --git a/src/contracts/HorizonAccountingExtension.sol b/src/contracts/HorizonAccountingExtension.sol index 1d08f05..0cf150a 100644 --- a/src/contracts/HorizonAccountingExtension.sol +++ b/src/contracts/HorizonAccountingExtension.sol @@ -5,6 +5,7 @@ import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; import { + IArbitrable, IBondEscalationModule, IERC20, IHorizonAccountingExtension, @@ -24,17 +25,20 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { /// @inheritdoc IHorizonAccountingExtension IERC20 public immutable GRT; + /// @inheritdoc IHorizonAccountingExtension + IArbitrable public immutable ARBITRABLE; + /// @inheritdoc IHorizonAccountingExtension uint256 public immutable MIN_THAWING_PERIOD; /// @inheritdoc IHorizonAccountingExtension uint256 public constant MAX_VERIFIER_CUT = 1_000_000; - // TODO: Validate what the correct magic numbers should be - uint256 public constant MAX_SLASHING_USERS = 4; + /// @inheritdoc IHorizonAccountingExtension + uint256 public maxSlashingUsers; - // TODO: Validate what the correct magic numbers should be - uint256 public constant MAX_USERS_TO_CHECK = 10; + /// @inheritdoc IHorizonAccountingExtension + uint256 public maxUsersToCheck; /// @inheritdoc IHorizonAccountingExtension mapping(address _user => uint256 _bonded) public totalBonded; @@ -67,16 +71,24 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { * @param _oracle The address of the Oracle * @param _grt The address of the GRT token * @param _minThawingPeriod The minimum thawing period for the staking + * @param _maxSlashingUsers The maximum number of users to slash + * @param _maxUsersToCheck The maximum number of users to check */ constructor( IHorizonStaking _horizonStaking, IOracle _oracle, IERC20 _grt, - uint256 _minThawingPeriod + IArbitrable _arbitrable, + uint256 _minThawingPeriod, + uint256 _maxSlashingUsers, + uint256 _maxUsersToCheck ) Validator(_oracle) { HORIZON_STAKING = _horizonStaking; GRT = _grt; + ARBITRABLE = _arbitrable; MIN_THAWING_PERIOD = _minThawingPeriod; + _setMaxSlashingUsers(_maxSlashingUsers); + _setMaxUsersToCheck(_maxUsersToCheck); } /** @@ -163,10 +175,6 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { bondEscalationModule: _bondEscalationModule }); - // TODO: The amount of money to be distributed needs to be slashed. - // The problem is that there could be multiple users to slash and we can't do it fully - // in this function. - emit BondEscalationSettled({ _requestId: _requestId, _disputeId: _disputeId, @@ -212,7 +220,7 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { // Claim one by one until the balance is enough while (_balance < _claimAmount) { - _balance += _slash(_disputeId, 1, MAX_USERS_TO_CHECK, _result, _status); + _balance += _slash(_disputeId, maxSlashingUsers, maxUsersToCheck, _result, _status); } _rewardAmount = _claimAmount - _pledgeAmount; @@ -293,6 +301,7 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { emit Bonded(_requestId, _bonder, _amount); } + /// @inheritdoc IHorizonAccountingExtension function bond( address _bonder, bytes32 _requestId, @@ -319,14 +328,6 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { bytes32 _requestId, uint256 _amount ) external onlyAllowedModule(_requestId) onlyParticipant(_requestId, _bonder) { - // TODO: Release is used to pay the user the rewards for proposing or returning the funds to the - // creator in case the request finalized without a response. We need to finish designing the payments - // integration to do this. - - // TODO: Release is also used in the bond escalation module to: - // 1) return the funds to the disputer in case there is no resolution - // 2) release the initial dispute bond if the disputer wins - // Release the bond amount for the request for the user bondedForRequest[_bonder][_requestId] -= _amount; @@ -335,6 +336,7 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { emit Released(_requestId, _bonder, _amount); } + /// @inheritdoc IHorizonAccountingExtension function slash(bytes32 _disputeId, uint256 _usersToSlash, uint256 _maxUsersToCheck) external { EscalationResult memory _result = escalationResults[_disputeId]; @@ -345,6 +347,38 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { _slash(_disputeId, _usersToSlash, _maxUsersToCheck, _result, _status); } + /// @inheritdoc IHorizonAccountingExtension + function setMaxSlashingUsers(uint256 _maxSlashingUsers) external { + ARBITRABLE.validateArbitrator(msg.sender); + _setMaxSlashingUsers(_maxSlashingUsers); + } + + /// @inheritdoc IHorizonAccountingExtension + function setMaxUsersToCheck(uint256 _maxUsersToCheck) external { + ARBITRABLE.validateArbitrator(msg.sender); + _setMaxUsersToCheck(_maxUsersToCheck); + } + + /** + * @notice Set the maximum number of users to slash. + * @param _maxSlashingUsers The maximum number of users to slash. + */ + function _setMaxSlashingUsers(uint256 _maxSlashingUsers) internal { + maxSlashingUsers = _maxSlashingUsers; + + emit MaxSlashingUsersSetted(_maxSlashingUsers); + } + + /** + * @notice Set the maximum number of users to check. + * @param _maxUsersToCheck The maximum number of users to check. + */ + function _setMaxUsersToCheck(uint256 _maxUsersToCheck) internal { + maxUsersToCheck = _maxUsersToCheck; + + emit MaxUsersToCheckSetted(_maxUsersToCheck); + } + /** * @notice Slash the users that have pledged for a dispute. * @param _disputeId The dispute id. diff --git a/src/interfaces/IEBORequestCreator.sol b/src/interfaces/IEBORequestCreator.sol index 18fe188..2b8d9ad 100644 --- a/src/interfaces/IEBORequestCreator.sol +++ b/src/interfaces/IEBORequestCreator.sol @@ -263,9 +263,8 @@ interface IEBORequestCreator { /** * @notice Set the finality data module * @param _finalityModule The finality module - * @param _finalityModuleData The finality module data */ - function setFinalityModuleData(address _finalityModule, bytes calldata _finalityModuleData) external; + function setFinalityModuleData(address _finalityModule) external; /** * @notice Set the epoch manager diff --git a/src/interfaces/IEBORequestModule.sol b/src/interfaces/IEBORequestModule.sol index 7252dba..388788a 100644 --- a/src/interfaces/IEBORequestModule.sol +++ b/src/interfaces/IEBORequestModule.sol @@ -86,19 +86,6 @@ interface IEBORequestModule is IRequestModule { */ function createRequest(bytes32 _requestId, bytes calldata _data, address _requester) external; - /** - * @notice Finalizes the request by paying the proposer for the response or releasing the requester's bond if no response was submitted - * @dev Callable only by the Oracle - * @param _request The request being finalized - * @param _response The final response - * @param _finalizer The address that initiated the finalization - */ - function finalizeRequest( - IOracle.Request calldata _request, - IOracle.Response calldata _response, - address _finalizer - ) external; - /** * @notice Adds the address of the EBORequestCreator * @dev Callable only by The Graph's Arbitrator diff --git a/src/interfaces/IHorizonAccountingExtension.sol b/src/interfaces/IHorizonAccountingExtension.sol index 5de1ccd..8ef4291 100644 --- a/src/interfaces/IHorizonAccountingExtension.sol +++ b/src/interfaces/IHorizonAccountingExtension.sol @@ -8,6 +8,8 @@ import {IBondEscalationModule} from '@defi-wonderland/prophet-modules/solidity/interfaces/modules/dispute/IBondEscalationModule.sol'; import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; +import {IArbitrable} from 'interfaces/IArbitrable.sol'; + interface IHorizonAccountingExtension { /*/////////////////////////////////////////////////////////////// EVENTS @@ -100,6 +102,20 @@ interface IHorizonAccountingExtension { bytes32 indexed _requestId, bytes32 indexed _disputeId, address indexed _pledger, uint256 _reward, uint256 _released ); + /** + * @notice Emitted when max slashing users is set + * + * @param _maxSlashingUsers The new value of max slashing users + */ + event MaxSlashingUsersSetted(uint256 _maxSlashingUsers); + + /** + * @notice Emitted when max users to check is set + * + * @param _maxUsersToCheck The new value of max users to check + */ + event MaxUsersToCheckSetted(uint256 _maxUsersToCheck); + /*/////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ @@ -200,6 +216,12 @@ interface IHorizonAccountingExtension { */ function GRT() external view returns (IERC20 _GRT); + /** + * @notice The Arbitrable contract + * @return _arbitrable The Arbitrable contract + */ + function ARBITRABLE() external view returns (IArbitrable _arbitrable); + /** * @notice The minimum thawing period * @return _MIN_THAWING_PERIOD The minimum thawing period @@ -212,6 +234,18 @@ interface IHorizonAccountingExtension { */ function MAX_VERIFIER_CUT() external view returns (uint256 _MAX_VERIFIER_CUT); + /** + * @notice The maximum slashing users + * @return _maxSlashingUsers The maximum slashing users + */ + function maxSlashingUsers() external view returns (uint256 _maxSlashingUsers); + + /** + * @notice The maximum users to check + * @return _maxUsersToCheck The maximum users to check + */ + function maxUsersToCheck() external view returns (uint256 _maxUsersToCheck); + /** * @notice The total bonded tokens for a user * @param _user The user address @@ -350,6 +384,15 @@ interface IHorizonAccountingExtension { */ function bond(address _bonder, bytes32 _requestId, uint256 _amount) external; + /** + * @notice Allows a allowed module to bond a user's tokens for a request + * @param _bonder The address of the user to bond tokens for + * @param _requestId The id of the request the user is bonding for + * @param _amount The amount of GRT to bond + * @param _sender The address of the user who is bonding the tokens + */ + function bond(address _bonder, bytes32 _requestId, uint256 _amount, address _sender) external; + /** * @notice Allows a valid module to release a user's tokens * @param _bonder The address of the user to release tokens for @@ -357,4 +400,24 @@ interface IHorizonAccountingExtension { * @param _amount The amount of GRT to release */ function release(address _bonder, bytes32 _requestId, uint256 _amount) external; + + /** + * @notice Slashes the users that lost the dispute + * @param _disputeId The ID of the dispute + * @param _usersToSlash The number of users to slash + * @param _maxUsersToCheck The number of users to check + */ + function slash(bytes32 _disputeId, uint256 _usersToSlash, uint256 _maxUsersToCheck) external; + + /** + * @notice Sets the maximum slashing users + * @param _maxSlashingUsers The new value of max slashing users + */ + function setMaxSlashingUsers(uint256 _maxSlashingUsers) external; + + /** + * @notice Sets the maximum users to check + * @param _maxUsersToCheck The new value of max users to check + */ + function setMaxUsersToCheck(uint256 _maxUsersToCheck) external; } diff --git a/test/unit/CouncilArbitrator.t.sol b/test/unit/CouncilArbitrator.t.sol index 5cfc7ff..867e625 100644 --- a/test/unit/CouncilArbitrator.t.sol +++ b/test/unit/CouncilArbitrator.t.sol @@ -1,19 +1,19 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import {IOracle} from '@defi-wonderland/prophet-core/solidity/interfaces/IOracle.sol'; import {IValidator} from '@defi-wonderland/prophet-core/solidity/interfaces/IValidator.sol'; -import {ValidatorLib} from '@defi-wonderland/prophet-core/solidity/libraries/ValidatorLib.sol'; -import {IArbitrator} from '@defi-wonderland/prophet-modules/solidity/interfaces/IArbitrator.sol'; -import {IArbitratorModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/resolution/IArbitratorModule.sol'; import {Helpers} from 'test/utils/Helpers.sol'; -import {IArbitrable} from 'interfaces/IArbitrable.sol'; -import {ICouncilArbitrator} from 'interfaces/ICouncilArbitrator.sol'; - -import {CouncilArbitrator} from 'contracts/CouncilArbitrator.sol'; +import { + CouncilArbitrator, + IArbitrable, + IArbitrator, + IArbitratorModule, + ICouncilArbitrator, + IOracle, + ValidatorLib +} from 'contracts/CouncilArbitrator.sol'; import 'forge-std/Test.sol'; diff --git a/test/unit/EBOFinalityModule.t.sol b/test/unit/EBOFinalityModule.t.sol index feadc52..3cf6ad9 100644 --- a/test/unit/EBOFinalityModule.t.sol +++ b/test/unit/EBOFinalityModule.t.sol @@ -2,13 +2,13 @@ pragma solidity 0.8.26; import {ValidatorLib} from '@defi-wonderland/prophet-core/solidity/libraries/ValidatorLib.sol'; -import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; import {IAccountingExtension} from '@defi-wonderland/prophet-modules/solidity/interfaces/extensions/IAccountingExtension.sol'; import { EBOFinalityModule, + EnumerableSet, IArbitrable, IEBOFinalityModule, IEBORequestCreator, diff --git a/test/unit/EBORequestCreator.t.sol b/test/unit/EBORequestCreator.t.sol index 5851a0f..f6fe51c 100644 --- a/test/unit/EBORequestCreator.t.sol +++ b/test/unit/EBORequestCreator.t.sol @@ -1,20 +1,18 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import {IOracle} from '@defi-wonderland/prophet-core/solidity/interfaces/IOracle.sol'; -import {IBondEscalationModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/dispute/IBondEscalationModule.sol'; -import {IArbitratorModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/resolution/IArbitratorModule.sol'; -import {IBondedResponseModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/response/IBondedResponseModule.sol'; -import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; -import {IEpochManager} from 'interfaces/external/IEpochManager.sol'; - -import {IArbitrable} from 'interfaces/IArbitrable.sol'; -import {IEBORequestModule} from 'interfaces/IEBORequestModule.sol'; - -import {EBORequestCreator, IEBORequestCreator} from 'contracts/EBORequestCreator.sol'; +import { + EBORequestCreator, + EnumerableSet, + IArbitrable, + IArbitratorModule, + IBondEscalationModule, + IBondedResponseModule, + IEBORequestCreator, + IEBORequestModule, + IEpochManager, + IOracle +} from 'contracts/EBORequestCreator.sol'; import 'forge-std/Test.sol'; @@ -556,15 +554,11 @@ contract EBORequestCreator_Unit_SetFinalityModuleData is EBORequestCreator_Unit_ /** * @notice Test the emit finality module data set */ - function test_emitFinalityModuleDataSet( - address _finalityModule, - bytes calldata _finalityModuleData, - address _arbitrator - ) external happyPath(_arbitrator) { + function test_emitFinalityModuleDataSet(address _finalityModule, address _arbitrator) external happyPath(_arbitrator) { vm.expectEmit(); - emit FinalityModuleDataSet(_finalityModule, _finalityModuleData); + emit FinalityModuleDataSet(_finalityModule, new bytes(0)); - eboRequestCreator.setFinalityModuleData(_finalityModule, _finalityModuleData); + eboRequestCreator.setFinalityModuleData(_finalityModule); } } diff --git a/test/unit/EBORequestModule.t.sol b/test/unit/EBORequestModule.t.sol index a1a068b..291ef30 100644 --- a/test/unit/EBORequestModule.t.sol +++ b/test/unit/EBORequestModule.t.sol @@ -1,19 +1,18 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import {IModule} from '@defi-wonderland/prophet-core/solidity/interfaces/IModule.sol'; -import {IOracle} from '@defi-wonderland/prophet-core/solidity/interfaces/IOracle.sol'; -import {ValidatorLib} from '@defi-wonderland/prophet-core/solidity/libraries/ValidatorLib.sol'; import {IAccountingExtension} from '@defi-wonderland/prophet-modules/solidity/interfaces/extensions/IAccountingExtension.sol'; -import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; - -import {IArbitrable} from 'interfaces/IArbitrable.sol'; -import {IEBORequestCreator} from 'interfaces/IEBORequestCreator.sol'; -import {IEBORequestModule} from 'interfaces/IEBORequestModule.sol'; - -import {EBORequestModule} from 'contracts/EBORequestModule.sol'; +import { + EBORequestModule, + EnumerableSet, + IArbitrable, + IEBORequestCreator, + IEBORequestModule, + IModule, + IOracle +} from 'contracts/EBORequestModule.sol'; import 'forge-std/Test.sol'; @@ -121,65 +120,6 @@ contract EBORequestModule_Unit_CreateRequest is EBORequestModule_Unit_BaseTest { } } -contract EBORequestModule_Unit_FinalizeRequest is EBORequestModule_Unit_BaseTest { - using ValidatorLib for IOracle.Request; - using ValidatorLib for IOracle.Response; - - struct FinalizeRequestParams { - IOracle.Request request; - IOracle.Response response; - address finalizer; - uint128 responseCreatedAt; - bool finalizeWithResponse; - } - - modifier happyPath(FinalizeRequestParams memory _params) { - _params.request.requester = address(eboRequestCreator); - - if (_params.finalizeWithResponse) { - bytes32 _requestId = _params.request._getId(); - bytes32 _responseId = _params.response._getId(); - - _params.response.requestId = _requestId; - - vm.assume(_params.responseCreatedAt != 0); - vm.mockCall( - address(oracle), abi.encodeCall(IOracle.responseCreatedAt, (_responseId)), abi.encode(_params.responseCreatedAt) - ); - } else { - _params.response.requestId = 0; - } - - vm.startPrank(address(oracle)); - _; - } - - function test_revertOnlyOracle(FinalizeRequestParams memory _params, address _caller) public happyPath(_params) { - vm.assume(_caller != address(oracle)); - changePrank(_caller); - - vm.expectRevert(IModule.Module_OnlyOracle.selector); - eboRequestModule.finalizeRequest(_params.request, _params.response, _params.finalizer); - } - - function test_revertInvalidRequester( - FinalizeRequestParams memory _params, - address _requester - ) public happyPath(_params) { - vm.assume(_requester != address(eboRequestCreator)); - _params.request.requester = _requester; - - vm.expectRevert(IEBORequestModule.EBORequestModule_InvalidRequester.selector); - eboRequestModule.finalizeRequest(_params.request, _params.response, _params.finalizer); - } - - function test_emitRequestFinalized(FinalizeRequestParams memory _params) public happyPath(_params) { - vm.expectEmit(); - emit RequestFinalized(_params.response.requestId, _params.response, _params.finalizer); - eboRequestModule.finalizeRequest(_params.request, _params.response, _params.finalizer); - } -} - contract EBORequestModule_Unit_SetEBORequestCreator is EBORequestModule_Unit_BaseTest { modifier happyPath(IEBORequestCreator _eboRequestCreator, address _arbitrator) { vm.assume(address(_eboRequestCreator) != address(eboRequestCreator)); @@ -249,7 +189,7 @@ contract EBORequestModule_Unit_RemoveEBORequestCreator is EBORequestModule_Unit_ } contract EBORequestModule_Unit_GetAllowedEBORequestCreators is EBORequestModule_Unit_BaseTest { - function test_returnAllowedEBORequestCreators() public { + function test_returnAllowedEBORequestCreators() public view { assertEq(eboRequestModule.getAllowedEBORequestCreators()[0], address(eboRequestCreator)); assertEq(eboRequestModule.getAllowedEBORequestCreators().length, 1); } diff --git a/test/unit/HorizonAccountingExtension.t.sol b/test/unit/HorizonAccountingExtension.t.sol index 6de5157..3c2c153 100644 --- a/test/unit/HorizonAccountingExtension.t.sol +++ b/test/unit/HorizonAccountingExtension.t.sol @@ -1,15 +1,16 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; import {Helpers} from 'test/utils/Helpers.sol'; import {IBondEscalationAccounting} from '@defi-wonderland/prophet-modules/solidity/interfaces/extensions/IBondEscalationAccounting.sol'; -import {IBondEscalationModule} from - '@defi-wonderland/prophet-modules/solidity/interfaces/modules/dispute/IBondEscalationModule.sol'; + import { + EnumerableSet, HorizonAccountingExtension, + IArbitrable, + IBondEscalationModule, IERC20, IHorizonAccountingExtension, IHorizonStaking, @@ -25,8 +26,21 @@ contract HorizonAccountingExtensionForTest is HorizonAccountingExtension { IHorizonStaking _horizonStaking, IOracle _oracle, IERC20 _grt, - uint256 _minThawingPeriod - ) HorizonAccountingExtension(_horizonStaking, _oracle, _grt, _minThawingPeriod) {} + IArbitrable _arbitrable, + uint256 _minThawingPeriod, + uint256 _maxSlashingUsers, + uint256 _maxUsersToCheck + ) + HorizonAccountingExtension( + _horizonStaking, + _oracle, + _grt, + _arbitrable, + _minThawingPeriod, + _maxSlashingUsers, + _maxUsersToCheck + ) + {} function approveModuleForTest(address _user, address _module) public { _approvals[_user].add(_module); @@ -86,6 +100,7 @@ contract HorizonAccountingExtension_Unit_BaseTest is Test, Helpers { IHorizonStaking public horizonStaking; IOracle public oracle; IERC20 public grt; + IArbitrable public arbitrable; IBondEscalationModule public bondEscalationModule; /// Addresses @@ -95,6 +110,10 @@ contract HorizonAccountingExtension_Unit_BaseTest is Test, Helpers { uint32 public constant MAX_VERIFIER_CUT = 1_000_000; uint64 public constant MIN_THAWING_PERIOD = 30 days; + /// Mocks + uint256 public maxSlashingUsers = 10; + uint256 public maxUsersToCheck = 1; + /// Events event Paid(bytes32 indexed _requestId, address indexed _beneficiary, address indexed _payer, uint256 _amount); event Bonded(bytes32 indexed _requestId, address indexed _bonder, uint256 _amount); @@ -115,16 +134,21 @@ contract HorizonAccountingExtension_Unit_BaseTest is Test, Helpers { event EscalationRewardClaimed( bytes32 indexed _requestId, bytes32 indexed _disputeId, address indexed _pledger, uint256 _reward, uint256 _released ); + event MaxSlashingUsersSetted(uint256 _maxSlashingUsers); + event MaxUsersToCheckSetted(uint256 _maxUsersToCheck); function setUp() public { horizonStaking = IHorizonStaking(makeAddr('HorizonStaking')); oracle = IOracle(makeAddr('Oracle')); grt = IERC20(makeAddr('GRT')); + arbitrable = IArbitrable(makeAddr('Arbitrable')); bondEscalationModule = IBondEscalationModule(makeAddr('BondEscalationModule')); user = makeAddr('User'); - horizonAccountingExtension = new HorizonAccountingExtensionForTest(horizonStaking, oracle, grt, MIN_THAWING_PERIOD); + horizonAccountingExtension = new HorizonAccountingExtensionForTest( + horizonStaking, oracle, grt, arbitrable, MIN_THAWING_PERIOD, maxSlashingUsers, maxUsersToCheck + ); } } @@ -141,9 +165,21 @@ contract HorizonAccountingExtension_Unit_Constructor is HorizonAccountingExtensi assertEq(address(horizonAccountingExtension.GRT()), address(grt)); } + function test_setArbitrable() public view { + assertEq(address(horizonAccountingExtension.ARBITRABLE()), address(arbitrable)); + } + function test_setMinThawingPeriod() public view { assertEq(horizonAccountingExtension.MIN_THAWING_PERIOD(), MIN_THAWING_PERIOD); } + + function test_setMaxSlashingUsers() public view { + assertEq(horizonAccountingExtension.maxSlashingUsers(), maxSlashingUsers); + } + + function test_setMaxUsersToCheck() public view { + assertEq(horizonAccountingExtension.maxUsersToCheck(), maxUsersToCheck); + } } contract HorizonAccountingExtension_Unit_ApproveModule is HorizonAccountingExtension_Unit_BaseTest { @@ -1551,3 +1587,51 @@ contract HorizonAccountingExtension_Unit_Slash is HorizonAccountingExtension_Uni horizonAccountingExtension.slash(_mockDisputeId, _usersToSlash, _maxUsersToCheck); } } + +contract HorizonAccountingExtension_Unit_SetMaxSlashingUsers is HorizonAccountingExtension_Unit_BaseTest { + modifier happyPath(address _arbitrator) { + vm.mockCall( + address(arbitrable), + abi.encodeWithSelector(IArbitrable.validateArbitrator.selector, _arbitrator), + abi.encode(true) + ); + vm.startPrank(_arbitrator); + _; + } + + function test_setMaxSlashingUsers(address _arbitrator, uint256 _maxSlashingUsers) public happyPath(_arbitrator) { + horizonAccountingExtension.setMaxSlashingUsers(_maxSlashingUsers); + assertEq(horizonAccountingExtension.maxSlashingUsers(), _maxSlashingUsers); + } + + function test_emitMaxSlashingUsers(address _arbitrator, uint256 _maxSlashingUsers) public happyPath(_arbitrator) { + vm.expectEmit(); + emit MaxSlashingUsersSetted(_maxSlashingUsers); + + horizonAccountingExtension.setMaxSlashingUsers(_maxSlashingUsers); + } +} + +contract HorizonAccountingExtension_Unit_SetMaxUsersToCheck is HorizonAccountingExtension_Unit_BaseTest { + modifier happyPath(address _arbitrator) { + vm.mockCall( + address(arbitrable), + abi.encodeWithSelector(IArbitrable.validateArbitrator.selector, _arbitrator), + abi.encode(true) + ); + vm.startPrank(_arbitrator); + _; + } + + function test_setMaxUsersToCheck(address _arbitrator, uint256 _maxUsersToCheck) public happyPath(_arbitrator) { + horizonAccountingExtension.setMaxUsersToCheck(_maxUsersToCheck); + assertEq(horizonAccountingExtension.maxUsersToCheck(), _maxUsersToCheck); + } + + function test_emitMaxUsersToCheck(address _arbitrator, uint256 _maxUsersToCheck) public happyPath(_arbitrator) { + vm.expectEmit(); + emit MaxUsersToCheckSetted(_maxUsersToCheck); + + horizonAccountingExtension.setMaxUsersToCheck(_maxUsersToCheck); + } +} From ffaf6be045fd638e08d6f0e6851f8cfbccd23ef2 Mon Sep 17 00:00:00 2001 From: Ashitaka Date: Wed, 2 Oct 2024 14:53:03 -0300 Subject: [PATCH 3/3] fix: comments --- src/contracts/CouncilArbitrator.sol | 2 +- src/contracts/HorizonAccountingExtension.sol | 26 +--------- .../IHorizonAccountingExtension.sol | 21 +------- test/unit/HorizonAccountingExtension.t.sol | 51 ++----------------- 4 files changed, 9 insertions(+), 91 deletions(-) diff --git a/src/contracts/CouncilArbitrator.sol b/src/contracts/CouncilArbitrator.sol index bf63e98..6d87851 100644 --- a/src/contracts/CouncilArbitrator.sol +++ b/src/contracts/CouncilArbitrator.sol @@ -49,7 +49,7 @@ contract CouncilArbitrator is ICouncilArbitrator { IOracle.Request calldata _request, IOracle.Response calldata _response, IOracle.Dispute calldata _dispute - ) external onlyArbitratorModule returns (bytes memory _data) { + ) external onlyArbitratorModule returns (bytes memory /* _data */ ) { bytes32 _disputeId = _dispute._getId(); resolutions[_disputeId] = ResolutionParameters(_request, _response, _dispute); diff --git a/src/contracts/HorizonAccountingExtension.sol b/src/contracts/HorizonAccountingExtension.sol index 0cf150a..f6b19f0 100644 --- a/src/contracts/HorizonAccountingExtension.sol +++ b/src/contracts/HorizonAccountingExtension.sol @@ -34,9 +34,6 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { /// @inheritdoc IHorizonAccountingExtension uint256 public constant MAX_VERIFIER_CUT = 1_000_000; - /// @inheritdoc IHorizonAccountingExtension - uint256 public maxSlashingUsers; - /// @inheritdoc IHorizonAccountingExtension uint256 public maxUsersToCheck; @@ -71,7 +68,6 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { * @param _oracle The address of the Oracle * @param _grt The address of the GRT token * @param _minThawingPeriod The minimum thawing period for the staking - * @param _maxSlashingUsers The maximum number of users to slash * @param _maxUsersToCheck The maximum number of users to check */ constructor( @@ -80,14 +76,12 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { IERC20 _grt, IArbitrable _arbitrable, uint256 _minThawingPeriod, - uint256 _maxSlashingUsers, uint256 _maxUsersToCheck ) Validator(_oracle) { HORIZON_STAKING = _horizonStaking; GRT = _grt; ARBITRABLE = _arbitrable; MIN_THAWING_PERIOD = _minThawingPeriod; - _setMaxSlashingUsers(_maxSlashingUsers); _setMaxUsersToCheck(_maxUsersToCheck); } @@ -220,7 +214,7 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { // Claim one by one until the balance is enough while (_balance < _claimAmount) { - _balance += _slash(_disputeId, maxSlashingUsers, maxUsersToCheck, _result, _status); + _balance += _slash(_disputeId, 1, maxUsersToCheck, _result, _status); } _rewardAmount = _claimAmount - _pledgeAmount; @@ -347,28 +341,12 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { _slash(_disputeId, _usersToSlash, _maxUsersToCheck, _result, _status); } - /// @inheritdoc IHorizonAccountingExtension - function setMaxSlashingUsers(uint256 _maxSlashingUsers) external { - ARBITRABLE.validateArbitrator(msg.sender); - _setMaxSlashingUsers(_maxSlashingUsers); - } - /// @inheritdoc IHorizonAccountingExtension function setMaxUsersToCheck(uint256 _maxUsersToCheck) external { ARBITRABLE.validateArbitrator(msg.sender); _setMaxUsersToCheck(_maxUsersToCheck); } - /** - * @notice Set the maximum number of users to slash. - * @param _maxSlashingUsers The maximum number of users to slash. - */ - function _setMaxSlashingUsers(uint256 _maxSlashingUsers) internal { - maxSlashingUsers = _maxSlashingUsers; - - emit MaxSlashingUsersSetted(_maxSlashingUsers); - } - /** * @notice Set the maximum number of users to check. * @param _maxUsersToCheck The maximum number of users to check. @@ -376,7 +354,7 @@ contract HorizonAccountingExtension is Validator, IHorizonAccountingExtension { function _setMaxUsersToCheck(uint256 _maxUsersToCheck) internal { maxUsersToCheck = _maxUsersToCheck; - emit MaxUsersToCheckSetted(_maxUsersToCheck); + emit MaxUsersToCheckSet(_maxUsersToCheck); } /** diff --git a/src/interfaces/IHorizonAccountingExtension.sol b/src/interfaces/IHorizonAccountingExtension.sol index 8ef4291..5c9f9e4 100644 --- a/src/interfaces/IHorizonAccountingExtension.sol +++ b/src/interfaces/IHorizonAccountingExtension.sol @@ -102,19 +102,12 @@ interface IHorizonAccountingExtension { bytes32 indexed _requestId, bytes32 indexed _disputeId, address indexed _pledger, uint256 _reward, uint256 _released ); - /** - * @notice Emitted when max slashing users is set - * - * @param _maxSlashingUsers The new value of max slashing users - */ - event MaxSlashingUsersSetted(uint256 _maxSlashingUsers); - /** * @notice Emitted when max users to check is set * * @param _maxUsersToCheck The new value of max users to check */ - event MaxUsersToCheckSetted(uint256 _maxUsersToCheck); + event MaxUsersToCheckSet(uint256 _maxUsersToCheck); /*/////////////////////////////////////////////////////////////// ERRORS @@ -234,12 +227,6 @@ interface IHorizonAccountingExtension { */ function MAX_VERIFIER_CUT() external view returns (uint256 _MAX_VERIFIER_CUT); - /** - * @notice The maximum slashing users - * @return _maxSlashingUsers The maximum slashing users - */ - function maxSlashingUsers() external view returns (uint256 _maxSlashingUsers); - /** * @notice The maximum users to check * @return _maxUsersToCheck The maximum users to check @@ -409,12 +396,6 @@ interface IHorizonAccountingExtension { */ function slash(bytes32 _disputeId, uint256 _usersToSlash, uint256 _maxUsersToCheck) external; - /** - * @notice Sets the maximum slashing users - * @param _maxSlashingUsers The new value of max slashing users - */ - function setMaxSlashingUsers(uint256 _maxSlashingUsers) external; - /** * @notice Sets the maximum users to check * @param _maxUsersToCheck The new value of max users to check diff --git a/test/unit/HorizonAccountingExtension.t.sol b/test/unit/HorizonAccountingExtension.t.sol index 3c2c153..c5ec251 100644 --- a/test/unit/HorizonAccountingExtension.t.sol +++ b/test/unit/HorizonAccountingExtension.t.sol @@ -28,19 +28,8 @@ contract HorizonAccountingExtensionForTest is HorizonAccountingExtension { IERC20 _grt, IArbitrable _arbitrable, uint256 _minThawingPeriod, - uint256 _maxSlashingUsers, uint256 _maxUsersToCheck - ) - HorizonAccountingExtension( - _horizonStaking, - _oracle, - _grt, - _arbitrable, - _minThawingPeriod, - _maxSlashingUsers, - _maxUsersToCheck - ) - {} + ) HorizonAccountingExtension(_horizonStaking, _oracle, _grt, _arbitrable, _minThawingPeriod, _maxUsersToCheck) {} function approveModuleForTest(address _user, address _module) public { _approvals[_user].add(_module); @@ -111,7 +100,6 @@ contract HorizonAccountingExtension_Unit_BaseTest is Test, Helpers { uint64 public constant MIN_THAWING_PERIOD = 30 days; /// Mocks - uint256 public maxSlashingUsers = 10; uint256 public maxUsersToCheck = 1; /// Events @@ -134,8 +122,7 @@ contract HorizonAccountingExtension_Unit_BaseTest is Test, Helpers { event EscalationRewardClaimed( bytes32 indexed _requestId, bytes32 indexed _disputeId, address indexed _pledger, uint256 _reward, uint256 _released ); - event MaxSlashingUsersSetted(uint256 _maxSlashingUsers); - event MaxUsersToCheckSetted(uint256 _maxUsersToCheck); + event MaxUsersToCheckSet(uint256 _maxUsersToCheck); function setUp() public { horizonStaking = IHorizonStaking(makeAddr('HorizonStaking')); @@ -147,7 +134,7 @@ contract HorizonAccountingExtension_Unit_BaseTest is Test, Helpers { user = makeAddr('User'); horizonAccountingExtension = new HorizonAccountingExtensionForTest( - horizonStaking, oracle, grt, arbitrable, MIN_THAWING_PERIOD, maxSlashingUsers, maxUsersToCheck + horizonStaking, oracle, grt, arbitrable, MIN_THAWING_PERIOD, maxUsersToCheck ); } } @@ -173,10 +160,6 @@ contract HorizonAccountingExtension_Unit_Constructor is HorizonAccountingExtensi assertEq(horizonAccountingExtension.MIN_THAWING_PERIOD(), MIN_THAWING_PERIOD); } - function test_setMaxSlashingUsers() public view { - assertEq(horizonAccountingExtension.maxSlashingUsers(), maxSlashingUsers); - } - function test_setMaxUsersToCheck() public view { assertEq(horizonAccountingExtension.maxUsersToCheck(), maxUsersToCheck); } @@ -1588,33 +1571,9 @@ contract HorizonAccountingExtension_Unit_Slash is HorizonAccountingExtension_Uni } } -contract HorizonAccountingExtension_Unit_SetMaxSlashingUsers is HorizonAccountingExtension_Unit_BaseTest { - modifier happyPath(address _arbitrator) { - vm.mockCall( - address(arbitrable), - abi.encodeWithSelector(IArbitrable.validateArbitrator.selector, _arbitrator), - abi.encode(true) - ); - vm.startPrank(_arbitrator); - _; - } - - function test_setMaxSlashingUsers(address _arbitrator, uint256 _maxSlashingUsers) public happyPath(_arbitrator) { - horizonAccountingExtension.setMaxSlashingUsers(_maxSlashingUsers); - assertEq(horizonAccountingExtension.maxSlashingUsers(), _maxSlashingUsers); - } - - function test_emitMaxSlashingUsers(address _arbitrator, uint256 _maxSlashingUsers) public happyPath(_arbitrator) { - vm.expectEmit(); - emit MaxSlashingUsersSetted(_maxSlashingUsers); - - horizonAccountingExtension.setMaxSlashingUsers(_maxSlashingUsers); - } -} - contract HorizonAccountingExtension_Unit_SetMaxUsersToCheck is HorizonAccountingExtension_Unit_BaseTest { modifier happyPath(address _arbitrator) { - vm.mockCall( + _mockAndExpect( address(arbitrable), abi.encodeWithSelector(IArbitrable.validateArbitrator.selector, _arbitrator), abi.encode(true) @@ -1630,7 +1589,7 @@ contract HorizonAccountingExtension_Unit_SetMaxUsersToCheck is HorizonAccounting function test_emitMaxUsersToCheck(address _arbitrator, uint256 _maxUsersToCheck) public happyPath(_arbitrator) { vm.expectEmit(); - emit MaxUsersToCheckSetted(_maxUsersToCheck); + emit MaxUsersToCheckSet(_maxUsersToCheck); horizonAccountingExtension.setMaxUsersToCheck(_maxUsersToCheck); }