@@ -12,7 +12,8 @@ import GraphNetwork from './helpers/network'
12
12
import { createProvider } from 'hardhat/internal/core/providers/construction'
13
13
import { EthersProviderWrapper } from '@nomiclabs/hardhat-ethers/internal/ethers-provider-wrapper'
14
14
15
- import { logDebug } from './logger'
15
+ import { logDebug , logWarn } from './logger'
16
+ import { HARDHAT_NETWORK_NAME } from 'hardhat/plugins'
16
17
17
18
interface GREChains {
18
19
l1ChainId : number
@@ -99,19 +100,25 @@ export function getProviders(
99
100
const getProvider = (
100
101
networks : NetworksConfig ,
101
102
chainId : number ,
103
+ mainNetworkName : string ,
102
104
isMainProvider : boolean ,
103
105
chainLabel : string ,
104
106
) : EthersProviderWrapper | undefined => {
105
- const network = getNetworkConfig ( networks , chainId ) as HttpNetworkConfig
106
- const networkName = getNetworkName ( networks , chainId )
107
+ const network = getNetworkConfig ( networks , chainId , mainNetworkName ) as HttpNetworkConfig
108
+ const networkName = getNetworkName ( networks , chainId , mainNetworkName )
109
+
110
+ logDebug ( `Provider url for ${ chainLabel } (${ networkName } ): ${ network ?. url } ` )
107
111
108
112
// Ensure at least main provider is configured
109
- if ( isMainProvider && network === undefined ) {
113
+ // For Hardhat network we don't need url to create a provider
114
+ if (
115
+ isMainProvider &&
116
+ ( network === undefined || network . url === undefined ) &&
117
+ networkName !== HARDHAT_NETWORK_NAME
118
+ ) {
110
119
throw new GREPluginError ( `Must set a provider url for chain: ${ chainId } !` )
111
120
}
112
121
113
- logDebug ( `Provider url for ${ chainLabel } : ${ network ?. url } ` )
114
-
115
122
if ( network === undefined || networkName === undefined ) {
116
123
return undefined
117
124
}
@@ -123,8 +130,8 @@ export function getProviders(
123
130
return ethersProviderWrapper
124
131
}
125
132
126
- const l1Provider = getProvider ( hre . config . networks , l1ChainId , isHHL1 , 'L1' )
127
- const l2Provider = getProvider ( hre . config . networks , l2ChainId , ! isHHL1 , 'L2' )
133
+ const l1Provider = getProvider ( hre . config . networks , l1ChainId , hre . network . name , isHHL1 , 'L1' )
134
+ const l2Provider = getProvider ( hre . config . networks , l2ChainId , hre . network . name , ! isHHL1 , 'L2' )
128
135
129
136
return {
130
137
l1Provider,
@@ -142,8 +149,8 @@ export function getGraphConfigPaths(
142
149
logDebug ( '== Getting graph config paths' )
143
150
logDebug ( `Graph base dir: ${ hre . config . paths . graph } ` )
144
151
145
- const l1Network = getNetworkConfig ( hre . config . networks , l1ChainId )
146
- const l2Network = getNetworkConfig ( hre . config . networks , l2ChainId )
152
+ const l1Network = getNetworkConfig ( hre . config . networks , l1ChainId , hre . network . name )
153
+ const l2Network = getNetworkConfig ( hre . config . networks , l2ChainId , hre . network . name )
147
154
148
155
// Priority is as follows:
149
156
// - hre.graph() init parameter l1GraphConfigPath/l2GraphConfigPath
@@ -205,14 +212,43 @@ export function getGraphConfigPaths(
205
212
}
206
213
}
207
214
208
- function getNetworkConfig ( networks : NetworksConfig , chainId : number ) : NetworkConfig | undefined {
209
- return Object . keys ( networks )
210
- . map ( ( n ) => networks [ n ] )
211
- . find ( ( n ) => n . chainId === chainId )
215
+ function getNetworkConfig (
216
+ networks : NetworksConfig ,
217
+ chainId : number ,
218
+ mainNetworkName : string ,
219
+ ) : ( NetworkConfig & { name : string } ) | undefined {
220
+ let candidateNetworks = Object . keys ( networks )
221
+ . map ( ( n ) => ( { ...networks [ n ] , name : n } ) )
222
+ . filter ( ( n ) => n . chainId === chainId )
223
+
224
+ if ( candidateNetworks . length > 1 ) {
225
+ logWarn (
226
+ `Found multiple networks with chainId ${ chainId } , trying to use main network name to desambiguate` ,
227
+ )
228
+
229
+ candidateNetworks = candidateNetworks . filter ( ( n ) => n . name === mainNetworkName )
230
+
231
+ if ( candidateNetworks . length === 1 ) {
232
+ return candidateNetworks [ 0 ]
233
+ } else {
234
+ throw new GREPluginError (
235
+ `Found multiple networks with chainID ${ chainId } . This is not supported!` ,
236
+ )
237
+ }
238
+ } else if ( candidateNetworks . length === 1 ) {
239
+ return candidateNetworks [ 0 ]
240
+ } else {
241
+ return undefined
242
+ }
212
243
}
213
244
214
- function getNetworkName ( networks : NetworksConfig , chainId : number ) : string | undefined {
215
- return Object . keys ( networks ) . find ( ( n ) => networks [ n ] . chainId === chainId )
245
+ function getNetworkName (
246
+ networks : NetworksConfig ,
247
+ chainId : number ,
248
+ mainNetworkName : string ,
249
+ ) : string | undefined {
250
+ const network = getNetworkConfig ( networks , chainId , mainNetworkName )
251
+ return network ?. name
216
252
}
217
253
218
254
function normalizePath ( _path : string , graphPath : string ) {
0 commit comments