Skip to content

Commit 65b6d26

Browse files
committed
feat: add migrate ignition modules
Signed-off-by: Tomás Migone <[email protected]>
1 parent bfb85ca commit 65b6d26

16 files changed

+226
-227
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"$global": {
3-
"isMigrate": true,
43
"graphProxyAdminAddress": "0x7474a6cc5fAeDEc620Db0fa8E4da6eD58477042C",
54
"controllerAddress": "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695",
65
"horizonStakingProxyAddress": "0x865365C425f3A593Ffe698D9c4E6707D14d51e08",

packages/horizon/ignition/configs/horizon.hardhat.json5

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"$global": {
3-
"isMigrate": false,
43
"governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0",
54
"pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC",
65
"subgraphAvailabilityOracle": "0xd03ea8624C8C5987235048901fB614fDcA89b117",

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22
import { deployImplementation } from '../proxy/implementation'
33
import { upgradeTransparentUpgradeableProxyNoLoad } from '../proxy/TransparentUpgradeableProxy'
44

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

8+
import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json'
89
import GraphPaymentsArtifact from '../../../build/contracts/contracts/payments/GraphPayments.sol/GraphPayments.json'
910

1011
export default buildModule('GraphPayments', (m) => {
@@ -32,3 +33,31 @@ export default buildModule('GraphPayments', (m) => {
3233

3334
return { GraphPayments, GraphPaymentsProxyAdmin }
3435
})
36+
37+
export const MigrateGraphPaymentsModule = buildModule('GraphPayments', (m) => {
38+
const { GraphPaymentsProxyAdmin, GraphPaymentsProxy } = m.useModule(MigrateHorizonProxiesModule)
39+
40+
const protocolPaymentCut = m.getParameter('protocolPaymentCut')
41+
const controllerAddress = m.getParameter('controllerAddress')
42+
43+
const Controller = m.contractAt('Controller', ControllerArtifact, controllerAddress)
44+
45+
// Deploy GraphPayments implementation
46+
const GraphPaymentsImplementation = deployImplementation(m, {
47+
name: 'GraphPayments',
48+
artifact: GraphPaymentsArtifact,
49+
constructorArgs: [Controller, protocolPaymentCut],
50+
}, { after: [MigrateHorizonProxiesModule, MigratePeripheryModule] })
51+
52+
// Upgrade proxy to implementation contract
53+
const GraphPayments = upgradeTransparentUpgradeableProxyNoLoad(m,
54+
GraphPaymentsProxyAdmin,
55+
GraphPaymentsProxy,
56+
GraphPaymentsImplementation, {
57+
name: 'GraphPayments',
58+
artifact: GraphPaymentsArtifact,
59+
initArgs: [],
60+
})
61+
62+
return { GraphPayments, GraphPaymentsProxyAdmin }
63+
})

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

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ethers } from 'ethers'
55

66
import GraphPeripheryModule from '../periphery/periphery'
77

8+
import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json'
89
import GraphPaymentsArtifact from '../../../build/contracts/contracts/payments/GraphPayments.sol/GraphPayments.json'
910
import PaymentsEscrowArtifact from '../../../build/contracts/contracts/payments/PaymentsEscrow.sol/PaymentsEscrow.json'
1011

@@ -20,36 +21,54 @@ export default buildModule('HorizonProxies', (m) => {
2021
{ id: 'setContractProxy_HorizonStaking' },
2122
)
2223

23-
// Deploy GraphPayments proxy
24+
// Deploy and register GraphPayments proxy
2425
const { Proxy: GraphPaymentsProxy, ProxyAdmin: GraphPaymentsProxyAdmin } = deployTransparentUpgradeableProxy(m, {
2526
name: 'GraphPayments',
2627
artifact: GraphPaymentsArtifact,
2728
})
28-
m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy], { id: 'setContractProxy_GraphPayments' })
29+
m.call(Controller, 'setContractProxy',
30+
[ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy],
31+
{ id: 'setContractProxy_GraphPayments' },
32+
)
2933

30-
// Deploy PaymentsEscrow proxy
34+
// Deploy and register PaymentsEscrow proxy
3135
const { Proxy: PaymentsEscrowProxy, ProxyAdmin: PaymentsEscrowProxyAdmin } = deployTransparentUpgradeableProxy(m, {
3236
name: 'PaymentsEscrow',
3337
artifact: PaymentsEscrowArtifact,
3438
})
35-
m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy], { id: 'setContractProxy_PaymentsEscrow' })
39+
m.call(Controller, 'setContractProxy',
40+
[ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy],
41+
{ id: 'setContractProxy_PaymentsEscrow' },
42+
)
3643

3744
return { HorizonStakingProxy, GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
3845
})
3946

40-
// export const UpgradeHorizonProxiesModule = buildModule('HorizonProxies', (m) => {
41-
// const governor = m.getAccount(1)
47+
export const MigrateHorizonProxiesModule = buildModule('HorizonProxies', (m) => {
48+
const governor = m.getAccount(1)
49+
const controllerAddress = m.getParameter('controllerAddress')
4250

43-
// const controllerAddress = m.getParameter('controllerAddress')
51+
const Controller = m.contractAt('Controller', ControllerArtifact, controllerAddress)
4452

45-
// // Deploy proxies for payments contracts using OZ TransparentUpgradeableProxy
46-
// const { Proxy: GraphPaymentsProxy, ProxyAdmin: GraphPaymentsProxyAdmin } = deployWithOZProxy(m, 'GraphPayments')
47-
// const { Proxy: PaymentsEscrowProxy, ProxyAdmin: PaymentsEscrowProxyAdmin } = deployWithOZProxy(m, 'PaymentsEscrow')
53+
// Deploy and register GraphPayments proxy
54+
const { Proxy: GraphPaymentsProxy, ProxyAdmin: GraphPaymentsProxyAdmin } = deployTransparentUpgradeableProxy(m, {
55+
name: 'GraphPayments',
56+
artifact: GraphPaymentsArtifact,
57+
})
58+
m.call(Controller, 'setContractProxy',
59+
[ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy],
60+
{ id: 'setContractProxy_GraphPayments', from: governor },
61+
)
4862

49-
// // Register the proxies in the controller
50-
// const Controller = m.contractAt('Controller', controllerAddress, { id: 'Controller' })
51-
// m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy], { id: 'setContractProxy_GraphPayments', from: governor })
52-
// m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy], { id: 'setContractProxy_PaymentsEscrow', from: governor })
63+
// Deploy and registerPaymentsEscrow proxy
64+
const { Proxy: PaymentsEscrowProxy, ProxyAdmin: PaymentsEscrowProxyAdmin } = deployTransparentUpgradeableProxy(m, {
65+
name: 'PaymentsEscrow',
66+
artifact: PaymentsEscrowArtifact,
67+
})
68+
m.call(Controller, 'setContractProxy',
69+
[ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy],
70+
{ id: 'setContractProxy_PaymentsEscrow', from: governor },
71+
)
5372

54-
// return { GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
55-
// })
73+
return { GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
74+
})
Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22
import { deployImplementation } from '../proxy/implementation'
33
import { upgradeGraphProxyNoLoad } from '../proxy/GraphProxy'
4-
import { ethers } from 'ethers'
54

6-
import GraphPeripheryModule from '../periphery/periphery'
7-
import HorizonProxiesModule from './HorizonProxies'
5+
import GraphPeripheryModule, { MigratePeripheryModule } from '../periphery/periphery'
6+
import HorizonProxiesModule, { MigrateHorizonProxiesModule } from './HorizonProxies'
87

8+
import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json'
99
import ExponentialRebatesArtifact from '../../../build/contracts/contracts/staking/libraries/ExponentialRebates.sol/ExponentialRebates.json'
10+
import GraphProxyAdminArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxyAdmin.sol/GraphProxyAdmin.json'
11+
import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json'
1012
import HorizonStakingArtifact from '../../../build/contracts/contracts/staking/HorizonStaking.sol/HorizonStaking.json'
1113
import HorizonStakingExtensionArtifact from '../../../build/contracts/contracts/staking/HorizonStakingExtension.sol/HorizonStakingExtension.json'
1214

@@ -15,6 +17,7 @@ export default buildModule('HorizonStaking', (m) => {
1517
const { HorizonStakingProxy } = m.useModule(HorizonProxiesModule)
1618

1719
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
20+
const maxThawingPeriod = m.getParameter('maxThawingPeriod')
1821

1922
// Deploy HorizonStakingExtension - requires periphery and proxies to be registered in the controller
2023
const ExponentialRebates = m.library('ExponentialRebates', ExponentialRebatesArtifact)
@@ -39,40 +42,48 @@ export default buildModule('HorizonStaking', (m) => {
3942
name: 'HorizonStaking',
4043
artifact: HorizonStakingArtifact,
4144
})
45+
m.call(HorizonStaking, 'setMaxThawingPeriod', [maxThawingPeriod])
4246

4347
return { HorizonStaking }
4448
})
4549

46-
// export const UpgradeHorizonStakingModule = buildModule('HorizonStaking', (m) => {
47-
// const { Controller, GraphProxyAdmin } = m.useModule(GraphPeripheryModule)
48-
// const { HorizonStakingProxy } = m.useModule(HorizonProxiesModule)
49-
// const { HorizonStakingExtension } = m.useModule(HorizonStakingExtensionModule)
50+
// HorizonStaking contract is owned by the governor
51+
export const MigrateHorizonStakingModule = buildModule('HorizonStaking', (m) => {
52+
const governor = m.getAccount(1)
53+
const maxThawingPeriod = m.getParameter('maxThawingPeriod')
54+
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
55+
const horizonStakingProxyAddress = m.getParameter('horizonStakingProxyAddress')
56+
const controllerAddress = m.getParameter('controllerAddress')
57+
const graphProxyAdminAddress = m.getParameter('graphProxyAdminAddress')
5058

51-
// const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
59+
const Controller = m.contractAt('Controller', ControllerArtifact, controllerAddress)
60+
const GraphProxyAdmin = m.contractAt('GraphProxyAdmin', GraphProxyAdminArtifact, graphProxyAdminAddress)
61+
const HorizonStakingProxy = m.contractAt('HorizonStakingProxy', GraphProxyArtifact, horizonStakingProxyAddress)
5262

53-
// // Deploy HorizonStaking implementation
54-
// const HorizonStakingImplementation = m.contract('HorizonStaking',
55-
// HorizonStakingArtifact,
56-
// [
57-
// Controller,
58-
// HorizonStakingExtension,
59-
// subgraphServiceAddress,
60-
// ],
61-
// {
62-
// after: [GraphPeripheryModule, HorizonProxiesModule],
63-
// },
64-
// )
63+
// Deploy HorizonStakingExtension - requires periphery and proxies to be registered in the controller
64+
const ExponentialRebates = m.library('ExponentialRebates', ExponentialRebatesArtifact)
65+
const HorizonStakingExtension = m.contract('HorizonStakingExtension',
66+
HorizonStakingExtensionArtifact,
67+
[Controller, subgraphServiceAddress], {
68+
libraries: {
69+
ExponentialRebates: ExponentialRebates,
70+
},
71+
after: [MigrateHorizonProxiesModule, MigratePeripheryModule],
72+
})
6573

66-
// // Upgrade proxy to implementation contract
67-
// const isMigrate = m.getParameter('isMigrate')
68-
// const governor = m.getAccount(1)
69-
// const options = isMigrate ? { from: governor } : {}
70-
// const upgradeCall = m.call(GraphProxyAdmin, 'upgrade', [HorizonStakingProxy, HorizonStakingImplementation], options)
71-
// const acceptCall = m.call(GraphProxyAdmin, 'acceptProxy', [HorizonStakingImplementation, HorizonStakingProxy], { ...options, after: [upgradeCall] })
74+
// Deploy HorizonStaking implementation
75+
const HorizonStakingImplementation = deployImplementation(m, {
76+
name: 'HorizonStaking',
77+
artifact: HorizonStakingArtifact,
78+
constructorArgs: [Controller, HorizonStakingExtension, subgraphServiceAddress],
79+
})
7280

73-
// // Load contract with implementation ABI
74-
// const HorizonStaking = m.contractAt('HorizonStaking', HorizonStakingArtifact, HorizonStakingProxy, { after: [acceptCall], id: 'HorizonStaking_Instance' })
75-
// m.call(HorizonStaking, 'setMaxThawingPeriod', [m.getParameter('maxThawingPeriod')], options)
81+
// Upgrade proxy to implementation contract
82+
const HorizonStaking = upgradeGraphProxyNoLoad(m, GraphProxyAdmin, HorizonStakingProxy, HorizonStakingImplementation, {
83+
name: 'HorizonStaking',
84+
artifact: HorizonStakingArtifact,
85+
}, { from: governor })
86+
m.call(HorizonStaking, 'setMaxThawingPeriod', [maxThawingPeriod], { from: governor })
7687

77-
// return { HorizonStakingProxy, HorizonStakingImplementation, HorizonStaking }
78-
// })
88+
return { HorizonStaking }
89+
})

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22
import { deployImplementation } from '../proxy/implementation'
33
import { upgradeTransparentUpgradeableProxyNoLoad } from '../proxy/TransparentUpgradeableProxy'
44

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

8+
import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json'
89
import PaymentsEscrowArtifact from '../../../build/contracts/contracts/payments/PaymentsEscrow.sol/PaymentsEscrow.json'
910

1011
export default buildModule('PaymentsEscrow', (m) => {
@@ -32,3 +33,31 @@ export default buildModule('PaymentsEscrow', (m) => {
3233

3334
return { PaymentsEscrow, PaymentsEscrowProxyAdmin }
3435
})
36+
37+
export const MigratePaymentsEscrowModule = buildModule('PaymentsEscrow', (m) => {
38+
const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy } = m.useModule(MigrateHorizonProxiesModule)
39+
40+
const withdrawEscrowThawingPeriod = m.getParameter('withdrawEscrowThawingPeriod')
41+
const controllerAddress = m.getParameter('controllerAddress')
42+
43+
const Controller = m.contractAt('Controller', ControllerArtifact, controllerAddress)
44+
45+
// Deploy PaymentsEscrow implementation
46+
const PaymentsEscrowImplementation = deployImplementation(m, {
47+
name: 'PaymentsEscrow',
48+
artifact: PaymentsEscrowArtifact,
49+
constructorArgs: [Controller, withdrawEscrowThawingPeriod],
50+
}, { after: [MigrateHorizonProxiesModule, MigratePeripheryModule] })
51+
52+
// Upgrade proxy to implementation contract
53+
const PaymentsEscrow = upgradeTransparentUpgradeableProxyNoLoad(m,
54+
PaymentsEscrowProxyAdmin,
55+
PaymentsEscrowProxy,
56+
PaymentsEscrowImplementation, {
57+
name: 'PaymentsEscrow',
58+
artifact: PaymentsEscrowArtifact,
59+
initArgs: [],
60+
})
61+
62+
return { PaymentsEscrow, PaymentsEscrowProxyAdmin }
63+
})

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

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

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

6+
import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json'
67
import TAPCollectorArtifact from '../../../build/contracts/contracts/payments/collectors/TAPCollector.sol/TAPCollector.json'
78

89
export default buildModule('TAPCollector', (m) => {
@@ -21,3 +22,21 @@ export default buildModule('TAPCollector', (m) => {
2122

2223
return { TAPCollector }
2324
})
25+
26+
export const MigrateTAPCollectorModule = buildModule('TAPCollector', (m) => {
27+
const controllerAddress = m.getParameter('controllerAddress')
28+
const name = m.getParameter('eip712Name')
29+
const version = m.getParameter('eip712Version')
30+
const revokeSignerThawingPeriod = m.getParameter('revokeSignerThawingPeriod')
31+
32+
const Controller = m.contractAt('Controller', ControllerArtifact, controllerAddress)
33+
34+
const TAPCollector = m.contract(
35+
'TAPCollector',
36+
TAPCollectorArtifact,
37+
[name, version, Controller, revokeSignerThawingPeriod],
38+
{ after: [MigratePeripheryModule, MigrateHorizonProxiesModule] },
39+
)
40+
41+
return { TAPCollector }
42+
})
Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22

3-
import GraphPaymentsModule from './GraphPayments'
4-
import HorizonStakingModule from './HorizonStaking'
5-
import PaymentsEscrowModule from './PaymentsEscrow'
6-
import TAPCollectorModule from './TAPCollector'
3+
import GraphPaymentsModule, { MigrateGraphPaymentsModule } from './GraphPayments'
4+
import HorizonStakingModule, { MigrateHorizonStakingModule } from './HorizonStaking'
5+
import PaymentsEscrowModule, { MigratePaymentsEscrowModule } from './PaymentsEscrow'
6+
import TAPCollectorModule, { MigrateTAPCollectorModule } from './TAPCollector'
77

88
export default buildModule('GraphHorizon_Core', (m) => {
99
const { HorizonStaking } = m.useModule(HorizonStakingModule)
@@ -13,3 +13,12 @@ export default buildModule('GraphHorizon_Core', (m) => {
1313

1414
return { HorizonStaking, GraphPayments, PaymentsEscrow, TAPCollector }
1515
})
16+
17+
export const MigrateHorizonCoreModule = buildModule('GraphHorizon_Core', (m) => {
18+
const { HorizonStaking } = m.useModule(MigrateHorizonStakingModule)
19+
const { GraphPayments } = m.useModule(MigrateGraphPaymentsModule)
20+
const { PaymentsEscrow } = m.useModule(MigratePaymentsEscrowModule)
21+
const { TAPCollector } = m.useModule(MigrateTAPCollectorModule)
22+
23+
return { HorizonStaking, GraphPayments, PaymentsEscrow, TAPCollector }
24+
})

packages/horizon/ignition/modules/deploy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
33
import GraphHorizonCoreModule from './core/core'
44
import GraphPeripheryModule from './periphery/periphery'
55

6-
export default buildModule('GraphHorizon', (m) => {
6+
export default buildModule('GraphHorizon_Deploy', (m) => {
77
const {
88
BridgeEscrow,
99
Controller,
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
22

3-
import { MigrateCurationModule } from './periphery/Curation'
4-
import { MigrateRewardsManagerModule } from './periphery/RewardsManager'
5-
export default buildModule('GraphHorizon_Periphery', (m) => {
6-
const { L2Curation } = m.useModule(MigrateCurationModule)
7-
const { RewardsManager } = m.useModule(MigrateRewardsManagerModule)
3+
import { MigrateHorizonCoreModule } from './core/core'
4+
import { MigratePeripheryModule } from './periphery/periphery'
5+
6+
export default buildModule('GraphHorizon_Migrate', (m) => {
7+
const { L2Curation, RewardsManager } = m.useModule(MigratePeripheryModule)
8+
const { HorizonStaking, GraphPayments, PaymentsEscrow, TAPCollector } = m.useModule(MigrateHorizonCoreModule)
89

910
return {
1011
L2Curation,
1112
RewardsManager,
13+
HorizonStaking,
14+
GraphPayments,
15+
PaymentsEscrow,
16+
TAPCollector,
1217
}
1318
})

0 commit comments

Comments
 (0)