@iexec/web3telegram
Version:
Enables secure, blockchain-based messaging by encrypting Telegram user IDs for privacy. It lets users message Ethereum account holders without knowing their Telegram details.
47 lines (44 loc) • 1.45 kB
text/typescript
import {
JsonRpcProvider,
BrowserProvider,
AbstractProvider,
AbstractSigner,
Eip1193Provider,
} from 'ethers';
import { DEFAULT_CHAIN_ID } from '../config/config.js';
type EthersCompatibleProvider =
| string
| AbstractProvider
| AbstractSigner
| Eip1193Provider;
export async function getChainIdFromProvider(
ethProvider: EthersCompatibleProvider
): Promise<number> {
try {
if (typeof ethProvider === 'string') {
// Handle network string
if (ethProvider === 'bellecour') return 134;
// TODO add arbitrum & avalanche
const provider = new JsonRpcProvider(ethProvider);
const network = await provider.getNetwork();
return Number(network.chainId);
} else if (ethProvider instanceof AbstractProvider) {
const network = await ethProvider.getNetwork();
return Number(network.chainId);
} else if (ethProvider instanceof AbstractSigner) {
const { provider } = ethProvider;
if (!provider) {
throw Error('Signer is not connected to a provider');
}
const network = await provider.getNetwork();
return Number(network.chainId);
} else if ('request' in ethProvider) {
const provider = new BrowserProvider(ethProvider as Eip1193Provider);
const network = await provider.getNetwork();
return Number(network.chainId);
}
} catch (e) {
console.warn('Failed to detect chainId:', e);
}
return DEFAULT_CHAIN_ID;
}