diff --git a/src/app.controller.ts b/src/app.controller.ts
index 9e242cb..db83ad7 100644
--- a/src/app.controller.ts
+++ b/src/app.controller.ts
@@ -80,7 +80,7 @@ li {
Fork me on GitHub
powered by etherscan for ABIs and cloudflare for ethereum endpoints
now querying ${hostFirst}. supports: ethereum, goerli, polygon, mumbai
-bsc, bsc-testnet, kovan optimism, optimism
+bsc, bsc-testnet, kovan optimism, optimism, arbitrum
try it:
diff --git a/src/constants/chainid.ts b/src/constants/chainid.ts
index 16447da..56192bd 100644
--- a/src/constants/chainid.ts
+++ b/src/constants/chainid.ts
@@ -4,3 +4,4 @@ export const OPTIMISM_GOERLI_CHAIN = 420
export const OPTIMISM_CHAIN = 10
export const BASE_GOERLI_CHAIN = 84531
export const BASE_CHAIN = 8453
+export const ARBITRUM_CHAIN = 42161;
\ No newline at end of file
diff --git a/src/ethereum/ethereum.module.ts b/src/ethereum/ethereum.module.ts
index 12bac09..b7a75f9 100644
--- a/src/ethereum/ethereum.module.ts
+++ b/src/ethereum/ethereum.module.ts
@@ -16,6 +16,7 @@ import {
OPTIMISM_CHAIN,
ZORA_CHAIN,
ZORA_GOERLI_CHAIN,
+ ARBITRUM_CHAIN,
} from 'src/constants/chainid';
const NETWORK_CONFIGS = JSON.parse(process.env.RPC_NETWORK_CONFIGS);
@@ -115,6 +116,15 @@ const NETWORK_CONFIGS = JSON.parse(process.env.RPC_NETWORK_CONFIGS);
custom: 'https://testnet.rpc.zora.energy',
useDefaultProvider: false,
}),
+ EthersModule.forRoot({
+ token: 'arbitrum',
+ network: {
+ chainId: ARBITRUM_CHAIN,
+ name: 'arbitrum',
+ },
+ custom: NETWORK_CONFIGS.arbitrum || 'https://arb1.arbitrum.io/rpc',
+ useDefaultProvider: false,
+ }),
],
})
export class EthereumModule {}
diff --git a/src/ethereum/ethereum.service.ts b/src/ethereum/ethereum.service.ts
index 3bdbe63..44d1bad 100644
--- a/src/ethereum/ethereum.service.ts
+++ b/src/ethereum/ethereum.service.ts
@@ -9,7 +9,7 @@ import {
MUMBAI_NETWORK,
} from 'nestjs-ethers';
import { EtherscanProvider, StaticJsonRpcProvider } from '@ethersproject/providers';
-import { OPTIMISM_CHAIN, OPTIMISM_GOERLI_CHAIN, ZORA_CHAIN, ZORA_GOERLI_CHAIN, BASE_CHAIN, BASE_GOERLI_CHAIN } from 'src/constants/chainid';
+import { OPTIMISM_CHAIN, OPTIMISM_GOERLI_CHAIN, ZORA_CHAIN, ZORA_GOERLI_CHAIN, BASE_CHAIN, BASE_GOERLI_CHAIN, ARBITRUM_CHAIN } from 'src/constants/chainid';
// const last = EtherscanProvider.prototype.getBaseUrl;
EtherscanProvider.prototype.getBaseUrl = function () {
@@ -52,6 +52,9 @@ EtherscanProvider.prototype.getBaseUrl = function () {
if (this.network.chainId === BASE_CHAIN) {
return 'https://api.basescan.org/';
}
+ if (this.network.chainId === ARBITRUM_CHAIN) {
+ return 'https://api.arbiscan.io/';
+ }
throw new Error('undefined chain');
};
@@ -81,6 +84,8 @@ export class EthereumService {
private readonly baseProvider: StaticJsonRpcProvider,
@InjectEthersProvider('base-goerli')
private readonly baseGoerliProvider: StaticJsonRpcProvider,
+ @InjectEthersProvider('arbitrum')
+ private readonly arbitrumProvider: StaticJsonRpcProvider,
) {}
getNetworkId(host: string) {
@@ -117,6 +122,8 @@ export class EthereumService {
return BASE_CHAIN;
case 'base-goerli':
return BASE_GOERLI_CHAIN;
+ case 'arbitrum':
+ return ARBITRUM_CHAIN;
}
throw new NotFoundException();
}
@@ -149,6 +156,8 @@ export class EthereumService {
return this.baseProvider;
case BASE_GOERLI_CHAIN:
return this.baseGoerliProvider;
+ case ARBITRUM_CHAIN:
+ return this.arbitrumProvider;
}
}