Skip to content

Commit 2aa4abf

Browse files
authored
Merge pull request #2535 from AmbireTech/hotfix/citrea-requests-despite-disabled
Hotfix/ Don't make requests to citrea if disabled
2 parents c04789c + 000f892 commit 2aa4abf

3 files changed

Lines changed: 43 additions & 16 deletions

File tree

src/controllers/domains/domains.test.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ const ENS2 = {
7878
const NO_DOMAINS_ADDRESS = '0x1b9B9813C5805A60184091956F8b36E752272a93'
7979

8080
describe('Domains', () => {
81-
const domainsController = new DomainsController({ providers })
81+
const domainsController = new DomainsController({
82+
providers,
83+
isNetworkEnabled: () => true
84+
})
8285

8386
it('should reverse lookup (ENS)', async () => {
8487
await domainsController.reverseLookup(ENS_OLDEST_RESOLVER.address)
@@ -204,7 +207,10 @@ describe('Domains', () => {
204207
})
205208
it('batchReverseLookup should use deployless batched reverse lookup', async () => {
206209
const provider = getRpcProvider(networks.find((n) => n.chainId === 1n)!.rpcUrls, 1n)
207-
const controller = new DomainsController({ providers: { ['1']: provider } })
210+
const controller = new DomainsController({
211+
providers: { ['1']: provider },
212+
isNetworkEnabled: () => true
213+
})
208214
const reverseLookupEnsSpy = jest.spyOn(ensDomainsModule, 'reverseLookupEns')
209215
reverseLookupEnsSpy
210216
.mockResolvedValueOnce({
@@ -247,7 +253,10 @@ describe('Domains', () => {
247253
})
248254
it('reverseLookup awaits an in-flight lookup instead of starting a duplicate', async () => {
249255
const provider = getRpcProvider(networks.find((n) => n.chainId === 1n)!.rpcUrls, 1n)
250-
const controller = new DomainsController({ providers: { ['1']: provider } })
256+
const controller = new DomainsController({
257+
providers: { ['1']: provider },
258+
isNetworkEnabled: () => true
259+
})
251260
const address = getAddress(ENS_OLDEST_RESOLVER.address)
252261

253262
let resolveLookup!: (value: ensDomainsModule.ReverseLookupResult) => void
@@ -280,7 +289,10 @@ describe('Domains', () => {
280289
})
281290
it('batchReverseLookup awaits an address already in flight from reverseLookup', async () => {
282291
const provider = getRpcProvider(networks.find((n) => n.chainId === 1n)!.rpcUrls, 1n)
283-
const controller = new DomainsController({ providers: { ['1']: provider } })
292+
const controller = new DomainsController({
293+
providers: { ['1']: provider },
294+
isNetworkEnabled: () => true
295+
})
284296
const addressInFlight = getAddress(ENS_OLDEST_RESOLVER.address)
285297
const addressInBatch = getAddress(ENS_LATEST_RESOLVER.address)
286298

@@ -318,7 +330,8 @@ describe('Domains', () => {
318330
it('marks the address as failed (updateFailedAt) when the lookup returns a failed entry', async () => {
319331
const { restore } = suppressConsole(true)
320332
const controller = new DomainsController({
321-
providers: { ['1']: getRpcProvider(networks.find((n) => n.chainId === 1n)!.rpcUrls, 1n) }
333+
providers: { ['1']: getRpcProvider(networks.find((n) => n.chainId === 1n)!.rpcUrls, 1n) },
334+
isNetworkEnabled: () => true
322335
})
323336
const reverseLookupEnsSpy = jest.spyOn(ensDomainsModule, 'reverseLookupEns')
324337
const FAILED_ADDRESS = getAddress(ENS2.address)
@@ -378,7 +391,8 @@ describe('Domains', () => {
378391
const controllerWithoutCitrea = new DomainsController({
379392
providers: {
380393
['1']: getRpcProvider(networks.find((n) => n.chainId === 1n)!.rpcUrls, 1n)
381-
}
394+
},
395+
isNetworkEnabled: () => true
382396
})
383397

384398
const TEST = {

src/controllers/domains/domains.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export class DomainsController extends EventEmitter implements IDomainsControlle
4444

4545
#defaultNetworksMode: 'mainnet' | 'testnet' = 'mainnet'
4646

47+
#isNetworkEnabled: (chainId: bigint) => boolean
48+
4749
/** Stores ENS names, avatars, and metadata (timestamps) indexed by account address */
4850
domains: Domains = {}
4951

@@ -68,16 +70,19 @@ export class DomainsController extends EventEmitter implements IDomainsControlle
6870
constructor({
6971
eventEmitterRegistry,
7072
providers,
71-
defaultNetworksMode
73+
defaultNetworksMode,
74+
isNetworkEnabled
7275
}: {
7376
eventEmitterRegistry?: IEventEmitterRegistryController
7477
providers: RPCProviders
7578
defaultNetworksMode?: 'mainnet' | 'testnet'
79+
isNetworkEnabled: (chainId: bigint) => boolean
7680
}) {
7781
super(eventEmitterRegistry)
7882

7983
this.#providers = providers
8084
if (defaultNetworksMode) this.#defaultNetworksMode = defaultNetworksMode
85+
this.#isNetworkEnabled = isNetworkEnabled
8186
}
8287

8388
async batchReverseLookup(addresses: string[]) {
@@ -120,17 +125,23 @@ export class DomainsController extends EventEmitter implements IDomainsControlle
120125
: this.#defaultNetworksMode === 'mainnet'
121126
? '1'
122127
: '11155111'
123-
const provider = this.#providers[providerChainId]
128+
const provider =
129+
this.#isNetworkEnabled(BigInt(providerChainId)) && this.#providers[providerChainId]
124130

125131
if (!provider) {
126132
// Don't emit an error if the citrea provider is missing
127-
if (isNamoshiDomain) return
133+
if (!isNamoshiDomain) {
134+
this.emitError({
135+
error: new Error('domains.resolveDomain: Ethereum provider is not available'),
136+
message: 'The RPC provider for Ethereum is not available.',
137+
level: 'major'
138+
})
139+
}
140+
141+
this.resolveDomainsStatus[domain] = 'FAILED'
142+
await this.forceEmitUpdate()
143+
this.resolveDomainsStatus[domain] = undefined
128144

129-
this.emitError({
130-
error: new Error('domains.resolveDomain: Ethereum provider is not available'),
131-
message: 'The RPC provider for Ethereum is not available.',
132-
level: 'major'
133-
})
134145
return
135146
}
136147

@@ -289,7 +300,7 @@ export class DomainsController extends EventEmitter implements IDomainsControlle
289300

290301
const ethereumProvider =
291302
this.#providers[this.#defaultNetworksMode === 'mainnet' ? '1' : '11155111']
292-
const citreaProvider = this.#providers['4114']
303+
const citreaProvider = this.#isNetworkEnabled(4114n) && this.#providers['4114']
293304

294305
if (!ethereumProvider) {
295306
this.emitError({

src/controllers/main/main.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,9 @@ export class MainController extends EventEmitter implements IMainController {
558558
this.domains = new DomainsController({
559559
eventEmitterRegistry,
560560
providers: this.providers.providers,
561-
defaultNetworksMode: this.networks.defaultNetworksMode
561+
defaultNetworksMode: this.networks.defaultNetworksMode,
562+
isNetworkEnabled: (chainId: bigint) =>
563+
!!this.networks.networks.find((n) => n.chainId === chainId)
562564
})
563565

564566
this.contractNames = new ContractNamesController({

0 commit comments

Comments
 (0)