Skip to content

Commit 8c29d86

Browse files
committed
fix: further decouple governor modules from deployer modules
Signed-off-by: Tomás Migone <[email protected]>
1 parent a12bb20 commit 8c29d86

File tree

11 files changed

+86
-63
lines changed

11 files changed

+86
-63
lines changed

packages/horizon/ignition/configs/horizon-migrate.default.json5

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@
1313
"rewardsManagerAddress": "0x1F49caE7669086c8ba53CC35d1E9f80176d67E79",
1414
"curationAddress": "0xDe761f075200E75485F4358978FB4d1dC8644FD5",
1515

16-
// Placeholder address for a standalone Horizon deployment, see README.md for more details
16+
// Must be set for step 4 of the migration
1717
"subgraphServiceAddress": "0x0000000000000000000000000000000000000000"
1818
},
19-
"HorizonStakingGovernor": {
20-
"maxThawingPeriod": 2419200
21-
},
22-
"GraphPayments": {
19+
"GraphPayments": {
2320
"protocolPaymentCut": 10000
2421
},
2522
"PaymentsEscrow": {
@@ -29,5 +26,23 @@
2926
"eip712Name": "TAPCollector",
3027
"eip712Version": "1",
3128
"revokeSignerThawingPeriod": 10000
29+
},
30+
"HorizonProxiesGovernor": {
31+
// These addresses must be set for step 2 of the migration
32+
"graphPaymentsAddress": "0x0000000000000000000000000000000000000000",
33+
"paymentsEscrowAddress": "0x0000000000000000000000000000000000000000"
34+
},
35+
"HorizonStakingGovernor": {
36+
"maxThawingPeriod": 2419200,
37+
// Must be set for step 4 of the migration
38+
"horizonStakingImplementationAddress": "0x0000000000000000000000000000000000000000"
39+
},
40+
"L2CurationGovernor": {
41+
// Must be set for step 4 of the migration
42+
"curationImplementationAddress": "0x0000000000000000000000000000000000000000"
43+
},
44+
"RewardsManagerGovernor": {
45+
// Must be set for step 4 of the migration
46+
"rewardsManagerImplementationAddress": "0x0000000000000000000000000000000000000000"
3247
}
3348
}

packages/horizon/ignition/configs/horizon.default.json5

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"$global": {
33
"pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC",
4+
45
// Placeholder address for a standalone Horizon deployment, see README.md for more details
56
"subgraphServiceAddress": "0x0000000000000000000000000000000000000000"
67
},

packages/horizon/ignition/modules/core/HorizonProxies.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,25 +62,20 @@ export const MigrateHorizonProxiesDeployerModule = buildModule('HorizonProxiesDe
6262

6363
export const MigrateHorizonProxiesGovernorModule = buildModule('HorizonProxiesGovernor', (m) => {
6464
const { Controller } = m.useModule(MigrateControllerGovernorModule)
65-
const {
66-
GraphPaymentsProxy,
67-
PaymentsEscrowProxy,
68-
GraphPaymentsProxyAdmin,
69-
PaymentsEscrowProxyAdmin,
70-
} = m.useModule(MigrateHorizonProxiesDeployerModule)
7165

72-
const governor = m.getAccount(1)
66+
const graphPaymentsAddress = m.getParameter('graphPaymentsAddress')
67+
const paymentsEscrowAddress = m.getParameter('paymentsEscrowAddress')
7368

7469
// Register proxies in controller
7570
m.call(Controller, 'setContractProxy',
76-
[ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy],
77-
{ id: 'setContractProxy_GraphPayments', from: governor },
71+
[ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), graphPaymentsAddress],
72+
{ id: 'setContractProxy_GraphPayments' },
7873
)
7974

8075
m.call(Controller, 'setContractProxy',
81-
[ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy],
82-
{ id: 'setContractProxy_PaymentsEscrow', from: governor },
76+
[ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), paymentsEscrowAddress],
77+
{ id: 'setContractProxy_PaymentsEscrow' },
8378
)
8479

85-
return { GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
80+
return { }
8681
})

packages/horizon/ignition/modules/core/HorizonStaking.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1+
import { acceptUpgradeGraphProxy, upgradeGraphProxy } from '../proxy/GraphProxy'
12
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
23
import { deployImplementation } from '../proxy/implementation'
3-
import { upgradeGraphProxy } from '../proxy/GraphProxy'
44

55
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
66
import HorizonProxiesModule from './HorizonProxies'
7-
import { MigrateGraphProxyAdminModule } from '../periphery/GraphProxyAdmin'
87

98
import ExponentialRebatesArtifact from '../../../build/contracts/contracts/staking/libraries/ExponentialRebates.sol/ExponentialRebates.json'
9+
import GraphProxyAdminArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxyAdmin.sol/GraphProxyAdmin.json'
1010
import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json'
1111
import HorizonStakingArtifact from '../../../build/contracts/contracts/staking/HorizonStaking.sol/HorizonStaking.json'
1212
import HorizonStakingExtensionArtifact from '../../../build/contracts/contracts/staking/HorizonStakingExtension.sol/HorizonStakingExtension.json'
@@ -79,18 +79,21 @@ export const MigrateHorizonStakingDeployerModule = buildModule('HorizonStakingDe
7979
})
8080

8181
export const MigrateHorizonStakingGovernorModule = buildModule('HorizonStakingGovernor', (m) => {
82-
const { GraphProxyAdmin } = m.useModule(MigrateGraphProxyAdminModule)
83-
const { HorizonStakingProxy, HorizonStakingImplementation } = m.useModule(MigrateHorizonStakingDeployerModule)
84-
85-
const governor = m.getAccount(1)
8682
const maxThawingPeriod = m.getParameter('maxThawingPeriod')
83+
const graphProxyAdminAddress = m.getParameter('graphProxyAdminAddress')
84+
const horizonStakingAddress = m.getParameter('horizonStakingAddress')
85+
const horizonStakingImplementationAddress = m.getParameter('horizonStakingImplementationAddress')
86+
87+
const HorizonStakingImplementation = m.contractAt('HorizonStakingImplementation', HorizonStakingArtifact, horizonStakingImplementationAddress)
88+
const HorizonStakingProxy = m.contractAt('HorizonStakingProxy', GraphProxyArtifact, horizonStakingAddress)
89+
const GraphProxyAdmin = m.contractAt('GraphProxyAdmin', GraphProxyAdminArtifact, graphProxyAdminAddress)
8790

8891
// Upgrade proxy to implementation contract
89-
const HorizonStaking = upgradeGraphProxy(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
92+
const HorizonStaking = acceptUpgradeGraphProxy(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
9093
name: 'HorizonStaking',
9194
artifact: HorizonStakingArtifact,
92-
}, { from: governor })
93-
m.call(HorizonStaking, 'setMaxThawingPeriod', [maxThawingPeriod], { from: governor })
95+
})
96+
m.call(HorizonStaking, 'setMaxThawingPeriod', [maxThawingPeriod])
9497

9598
return { HorizonStaking }
9699
})

packages/horizon/ignition/modules/migrate/migrate-2.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,7 @@ import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
33
import { MigrateHorizonProxiesGovernorModule } from '../core/HorizonProxies'
44

55
export default buildModule('GraphHorizon_Migrate_2', (m) => {
6-
const {
7-
GraphPaymentsProxy,
8-
PaymentsEscrowProxy,
9-
GraphPaymentsProxyAdmin,
10-
PaymentsEscrowProxyAdmin,
11-
} = m.useModule(MigrateHorizonProxiesGovernorModule)
6+
m.useModule(MigrateHorizonProxiesGovernorModule)
127

13-
return {
14-
GraphPaymentsProxy,
15-
PaymentsEscrowProxy,
16-
GraphPaymentsProxyAdmin,
17-
PaymentsEscrowProxyAdmin,
18-
}
8+
return { }
199
})

packages/horizon/ignition/modules/periphery/Controller.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
33
import { ethers } from 'ethers'
44

5-
import { MigrateGraphProxyAdminModule } from './GraphProxyAdmin'
6-
75
import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json'
86

97
export default buildModule('Controller', (m) => {
@@ -27,14 +25,14 @@ export const MigrateControllerDeployerModule = buildModule('ControllerDeployer',
2725
})
2826

2927
export const MigrateControllerGovernorModule = buildModule('ControllerGovernor', (m) => {
30-
const { GraphProxyAdmin } = m.useModule(MigrateGraphProxyAdminModule)
3128
const { Controller } = m.useModule(MigrateControllerDeployerModule)
32-
const governor = m.getAccount(1)
29+
30+
const graphProxyAdminAddress = m.getParameter('graphProxyAdminAddress')
3331

3432
// GraphProxyAdmin was not registered in the controller in the original protocol
3533
m.call(Controller, 'setContractProxy',
36-
[ethers.keccak256(ethers.toUtf8Bytes('GraphProxyAdmin')), GraphProxyAdmin],
37-
{ id: 'setContractProxy_GraphProxyAdmin', from: governor },
34+
[ethers.keccak256(ethers.toUtf8Bytes('GraphProxyAdmin')), graphProxyAdminAddress],
35+
{ id: 'setContractProxy_GraphProxyAdmin' },
3836
)
3937

4038
return { Controller }

packages/horizon/ignition/modules/periphery/Curation.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import { acceptUpgradeGraphProxy, deployWithGraphProxy } from '../proxy/GraphProxy'
12
import { buildModule, IgnitionModuleBuilder } from '@nomicfoundation/ignition-core'
2-
import { deployWithGraphProxy, upgradeGraphProxy } from '../proxy/GraphProxy'
33
import { deployImplementation } from '../proxy/implementation'
44

5-
import GraphProxyAdminModule, { MigrateGraphProxyAdminModule } from './GraphProxyAdmin'
65
import ControllerModule from './Controller'
6+
import GraphProxyAdminModule from './GraphProxyAdmin'
77

88
import CurationArtifact from '@graphprotocol/contracts/build/contracts/contracts/l2/curation/L2Curation.sol/L2Curation.json'
99
import GraphCurationTokenArtifact from '@graphprotocol/contracts/build/contracts/contracts/curation/GraphCurationToken.sol/GraphCurationToken.json'
10+
import GraphProxyAdminArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxyAdmin.sol/GraphProxyAdmin.json'
1011
import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json'
1112

1213
export default buildModule('L2Curation', (m) => {
@@ -44,19 +45,22 @@ export const MigrateCurationDeployerModule = buildModule('L2CurationDeployer', (
4445
})
4546

4647
export const MigrateCurationGovernorModule = buildModule('L2CurationGovernor', (m: IgnitionModuleBuilder) => {
47-
const { GraphProxyAdmin } = m.useModule(MigrateGraphProxyAdminModule)
48-
const { L2CurationProxy, L2CurationImplementation } = m.useModule(MigrateCurationDeployerModule)
49-
50-
const governor = m.getAccount(1)
48+
const curationAddress = m.getParameter('curationAddress')
49+
const curationImplementationAddress = m.getParameter('curationImplementationAddress')
5150
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
51+
const graphProxyAdminAddress = m.getParameter('graphProxyAdminAddress')
52+
53+
const GraphProxyAdmin = m.contractAt('GraphProxyAdmin', GraphProxyAdminArtifact, graphProxyAdminAddress)
54+
const L2CurationProxy = m.contractAt('L2CurationProxy', GraphProxyArtifact, curationAddress)
55+
const L2CurationImplementation = m.contractAt('L2CurationImplementation', CurationArtifact, curationImplementationAddress)
5256

5357
const implementationMetadata = {
5458
name: 'L2Curation',
5559
artifact: CurationArtifact,
5660
}
5761

58-
const L2Curation = upgradeGraphProxy(m, GraphProxyAdmin, L2CurationProxy, L2CurationImplementation, implementationMetadata, { from: governor })
59-
m.call(L2Curation, 'setSubgraphService', [subgraphServiceAddress], { from: governor })
62+
const L2Curation = acceptUpgradeGraphProxy(m, GraphProxyAdmin, L2CurationProxy, L2CurationImplementation, implementationMetadata)
63+
m.call(L2Curation, 'setSubgraphService', [subgraphServiceAddress])
6064

6165
return { L2Curation }
6266
})

packages/horizon/ignition/modules/periphery/RewardsManager.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import { acceptUpgradeGraphProxy, deployWithGraphProxy } from '../proxy/GraphProxy'
12
import { buildModule, IgnitionModuleBuilder } from '@nomicfoundation/ignition-core'
2-
import { deployWithGraphProxy, upgradeGraphProxy } from '../proxy/GraphProxy'
33
import { deployImplementation } from '../proxy/implementation'
44

5-
import GraphProxyAdminModule, { MigrateGraphProxyAdminModule } from './GraphProxyAdmin'
65
import ControllerModule from './Controller'
6+
import GraphProxyAdminModule from './GraphProxyAdmin'
77

8+
import GraphProxyAdminArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxyAdmin.sol/GraphProxyAdmin.json'
89
import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json'
910
import RewardsManagerArtifact from '@graphprotocol/contracts/build/contracts/contracts/rewards/RewardsManager.sol/RewardsManager.json'
1011

@@ -43,19 +44,23 @@ export const MigrateRewardsManagerDeployerModule = buildModule('RewardsManagerDe
4344
})
4445

4546
export const MigrateRewardsManagerGovernorModule = buildModule('RewardsManagerGovernor', (m: IgnitionModuleBuilder) => {
46-
const { GraphProxyAdmin } = m.useModule(MigrateGraphProxyAdminModule)
47-
const { RewardsManagerProxy, RewardsManagerImplementation } = m.useModule(MigrateRewardsManagerDeployerModule)
47+
const rewardsManagerAddress = m.getParameter('rewardsManagerAddress')
48+
const rewardsManagerImplementationAddress = m.getParameter('rewardsManagerImplementationAddress')
49+
const graphProxyAdminAddress = m.getParameter('graphProxyAdminAddress')
50+
51+
const GraphProxyAdmin = m.contractAt('GraphProxyAdmin', GraphProxyAdminArtifact, graphProxyAdminAddress)
52+
const RewardsManagerProxy = m.contractAt('RewardsManagerProxy', GraphProxyArtifact, rewardsManagerAddress)
53+
const RewardsManagerImplementation = m.contractAt('RewardsManagerImplementation', RewardsManagerArtifact, rewardsManagerImplementationAddress)
4854

49-
const governor = m.getAccount(1)
5055
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
5156

5257
const implementationMetadata = {
5358
name: 'RewardsManager',
5459
artifact: RewardsManagerArtifact,
5560
}
5661

57-
const RewardsManager = upgradeGraphProxy(m, GraphProxyAdmin, RewardsManagerProxy, RewardsManagerImplementation, implementationMetadata, { from: governor })
58-
m.call(RewardsManager, 'setSubgraphService', [subgraphServiceAddress], { from: governor })
62+
const RewardsManager = acceptUpgradeGraphProxy(m, GraphProxyAdmin, RewardsManagerProxy, RewardsManagerImplementation, implementationMetadata)
63+
m.call(RewardsManager, 'setSubgraphService', [subgraphServiceAddress])
5964

6065
return { RewardsManager }
6166
})

packages/horizon/ignition/modules/proxy/GraphProxy.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export function deployGraphProxy(
2727
}
2828
}
2929

30-
// Same as upgradeGraphProxy, but without loading the proxy contracts
3130
export function upgradeGraphProxy(
3231
m: IgnitionModuleBuilder,
3332
proxyAdmin: CallableContractFuture<string>,
@@ -42,6 +41,19 @@ export function upgradeGraphProxy(
4241
return loadProxyWithABI(m, proxy, metadata, { ...options, after: [acceptCall] })
4342
}
4443

44+
export function acceptUpgradeGraphProxy(
45+
m: IgnitionModuleBuilder,
46+
proxyAdmin: CallableContractFuture<string>,
47+
proxy: CallableContractFuture<string>,
48+
implementation: ContractFuture<string>,
49+
metadata: ImplementationMetadata,
50+
options?: ContractOptions,
51+
) {
52+
const acceptCall = m.call(proxyAdmin, 'acceptProxy', [implementation, proxy], { ...options })
53+
54+
return loadProxyWithABI(m, proxy, metadata, { ...options, after: [acceptCall] })
55+
}
56+
4557
export function deployWithGraphProxy(
4658
m: IgnitionModuleBuilder,
4759
proxyAdmin: CallableContractFuture<string>,

packages/horizon/scripts/migrate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import MigrateModuleStep4 from '../ignition/modules/migrate/migrate-4'
88

99
async function main() {
1010
console.log(getHorizonBanner())
11-
const HorizonMigrateConfig = IgnitionHelper.loadConfig('./ignition/configs/', 'horizon-migrate', hre.network.name)
11+
const HorizonMigrateConfig = IgnitionHelper.loadConfig('./ignition/configs/', 'horizon-migrate', `horizon-${hre.network.name}`)
1212

1313
const signers = await hre.ethers.getSigners()
1414
const deployer = signers[0]

0 commit comments

Comments
 (0)