@@ -27,9 +27,117 @@ const {
2727 BSCSCAN_API_KEY ,
2828 ARBISCAN_API_KEY ,
2929 OPTIMISTIC_ETHERSCAN_API_KEY ,
30- ZKSYNC_EXPLORER_API_KEY
30+ ZKSYNC_EXPLORER_API_KEY ,
31+ NETWORK_NAME
3132} = process . env ;
3233
34+ if ( ! NETWORK_NAME ) {
35+ console . error (
36+ 'Error: No network specified. Please specify the network name in environment variable "NETWORK_NAME"'
37+ ) ;
38+ process . exit ( 1 ) ;
39+ }
40+
41+ interface NetworkConfig {
42+ url : string ;
43+ accounts : string [ ] ;
44+ }
45+
46+ interface ApiKeyConfig {
47+ [ key : string ] : string ;
48+ }
49+
50+ const networkConfigs : { [ key : string ] : NetworkConfig } = {
51+ eth : {
52+ url : `https://ethereum-rpc.publicnode.com` ,
53+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
54+ } ,
55+ hteth : {
56+ url : `https://rpc.holesky.ethpandaops.io/` ,
57+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } ` ]
58+ } ,
59+ polygon : {
60+ url : `https://polygon-rpc.com/` ,
61+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
62+ } ,
63+ tpolygon : {
64+ // https://polygon-amoy.g.alchemy.com
65+ url : `https://polygon-amoy-bor-rpc.publicnode.com` ,
66+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
67+ } ,
68+ bsc : {
69+ url : `https://bsc-dataseed1.binance.org/` ,
70+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
71+ } ,
72+ tbsc : {
73+ url : `https://data-seed-prebsc-1-s1.binance.org:8545/` ,
74+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
75+ } ,
76+ tarbeth : {
77+ url : `${ QUICKNODE_ARBITRUM_SEPOLIA_API_KEY } ` ,
78+ accounts : [
79+ `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
80+ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
81+ ]
82+ } ,
83+ arbeth : {
84+ url : `${ QUICKNODE_ARBITRUM_ONE_API_KEY } ` ,
85+ accounts : [
86+ `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
87+ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
88+ ]
89+ } ,
90+ topeth : {
91+ url : `${ QUICKNODE_OPTIMISM_SEPOLIA_API_KEY } ` ,
92+ accounts : [
93+ `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
94+ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
95+ ]
96+ } ,
97+ opeth : {
98+ url : `${ QUICKNODE_OPTIMISM_API_KEY } ` ,
99+ accounts : [
100+ `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
101+ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
102+ ]
103+ } ,
104+ tzketh : {
105+ url : `${ QUICKNODE_ZKSYNC_SEPOLIA_API_KEY } ` ,
106+ accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
107+ }
108+ } ;
109+
110+ const apiKeyConfigs : ApiKeyConfig = {
111+ eth : `${ ETHERSCAN_API_KEY } ` ,
112+ hteth : `${ ETHERSCAN_API_KEY } ` ,
113+ polygon : `${ POLYGONSCAN_API_KEY } ` ,
114+ tpolygon : `${ POLYGONSCAN_API_KEY } ` ,
115+ bsc : `${ BSCSCAN_API_KEY } ` ,
116+ tbsc : `${ BSCSCAN_API_KEY } ` ,
117+ arbeth : `${ ARBISCAN_API_KEY } ` ,
118+ tarbeth : `${ ARBISCAN_API_KEY } ` ,
119+ opeth : `${ OPTIMISTIC_ETHERSCAN_API_KEY } ` ,
120+ topeth : `${ OPTIMISTIC_ETHERSCAN_API_KEY } ` ,
121+ zksync : `${ ZKSYNC_EXPLORER_API_KEY } ` ,
122+ tzksync : `${ ZKSYNC_EXPLORER_API_KEY } `
123+ } ;
124+
125+ const getNetworkConfig = ( network : string ) : NetworkConfig => {
126+ return networkConfigs [ network ] ;
127+ } ;
128+
129+ const getApiKeyConfig = ( network : string ) : string => {
130+ return apiKeyConfigs [ network ] ;
131+ } ;
132+
133+ const createDynamicNetworkConfig = (
134+ network : string
135+ ) : { [ key : string ] : NetworkConfig } => {
136+ const dynamicNetwork : { [ key : string ] : NetworkConfig } = { } ;
137+ dynamicNetwork [ network ] = getNetworkConfig ( network ) ;
138+ return dynamicNetwork ;
139+ } ;
140+
33141const config : HardhatUserConfig = {
34142 solidity : {
35143 compilers : [
@@ -65,89 +173,14 @@ const config: HardhatUserConfig = {
65173 } ) ) ,
66174 loggingEnabled : false
67175 } ,
68- eth : {
69- url : `https://ethereum-rpc.publicnode.com` ,
70- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
71- } ,
72- hteth : {
73- url : `https://rpc.holesky.ethpandaops.io/` ,
74- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } ` ]
75- } ,
76- matic : {
77- url : `https://polygon-rpc.com/` ,
78- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
79- } ,
80- tmatic : {
81- // https://polygon-amoy.g.alchemy.com
82- url : `https://polygon-amoy-bor-rpc.publicnode.com` ,
83- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
84- } ,
85- bsc : {
86- url : `https://bsc-dataseed1.binance.org/` ,
87- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
88- } ,
89- tbsc : {
90- url : `https://data-seed-prebsc-1-s1.binance.org:8545/` ,
91- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
92- } ,
93- tarbeth : {
94- url : `${ QUICKNODE_ARBITRUM_SEPOLIA_API_KEY } ` ,
95- accounts : [
96- `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
97- `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
98- ]
99- } ,
100- arbeth : {
101- url : `${ QUICKNODE_ARBITRUM_ONE_API_KEY } ` ,
102- accounts : [
103- `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
104- `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
105- ]
106- } ,
107- topeth : {
108- url : `${ QUICKNODE_OPTIMISM_SEPOLIA_API_KEY } ` ,
109- accounts : [
110- `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
111- `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
112- ]
113- } ,
114- opeth : {
115- url : `${ QUICKNODE_OPTIMISM_API_KEY } ` ,
116- accounts : [
117- `${ PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT } ` ,
118- `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP } `
119- ]
120- } ,
121- tzketh : {
122- url : `${ QUICKNODE_ZKSYNC_SEPOLIA_API_KEY } ` ,
123- accounts : [ `${ PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT } ` ]
124- }
176+ ...createDynamicNetworkConfig ( NETWORK_NAME . toLowerCase ( ) )
125177 } ,
126178 gasReporter : {
127179 enabled : process . env . REPORT_GAS !== undefined ,
128180 currency : 'USD'
129181 } ,
130182 etherscan : {
131- apiKey : {
132- //ethereum
133- mainnet : `${ ETHERSCAN_API_KEY } ` ,
134- goerli : `${ ETHERSCAN_API_KEY } ` ,
135- holesky : `${ ETHERSCAN_API_KEY } ` ,
136- //polygon
137- polygon : `${ POLYGONSCAN_API_KEY } ` ,
138- polygonAmoy : `${ POLYGONSCAN_API_KEY } ` ,
139- bscTestnet : `${ BSCSCAN_API_KEY } ` ,
140- bsc : `${ BSCSCAN_API_KEY } ` ,
141- // arbitrum
142- arbitrumOne : `${ ARBISCAN_API_KEY } ` ,
143- arbitrumSepolia : `${ ARBISCAN_API_KEY } ` ,
144- // optimism
145- optimisticEthereum : `${ OPTIMISTIC_ETHERSCAN_API_KEY } ` ,
146- optimisticSepolia : `${ OPTIMISTIC_ETHERSCAN_API_KEY } ` ,
147- // zksync
148- zksync : `${ ZKSYNC_EXPLORER_API_KEY } ` ,
149- zksyncSepolia : `${ ZKSYNC_EXPLORER_API_KEY } `
150- } ,
183+ apiKey : getApiKeyConfig ( NETWORK_NAME . toLowerCase ( ) ) ,
151184 customChains : [
152185 {
153186 network : 'holesky' ,
0 commit comments