Skip to content

Commit ab33c42

Browse files
feat(utils): add getChainIdFromProvider util
1 parent 206292b commit ab33c42

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

src/utils/getChainId.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {
2+
JsonRpcProvider,
3+
BrowserProvider,
4+
AbstractProvider,
5+
AbstractSigner,
6+
Eip1193Provider,
7+
} from 'ethers';
8+
import { DEFAULT_CHAIN_ID } from '../config/config.js';
9+
10+
type EthersCompatibleProvider =
11+
| string
12+
| AbstractProvider
13+
| AbstractSigner
14+
| Eip1193Provider;
15+
16+
export async function getChainIdFromProvider(
17+
ethProvider: EthersCompatibleProvider
18+
): Promise<number> {
19+
try {
20+
if (typeof ethProvider === 'string') {
21+
// Handle network string
22+
if (ethProvider === 'bellecour') return 134;
23+
// TODO add arbitrum & avalanche
24+
const provider = new JsonRpcProvider(ethProvider);
25+
const network = await provider.getNetwork();
26+
return Number(network.chainId);
27+
} else if (ethProvider instanceof AbstractProvider) {
28+
const network = await ethProvider.getNetwork();
29+
return Number(network.chainId);
30+
} else if (ethProvider instanceof AbstractSigner) {
31+
const { provider } = ethProvider;
32+
if (!provider) {
33+
throw Error('Signer is not connected to a provider');
34+
}
35+
const network = await provider.getNetwork();
36+
return Number(network.chainId);
37+
} else if ('request' in ethProvider) {
38+
const provider = new BrowserProvider(ethProvider as Eip1193Provider);
39+
const network = await provider.getNetwork();
40+
return Number(network.chainId);
41+
}
42+
} catch (e) {
43+
console.warn('Failed to detect chainId:', e);
44+
}
45+
return DEFAULT_CHAIN_ID;
46+
}

0 commit comments

Comments
 (0)