Skip to content

Commit d3089f8

Browse files
committed
chore: add tenderly task for uploading and verifying contracts
1 parent c155f0e commit d3089f8

File tree

10 files changed

+788
-57
lines changed

10 files changed

+788
-57
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,7 @@ tx-builder-*.json
9797
**/horizon-localNetwork/
9898
**/subgraph-service-localNetwork/
9999
!**/ignition/**/artifacts/
100+
101+
# Tenderly
102+
.tenderly-artifacts/
103+

packages/horizon/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"@openzeppelin/contracts": "^5.0.2",
5454
"@openzeppelin/contracts-upgradeable": "^5.0.2",
5555
"@openzeppelin/foundry-upgrades": "0.4.0",
56+
"@tenderly/hardhat-tenderly": "^1.11.0",
5657
"@typechain/ethers-v6": "^0.5.0",
5758
"@typechain/hardhat": "^9.0.0",
5859
"@types/chai": "^4.2.0",

packages/horizon/tasks/tenderly.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { task } from 'hardhat/config'
2+
import { HardhatRuntimeEnvironment } from 'hardhat/types'
3+
import { runTenderlyUpload } from '@graphprotocol/toolshed/hardhat'
4+
import addresses from '../addresses.json'
5+
import path from 'path'
6+
7+
task('tenderly:upload', 'Upload and verify contracts on Tenderly')
8+
.addFlag('noVerify', 'Skip contract verification')
9+
.addFlag('skipAdd', 'Skip adding contracts (only verify)')
10+
.setAction(async (taskArgs: { noVerify: boolean; skipAdd: boolean }, hre: HardhatRuntimeEnvironment) => {
11+
// Dynamically import tenderly plugin only when this task runs
12+
// This avoids triggering provider initialization for other hardhat commands
13+
// eslint-disable-next-line @typescript-eslint/no-require-imports
14+
const { Tenderly } = require('@tenderly/hardhat-integration')
15+
// eslint-disable-next-line @typescript-eslint/no-require-imports
16+
const { lazyObject } = require('hardhat/plugins')
17+
// eslint-disable-next-line @typescript-eslint/no-require-imports
18+
const { configExists, getAccessToken } = require('@tenderly/api-client/utils/config')
19+
20+
// Manually attach tenderly to hre since extendEnvironment already ran
21+
if (!(hre as any).tenderly) {
22+
;(hre as any).tenderly = lazyObject(() => new Tenderly(hre))
23+
}
24+
25+
if (!configExists()) {
26+
throw new Error(
27+
'Tenderly config not found. Run `tenderly login` to authenticate, or create ~/.tenderly/config.yaml manually.',
28+
)
29+
}
30+
31+
const accessToken = getAccessToken()
32+
const packageDir = path.join(__dirname, '..')
33+
34+
await runTenderlyUpload(hre, packageDir, addresses, accessToken, taskArgs)
35+
})
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"username": "graphprotocol",
3+
"networks": {
4+
"421614": {
5+
"project": "horizon-arbitrum-sepolia"
6+
},
7+
"42161": {
8+
"project": "horizon-arbitrum-one"
9+
}
10+
},
11+
"externalArtifacts": {
12+
"source": "../contracts/artifacts",
13+
"buildInfo": "../contracts/artifacts/build-info"
14+
},
15+
"verifyList": [
16+
"HorizonStaking",
17+
"GraphPayments",
18+
"PaymentsEscrow",
19+
"GraphTallyCollector",
20+
"L2Curation",
21+
"RewardsManager"
22+
],
23+
"tag": "Horizon"
24+
}

packages/subgraph-service/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"@openzeppelin/contracts": "^5.0.2",
5353
"@openzeppelin/contracts-upgradeable": "^5.0.2",
5454
"@openzeppelin/foundry-upgrades": "0.4.0",
55+
"@tenderly/hardhat-tenderly": "^1.11.0",
5556
"@typechain/ethers-v6": "^0.5.0",
5657
"@typechain/hardhat": "^9.0.0",
5758
"@types/chai": "^4.2.0",
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { task } from 'hardhat/config'
2+
import { HardhatRuntimeEnvironment } from 'hardhat/types'
3+
import { runTenderlyUpload } from '@graphprotocol/toolshed/hardhat'
4+
import addresses from '../addresses.json'
5+
import path from 'path'
6+
7+
task('tenderly:upload', 'Upload and verify contracts on Tenderly')
8+
.addFlag('noVerify', 'Skip contract verification')
9+
.addFlag('skipAdd', 'Skip adding contracts (only verify)')
10+
.setAction(async (taskArgs: { noVerify: boolean; skipAdd: boolean }, hre: HardhatRuntimeEnvironment) => {
11+
// Dynamically import tenderly plugin only when this task runs
12+
// This avoids triggering provider initialization for other hardhat commands
13+
// eslint-disable-next-line @typescript-eslint/no-require-imports
14+
const { Tenderly } = require('@tenderly/hardhat-integration')
15+
// eslint-disable-next-line @typescript-eslint/no-require-imports
16+
const { lazyObject } = require('hardhat/plugins')
17+
// eslint-disable-next-line @typescript-eslint/no-require-imports
18+
const { configExists, getAccessToken } = require('@tenderly/api-client/utils/config')
19+
20+
// Manually attach tenderly to hre since extendEnvironment already ran
21+
if (!(hre as any).tenderly) {
22+
;(hre as any).tenderly = lazyObject(() => new Tenderly(hre))
23+
}
24+
25+
if (!configExists()) {
26+
throw new Error(
27+
'Tenderly config not found. Run `tenderly login` to authenticate, or create ~/.tenderly/config.yaml manually.',
28+
)
29+
}
30+
31+
const accessToken = getAccessToken()
32+
const packageDir = path.join(__dirname, '..')
33+
34+
await runTenderlyUpload(hre, packageDir, addresses, accessToken, taskArgs)
35+
})
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"username": "graphprotocol",
3+
"networks": {
4+
"421614": {
5+
"project": "horizon-arbitrum-sepolia"
6+
},
7+
"42161": {
8+
"project": "horizon-arbitrum-one"
9+
}
10+
},
11+
"verifyList": [
12+
"SubgraphService",
13+
"DisputeManager"
14+
],
15+
"excludeList": [
16+
"L2Curation",
17+
"L2GNS",
18+
"SubgraphNFT"
19+
],
20+
"tag": "Subgraph Service"
21+
}

packages/toolshed/src/hardhat/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,16 @@ export { getEventData } from './event'
44
export { hardhatBaseConfig } from './hardhat.base.config'
55
export { loadConfig, patchConfig, saveToAddressBook } from './ignition'
66
export { requireLocalNetwork } from './local'
7+
export {
8+
loadTenderlyConfig,
9+
copyExternalArtifacts,
10+
classifyContracts,
11+
addContractToTenderly,
12+
tagContractsOnTenderly,
13+
verifyLocalContract,
14+
verifyExternalContract,
15+
runTenderlyUpload,
16+
type TenderlyConfig,
17+
type ContractInfo,
18+
type BuildInfo,
19+
} from './tenderly'

0 commit comments

Comments
 (0)