Skip to content

Commit 519c5d8

Browse files
authored
Merge pull request #1087 from graphprotocol/tmigone/ignition-v0.15.9
2 parents 17692b7 + 353902e commit 519c5d8

22 files changed

+1496
-313
lines changed

packages/horizon/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
Graph Horizon is the next evolution of the Graph Protocol.
44

5+
## Configuration
6+
7+
The following environment variables might be required:
8+
9+
- `ETHERSCAN_API_KEY`: Etherscan API key
10+
11+
You can set them using Hardhat:
12+
13+
```bash
14+
npx hardhat vars set ETHERSCAN_API_KEY
15+
```
16+
517
## Deployment
618

719
We use Hardhat Ignition to deploy the contracts. To build and deploy Graph Horizon run the following commands:
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
3+
// We import these here to force Hardhat to compile them.
4+
// This ensures that their artifacts are available for Hardhat Ignition to use.
5+
pragma solidity 0.8.27;
6+
7+
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";

packages/horizon/hardhat.config.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1+
import { vars } from 'hardhat/config'
2+
import type { HardhatUserConfig } from 'hardhat/config'
3+
4+
// Hardhat plugins
15
import '@nomicfoundation/hardhat-foundry'
26
import '@nomicfoundation/hardhat-toolbox'
37
import '@nomicfoundation/hardhat-ignition-ethers'
48
import '@tenderly/hardhat-tenderly'
59
import 'hardhat-storage-layout'
610
import 'hardhat-contract-sizer'
711
import 'hardhat-secure-accounts'
8-
import * as dotenv from 'dotenv'
9-
10-
import type { HardhatUserConfig } from 'hardhat/config'
1112

12-
dotenv.config()
13+
// Environment variables
14+
const ETHERSCAN_API_KEY = vars.get('ETHERSCAN_API_KEY', '')
15+
const ARBITRUM_VIRTUAL_TESTNET_URL = vars.get('ARBITRUM_VIRTUAL_TESTNET_URL', '')
1316

1417
const getNetworkAccounts = () => {
1518
const accounts: string[] = []
@@ -57,7 +60,7 @@ const config: HardhatUserConfig = {
5760
enabled: false,
5861
},
5962
chainId: 421615,
60-
url: process.env.ARBITRUM_VIRTUAL_TESTNET_URL || '',
63+
url: ARBITRUM_VIRTUAL_TESTNET_URL,
6164
accounts: getNetworkAccounts(),
6265
},
6366
},
@@ -74,7 +77,7 @@ const config: HardhatUserConfig = {
7477
},
7578
etherscan: {
7679
apiKey: {
77-
arbitrumSepolia: process.env.ETHERSCAN_API_KEY ?? '',
80+
arbitrumSepolia: ETHERSCAN_API_KEY,
7881
},
7982
customChains: [
8083
{

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
"EpochManager": {
1414
"epochLength": 60
1515
},
16-
"Curation": {
16+
"L2Curation": {
1717
"curationTaxPercentage": 10000,
1818
"minimumCurationDeposit": 1
1919
},
20-
"GraphToken": {
20+
"L2GraphToken": {
2121
"initialSupply": "10000000000000000000000000000n"
2222
},
2323
"HorizonStaking": {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import GraphPaymentsArtifact from '../../../build/contracts/contracts/payments/G
77

88
// TODO: transfer ownership of ProxyAdmin???
99
export default buildModule('GraphPayments', (m) => {
10-
const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule)
11-
const { GraphPaymentsProxyAdmin, GraphPaymentsProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule)
10+
const { Controller } = m.useModule(GraphPeripheryModule)
11+
const { GraphPaymentsProxyAdmin, GraphPaymentsProxy } = m.useModule(HorizonProxiesModule)
1212

1313
const protocolPaymentCut = m.getParameter('protocolPaymentCut')
1414

@@ -17,7 +17,7 @@ export default buildModule('GraphPayments', (m) => {
1717
GraphPaymentsArtifact,
1818
[Controller, protocolPaymentCut],
1919
{
20-
after: [PeripheryRegistered, HorizonRegistered],
20+
after: [GraphPeripheryModule, HorizonProxiesModule],
2121
},
2222
)
2323

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

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,26 @@ import { ethers } from 'ethers'
55
import GraphPeripheryModule from '../periphery'
66
import GraphProxyAdminModule from '../periphery/GraphProxyAdmin'
77

8-
import DummyArtifact from '../../../build/contracts/contracts/mocks/Dummy.sol/Dummy.json'
98
import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json'
109

1110
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
1211

1312
// HorizonStaking, GraphPayments and PaymentsEscrow use GraphDirectory but they also in the directory.
1413
// So we need to deploy their proxies, register them in the controller before being able to deploy the implementations
1514
export default buildModule('HorizonProxies', (m) => {
16-
const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule)
15+
const { Controller } = m.useModule(GraphPeripheryModule)
1716
const { GraphProxyAdmin } = m.useModule(GraphProxyAdminModule)
1817

1918
const isMigrate = m.getParameter('isMigrate', false)
2019

2120
// Deploy HorizonStaking proxy without an implementation
22-
let HorizonStakingProxy, setProxyHorizonStaking
21+
let HorizonStakingProxy
2322
if (isMigrate) {
2423
const horizonStakingProxyAddress = m.getParameter('horizonStakingProxyAddress')
2524
HorizonStakingProxy = m.contractAt('GraphProxy', GraphProxyArtifact, horizonStakingProxyAddress, { id: 'GraphProxy_HorizonStaking' })
26-
setProxyHorizonStaking = HorizonStakingProxy
2725
} else {
28-
HorizonStakingProxy = m.contract('GraphProxy', GraphProxyArtifact, [ZERO_ADDRESS, GraphProxyAdmin], { after: [PeripheryRegistered], id: 'GraphProxy_HorizonStaking' })
29-
setProxyHorizonStaking = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('Staking')), HorizonStakingProxy], { id: 'setContractProxy_HorizonStaking' })
26+
HorizonStakingProxy = m.contract('GraphProxy', GraphProxyArtifact, [ZERO_ADDRESS, GraphProxyAdmin], { id: 'GraphProxy_HorizonStaking' })
27+
m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('Staking')), HorizonStakingProxy], { id: 'setContractProxy_HorizonStaking' })
3028
}
3129

3230
// Deploy proxies for payments contracts using OZ TransparentUpgradeableProxy
@@ -36,18 +34,8 @@ export default buildModule('HorizonProxies', (m) => {
3634
// Register the proxies in the controller
3735
// if isMigrate then use from: governor
3836
const options = isMigrate ? { from: m.getAccount(1) } : {}
39-
const setProxyGraphPayments = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy], { ...options, id: 'setContractProxy_GraphPayments' })
40-
const setProxyPaymentsEscrow = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy], { ...options, id: 'setContractProxy_PaymentsEscrow' })
41-
42-
// Deploy dummy contract to signal that all periphery contracts are registered
43-
const HorizonRegistered = m.contract('Dummy', DummyArtifact, [], {
44-
id: 'RegisteredDummy',
45-
after: [
46-
setProxyHorizonStaking,
47-
setProxyGraphPayments,
48-
setProxyPaymentsEscrow,
49-
],
50-
})
51-
52-
return { HorizonStakingProxy, GraphPaymentsProxy, PaymentsEscrowProxy, HorizonRegistered, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
37+
m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy], { ...options, id: 'setContractProxy_GraphPayments' })
38+
m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy], { ...options, id: 'setContractProxy_PaymentsEscrow' })
39+
40+
return { HorizonStakingProxy, GraphPaymentsProxy, PaymentsEscrowProxy, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin }
5341
})

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import HorizonStakingExtensionModule from './HorizonStakingExtension'
77
import HorizonStakingArtifact from '../../../build/contracts/contracts/staking/HorizonStaking.sol/HorizonStaking.json'
88

99
export default buildModule('HorizonStaking', (m) => {
10-
const { Controller, GraphProxyAdmin, PeripheryRegistered } = m.useModule(GraphPeripheryModule)
11-
const { HorizonStakingProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule)
10+
const { Controller, GraphProxyAdmin } = m.useModule(GraphPeripheryModule)
11+
const { HorizonStakingProxy } = m.useModule(HorizonProxiesModule)
1212
const { HorizonStakingExtension } = m.useModule(HorizonStakingExtensionModule)
1313

1414
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
@@ -22,7 +22,7 @@ export default buildModule('HorizonStaking', (m) => {
2222
subgraphServiceAddress,
2323
],
2424
{
25-
after: [PeripheryRegistered, HorizonRegistered],
25+
after: [GraphPeripheryModule, HorizonProxiesModule],
2626
},
2727
)
2828

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import ExponentialRebatesArtifact from '../../../build/contracts/contracts/staki
77
import HorizonStakingExtensionArtifact from '../../../build/contracts/contracts/staking/HorizonStakingExtension.sol/HorizonStakingExtension.json'
88

99
export default buildModule('HorizonStakingExtension', (m) => {
10-
const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule)
11-
const { HorizonRegistered } = m.useModule(HorizonProxiesModule)
10+
const { Controller } = m.useModule(GraphPeripheryModule)
1211

1312
const subgraphServiceAddress = m.getParameter('subgraphServiceAddress')
1413

@@ -19,7 +18,7 @@ export default buildModule('HorizonStakingExtension', (m) => {
1918
libraries: {
2019
ExponentialRebates: ExponentialRebates,
2120
},
22-
after: [PeripheryRegistered, HorizonRegistered],
21+
after: [GraphPeripheryModule, HorizonProxiesModule],
2322
})
2423

2524
return { HorizonStakingExtension }

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import PaymentsEscrowArtifact from '../../../build/contracts/contracts/payments/
77

88
// TODO: transfer ownership of ProxyAdmin???
99
export default buildModule('PaymentsEscrow', (m) => {
10-
const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule)
11-
const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule)
10+
const { Controller } = m.useModule(GraphPeripheryModule)
11+
const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy } = m.useModule(HorizonProxiesModule)
1212

1313
const withdrawEscrowThawingPeriod = m.getParameter('withdrawEscrowThawingPeriod')
1414

@@ -17,7 +17,7 @@ export default buildModule('PaymentsEscrow', (m) => {
1717
PaymentsEscrowArtifact,
1818
[Controller, withdrawEscrowThawingPeriod],
1919
{
20-
after: [PeripheryRegistered, HorizonRegistered],
20+
after: [GraphPeripheryModule, HorizonProxiesModule],
2121
},
2222
)
2323

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@ import HorizonProxiesModule from './HorizonProxies'
66
import TAPCollectorArtifact from '../../../build/contracts/contracts/payments/collectors/TAPCollector.sol/TAPCollector.json'
77

88
export default buildModule('TAPCollector', (m) => {
9-
const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule)
10-
const { HorizonRegistered } = m.useModule(HorizonProxiesModule)
9+
const { Controller } = m.useModule(GraphPeripheryModule)
1110

1211
const name = m.getParameter('eip712Name')
1312
const version = m.getParameter('eip712Version')
1413
const revokeSignerThawingPeriod = m.getParameter('revokeSignerThawingPeriod')
1514

16-
const TAPCollector = m.contract('TAPCollector', TAPCollectorArtifact, [name, version, Controller, revokeSignerThawingPeriod], { after: [PeripheryRegistered, HorizonRegistered] })
15+
const TAPCollector = m.contract(
16+
'TAPCollector',
17+
TAPCollectorArtifact,
18+
[name, version, Controller, revokeSignerThawingPeriod],
19+
{ after: [GraphPeripheryModule, HorizonProxiesModule] },
20+
)
1721

1822
return { TAPCollector }
1923
})

0 commit comments

Comments
 (0)