Skip to content

Commit 5711907

Browse files
committed
feat: breakout ignition migration script by runner
Signed-off-by: Tomás Migone <[email protected]>
1 parent ea21739 commit 5711907

File tree

17 files changed

+220
-83
lines changed

17 files changed

+220
-83
lines changed

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
{
22
"$global": {
3+
// Accounts
4+
"governor": "0x72ee30d43Fb5A90B3FE983156C5d2fBE6F6d07B3",
5+
36
// Addresses for contracts deployed in the original Graph Protocol
47
"graphProxyAdminAddress": "0x7474a6cc5fAeDEc620Db0fa8E4da6eD58477042C",
58
"controllerAddress": "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695",
69
"horizonStakingAddress": "0x865365C425f3A593Ffe698D9c4E6707D14d51e08",
710
"epochManagerAddress": "0x88b3C7f37253bAA1A9b95feAd69bD5320585826D",
811
"graphTokenAddress": "0xf8c05dCF59E8B28BFD5eed176C562bEbcfc7Ac04",
912
"graphTokenGatewayAddress": "0xB24Ce0f8c18c4DdDa584A7EeC132F49C966813bb",
13+
"rewardsManagerAddress": "0x1F49caE7669086c8ba53CC35d1E9f80176d67E79",
14+
"curationAddress": "0xDe761f075200E75485F4358978FB4d1dC8644FD5",
1015

1116
// Placeholder address for a standalone Horizon deployment, see README.md for more details
1217
"subgraphServiceAddress": "0x0000000000000000000000000000000000000000"
1318
},
14-
"RewardsManager": {
15-
"rewardsManagerAddress": "0x1F49caE7669086c8ba53CC35d1E9f80176d67E79"
16-
},
17-
"L2Curation": {
18-
"curationAddress": "0xDe761f075200E75485F4358978FB4d1dC8644FD5"
19-
},
20-
"HorizonStaking": {
19+
"HorizonStakingGovernor": {
2120
"maxThawingPeriod": 2419200
2221
},
2322
"GraphPayments": {

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { deployImplementation } from '../proxy/implementation'
33
import { upgradeTransparentUpgradeableProxyNoLoad } from '../proxy/TransparentUpgradeableProxy'
44

55
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
6-
import HorizonProxiesModule, { MigrateHorizonProxiesModule } from './HorizonProxies'
6+
import HorizonProxiesModule, { MigrateHorizonProxiesDeployerModule } from './HorizonProxies'
77

88
import GraphPaymentsArtifact from '../../../build/contracts/contracts/payments/GraphPayments.sol/GraphPayments.json'
99

@@ -36,19 +36,23 @@ export default buildModule('GraphPayments', (m) => {
3636
return { GraphPayments, GraphPaymentsProxyAdmin }
3737
})
3838

39+
// Note that this module requires MigrateHorizonProxiesGovernorModule to be executed first
40+
// The dependency is not made explicit to support the production workflow where the governor is a
41+
// multisig owned by the Graph Council.
42+
// For testnet, the dependency can be made explicit by having a parent module establish it.
3943
export const MigrateGraphPaymentsModule = buildModule('GraphPayments', (m) => {
40-
const { GraphPaymentsProxyAdmin, GraphPaymentsProxy } = m.useModule(MigrateHorizonProxiesModule)
44+
const { GraphPaymentsProxyAdmin, GraphPaymentsProxy } = m.useModule(MigrateHorizonProxiesDeployerModule)
4145
const { Controller } = m.useModule(MigratePeripheryModule)
4246

43-
const governor = m.getAccount(1)
47+
const governor = m.getParameter('governor')
4448
const protocolPaymentCut = m.getParameter('protocolPaymentCut')
4549

4650
// Deploy GraphPayments implementation
4751
const GraphPaymentsImplementation = deployImplementation(m, {
4852
name: 'GraphPayments',
4953
artifact: GraphPaymentsArtifact,
5054
constructorArgs: [Controller, protocolPaymentCut],
51-
}, { after: [MigrateHorizonProxiesModule] })
55+
})
5256

5357
// Upgrade proxy to implementation contract
5458
const GraphPayments = upgradeTransparentUpgradeableProxyNoLoad(m,

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

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { deployGraphProxy } from '../proxy/GraphProxy'
33
import { deployTransparentUpgradeableProxy } from '../proxy/TransparentUpgradeableProxy'
44
import { ethers } from 'ethers'
55

6-
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
6+
import GraphPeripheryModule from '../periphery/periphery'
7+
import { MigrateControllerGovernorModule } from '../periphery/Controller'
78

89
import GraphPaymentsArtifact from '../../../build/contracts/contracts/payments/GraphPayments.sol/GraphPayments.json'
910
import PaymentsEscrowArtifact from '../../../build/contracts/contracts/payments/PaymentsEscrow.sol/PaymentsEscrow.json'
@@ -43,26 +44,39 @@ export default buildModule('HorizonProxies', (m) => {
4344
return { HorizonStakingProxy, GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
4445
})
4546

46-
export const MigrateHorizonProxiesModule = buildModule('HorizonProxies', (m) => {
47-
const { Controller } = m.useModule(MigratePeripheryModule)
48-
49-
const governor = m.getAccount(1)
50-
51-
// Deploy and register GraphPayments proxy
47+
export const MigrateHorizonProxiesDeployerModule = buildModule('HorizonProxiesDeployer', (m) => {
48+
// Deploy GraphPayments proxy
5249
const { Proxy: GraphPaymentsProxy, ProxyAdmin: GraphPaymentsProxyAdmin } = deployTransparentUpgradeableProxy(m, {
5350
name: 'GraphPayments',
5451
artifact: GraphPaymentsArtifact,
5552
})
56-
m.call(Controller, 'setContractProxy',
57-
[ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy],
58-
{ id: 'setContractProxy_GraphPayments', from: governor },
59-
)
6053

61-
// Deploy and registerPaymentsEscrow proxy
54+
// Deploy PaymentsEscrow proxy
6255
const { Proxy: PaymentsEscrowProxy, ProxyAdmin: PaymentsEscrowProxyAdmin } = deployTransparentUpgradeableProxy(m, {
6356
name: 'PaymentsEscrow',
6457
artifact: PaymentsEscrowArtifact,
6558
})
59+
60+
return { GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
61+
})
62+
63+
export const MigrateHorizonProxiesGovernorModule = buildModule('HorizonProxiesGovernor', (m) => {
64+
const { Controller } = m.useModule(MigrateControllerGovernorModule)
65+
const {
66+
GraphPaymentsProxy,
67+
PaymentsEscrowProxy,
68+
GraphPaymentsProxyAdmin,
69+
PaymentsEscrowProxyAdmin,
70+
} = m.useModule(MigrateHorizonProxiesDeployerModule)
71+
72+
const governor = m.getAccount(1)
73+
74+
// Register proxies in controller
75+
m.call(Controller, 'setContractProxy',
76+
[ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy],
77+
{ id: 'setContractProxy_GraphPayments', from: governor },
78+
)
79+
6680
m.call(Controller, 'setContractProxy',
6781
[ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy],
6882
{ id: 'setContractProxy_PaymentsEscrow', from: governor },

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

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

55
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
6-
import HorizonProxiesModule, { MigrateHorizonProxiesModule } from './HorizonProxies'
6+
import HorizonProxiesModule from './HorizonProxies'
7+
import { MigrateGraphProxyAdminModule } from '../periphery/GraphProxyAdmin'
78

89
import ExponentialRebatesArtifact from '../../../build/contracts/contracts/staking/libraries/ExponentialRebates.sol/ExponentialRebates.json'
910
import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json'
@@ -36,7 +37,7 @@ export default buildModule('HorizonStaking', (m) => {
3637
})
3738

3839
// Upgrade proxy to implementation contract
39-
const HorizonStaking = upgradeGraphProxyNoLoad(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
40+
const HorizonStaking = upgradeGraphProxy(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
4041
name: 'HorizonStaking',
4142
artifact: HorizonStakingArtifact,
4243
})
@@ -45,12 +46,13 @@ export default buildModule('HorizonStaking', (m) => {
4546
return { HorizonStaking }
4647
})
4748

48-
// HorizonStaking contract is owned by the governor
49-
export const MigrateHorizonStakingModule = buildModule('HorizonStaking', (m) => {
50-
const { Controller, GraphProxyAdmin } = m.useModule(MigratePeripheryModule)
49+
// Note that this module requires MigrateHorizonProxiesGovernorModule to be executed first
50+
// The dependency is not made explicit to support the production workflow where the governor is a
51+
// multisig owned by the Graph Council.
52+
// For testnet, the dependency can be made explicit by having a parent module establish it.
53+
export const MigrateHorizonStakingDeployerModule = buildModule('HorizonStakingDeployer', (m) => {
54+
const { Controller } = m.useModule(MigratePeripheryModule)
5155

52-
const governor = m.getAccount(1)
53-
const maxThawingPeriod = m.getParameter('maxThawingPeriod')
5456
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
5557
const horizonStakingAddress = m.getParameter('horizonStakingAddress')
5658

@@ -64,7 +66,6 @@ export const MigrateHorizonStakingModule = buildModule('HorizonStaking', (m) =>
6466
libraries: {
6567
ExponentialRebates: ExponentialRebates,
6668
},
67-
after: [MigrateHorizonProxiesModule],
6869
})
6970

7071
// Deploy HorizonStaking implementation
@@ -74,8 +75,18 @@ export const MigrateHorizonStakingModule = buildModule('HorizonStaking', (m) =>
7475
constructorArgs: [Controller, HorizonStakingExtension, subgraphServiceAddress],
7576
})
7677

78+
return { HorizonStakingProxy, HorizonStakingImplementation }
79+
})
80+
81+
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)
86+
const maxThawingPeriod = m.getParameter('maxThawingPeriod')
87+
7788
// Upgrade proxy to implementation contract
78-
const HorizonStaking = upgradeGraphProxyNoLoad(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
89+
const HorizonStaking = upgradeGraphProxy(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
7990
name: 'HorizonStaking',
8091
artifact: HorizonStakingArtifact,
8192
}, { from: governor })

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { deployImplementation } from '../proxy/implementation'
33
import { upgradeTransparentUpgradeableProxyNoLoad } from '../proxy/TransparentUpgradeableProxy'
44

55
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
6-
import HorizonProxiesModule, { MigrateHorizonProxiesModule } from './HorizonProxies'
6+
import HorizonProxiesModule, { MigrateHorizonProxiesDeployerModule } from './HorizonProxies'
77

88
import PaymentsEscrowArtifact from '../../../build/contracts/contracts/payments/PaymentsEscrow.sol/PaymentsEscrow.json'
99

@@ -36,8 +36,12 @@ export default buildModule('PaymentsEscrow', (m) => {
3636
return { PaymentsEscrow, PaymentsEscrowProxyAdmin }
3737
})
3838

39+
// Note that this module requires MigrateHorizonProxiesGovernorModule to be executed first
40+
// The dependency is not made explicit to support the production workflow where the governor is a
41+
// multisig owned by the Graph Council.
42+
// For testnet, the dependency can be made explicit by having a parent module establish it.
3943
export const MigratePaymentsEscrowModule = buildModule('PaymentsEscrow', (m) => {
40-
const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy } = m.useModule(MigrateHorizonProxiesModule)
44+
const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy } = m.useModule(MigrateHorizonProxiesDeployerModule)
4145
const { Controller } = m.useModule(MigratePeripheryModule)
4246

4347
const governor = m.getAccount(1)
@@ -48,7 +52,7 @@ export const MigratePaymentsEscrowModule = buildModule('PaymentsEscrow', (m) =>
4852
name: 'PaymentsEscrow',
4953
artifact: PaymentsEscrowArtifact,
5054
constructorArgs: [Controller, withdrawEscrowThawingPeriod],
51-
}, { after: [MigrateHorizonProxiesModule] })
55+
})
5256

5357
// Upgrade proxy to implementation contract
5458
const PaymentsEscrow = upgradeTransparentUpgradeableProxyNoLoad(m,

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22

33
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
4-
import HorizonProxiesModule, { MigrateHorizonProxiesModule } from './HorizonProxies'
4+
import HorizonProxiesModule from './HorizonProxies'
55

66
import TAPCollectorArtifact from '../../../build/contracts/contracts/payments/collectors/TAPCollector.sol/TAPCollector.json'
77

@@ -22,6 +22,10 @@ export default buildModule('TAPCollector', (m) => {
2222
return { TAPCollector }
2323
})
2424

25+
// Note that this module requires MigrateHorizonProxiesGovernorModule to be executed first
26+
// The dependency is not made explicit to support the production workflow where the governor is a
27+
// multisig owned by the Graph Council.
28+
// For testnet, the dependency can be made explicit by having a parent module establish it.
2529
export const MigrateTAPCollectorModule = buildModule('TAPCollector', (m) => {
2630
const { Controller } = m.useModule(MigratePeripheryModule)
2731

@@ -33,7 +37,6 @@ export const MigrateTAPCollectorModule = buildModule('TAPCollector', (m) => {
3337
'TAPCollector',
3438
TAPCollectorArtifact,
3539
[name, version, Controller, revokeSignerThawingPeriod],
36-
{ after: [MigrateHorizonProxiesModule] },
3740
)
3841

3942
return { TAPCollector }

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22

33
import GraphPaymentsModule, { MigrateGraphPaymentsModule } from './GraphPayments'
4-
import HorizonStakingModule, { MigrateHorizonStakingModule } from './HorizonStaking'
4+
import HorizonStakingModule, { MigrateHorizonStakingDeployerModule } from './HorizonStaking'
55
import PaymentsEscrowModule, { MigratePaymentsEscrowModule } from './PaymentsEscrow'
66
import TAPCollectorModule, { MigrateTAPCollectorModule } from './TAPCollector'
77

@@ -15,7 +15,7 @@ export default buildModule('GraphHorizon_Core', (m) => {
1515
})
1616

1717
export const MigrateHorizonCoreModule = buildModule('GraphHorizon_Core', (m) => {
18-
const { HorizonStaking } = m.useModule(MigrateHorizonStakingModule)
18+
const { HorizonStakingProxy: HorizonStaking } = m.useModule(MigrateHorizonStakingDeployerModule)
1919
const { GraphPayments } = m.useModule(MigrateGraphPaymentsModule)
2020
const { PaymentsEscrow } = m.useModule(MigratePaymentsEscrowModule)
2121
const { TAPCollector } = m.useModule(MigrateTAPCollectorModule)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
2+
3+
import { MigrateHorizonProxiesDeployerModule } from '../core/HorizonProxies'
4+
5+
export default buildModule('GraphHorizon_Migrate_1', (m) => {
6+
const {
7+
GraphPaymentsProxy,
8+
PaymentsEscrowProxy,
9+
GraphPaymentsProxyAdmin,
10+
PaymentsEscrowProxyAdmin,
11+
} = m.useModule(MigrateHorizonProxiesDeployerModule)
12+
13+
return {
14+
GraphPaymentsProxy,
15+
PaymentsEscrowProxy,
16+
GraphPaymentsProxyAdmin,
17+
PaymentsEscrowProxyAdmin,
18+
}
19+
})
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
2+
3+
import { MigrateHorizonProxiesGovernorModule } from '../core/HorizonProxies'
4+
5+
export default buildModule('GraphHorizon_Migrate_2', (m) => {
6+
const {
7+
GraphPaymentsProxy,
8+
PaymentsEscrowProxy,
9+
GraphPaymentsProxyAdmin,
10+
PaymentsEscrowProxyAdmin,
11+
} = m.useModule(MigrateHorizonProxiesGovernorModule)
12+
13+
return {
14+
GraphPaymentsProxy,
15+
PaymentsEscrowProxy,
16+
GraphPaymentsProxyAdmin,
17+
PaymentsEscrowProxyAdmin,
18+
}
19+
})

packages/horizon/ignition/modules/migrate.ts renamed to packages/horizon/ignition/modules/migrate/migrate-3.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22

3-
import { MigrateHorizonCoreModule } from './core/core'
4-
import { MigratePeripheryModule } from './periphery/periphery'
3+
import { MigrateHorizonCoreModule } from '../core/core'
4+
import { MigratePeripheryModule } from '../periphery/periphery'
55

6-
export default buildModule('GraphHorizon_Migrate', (m) => {
6+
export default buildModule('GraphHorizon_Migrate_3', (m) => {
77
const {
88
L2Curation,
99
RewardsManager,

0 commit comments

Comments
 (0)