@@ -104,11 +104,9 @@ export async function multicall(
104
104
const multicallAbi = [
105
105
'function aggregate(tuple(address target, bytes callData)[] calls) view returns (uint256 blockNumber, bytes[] returnData)'
106
106
] ;
107
- const multi = new Contract (
108
- networks [ network ] . multicall ,
109
- multicallAbi ,
110
- provider
111
- ) ;
107
+ const multicallAddress =
108
+ options ?. multicallAddress || networks [ network ] . multicall ;
109
+ const multi = new Contract ( multicallAddress , multicallAbi , provider ) ;
112
110
const itf = new Interface ( abi ) ;
113
111
try {
114
112
const max = options ?. limit || 500 ;
@@ -184,8 +182,8 @@ export function getUrl(uri, gateway = gateways[0]) {
184
182
return uri ;
185
183
}
186
184
187
- export async function getJSON ( uri ) {
188
- const url = getUrl ( uri ) ;
185
+ export async function getJSON ( uri , options : any = { } ) {
186
+ const url = getUrl ( uri , options . gateways ) ;
189
187
return fetch ( url ) . then ( ( res ) => res . json ( ) ) ;
190
188
}
191
189
@@ -323,28 +321,33 @@ export function validateSchema(schema, data) {
323
321
export async function getEnsTextRecord (
324
322
ens : string ,
325
323
record : string ,
326
- network = '1'
324
+ network = '1' ,
325
+ options : any = { }
327
326
) {
328
327
const ensResolvers =
329
- networks [ network ] . ensResolvers || networks [ '1' ] . ensResolvers ;
328
+ options . ensResolvers ||
329
+ networks [ network ] . ensResolvers ||
330
+ networks [ '1' ] . ensResolvers ;
330
331
const ensHash = namehash ( ensNormalize ( ens ) ) ;
331
- const provider = getProvider ( network ) ;
332
+ const provider = getProvider ( network , options ) ;
332
333
333
334
const result = await multicall (
334
335
network ,
335
336
provider ,
336
337
ENS_RESOLVER_ABI ,
337
- ensResolvers . map ( ( address : any ) => [ address , 'text' , [ ensHash , record ] ] )
338
+ ensResolvers . map ( ( address : any ) => [ address , 'text' , [ ensHash , record ] ] ) ,
339
+ options
338
340
) ;
339
341
return result . flat ( ) . find ( ( r : string ) => r ) || '' ;
340
342
}
341
343
342
344
export async function getSpaceUri (
343
345
id : string ,
344
- network = '1'
346
+ network = '1' ,
347
+ options : any = { }
345
348
) : Promise < string | null > {
346
349
try {
347
- return await getEnsTextRecord ( id , 'snapshot' , network ) ;
350
+ return await getEnsTextRecord ( id , 'snapshot' , network , options ) ;
348
351
} catch ( e ) {
349
352
console . log ( e ) ;
350
353
return null ;
@@ -353,16 +356,18 @@ export async function getSpaceUri(
353
356
354
357
export async function getEnsOwner (
355
358
ens : string ,
356
- network = '1'
359
+ network = '1' ,
360
+ options : any = { }
357
361
) : Promise < string | null > {
358
362
const registryAddress = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' ;
359
- const provider = getProvider ( network ) ;
363
+ const provider = getProvider ( network , options ) ;
360
364
const ensRegistry = new Contract (
361
365
registryAddress ,
362
366
[ 'function owner(bytes32) view returns (address)' ] ,
363
367
provider
364
368
) ;
365
- const ensNameWrapper = networks [ network ] . ensNameWrapper ;
369
+ const ensNameWrapper =
370
+ options . ensNameWrapper || networks [ network ] . ensNameWrapper ;
366
371
const ensHash = namehash ( ensNormalize ( ens ) ) ;
367
372
let owner = await ensRegistry . owner ( ensHash ) ;
368
373
// If owner is the ENSNameWrapper contract, resolve the owner of the name
@@ -379,9 +384,10 @@ export async function getEnsOwner(
379
384
380
385
export async function getSpaceController (
381
386
id : string ,
382
- network = '1'
387
+ network = '1' ,
388
+ options : any = { }
383
389
) : Promise < string | null > {
384
- const spaceUri = await getSpaceUri ( id , network ) ;
390
+ const spaceUri = await getSpaceUri ( id , network , options ) ;
385
391
if ( spaceUri ) {
386
392
let isUriAddress = isAddress ( spaceUri ) ;
387
393
if ( isUriAddress ) return spaceUri ;
@@ -392,15 +398,18 @@ export async function getSpaceController(
392
398
isUriAddress = isAddress ( address ) ;
393
399
if ( isUriAddress ) return address ;
394
400
}
395
- return await getEnsOwner ( id , network ) ;
401
+ return await getEnsOwner ( id , network , options ) ;
396
402
}
397
403
398
404
export async function getDelegatesBySpace (
399
405
network : string ,
400
406
space : string ,
401
- snapshot = 'latest'
407
+ snapshot = 'latest' ,
408
+ options : any = { }
402
409
) {
403
- if ( ! delegationSubgraphs [ network ] ) {
410
+ const subgraphUrl =
411
+ options . subgraphUrl || SNAPSHOT_SUBGRAPH_URL [ network ] ;
412
+ if ( ! subgraphUrl ) {
404
413
return Promise . reject (
405
414
`Delegation subgraph not available for network ${ network } `
406
415
) ;
@@ -432,10 +441,7 @@ export async function getDelegatesBySpace(
432
441
while ( true ) {
433
442
params . delegations . __args . skip = page * PAGE_SIZE ;
434
443
435
- const pageResult = await subgraphRequest (
436
- delegationSubgraphs [ network ] ,
437
- params
438
- ) ;
444
+ const pageResult = await subgraphRequest ( subgraphUrl , params ) ;
439
445
const pageDelegations = pageResult . delegations || [ ] ;
440
446
result = result . concat ( pageDelegations ) ;
441
447
page ++ ;
0 commit comments