Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change from infura to generic RPC URLS #636

Merged
merged 5 commits into from
Jan 30, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions frontend/src/components/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,15 @@ import { BigNumber } from 'src/utils/ethers';
import { JsonRpcSigner, Web3Provider } from 'src/utils/ethers';
apbendi marked this conversation as resolved.
Show resolved Hide resolved
import type { TokenList, TokenInfo } from '@uniswap/token-lists/dist/types';
import { UmbraLogger } from 'components/logger';
import { ETH_NETWORK_LOGO } from 'src/utils/constants';
import {
ETH_NETWORK_LOGO,
MAINNET_RPC_URL,
POLYGON_RPC_URL,
OPTIMISM_RPC_URL,
SEPOLIA_RPC_URL,
ARBITRUM_ONE_RPC_URL,
GNOSIS_CHAIN_RPC_URL,
} from 'src/utils/constants';

export type { TokenList, TokenInfo } from '@uniswap/token-lists/dist/types';
export { BigNumber } from 'src/utils/ethers';
Expand Down Expand Up @@ -50,7 +58,7 @@ export const supportedChains: Array<Chain> = [
decimals: 18,
logoURI: ETH_NETWORK_LOGO,
},
rpcUrls: [`https://mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`],
rpcUrls: [MAINNET_RPC_URL],
blockExplorerUrls: ['https://etherscan.io'],
iconUrls: [ETH_NETWORK_LOGO],
logoURI: ETH_NETWORK_LOGO,
Expand All @@ -65,7 +73,7 @@ export const supportedChains: Array<Chain> = [
decimals: 18,
logoURI: ETH_NETWORK_LOGO,
},
rpcUrls: [`https://sepolia.infura.io/v3/${String(process.env.INFURA_ID)}`],
rpcUrls: [SEPOLIA_RPC_URL],
blockExplorerUrls: ['https://sepolia.etherscan.io'],
iconUrls: [ETH_NETWORK_LOGO],
logoURI: ETH_NETWORK_LOGO,
Expand All @@ -80,7 +88,7 @@ export const supportedChains: Array<Chain> = [
decimals: 18,
logoURI: ETH_NETWORK_LOGO,
},
rpcUrls: ['https://mainnet.optimism.io', `https://optimism-mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`],
rpcUrls: ['https://mainnet.optimism.io', OPTIMISM_RPC_URL],
blockExplorerUrls: ['https://optimistic.etherscan.io'],
iconUrls: ['/networks/optimism.svg'],
logoURI: '/networks/optimism.svg',
Expand All @@ -95,7 +103,7 @@ export const supportedChains: Array<Chain> = [
decimals: 18,
logoURI: 'https://docs.gnosischain.com/img/tokens/xdai.png',
},
rpcUrls: ['https://rpc.ankr.com/gnosis'],
rpcUrls: ['https://rpc.ankr.com/gnosis', GNOSIS_CHAIN_RPC_URL],
blockExplorerUrls: ['https://gnosisscan.io'],
iconUrls: ['/networks/gnosis.svg'],
logoURI: '/networks/gnosis.svg',
Expand All @@ -110,7 +118,7 @@ export const supportedChains: Array<Chain> = [
decimals: 18,
logoURI: '/tokens/polygon.png',
},
rpcUrls: ['https://polygon-rpc.com/', `https://polygon-mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`],
rpcUrls: ['https://polygon-rpc.com/', POLYGON_RPC_URL],
blockExplorerUrls: ['https://polygonscan.com'],
iconUrls: ['/networks/polygon.svg'],
logoURI: '/networks/polygon.svg',
Expand All @@ -125,7 +133,7 @@ export const supportedChains: Array<Chain> = [
decimals: 18,
logoURI: ETH_NETWORK_LOGO,
},
rpcUrls: ['https://arb1.arbitrum.io/rpc', `https://arbitrum-mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`],
rpcUrls: ['https://arb1.arbitrum.io/rpc', ARBITRUM_ONE_RPC_URL],
blockExplorerUrls: ['https://arbiscan.io'],
iconUrls: ['/networks/arbitrum.svg'],
logoURI: '/networks/arbitrum.svg',
Expand Down
27 changes: 25 additions & 2 deletions frontend/src/utils/address.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,14 @@ import {
import { getChainById, jsonFetch } from 'src/utils/utils';
import { tc } from '../boot/i18n';
import Resolution from '@unstoppabledomains/resolution';
import { MAINNET_PROVIDER, POLYGON_PROVIDER, MULTICALL_ABI, MULTICALL_ADDRESS } from 'src/utils/constants';
import {
MAINNET_PROVIDER,
POLYGON_PROVIDER,
MULTICALL_ABI,
MULTICALL_ADDRESS,
MAINNET_RPC_URL,
POLYGON_RPC_URL,
} from 'src/utils/constants';
import { AddressZero, defaultAbiCoder } from 'src/utils/ethers';
import { UmbraApi } from 'src/utils/umbra-api';

Expand Down Expand Up @@ -49,7 +56,23 @@ export const lookupEnsName = async (address: string, provider: Provider | Static
export const lookupCnsName = async (address: string) => {
try {
// Send request to get names
const resolution = Resolution.infura(String(process.env.INFURA_ID));

const resolution = new Resolution({
sourceConfig: {
uns: {
locations: {
Layer1: {
url: MAINNET_RPC_URL,
network: 'mainnet',
},
Layer2: {
url: POLYGON_RPC_URL,
network: 'polygon-mainnet',
},
},
},
},
});
const domain = await resolution.reverse(address);
return domain;
} catch (err) {
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ export const MAINNET_RPC_URL = String(process.env.MAINNET_RPC_URL);
export const MAINNET_PROVIDER = new StaticJsonRpcProvider(MAINNET_RPC_URL);
export const POLYGON_RPC_URL = String(process.env.POLYGON_RPC_URL);
export const POLYGON_PROVIDER = new StaticJsonRpcProvider(POLYGON_RPC_URL);
export const OPTIMISM_RPC_URL = String(process.env.OPTIMISM_RPC_URL);
export const ARBITRUM_ONE_RPC_URL = String(process.env.ARBITRUM_ONE_RPC_URL);
export const SEPOLIA_RPC_URL = String(process.env.SEPOLIA_RPC_URL);
export const GNOSIS_CHAIN_RPC_URL = String(process.env.GNOSIS_CHAIN_RPC_URL);

console.log(`MAINNET_RPC_URL ${MAINNET_RPC_URL}`);

Expand Down
3 changes: 2 additions & 1 deletion frontend/src/utils/payment-links.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import { providerExport as provider, relayerExport as relayer, tokensExport as t
import { notifyUser } from 'src/utils/alerts';
import { BigNumber, StaticJsonRpcProvider } from 'src/utils/ethers';
import { UmbraApi } from 'src/utils/umbra-api';
import { MAINNET_RPC_URL } from 'src/utils/constants';

/**
* @notice Returns a provider, falling back to a mainnet provider if user's wallet is not connected
*/
function getProvider() {
return provider || new StaticJsonRpcProvider(`https://mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`);
return provider || new StaticJsonRpcProvider(MAINNET_RPC_URL);
}

/**
Expand Down
22 changes: 10 additions & 12 deletions umbra-js/src/classes/Umbra.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,18 +119,18 @@ const isEth = (token: string) => {
};

/**
* @notice Returns the Infura RPC URL for the provided chainId and Infura ID
* @notice Returns an RPC URL for the provided chainId
*/
const infuraUrl = (chainId: BigNumberish, infuraId: string) => {
const rpcUrlFromChain = (chainId: BigNumberish) => {
chainId = BigNumber.from(chainId).toNumber();
// For Hardhat, we just use the mainnet chain ID to avoid errors in tests, but this doesn't affect anything.
if (chainId === 1 || chainId === 1337) return `https://mainnet.infura.io/v3/${infuraId}`;
if (chainId === 10) return `https://optimism-mainnet.infura.io/v3/${infuraId}`;
if (chainId === 100) return 'https://rpc.ankr.com/gnosis';
if (chainId === 137) return `https://polygon-mainnet.infura.io/v3/${infuraId}`;
if (chainId === 42161) return `https://arbitrum-mainnet.infura.io/v3/${infuraId}`;
if (chainId === 11155111) return `https://sepolia.infura.io/v3/${infuraId}`;
throw new Error(`No Infura URL for chainId ${chainId}.`);
if (chainId === 1 || chainId === 1337) return String(process.env.MAINNET_RPC_URL);
if (chainId === 10) return String(process.env.OPTIMISM_RPC_URL);
if (chainId === 100) return String(process.env.GNOSIS_RPC_URL);
apbendi marked this conversation as resolved.
Show resolved Hide resolved
if (chainId === 137) return String(process.env.POLYGON_RPC_URL);
if (chainId === 42161) return String(process.env.ARBITRUM_RPC_URL);
apbendi marked this conversation as resolved.
Show resolved Hide resolved
if (chainId === 11155111) return String(process.env.MAINNET_SEPOLIA_URL);
apbendi marked this conversation as resolved.
Show resolved Hide resolved
throw new Error(`No RPC URL for chainId ${chainId}.`);
};

export class Umbra {
Expand All @@ -154,9 +154,7 @@ export class Umbra {
if (this.chainConfig.batchSendAddress) {
this.batchSendContract = new Contract(this.chainConfig.batchSendAddress, UMBRA_BATCH_SEND_ABI, provider);
}
this.fallbackProvider = new StaticJsonRpcProvider(
infuraUrl(this.chainConfig.chainId, String(process.env.INFURA_ID))
);
this.fallbackProvider = new StaticJsonRpcProvider(rpcUrlFromChain(this.chainConfig.chainId));
}

// ==================================== CONTRACT INTERACTION =====================================
Expand Down
22 changes: 18 additions & 4 deletions umbra-js/src/utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,22 @@ export function isDomain(name: string) {
*/

function getResolutionInstance() {
return Resolution.infura(String(process.env.INFURA_ID));
return new Resolution({
sourceConfig: {
uns: {
locations: {
Layer1: {
url: String(process.env.MAINNET_RPC_URL),
network: 'mainnet',
},
Layer2: {
url: String(process.env.POLYGON_RPC_URL),
network: 'polygon-mainnet',
},
},
},
},
});
}

/**
Expand All @@ -345,8 +360,7 @@ async function resolveEns(name: string, provider: EthersProvider) {
// and overriding with a mainnet provider otherwise. This ensures ENS resolution is always done
// against L1, as explained here: https://twitter.com/makoto_inoue/status/1453737962110275598
const { chainId } = await provider.getNetwork();
if (chainId !== 1)
provider = new StaticJsonRpcProvider(`https://mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`);
if (chainId !== 1) provider = new StaticJsonRpcProvider(String(process.env.MAINNET_RPC_URL));
const address = await provider.resolveName(name);
return address || null;
} catch (e) {
Expand Down Expand Up @@ -536,7 +550,7 @@ export async function checkSupportedAddresses(recipientIds: string[]) {
// If there are a lot of ENS or CNS names here this will send too many RPC requests and trigger
// errors. The current use case of this method takes addresses, so this should not be a problem.
// If it becomes a problem, add a batched version of toAddress.
const provider = new StaticJsonRpcProvider(`https://mainnet.infura.io/v3/${String(process.env.INFURA_ID)}`);
const provider = new StaticJsonRpcProvider(String(process.env.MAINNET_RPC_URL));
const addresses = await Promise.all(recipientIds.map((recipientId) => toAddress(recipientId, provider)));

// Initialize output, start by assuming all are supported.
Expand Down
Loading