From cf16bb3c5bb450277f3d2054c2d1d5cef9b519d7 Mon Sep 17 00:00:00 2001 From: zorzal Date: Mon, 18 Nov 2024 12:43:06 -0500 Subject: [PATCH 01/15] feat: deploy EBOAccessModule in Deploy script --- script/Deploy.s.sol | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index a6ea82f..c38438d 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -19,11 +19,13 @@ import { IBondEscalationAccounting } from '@defi-wonderland/prophet-modules/solidity/interfaces/extensions/IBondEscalationAccounting.sol'; import {IERC20} from '@openzeppelin/contracts/interfaces/IERC20.sol'; -import {IEpochManager} from 'interfaces/external/IEpochManager.sol'; -import {IHorizonStaking} from 'interfaces/external/IHorizonStaking.sol'; import {Arbitrable, IArbitrable} from 'contracts/Arbitrable.sol'; import {CouncilArbitrator, ICouncilArbitrator} from 'contracts/CouncilArbitrator.sol'; +import {IEpochManager} from 'interfaces/external/IEpochManager.sol'; +import {IHorizonStaking} from 'interfaces/external/IHorizonStaking.sol'; + +import {EBOAccessModule, IEBOAccessModule} from 'contracts/EBOAccessModule.sol'; import {EBOFinalityModule, IEBOFinalityModule} from 'contracts/EBOFinalityModule.sol'; import {EBORequestCreator, IEBORequestCreator} from 'contracts/EBORequestCreator.sol'; import {EBORequestModule, IEBORequestModule} from 'contracts/EBORequestModule.sol'; @@ -54,6 +56,7 @@ contract Deploy is Script { IBondEscalationModule public bondEscalationModule; IArbitratorModule public arbitratorModule; IEBOFinalityModule public eboFinalityModule; + IEBOAccessModule public eboAccessModule; // Extensions IHorizonAccountingExtension public horizonAccountingExtension; @@ -155,6 +158,10 @@ contract Deploy is Script { councilArbitrator = new CouncilArbitrator(arbitratorModule, arbitrable); console.log('`CouncilArbitrator` deployed at:', address(councilArbitrator)); + // Deploy `EBOAccessModule` + eboAccessModule = new EBOAccessModule(oracle, arbitrable, horizonAccountingExtension); + console.log('`EBOAccessModule` deployed at:', address(eboAccessModule)); + // Deploy `EBORequestCreator` IOracle.Request memory _requestData = _instantiateRequestData(); eboRequestCreator = new EBORequestCreator(oracle, epochManager, arbitrable, _requestData); @@ -173,8 +180,7 @@ contract Deploy is Script { // Set requester and modules _requestData.requester = address(eboRequestCreator); - // todo : replace with HorizonOperatorAccessModule - _requestData.accessModule = address(0); + _requestData.accessModule = address(eboAccessModule); _requestData.requestModule = address(eboRequestModule); _requestData.responseModule = address(bondedResponseModule); _requestData.disputeModule = address(bondEscalationModule); From f272559a0b225e87ea8902f6c763a770074499f2 Mon Sep 17 00:00:00 2001 From: zorzal Date: Mon, 18 Nov 2024 12:43:55 -0500 Subject: [PATCH 02/15] test: add access module to instantiated request data --- test/unit/Deploy.t.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unit/Deploy.t.sol b/test/unit/Deploy.t.sol index 0d807df..4cde5cb 100644 --- a/test/unit/Deploy.t.sol +++ b/test/unit/Deploy.t.sol @@ -181,6 +181,7 @@ contract UnitDeploy is Test { _requestData.nonce = 0; _requestData.requester = address(deploy.eboRequestCreator()); + _requestData.accessModule = address(deploy.eboAccessModule()); _requestData.requestModule = address(deploy.eboRequestModule()); _requestData.responseModule = address(deploy.bondedResponseModule()); _requestData.disputeModule = address(deploy.bondEscalationModule()); From 75bd08e6db5dbfc18e10c23d579dbfaf94df5fd6 Mon Sep 17 00:00:00 2001 From: zorzal Date: Mon, 18 Nov 2024 12:45:10 -0500 Subject: [PATCH 03/15] feat: update deployment account to precompute the correct address --- script/Deploy.s.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index c38438d..c8aaa6f 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -44,7 +44,7 @@ import { import 'forge-std/Script.sol'; contract Deploy is Script { - uint256 public constant DEPLOYMENT_COUNT = 10; + uint256 public constant DEPLOYMENT_COUNT = 11; uint256 public constant OFFSET_EBO_REQUEST_CREATOR = DEPLOYMENT_COUNT - 1; // Oracle From 72a82f5c4bf80d24c280cb8f4b95a295066eda23 Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 20 Nov 2024 10:14:28 -0500 Subject: [PATCH 04/15] feat: wip --- script/Deploy.s.sol | 194 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 188 insertions(+), 6 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index c8aaa6f..a1c6021 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -2,6 +2,8 @@ pragma solidity 0.8.26; import {IOracle, Oracle} from '@defi-wonderland/prophet-core/solidity/contracts/Oracle.sol'; + +import {IAccessController} from '@defi-wonderland/prophet-core/solidity/interfaces/access/IAccessController.sol'; import { BondEscalationModule, IBondEscalationModule @@ -41,6 +43,8 @@ import { _MIN_THAWING_PERIOD } from 'script/Constants.sol'; +import {Vm} from 'forge-std/Vm.sol'; + import 'forge-std/Script.sol'; contract Deploy is Script { @@ -84,7 +88,14 @@ contract Deploy is Script { uint256 public tyingBuffer; uint256 public disputeDisputeWindow; + // + uint256 public constant ENOUGH_BALANCE = 33e18; + error Deploy_InvalidPrecomputedAddress(); + error Deploy_DeployerNotEnoughBalance(); + + address deployer; + address agent; function setUp() public virtual { // Define The Graph accounts @@ -110,10 +121,15 @@ contract Deploy is Script { disputeDeadline = 10 days; tyingBuffer = 3 days; disputeDisputeWindow = 2 weeks; + + deployer = vm.rememberKey(vm.envUint('DEPLOYER_PRIVATE_KEY')); + agent = vm.rememberKey(vm.envUint('AGENT_PRIVATE_KEY')); + vm.label(deployer, 'deployer'); + vm.label(agent, 'agent'); } - function run() public { - vm.startBroadcast(); + function deploy() public { + vm.startBroadcast(deployer); // Precompute address of `EBORequestCreator` IEBORequestCreator _precomputedEBORequestCreator = @@ -149,9 +165,19 @@ contract Deploy is Script { // Deploy `HorizonAccountingExtension` address[] memory _authorizedCallers = _instantiateAuthorizedCallers(); - horizonAccountingExtension = new HorizonAccountingExtension( - horizonStaking, oracle, graphToken, arbitrable, _MIN_THAWING_PERIOD, _MAX_USERS_TO_CHECK, _authorizedCallers - ); + _authorizedCallers[1] = deployer; + _authorizedCallers[2] = address(bondedResponseModule); + + horizonAccountingExtension = new HorizonAccountingExtension({ + _horizonStaking: horizonStaking, + _oracle: oracle, + _grt: graphToken, + _arbitrable: arbitrable, + _minThawingPeriod: _MIN_THAWING_PERIOD, + _maxUsersToCheck: _MAX_USERS_TO_CHECK, + _authorizedCallers: _authorizedCallers + }); + // vm.label(address(horizonAccountingExtension), 'horizonAccountingExtension'); console.log('`HorizonAccountingExtension` deployed at:', address(horizonAccountingExtension)); // Deploy `CouncilArbitrator` @@ -171,6 +197,161 @@ contract Deploy is Script { if (eboRequestCreator != _precomputedEBORequestCreator) revert Deploy_InvalidPrecomputedAddress(); vm.stopBroadcast(); + _labelContracts(); + } + + function setupBalances() public { + // checks chain id + // check grt balance + // check ether balance + uint256 _balanceD = address(deployer).balance; + uint256 _balanceA = address(agent).balance; + console.log('deployer balance', _balanceD / 1e18); + console.log('agent balance', _balanceA / 1e18); + if (_balanceD < 1e18) { + revert Deploy_DeployerNotEnoughBalance(); + } + + if (_balanceA < 1 ether) { + agent.call{value: ENOUGH_BALANCE}(''); + console.log('update agent balance', address(agent).balance); + } + } + + function setupEBO() public { + string memory chainId = string.concat('eip155:421614'); + + vm.startBroadcast(deployer); + + eboRequestModule.addEBORequestCreator(eboRequestCreator); + eboRequestCreator.addChain(chainId); + + vm.stopBroadcast(); + } + + function setupAgent() public { + vm.startBroadcast(deployer); + if (graphToken.balanceOf(agent) < 1e18) { + horizonAccountingExtension.GRT().transfer(agent, ENOUGH_BALANCE); + } + vm.stopBroadcast(); + /// + vm.startBroadcast(agent); + + /// agent setup + graphToken.approve(address(horizonAccountingExtension.HORIZON_STAKING()), 30e18); + horizonAccountingExtension.HORIZON_STAKING().stake(10e18); + horizonAccountingExtension.approveModule(address(bondEscalationModule)); + horizonAccountingExtension.approveModule(address(bondedResponseModule)); + horizonAccountingExtension.HORIZON_STAKING().provision( + agent, + address(horizonAccountingExtension), + 4e18, + horizonAccountingExtension.MAX_VERIFIER_CUT(), + horizonAccountingExtension.MIN_THAWING_PERIOD() + ); + // horizonAccountingExtension.HORIZON_STAKING().addToProvision(agent, address(horizonAccountingExtension), 0.5e18); + + vm.stopBroadcast(); + } + + function _labelContracts() internal { + vm.label(address(oracle), 'Oracle'); + vm.label(address(eboAccessModule), 'eboAccessModule'); + vm.label(address(eboRequestModule), 'RequestModule'); + vm.label(address(bondedResponseModule), 'bondedResponseModule'); + vm.label(address(bondEscalationModule), 'bondEscalationModule'); + vm.label(address(eboRequestCreator), 'EBORequestCreator'); + // + vm.label(address(graphToken), 'GraphToken'); + vm.label(address(horizonStaking), 'HorizonStaking'); + vm.label(address(epochManager), 'EpochManager'); + } + + function _loadContracts() internal returns (bool) { + // deploy(); + oracle = IOracle(vm.envAddress('SETUP_ADDRESS_Oracle')); + arbitrable = IArbitrable(vm.envAddress('SETUP_ADDRESS_Arbitrable')); + eboRequestModule = IEBORequestModule(vm.envAddress('SETUP_ADDRESS_EBORequestModule')); + bondedResponseModule = IBondedResponseModule(vm.envAddress('SETUP_ADDRESS_BondedResponseModule')); + bondEscalationModule = IBondEscalationModule(vm.envAddress('SETUP_ADDRESS_BondEscalationModule')); + arbitratorModule = IArbitratorModule(vm.envAddress('SETUP_ADDRESS_ArbitratorModule')); + eboFinalityModule = IEBOFinalityModule(vm.envAddress('SETUP_ADDRESS_EBOFinalityModule')); + horizonAccountingExtension = IHorizonAccountingExtension(vm.envAddress('SETUP_ADDRESS_HorizonAccountingExtension')); + councilArbitrator = ICouncilArbitrator(vm.envAddress('SETUP_ADDRESS_CouncilArbitrator')); + eboAccessModule = IEBOAccessModule(vm.envAddress('SETUP_ADDRESS_EBOAccessModule')); + eboRequestCreator = IEBORequestCreator(vm.envAddress('SETUP_ADDRESS_EBORequestCreator')); + if (address(eboRequestCreator) == address(0)) { + return false; + } + _labelContracts(); + return true; + } + + function demo2() public { + uint256 epoch; + string memory chainId = string.concat('eip155:421614'); + console.log('chainId', chainId); + + if (_loadContracts()) {} else { + deploy(); + setupEBO(); + } + setupBalances(); + setupAgent(); + + vm.startBroadcast(agent); + + (IOracle.Request memory _request, bytes32 _requestId) = _create(); + + IAccessController.AccessControl memory _selfAC = IAccessController.AccessControl({user: agent, data: bytes('')}); + + IOracle.Response memory _goodResponse = + IOracle.Response({proposer: agent, requestId: _requestId, response: bytes('good-data')}); + IOracle.Response memory _badResponse = + IOracle.Response({proposer: agent, requestId: _requestId, response: bytes('bad-data')}); + oracle.proposeResponse(_request, _badResponse, _selfAC); + + IOracle.Dispute memory _dispute = IOracle.Dispute({ + disputer: agent, + proposer: agent, + requestId: _requestId, + responseId: keccak256(abi.encode(_badResponse)) + }); + oracle.disputeResponse(_request, _badResponse, _dispute, _selfAC); + + vm.stopBroadcast(); + } + + function _create() internal returns (IOracle.Request memory, bytes32) { + string memory chainId = string.concat('eip155:421614'); + uint256 epoch = epochManager.currentEpoch(); + console.log('current epoch', epoch); + vm.recordLogs(); + + eboRequestCreator.createRequest(epoch, chainId); + + Vm.Log[] memory entries = vm.getRecordedLogs(); + assert(entries.length == 2); + assert(entries[1].emitter == address(eboRequestCreator)); + + bytes32 _requestId = entries[1].topics[1]; + (IOracle.Request memory _request) = abi.decode(entries[1].data, (IOracle.Request)); + assert(_requestId == keccak256(abi.encode(_request))); + + console.log('request id'); + console.logBytes32(_requestId); + + return (_request, _requestId); + } + + function _proposeResponse( + IOracle.Request memory _request, + IOracle.Response memory _response, + IAccessController.AccessControl memory _ac + ) internal returns (IOracle.Response memory, bytes32) { + console.log('Proposing bad response'); + return (_response, oracle.proposeResponse(_request, _response, _ac)); } function _instantiateRequestData() internal view returns (IOracle.Request memory _requestData) { @@ -189,6 +370,7 @@ contract Deploy is Script { // Set modules data IEBORequestModule.RequestParameters memory _requestParams = _instantiateRequestParams(); + console.logBytes(abi.encode(_requestParams)); IBondedResponseModule.RequestParameters memory _responseParams = _instantiateResponseParams(); IBondEscalationModule.RequestParameters memory _disputeParams = _instantiateDisputeParams(); IArbitratorModule.RequestParameters memory _resolutionParams = _instantiateResolutionParams(); @@ -242,7 +424,7 @@ contract Deploy is Script { } function _instantiateAuthorizedCallers() internal view returns (address[] memory _authorizedCallers) { - _authorizedCallers = new address[](1); + _authorizedCallers = new address[](2); _authorizedCallers[0] = address(bondEscalationModule); } From d57ad0d691a9bda29deece0712c5c11b0da61427 Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 20 Nov 2024 10:15:26 -0500 Subject: [PATCH 05/15] test: update deploy function name --- test/integration/arbitrum/IntegrationBase.t.sol | 2 +- test/unit/Deploy.t.sol | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/integration/arbitrum/IntegrationBase.t.sol b/test/integration/arbitrum/IntegrationBase.t.sol index a651f95..455eb10 100644 --- a/test/integration/arbitrum/IntegrationBase.t.sol +++ b/test/integration/arbitrum/IntegrationBase.t.sol @@ -43,7 +43,7 @@ contract IntegrationBase is Deploy, Test, Helpers { // Run deployment script super.setUp(); - run(); + deploy(); // Define The Graph accounts _governor = _ARBITRUM_SEPOLIA_GOVERNOR; diff --git a/test/unit/Deploy.t.sol b/test/unit/Deploy.t.sol index 4cde5cb..3dd8a3a 100644 --- a/test/unit/Deploy.t.sol +++ b/test/unit/Deploy.t.sol @@ -66,7 +66,7 @@ contract UnitDeploy is Test { function test_RunRevertWhen_TheGraphAccountsAreNotSetUp() public { // it should revert vm.expectRevert(); - deploy.run(); + deploy.deploy(); } modifier givenTheGraphAccountsAreSetUp() { @@ -90,12 +90,12 @@ contract UnitDeploy is Test { // it should revert vm.expectRevert(Deploy.Deploy_InvalidPrecomputedAddress.selector); - deploy.run(); + deploy.deploy(); } function test_RunWhenPrecomputedAddressIsCorrect() public givenTheGraphAccountsAreSetUp { uint256 _nonceBefore = vm.getNonce(tx.origin); - deploy.run(); + deploy.deploy(); uint256 _nonceAfter = vm.getNonce(tx.origin); // it should deploy all contracts using a single EOA From b5006f80d088f500cf61cdb76d8771eda529d6b2 Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 20 Nov 2024 10:22:56 -0500 Subject: [PATCH 06/15] fix: when env var is not set, return address(0) --- script/Deploy.s.sol | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index a1c6021..7d059b4 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -165,8 +165,7 @@ contract Deploy is Script { // Deploy `HorizonAccountingExtension` address[] memory _authorizedCallers = _instantiateAuthorizedCallers(); - _authorizedCallers[1] = deployer; - _authorizedCallers[2] = address(bondedResponseModule); + _authorizedCallers[0] = address(bondedResponseModule); horizonAccountingExtension = new HorizonAccountingExtension({ _horizonStaking: horizonStaking, @@ -270,17 +269,18 @@ contract Deploy is Script { function _loadContracts() internal returns (bool) { // deploy(); - oracle = IOracle(vm.envAddress('SETUP_ADDRESS_Oracle')); - arbitrable = IArbitrable(vm.envAddress('SETUP_ADDRESS_Arbitrable')); - eboRequestModule = IEBORequestModule(vm.envAddress('SETUP_ADDRESS_EBORequestModule')); - bondedResponseModule = IBondedResponseModule(vm.envAddress('SETUP_ADDRESS_BondedResponseModule')); - bondEscalationModule = IBondEscalationModule(vm.envAddress('SETUP_ADDRESS_BondEscalationModule')); - arbitratorModule = IArbitratorModule(vm.envAddress('SETUP_ADDRESS_ArbitratorModule')); - eboFinalityModule = IEBOFinalityModule(vm.envAddress('SETUP_ADDRESS_EBOFinalityModule')); - horizonAccountingExtension = IHorizonAccountingExtension(vm.envAddress('SETUP_ADDRESS_HorizonAccountingExtension')); - councilArbitrator = ICouncilArbitrator(vm.envAddress('SETUP_ADDRESS_CouncilArbitrator')); - eboAccessModule = IEBOAccessModule(vm.envAddress('SETUP_ADDRESS_EBOAccessModule')); - eboRequestCreator = IEBORequestCreator(vm.envAddress('SETUP_ADDRESS_EBORequestCreator')); + oracle = IOracle(vm.envOr('SETUP_ADDRESS_Oracle', address(0))); + arbitrable = IArbitrable(vm.envOr('SETUP_ADDRESS_Arbitrable', address(0))); + eboRequestModule = IEBORequestModule(vm.envOr('SETUP_ADDRESS_EBORequestModule', address(0))); + bondedResponseModule = IBondedResponseModule(vm.envOr('SETUP_ADDRESS_BondedResponseModule', address(0))); + bondEscalationModule = IBondEscalationModule(vm.envOr('SETUP_ADDRESS_BondEscalationModule', address(0))); + arbitratorModule = IArbitratorModule(vm.envOr('SETUP_ADDRESS_ArbitratorModule', address(0))); + eboFinalityModule = IEBOFinalityModule(vm.envOr('SETUP_ADDRESS_EBOFinalityModule', address(0))); + horizonAccountingExtension = + IHorizonAccountingExtension(vm.envOr('SETUP_ADDRESS_HorizonAccountingExtension', address(0))); + councilArbitrator = ICouncilArbitrator(vm.envOr('SETUP_ADDRESS_CouncilArbitrator', address(0))); + eboAccessModule = IEBOAccessModule(vm.envOr('SETUP_ADDRESS_EBOAccessModule', address(0))); + eboRequestCreator = IEBORequestCreator(vm.envOr('SETUP_ADDRESS_EBORequestCreator', address(0))); if (address(eboRequestCreator) == address(0)) { return false; } From ffc2f9d1d7beb608839b5d20cdb23b9e5433b4d5 Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 20 Nov 2024 21:20:20 -0500 Subject: [PATCH 07/15] test: update deploy script --- script/Deploy.s.sol | 107 ++++++++++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 39 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 7d059b4..b6f37b9 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -90,6 +90,7 @@ contract Deploy is Script { // uint256 public constant ENOUGH_BALANCE = 33e18; + uint256 public constant NOT_ENOUGH_BALANCE = 0.3e18; error Deploy_InvalidPrecomputedAddress(); error Deploy_DeployerNotEnoughBalance(); @@ -196,6 +197,9 @@ contract Deploy is Script { if (eboRequestCreator != _precomputedEBORequestCreator) revert Deploy_InvalidPrecomputedAddress(); vm.stopBroadcast(); + + setupEBO(); + _labelContracts(); } @@ -204,17 +208,25 @@ contract Deploy is Script { // check grt balance // check ether balance uint256 _balanceD = address(deployer).balance; - uint256 _balanceA = address(agent).balance; console.log('deployer balance', _balanceD / 1e18); - console.log('agent balance', _balanceA / 1e18); - if (_balanceD < 1e18) { + if (_balanceD < NOT_ENOUGH_BALANCE) { revert Deploy_DeployerNotEnoughBalance(); } - - if (_balanceA < 1 ether) { + uint256 _balanceA = address(agent).balance; + if (_balanceA < NOT_ENOUGH_BALANCE) { agent.call{value: ENOUGH_BALANCE}(''); - console.log('update agent balance', address(agent).balance); + console.log('agent balance from %d to %d', _balanceA / 1e18, agent.balance / 1e18); + } else { + console.log('agent balance', address(agent).balance / 1e18); + } + + // deployer funds agent + vm.startBroadcast(deployer); + console.log('GRT balance of agent %d', graphToken.balanceOf(agent) / 1e18); + if (graphToken.balanceOf(agent) < NOT_ENOUGH_BALANCE) { + horizonAccountingExtension.GRT().transfer(agent, ENOUGH_BALANCE); } + vm.stopBroadcast(); } function setupEBO() public { @@ -229,23 +241,19 @@ contract Deploy is Script { } function setupAgent() public { - vm.startBroadcast(deployer); - if (graphToken.balanceOf(agent) < 1e18) { - horizonAccountingExtension.GRT().transfer(agent, ENOUGH_BALANCE); - } - vm.stopBroadcast(); - /// + /// agent setup vm.startBroadcast(agent); - /// agent setup - graphToken.approve(address(horizonAccountingExtension.HORIZON_STAKING()), 30e18); - horizonAccountingExtension.HORIZON_STAKING().stake(10e18); + horizonAccountingExtension.GRT().approve(address(horizonAccountingExtension.HORIZON_STAKING()), 20e18); + horizonAccountingExtension.HORIZON_STAKING().stake(1e18); + // approve EBO modules in HAE horizonAccountingExtension.approveModule(address(bondEscalationModule)); horizonAccountingExtension.approveModule(address(bondedResponseModule)); + horizonAccountingExtension.HORIZON_STAKING().provision( agent, address(horizonAccountingExtension), - 4e18, + 1e18, horizonAccountingExtension.MAX_VERIFIER_CUT(), horizonAccountingExtension.MIN_THAWING_PERIOD() ); @@ -254,7 +262,9 @@ contract Deploy is Script { vm.stopBroadcast(); } + // function _labelContracts() internal { + // convert to a loop? vm.label(address(oracle), 'Oracle'); vm.label(address(eboAccessModule), 'eboAccessModule'); vm.label(address(eboRequestModule), 'RequestModule'); @@ -268,40 +278,60 @@ contract Deploy is Script { } function _loadContracts() internal returns (bool) { - // deploy(); - oracle = IOracle(vm.envOr('SETUP_ADDRESS_Oracle', address(0))); - arbitrable = IArbitrable(vm.envOr('SETUP_ADDRESS_Arbitrable', address(0))); - eboRequestModule = IEBORequestModule(vm.envOr('SETUP_ADDRESS_EBORequestModule', address(0))); - bondedResponseModule = IBondedResponseModule(vm.envOr('SETUP_ADDRESS_BondedResponseModule', address(0))); - bondEscalationModule = IBondEscalationModule(vm.envOr('SETUP_ADDRESS_BondEscalationModule', address(0))); - arbitratorModule = IArbitratorModule(vm.envOr('SETUP_ADDRESS_ArbitratorModule', address(0))); - eboFinalityModule = IEBOFinalityModule(vm.envOr('SETUP_ADDRESS_EBOFinalityModule', address(0))); - horizonAccountingExtension = - IHorizonAccountingExtension(vm.envOr('SETUP_ADDRESS_HorizonAccountingExtension', address(0))); - councilArbitrator = ICouncilArbitrator(vm.envOr('SETUP_ADDRESS_CouncilArbitrator', address(0))); - eboAccessModule = IEBOAccessModule(vm.envOr('SETUP_ADDRESS_EBOAccessModule', address(0))); - eboRequestCreator = IEBORequestCreator(vm.envOr('SETUP_ADDRESS_EBORequestCreator', address(0))); + if (address(oracle) == address(0)) { + oracle = IOracle(vm.envOr('SETUP_ADDRESS_Oracle', address(0))); + arbitrable = IArbitrable(vm.envOr('SETUP_ADDRESS_Arbitrable', address(0))); + eboRequestModule = IEBORequestModule(vm.envOr('SETUP_ADDRESS_EBORequestModule', address(0))); + bondedResponseModule = IBondedResponseModule(vm.envOr('SETUP_ADDRESS_BondedResponseModule', address(0))); + bondEscalationModule = IBondEscalationModule(vm.envOr('SETUP_ADDRESS_BondEscalationModule', address(0))); + arbitratorModule = IArbitratorModule(vm.envOr('SETUP_ADDRESS_ArbitratorModule', address(0))); + eboFinalityModule = IEBOFinalityModule(vm.envOr('SETUP_ADDRESS_EBOFinalityModule', address(0))); + horizonAccountingExtension = + IHorizonAccountingExtension(vm.envOr('SETUP_ADDRESS_HorizonAccountingExtension', address(0))); + councilArbitrator = ICouncilArbitrator(vm.envOr('SETUP_ADDRESS_CouncilArbitrator', address(0))); + eboAccessModule = IEBOAccessModule(vm.envOr('SETUP_ADDRESS_EBOAccessModule', address(0))); + eboRequestCreator = IEBORequestCreator(vm.envOr('SETUP_ADDRESS_EBORequestCreator', address(0))); + } + + // check if the request creator has been instantiated if (address(eboRequestCreator) == address(0)) { return false; } + _labelContracts(); return true; } - function demo2() public { - uint256 epoch; - string memory chainId = string.concat('eip155:421614'); - console.log('chainId', chainId); - - if (_loadContracts()) {} else { + function setupDemo() public { + // if contracts aren't loaded, we deploy them for the demo + if (!_loadContracts()) { deploy(); - setupEBO(); } setupBalances(); setupAgent(); - vm.startBroadcast(agent); + // demo start + } + + function all() public { + deploy(); + setupDemo(); + go(); + } + + function go() public { + if (!_loadContracts()) { + return; + } + console.log(eboRequestCreator.START_EPOCH()); + console.log(eboRequestCreator.epochManager().currentEpoch()); + vm.startBroadcast(agent); + // uint256 _epoch = epochManager.currentEpoch(); + // return; + console.log(address(eboRequestCreator.epochManager())); + string memory chainId = string.concat('eip155:421614'); + console.log('chainId', chainId); (IOracle.Request memory _request, bytes32 _requestId) = _create(); IAccessController.AccessControl memory _selfAC = IAccessController.AccessControl({user: agent, data: bytes('')}); @@ -329,7 +359,7 @@ contract Deploy is Script { console.log('current epoch', epoch); vm.recordLogs(); - eboRequestCreator.createRequest(epoch, chainId); + eboRequestCreator.createRequest(epochManager.currentEpoch(), chainId); Vm.Log[] memory entries = vm.getRecordedLogs(); assert(entries.length == 2); @@ -370,7 +400,6 @@ contract Deploy is Script { // Set modules data IEBORequestModule.RequestParameters memory _requestParams = _instantiateRequestParams(); - console.logBytes(abi.encode(_requestParams)); IBondedResponseModule.RequestParameters memory _responseParams = _instantiateResponseParams(); IBondEscalationModule.RequestParameters memory _disputeParams = _instantiateDisputeParams(); IArbitratorModule.RequestParameters memory _resolutionParams = _instantiateResolutionParams(); From d26bd1badfeeac6cf80432767c26c3cce0997d12 Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 20 Nov 2024 21:21:25 -0500 Subject: [PATCH 08/15] feat: update external interfaces --- src/interfaces/external/IEpochManager.sol | 31 ++++++++++++++++++--- src/interfaces/external/IHorizonStaking.sol | 3 ++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/interfaces/external/IEpochManager.sol b/src/interfaces/external/IEpochManager.sol index 8444036..b56a96d 100644 --- a/src/interfaces/external/IEpochManager.sol +++ b/src/interfaces/external/IEpochManager.sol @@ -2,9 +2,32 @@ pragma solidity 0.8.26; interface IEpochManager { - /*/////////////////////////////////////////////////////////////// - FUNCTIONS - //////////////////////////////////////////////////////////////*/ + // state variables (should import IEpochManagerStorage?) + function epochLength() external returns (uint256); + function controller() external returns (address); + // -- Configuration -- - function currentEpoch() external view returns (uint256 _currentEpoch); + function setEpochLength(uint256 _epochLength) external; + + // -- Epochs + + function runEpoch() external; + + // -- Getters -- + + function isCurrentEpochRun() external view returns (bool); + + function blockNum() external view returns (uint256); + + function blockHash(uint256 _block) external view returns (bytes32); + + function currentEpoch() external view returns (uint256); + + function currentEpochBlock() external view returns (uint256); + + function currentEpochBlockSinceStart() external view returns (uint256); + + function epochsSince(uint256 _epoch) external view returns (uint256); + + function epochsSinceUpdate() external view returns (uint256); } diff --git a/src/interfaces/external/IHorizonStaking.sol b/src/interfaces/external/IHorizonStaking.sol index d351a11..39412dc 100644 --- a/src/interfaces/external/IHorizonStaking.sol +++ b/src/interfaces/external/IHorizonStaking.sol @@ -23,6 +23,7 @@ interface IHorizonStaking { * @param tokens Amount of tokens to stake */ function stake(uint256 tokens) external; + function deposit(address _token, uint256 tokens) external; /** * @notice Provision stake to a verifier. The tokens will be locked with a thawing period @@ -141,4 +142,6 @@ interface IHorizonStaking { * @return Whether the operator is authorized or not */ function isAuthorized(address serviceProvider, address verifier, address operator) external view returns (bool); + + function minimumIndexerStake() external view returns (uint256); } From 8f2addf9214febe5fdec26a06de80c3286b68993 Mon Sep 17 00:00:00 2001 From: zorzal Date: Thu, 21 Nov 2024 09:14:34 -0500 Subject: [PATCH 09/15] chore: clean up --- script/Deploy.s.sol | 127 +++++++++----------------------------------- 1 file changed, 25 insertions(+), 102 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index b6f37b9..1fedb34 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -90,7 +90,7 @@ contract Deploy is Script { // uint256 public constant ENOUGH_BALANCE = 33e18; - uint256 public constant NOT_ENOUGH_BALANCE = 0.3e18; + uint256 public constant NOT_ENOUGH_BALANCE = 1e18; error Deploy_InvalidPrecomputedAddress(); error Deploy_DeployerNotEnoughBalance(); @@ -138,6 +138,7 @@ contract Deploy is Script { // Deploy `Oracle` oracle = new Oracle(); + console.log('`Oracle` deployed at:', address(oracle)); // Deploy `Arbitrable` @@ -204,9 +205,9 @@ contract Deploy is Script { } function setupBalances() public { - // checks chain id - // check grt balance - // check ether balance + // deployer funds agent + vm.startBroadcast(deployer); + uint256 _balanceD = address(deployer).balance; console.log('deployer balance', _balanceD / 1e18); if (_balanceD < NOT_ENOUGH_BALANCE) { @@ -220,21 +221,19 @@ contract Deploy is Script { console.log('agent balance', address(agent).balance / 1e18); } - // deployer funds agent - vm.startBroadcast(deployer); - console.log('GRT balance of agent %d', graphToken.balanceOf(agent) / 1e18); if (graphToken.balanceOf(agent) < NOT_ENOUGH_BALANCE) { horizonAccountingExtension.GRT().transfer(agent, ENOUGH_BALANCE); } + console.log('GRT balance of agent %d', graphToken.balanceOf(agent) / 1e18); vm.stopBroadcast(); } function setupEBO() public { - string memory chainId = string.concat('eip155:421614'); - vm.startBroadcast(deployer); eboRequestModule.addEBORequestCreator(eboRequestCreator); + + string memory chainId = string.concat('eip155:421614'); eboRequestCreator.addChain(chainId); vm.stopBroadcast(); @@ -262,109 +261,30 @@ contract Deploy is Script { vm.stopBroadcast(); } - // - function _labelContracts() internal { - // convert to a loop? - vm.label(address(oracle), 'Oracle'); - vm.label(address(eboAccessModule), 'eboAccessModule'); - vm.label(address(eboRequestModule), 'RequestModule'); - vm.label(address(bondedResponseModule), 'bondedResponseModule'); - vm.label(address(bondEscalationModule), 'bondEscalationModule'); - vm.label(address(eboRequestCreator), 'EBORequestCreator'); - // - vm.label(address(graphToken), 'GraphToken'); - vm.label(address(horizonStaking), 'HorizonStaking'); - vm.label(address(epochManager), 'EpochManager'); - } - - function _loadContracts() internal returns (bool) { - if (address(oracle) == address(0)) { - oracle = IOracle(vm.envOr('SETUP_ADDRESS_Oracle', address(0))); - arbitrable = IArbitrable(vm.envOr('SETUP_ADDRESS_Arbitrable', address(0))); - eboRequestModule = IEBORequestModule(vm.envOr('SETUP_ADDRESS_EBORequestModule', address(0))); - bondedResponseModule = IBondedResponseModule(vm.envOr('SETUP_ADDRESS_BondedResponseModule', address(0))); - bondEscalationModule = IBondEscalationModule(vm.envOr('SETUP_ADDRESS_BondEscalationModule', address(0))); - arbitratorModule = IArbitratorModule(vm.envOr('SETUP_ADDRESS_ArbitratorModule', address(0))); - eboFinalityModule = IEBOFinalityModule(vm.envOr('SETUP_ADDRESS_EBOFinalityModule', address(0))); - horizonAccountingExtension = - IHorizonAccountingExtension(vm.envOr('SETUP_ADDRESS_HorizonAccountingExtension', address(0))); - councilArbitrator = ICouncilArbitrator(vm.envOr('SETUP_ADDRESS_CouncilArbitrator', address(0))); - eboAccessModule = IEBOAccessModule(vm.envOr('SETUP_ADDRESS_EBOAccessModule', address(0))); - eboRequestCreator = IEBORequestCreator(vm.envOr('SETUP_ADDRESS_EBORequestCreator', address(0))); - } - - // check if the request creator has been instantiated - if (address(eboRequestCreator) == address(0)) { - return false; - } - - _labelContracts(); - return true; - } - function setupDemo() public { - // if contracts aren't loaded, we deploy them for the demo - if (!_loadContracts()) { - deploy(); - } setupBalances(); setupAgent(); - - // demo start } function all() public { deploy(); setupDemo(); - go(); - } - - function go() public { - if (!_loadContracts()) { - return; - } - - console.log(eboRequestCreator.START_EPOCH()); - console.log(eboRequestCreator.epochManager().currentEpoch()); - vm.startBroadcast(agent); - // uint256 _epoch = epochManager.currentEpoch(); - // return; - console.log(address(eboRequestCreator.epochManager())); - string memory chainId = string.concat('eip155:421614'); - console.log('chainId', chainId); - (IOracle.Request memory _request, bytes32 _requestId) = _create(); - - IAccessController.AccessControl memory _selfAC = IAccessController.AccessControl({user: agent, data: bytes('')}); - - IOracle.Response memory _goodResponse = - IOracle.Response({proposer: agent, requestId: _requestId, response: bytes('good-data')}); - IOracle.Response memory _badResponse = - IOracle.Response({proposer: agent, requestId: _requestId, response: bytes('bad-data')}); - oracle.proposeResponse(_request, _badResponse, _selfAC); - - IOracle.Dispute memory _dispute = IOracle.Dispute({ - disputer: agent, - proposer: agent, - requestId: _requestId, - responseId: keccak256(abi.encode(_badResponse)) - }); - oracle.disputeResponse(_request, _badResponse, _dispute, _selfAC); - - vm.stopBroadcast(); } function _create() internal returns (IOracle.Request memory, bytes32) { string memory chainId = string.concat('eip155:421614'); - uint256 epoch = epochManager.currentEpoch(); - console.log('current epoch', epoch); + vm.recordLogs(); + // This is bugged due to a problem in arbitrum block.number estimation in Anvil. eboRequestCreator.createRequest(epochManager.currentEpoch(), chainId); Vm.Log[] memory entries = vm.getRecordedLogs(); + // assert we only have two events emitted assert(entries.length == 2); assert(entries[1].emitter == address(eboRequestCreator)); + // decode the full IOracle.Request bytes32 _requestId = entries[1].topics[1]; (IOracle.Request memory _request) = abi.decode(entries[1].data, (IOracle.Request)); assert(_requestId == keccak256(abi.encode(_request))); @@ -375,21 +295,11 @@ contract Deploy is Script { return (_request, _requestId); } - function _proposeResponse( - IOracle.Request memory _request, - IOracle.Response memory _response, - IAccessController.AccessControl memory _ac - ) internal returns (IOracle.Response memory, bytes32) { - console.log('Proposing bad response'); - return (_response, oracle.proposeResponse(_request, _response, _ac)); - } - function _instantiateRequestData() internal view returns (IOracle.Request memory _requestData) { // Set placeholder nonce _requestData.nonce = 0; // Set requester and modules - _requestData.requester = address(eboRequestCreator); _requestData.accessModule = address(eboAccessModule); _requestData.requestModule = address(eboRequestModule); @@ -463,4 +373,17 @@ contract Deploy is Script { // Precompute address of the target deployment _targetAddress = vm.computeCreateAddress(tx.origin, _targetNonce); } + + function _labelContracts() internal { + // convert to a loop? + vm.label(address(oracle), 'Oracle'); + vm.label(address(eboAccessModule), 'eboAccessModule'); + vm.label(address(eboRequestModule), 'RequestModule'); + vm.label(address(bondedResponseModule), 'bondedResponseModule'); + vm.label(address(bondEscalationModule), 'bondEscalationModule'); + vm.label(address(eboRequestCreator), 'EBORequestCreator'); + vm.label(address(graphToken), 'GraphToken'); + vm.label(address(horizonStaking), 'HorizonStaking'); + vm.label(address(epochManager), 'EpochManager'); + } } From 1864b91d571fc98fa7a50e00755fbe7b08332dba Mon Sep 17 00:00:00 2001 From: zorzal Date: Tue, 26 Nov 2024 09:09:01 -0500 Subject: [PATCH 10/15] feat: remove demo related functions out of the deploy script --- script/Deploy.s.sol | 111 +------------------------------------------- 1 file changed, 2 insertions(+), 109 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 1fedb34..f4d8aaf 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -88,15 +88,7 @@ contract Deploy is Script { uint256 public tyingBuffer; uint256 public disputeDisputeWindow; - // - uint256 public constant ENOUGH_BALANCE = 33e18; - uint256 public constant NOT_ENOUGH_BALANCE = 1e18; - error Deploy_InvalidPrecomputedAddress(); - error Deploy_DeployerNotEnoughBalance(); - - address deployer; - address agent; function setUp() public virtual { // Define The Graph accounts @@ -122,15 +114,10 @@ contract Deploy is Script { disputeDeadline = 10 days; tyingBuffer = 3 days; disputeDisputeWindow = 2 weeks; - - deployer = vm.rememberKey(vm.envUint('DEPLOYER_PRIVATE_KEY')); - agent = vm.rememberKey(vm.envUint('AGENT_PRIVATE_KEY')); - vm.label(deployer, 'deployer'); - vm.label(agent, 'agent'); } function deploy() public { - vm.startBroadcast(deployer); + vm.startBroadcast(); // Precompute address of `EBORequestCreator` IEBORequestCreator _precomputedEBORequestCreator = @@ -167,7 +154,6 @@ contract Deploy is Script { // Deploy `HorizonAccountingExtension` address[] memory _authorizedCallers = _instantiateAuthorizedCallers(); - _authorizedCallers[0] = address(bondedResponseModule); horizonAccountingExtension = new HorizonAccountingExtension({ _horizonStaking: horizonStaking, @@ -199,102 +185,9 @@ contract Deploy is Script { vm.stopBroadcast(); - setupEBO(); - _labelContracts(); } - function setupBalances() public { - // deployer funds agent - vm.startBroadcast(deployer); - - uint256 _balanceD = address(deployer).balance; - console.log('deployer balance', _balanceD / 1e18); - if (_balanceD < NOT_ENOUGH_BALANCE) { - revert Deploy_DeployerNotEnoughBalance(); - } - uint256 _balanceA = address(agent).balance; - if (_balanceA < NOT_ENOUGH_BALANCE) { - agent.call{value: ENOUGH_BALANCE}(''); - console.log('agent balance from %d to %d', _balanceA / 1e18, agent.balance / 1e18); - } else { - console.log('agent balance', address(agent).balance / 1e18); - } - - if (graphToken.balanceOf(agent) < NOT_ENOUGH_BALANCE) { - horizonAccountingExtension.GRT().transfer(agent, ENOUGH_BALANCE); - } - console.log('GRT balance of agent %d', graphToken.balanceOf(agent) / 1e18); - vm.stopBroadcast(); - } - - function setupEBO() public { - vm.startBroadcast(deployer); - - eboRequestModule.addEBORequestCreator(eboRequestCreator); - - string memory chainId = string.concat('eip155:421614'); - eboRequestCreator.addChain(chainId); - - vm.stopBroadcast(); - } - - function setupAgent() public { - /// agent setup - vm.startBroadcast(agent); - - horizonAccountingExtension.GRT().approve(address(horizonAccountingExtension.HORIZON_STAKING()), 20e18); - horizonAccountingExtension.HORIZON_STAKING().stake(1e18); - // approve EBO modules in HAE - horizonAccountingExtension.approveModule(address(bondEscalationModule)); - horizonAccountingExtension.approveModule(address(bondedResponseModule)); - - horizonAccountingExtension.HORIZON_STAKING().provision( - agent, - address(horizonAccountingExtension), - 1e18, - horizonAccountingExtension.MAX_VERIFIER_CUT(), - horizonAccountingExtension.MIN_THAWING_PERIOD() - ); - // horizonAccountingExtension.HORIZON_STAKING().addToProvision(agent, address(horizonAccountingExtension), 0.5e18); - - vm.stopBroadcast(); - } - - function setupDemo() public { - setupBalances(); - setupAgent(); - } - - function all() public { - deploy(); - setupDemo(); - } - - function _create() internal returns (IOracle.Request memory, bytes32) { - string memory chainId = string.concat('eip155:421614'); - - vm.recordLogs(); - - // This is bugged due to a problem in arbitrum block.number estimation in Anvil. - eboRequestCreator.createRequest(epochManager.currentEpoch(), chainId); - - Vm.Log[] memory entries = vm.getRecordedLogs(); - // assert we only have two events emitted - assert(entries.length == 2); - assert(entries[1].emitter == address(eboRequestCreator)); - - // decode the full IOracle.Request - bytes32 _requestId = entries[1].topics[1]; - (IOracle.Request memory _request) = abi.decode(entries[1].data, (IOracle.Request)); - assert(_requestId == keccak256(abi.encode(_request))); - - console.log('request id'); - console.logBytes32(_requestId); - - return (_request, _requestId); - } - function _instantiateRequestData() internal view returns (IOracle.Request memory _requestData) { // Set placeholder nonce _requestData.nonce = 0; @@ -363,7 +256,7 @@ contract Deploy is Script { } function _instantiateAuthorizedCallers() internal view returns (address[] memory _authorizedCallers) { - _authorizedCallers = new address[](2); + _authorizedCallers = new address[](1); _authorizedCallers[0] = address(bondEscalationModule); } From 900e43ab3487e1981d58a792b978770b9f24f5e6 Mon Sep 17 00:00:00 2001 From: zorzal Date: Tue, 26 Nov 2024 09:40:09 -0500 Subject: [PATCH 11/15] revert: remove unused functions in external interface --- src/interfaces/external/IEpochManager.sol | 31 +++------------------ src/interfaces/external/IHorizonStaking.sol | 3 -- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/src/interfaces/external/IEpochManager.sol b/src/interfaces/external/IEpochManager.sol index b56a96d..8444036 100644 --- a/src/interfaces/external/IEpochManager.sol +++ b/src/interfaces/external/IEpochManager.sol @@ -2,32 +2,9 @@ pragma solidity 0.8.26; interface IEpochManager { - // state variables (should import IEpochManagerStorage?) - function epochLength() external returns (uint256); - function controller() external returns (address); - // -- Configuration -- + /*/////////////////////////////////////////////////////////////// + FUNCTIONS + //////////////////////////////////////////////////////////////*/ - function setEpochLength(uint256 _epochLength) external; - - // -- Epochs - - function runEpoch() external; - - // -- Getters -- - - function isCurrentEpochRun() external view returns (bool); - - function blockNum() external view returns (uint256); - - function blockHash(uint256 _block) external view returns (bytes32); - - function currentEpoch() external view returns (uint256); - - function currentEpochBlock() external view returns (uint256); - - function currentEpochBlockSinceStart() external view returns (uint256); - - function epochsSince(uint256 _epoch) external view returns (uint256); - - function epochsSinceUpdate() external view returns (uint256); + function currentEpoch() external view returns (uint256 _currentEpoch); } diff --git a/src/interfaces/external/IHorizonStaking.sol b/src/interfaces/external/IHorizonStaking.sol index 39412dc..d351a11 100644 --- a/src/interfaces/external/IHorizonStaking.sol +++ b/src/interfaces/external/IHorizonStaking.sol @@ -23,7 +23,6 @@ interface IHorizonStaking { * @param tokens Amount of tokens to stake */ function stake(uint256 tokens) external; - function deposit(address _token, uint256 tokens) external; /** * @notice Provision stake to a verifier. The tokens will be locked with a thawing period @@ -142,6 +141,4 @@ interface IHorizonStaking { * @return Whether the operator is authorized or not */ function isAuthorized(address serviceProvider, address verifier, address operator) external view returns (bool); - - function minimumIndexerStake() external view returns (uint256); } From 7321d68e2b8ba10090ee40559aa6aae5d6be5ed1 Mon Sep 17 00:00:00 2001 From: zorzal Date: Tue, 26 Nov 2024 09:51:17 -0500 Subject: [PATCH 12/15] style: remove whitespace --- script/Deploy.s.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index f4d8aaf..066696a 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -125,7 +125,6 @@ contract Deploy is Script { // Deploy `Oracle` oracle = new Oracle(); - console.log('`Oracle` deployed at:', address(oracle)); // Deploy `Arbitrable` @@ -154,7 +153,6 @@ contract Deploy is Script { // Deploy `HorizonAccountingExtension` address[] memory _authorizedCallers = _instantiateAuthorizedCallers(); - horizonAccountingExtension = new HorizonAccountingExtension({ _horizonStaking: horizonStaking, _oracle: oracle, From 641b04d0c535d842a41d27c428e7c6db0cc5bf61 Mon Sep 17 00:00:00 2001 From: zorzal Date: Tue, 26 Nov 2024 10:05:51 -0500 Subject: [PATCH 13/15] chore: remove commented line --- script/Deploy.s.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 066696a..18ab6fe 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -162,7 +162,6 @@ contract Deploy is Script { _maxUsersToCheck: _MAX_USERS_TO_CHECK, _authorizedCallers: _authorizedCallers }); - // vm.label(address(horizonAccountingExtension), 'horizonAccountingExtension'); console.log('`HorizonAccountingExtension` deployed at:', address(horizonAccountingExtension)); // Deploy `CouncilArbitrator` From f9b44f242807d9f7abc95190812b89848d7a4f13 Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 27 Nov 2024 09:09:43 -0500 Subject: [PATCH 14/15] feat: move vm.label below each contract deploy --- script/Deploy.s.sol | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 18ab6fe..2e77743 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -125,30 +125,37 @@ contract Deploy is Script { // Deploy `Oracle` oracle = new Oracle(); + vm.label(address(oracle), 'Oracle'); console.log('`Oracle` deployed at:', address(oracle)); // Deploy `Arbitrable` arbitrable = new Arbitrable(arbitrator, council); + vm.label(address(arbitrable), 'Arbitrable'); console.log('`Arbitrable` deployed at:', address(arbitrable)); // Deploy `EBORequestModule` eboRequestModule = new EBORequestModule(oracle, _precomputedEBORequestCreator, arbitrable); + vm.label(address(eboRequestModule), 'EBORequestModule'); console.log('`EBORequestModule` deployed at:', address(eboRequestModule)); // Deploy `BondedResponseModule` bondedResponseModule = new BondedResponseModule(oracle); + vm.label(address(bondedResponseModule), 'BondedResponseModule'); console.log('`BondedResponseModule` deployed at:', address(bondedResponseModule)); // Deploy `BondEscalationModule` bondEscalationModule = new BondEscalationModule(oracle); + vm.label(address(bondEscalationModule), 'BondEscalationModule'); console.log('`BondEscalationModule` deployed at:', address(bondEscalationModule)); // Deploy `ArbitratorModule` arbitratorModule = new ArbitratorModule(oracle); + vm.label(address(arbitratorModule), 'ArbitratorModule'); console.log('`ArbitratorModule` deployed at:', address(arbitratorModule)); // Deploy `EBOFinalityModule` eboFinalityModule = new EBOFinalityModule(oracle, _precomputedEBORequestCreator, arbitrable); + vm.label(address(eboFinalityModule), 'EBOFinalityModule'); console.log('`EBOFinalityModule` deployed at:', address(eboFinalityModule)); // Deploy `HorizonAccountingExtension` @@ -162,27 +169,29 @@ contract Deploy is Script { _maxUsersToCheck: _MAX_USERS_TO_CHECK, _authorizedCallers: _authorizedCallers }); + vm.label(address(horizonAccountingExtension), 'HorizonAccountingExtension'); console.log('`HorizonAccountingExtension` deployed at:', address(horizonAccountingExtension)); // Deploy `CouncilArbitrator` councilArbitrator = new CouncilArbitrator(arbitratorModule, arbitrable); + vm.label(address(councilArbitrator), 'CouncilArbitrator'); console.log('`CouncilArbitrator` deployed at:', address(councilArbitrator)); // Deploy `EBOAccessModule` eboAccessModule = new EBOAccessModule(oracle, arbitrable, horizonAccountingExtension); + vm.label(address(eboAccessModule), 'EBOAccessModule'); console.log('`EBOAccessModule` deployed at:', address(eboAccessModule)); // Deploy `EBORequestCreator` IOracle.Request memory _requestData = _instantiateRequestData(); eboRequestCreator = new EBORequestCreator(oracle, epochManager, arbitrable, _requestData); + vm.label(address(eboRequestCreator), 'EBORequestCreator'); console.log('`EBORequestCreator` deployed at:', address(eboRequestCreator)); // Assert that `EBORequestCreator` was deployed at the precomputed address if (eboRequestCreator != _precomputedEBORequestCreator) revert Deploy_InvalidPrecomputedAddress(); vm.stopBroadcast(); - - _labelContracts(); } function _instantiateRequestData() internal view returns (IOracle.Request memory _requestData) { @@ -263,17 +272,4 @@ contract Deploy is Script { // Precompute address of the target deployment _targetAddress = vm.computeCreateAddress(tx.origin, _targetNonce); } - - function _labelContracts() internal { - // convert to a loop? - vm.label(address(oracle), 'Oracle'); - vm.label(address(eboAccessModule), 'eboAccessModule'); - vm.label(address(eboRequestModule), 'RequestModule'); - vm.label(address(bondedResponseModule), 'bondedResponseModule'); - vm.label(address(bondEscalationModule), 'bondEscalationModule'); - vm.label(address(eboRequestCreator), 'EBORequestCreator'); - vm.label(address(graphToken), 'GraphToken'); - vm.label(address(horizonStaking), 'HorizonStaking'); - vm.label(address(epochManager), 'EpochManager'); - } } From 6e5b6542cae9f017aa681d1b17bb28d73218454b Mon Sep 17 00:00:00 2001 From: zorzal Date: Wed, 27 Nov 2024 09:43:04 -0500 Subject: [PATCH 15/15] chore: lint --- script/Deploy.s.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 2e77743..d9c6320 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.26; import {IOracle, Oracle} from '@defi-wonderland/prophet-core/solidity/contracts/Oracle.sol'; -import {IAccessController} from '@defi-wonderland/prophet-core/solidity/interfaces/access/IAccessController.sol'; import { BondEscalationModule, IBondEscalationModule @@ -43,8 +42,6 @@ import { _MIN_THAWING_PERIOD } from 'script/Constants.sol'; -import {Vm} from 'forge-std/Vm.sol'; - import 'forge-std/Script.sol'; contract Deploy is Script {