Explorer: Add support for cluster specific program ids (#23609)

This commit is contained in:
Justin Starry
2022-03-11 23:22:31 +08:00
committed by GitHub
parent 043086081f
commit 4f18d73281
2 changed files with 256 additions and 150 deletions

View File

@@ -5,11 +5,10 @@ import Select, { InputActionMeta, ActionMeta, ValueType } from "react-select";
import StateManager from "react-select"; import StateManager from "react-select";
import { import {
LOADER_IDS, LOADER_IDS,
PROGRAM_NAME_BY_ID, PROGRAM_INFO_BY_ID,
SPECIAL_IDS, SPECIAL_IDS,
SYSVAR_IDS, SYSVAR_IDS,
LoaderName, LoaderName,
programLabel,
} from "utils/tx"; } from "utils/tx";
import { Cluster, useCluster } from "providers/cluster"; import { Cluster, useCluster } from "providers/cluster";
import { useTokenRegistry } from "providers/mints/token-registry"; import { useTokenRegistry } from "providers/mints/token-registry";
@@ -73,10 +72,9 @@ export function SearchBar() {
} }
function buildProgramOptions(search: string, cluster: Cluster) { function buildProgramOptions(search: string, cluster: Cluster) {
const matchedPrograms = Object.entries(PROGRAM_NAME_BY_ID).filter( const matchedPrograms = Object.entries(PROGRAM_INFO_BY_ID).filter(
([address]) => { ([address, { name, deployments }]) => {
const name = programLabel(address, cluster); if (!deployments.includes(cluster)) return false;
if (!name) return false;
return ( return (
name.toLowerCase().includes(search.toLowerCase()) || name.toLowerCase().includes(search.toLowerCase()) ||
address.includes(search) address.includes(search)
@@ -87,10 +85,10 @@ function buildProgramOptions(search: string, cluster: Cluster) {
if (matchedPrograms.length > 0) { if (matchedPrograms.length > 0) {
return { return {
label: "Programs", label: "Programs",
options: matchedPrograms.map(([id, name]) => ({ options: matchedPrograms.map(([address, { name }]) => ({
label: name, label: name,
value: [name, id], value: [name, address],
pathname: "/address/" + id, pathname: "/address/" + address,
})), })),
}; };
} }

View File

@@ -21,9 +21,6 @@ import { Cluster } from "providers/cluster";
import { SerumMarketRegistry } from "serumMarketRegistry"; import { SerumMarketRegistry } from "serumMarketRegistry";
import { TokenInfoMap } from "@solana/spl-token-registry"; import { TokenInfoMap } from "@solana/spl-token-registry";
export type ProgramName =
typeof PROGRAM_NAME_BY_ID[keyof typeof PROGRAM_NAME_BY_ID];
export enum PROGRAM_NAMES { export enum PROGRAM_NAMES {
// native built-ins // native built-ins
ADDRESS_MAP = "Address Map Program", ADDRESS_MAP = "Address Map Program",
@@ -67,7 +64,9 @@ export enum PROGRAM_NAMES {
ORCA_SWAP_2 = "Orca Swap Program v2", ORCA_SWAP_2 = "Orca Swap Program v2",
ORCA_AQUAFARM = "Orca Aquafarm Program", ORCA_AQUAFARM = "Orca Aquafarm Program",
PORT = "Port Finance Program", PORT = "Port Finance Program",
PYTH = "Pyth Oracle Program", PYTH_DEVNET = "Pyth Oracle Program",
PYTH_TESTNET = "Pyth Oracle Program",
PYTH_MAINNET = "Pyth Oracle Program",
QUARRY_MERGE_MINE = "Quarry Merge Mine", QUARRY_MERGE_MINE = "Quarry Merge Mine",
QUARRY_MINE = "Quarry Mine", QUARRY_MINE = "Quarry Mine",
QUARRY_MINT_WRAPPER = "Quarry Mint Wrapper", QUARRY_MINT_WRAPPER = "Quarry Mint Wrapper",
@@ -99,148 +98,257 @@ const ALL_CLUSTERS = [
]; ];
const LIVE_CLUSTERS = [Cluster.Devnet, Cluster.Testnet, Cluster.MainnetBeta]; const LIVE_CLUSTERS = [Cluster.Devnet, Cluster.Testnet, Cluster.MainnetBeta];
const MAINNET_ONLY = [Cluster.MainnetBeta];
export const PROGRAM_DEPLOYMENTS = { export type ProgramInfo = {
name: string;
deployments: Cluster[];
};
export const PROGRAM_INFO_BY_ID: { [address: string]: ProgramInfo } = {
// native built-ins // native built-ins
[PROGRAM_NAMES.ADDRESS_MAP]: ALL_CLUSTERS, AddressMap111111111111111111111111111111111: {
[PROGRAM_NAMES.CONFIG]: ALL_CLUSTERS, name: PROGRAM_NAMES.ADDRESS_MAP,
[PROGRAM_NAMES.STAKE]: ALL_CLUSTERS, deployments: ALL_CLUSTERS,
[PROGRAM_NAMES.SYSTEM]: ALL_CLUSTERS, },
[PROGRAM_NAMES.VOTE]: ALL_CLUSTERS, Config1111111111111111111111111111111111111: {
name: PROGRAM_NAMES.CONFIG,
deployments: ALL_CLUSTERS,
},
[StakeProgram.programId.toBase58()]: {
name: PROGRAM_NAMES.STAKE,
deployments: ALL_CLUSTERS,
},
[SystemProgram.programId.toBase58()]: {
name: PROGRAM_NAMES.SYSTEM,
deployments: ALL_CLUSTERS,
},
[VOTE_PROGRAM_ID.toBase58()]: {
name: PROGRAM_NAMES.VOTE,
deployments: ALL_CLUSTERS,
},
// native precompiles // native precompiles
[PROGRAM_NAMES.SECP256K1]: ALL_CLUSTERS, [Secp256k1Program.programId.toBase58()]: {
[PROGRAM_NAMES.ED25519]: ALL_CLUSTERS, name: PROGRAM_NAMES.SECP256K1,
deployments: ALL_CLUSTERS,
},
[Ed25519Program.programId.toBase58()]: {
name: PROGRAM_NAMES.ED25519,
deployments: ALL_CLUSTERS,
},
// spl // spl
[PROGRAM_NAMES.ASSOCIATED_TOKEN]: ALL_CLUSTERS, ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL: {
[PROGRAM_NAMES.FEATURE_PROPOSAL]: ALL_CLUSTERS, name: PROGRAM_NAMES.ASSOCIATED_TOKEN,
[PROGRAM_NAMES.LENDING]: LIVE_CLUSTERS, deployments: ALL_CLUSTERS,
[PROGRAM_NAMES.MEMO]: ALL_CLUSTERS, },
[PROGRAM_NAMES.MEMO_2]: ALL_CLUSTERS, Feat1YXHhH6t1juaWF74WLcfv4XoNocjXA6sPWHNgAse: {
[PROGRAM_NAMES.NAME]: LIVE_CLUSTERS, name: PROGRAM_NAMES.FEATURE_PROPOSAL,
[PROGRAM_NAMES.STAKE_POOL]: LIVE_CLUSTERS, deployments: ALL_CLUSTERS,
[PROGRAM_NAMES.SWAP]: LIVE_CLUSTERS, },
[PROGRAM_NAMES.TOKEN]: ALL_CLUSTERS, LendZqTs7gn5CTSJU1jWKhKuVpjJGom45nnwPb2AMTi: {
[PROGRAM_NAMES.TOKEN_METADATA]: LIVE_CLUSTERS, name: PROGRAM_NAMES.LENDING,
[PROGRAM_NAMES.TOKEN_VAULT]: LIVE_CLUSTERS, deployments: LIVE_CLUSTERS,
},
Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo: {
name: PROGRAM_NAMES.MEMO,
deployments: ALL_CLUSTERS,
},
MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr: {
name: PROGRAM_NAMES.MEMO_2,
deployments: ALL_CLUSTERS,
},
namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX: {
name: PROGRAM_NAMES.NAME,
deployments: LIVE_CLUSTERS,
},
SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy: {
name: PROGRAM_NAMES.STAKE_POOL,
deployments: LIVE_CLUSTERS,
},
SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8: {
name: PROGRAM_NAMES.SWAP,
deployments: LIVE_CLUSTERS,
},
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA: {
name: PROGRAM_NAMES.TOKEN,
deployments: ALL_CLUSTERS,
},
metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s: {
name: PROGRAM_NAMES.TOKEN_METADATA,
deployments: LIVE_CLUSTERS,
},
vau1zxA2LbssAUEF7Gpw91zMM1LvXrvpzJtmZ58rPsn: {
name: PROGRAM_NAMES.TOKEN_VAULT,
deployments: LIVE_CLUSTERS,
},
// other // other
[PROGRAM_NAMES.ACUMEN]: MAINNET_ONLY, C64kTdg1Hzv5KoQmZrQRcm2Qz7PkxtFBgw7EpFhvYn8W: {
[PROGRAM_NAMES.BONFIDA_POOL]: MAINNET_ONLY, name: PROGRAM_NAMES.ACUMEN,
[PROGRAM_NAMES.BREAK_SOLANA]: LIVE_CLUSTERS, deployments: [Cluster.MainnetBeta],
[PROGRAM_NAMES.MANGO_GOVERNANCE]: MAINNET_ONLY, },
[PROGRAM_NAMES.MANGO_ICO]: MAINNET_ONLY, WvmTNLpGMVbwJVYztYL4Hnsy82cJhQorxjnnXcRm3b6: {
[PROGRAM_NAMES.MANGO_1]: MAINNET_ONLY, name: PROGRAM_NAMES.BONFIDA_POOL,
[PROGRAM_NAMES.MANGO_2]: MAINNET_ONLY, deployments: [Cluster.MainnetBeta],
[PROGRAM_NAMES.MANGO_3]: MAINNET_ONLY, },
[PROGRAM_NAMES.MARINADE]: MAINNET_ONLY, BrEAK7zGZ6dM71zUDACDqJnekihmwF15noTddWTsknjC: {
[PROGRAM_NAMES.MERCURIAL]: [Cluster.Devnet, Cluster.MainnetBeta] as Cluster[], name: PROGRAM_NAMES.BREAK_SOLANA,
[PROGRAM_NAMES.METAPLEX]: LIVE_CLUSTERS, deployments: LIVE_CLUSTERS,
[PROGRAM_NAMES.NFT_AUCTION]: LIVE_CLUSTERS, },
[PROGRAM_NAMES.NFT_CANDY_MACHINE]: LIVE_CLUSTERS, GqTPL6qRf5aUuqscLh8Rg2HTxPUXfhhAXDptTLhp1t2J: {
[PROGRAM_NAMES.ORCA_SWAP_1]: MAINNET_ONLY, name: PROGRAM_NAMES.MANGO_GOVERNANCE,
[PROGRAM_NAMES.ORCA_SWAP_2]: MAINNET_ONLY, deployments: [Cluster.MainnetBeta],
[PROGRAM_NAMES.ORCA_AQUAFARM]: MAINNET_ONLY, },
[PROGRAM_NAMES.PORT]: MAINNET_ONLY, "7sPptkymzvayoSbLXzBsXEF8TSf3typNnAWkrKrDizNb": {
[PROGRAM_NAMES.PYTH]: MAINNET_ONLY, name: PROGRAM_NAMES.MANGO_ICO,
[PROGRAM_NAMES.QUARRY_MERGE_MINE]: LIVE_CLUSTERS, deployments: [Cluster.MainnetBeta],
[PROGRAM_NAMES.QUARRY_MINE]: LIVE_CLUSTERS, },
[PROGRAM_NAMES.QUARRY_MINT_WRAPPER]: LIVE_CLUSTERS, JD3bq9hGdy38PuWQ4h2YJpELmHVGPPfFSuFkpzAd9zfu: {
[PROGRAM_NAMES.QUARRY_REDEEMER]: LIVE_CLUSTERS, name: PROGRAM_NAMES.MANGO_1,
[PROGRAM_NAMES.QUARRY_REGISTRY]: LIVE_CLUSTERS, deployments: [Cluster.MainnetBeta],
[PROGRAM_NAMES.RAYDIUM_AMM]: MAINNET_ONLY, },
[PROGRAM_NAMES.RAYDIUM_IDO]: MAINNET_ONLY, "5fNfvyp5czQVX77yoACa3JJVEhdRaWjPuazuWgjhTqEH": {
[PROGRAM_NAMES.RAYDIUM_LP_1]: MAINNET_ONLY, name: PROGRAM_NAMES.MANGO_2,
[PROGRAM_NAMES.RAYDIUM_LP_2]: MAINNET_ONLY, deployments: [Cluster.MainnetBeta],
[PROGRAM_NAMES.RAYDIUM_STAKING]: MAINNET_ONLY, },
[PROGRAM_NAMES.SABER_ROUTER]: [ mv3ekLzLbnVPNxjSKvqBpU3ZeZXPQdEC3bp5MDEBG68: {
Cluster.Devnet, name: PROGRAM_NAMES.MANGO_3,
Cluster.MainnetBeta, deployments: [Cluster.MainnetBeta],
] as Cluster[], },
[PROGRAM_NAMES.SABER_SWAP]: [ MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD: {
Cluster.Devnet, name: PROGRAM_NAMES.MARINADE,
Cluster.MainnetBeta, deployments: [Cluster.MainnetBeta],
] as Cluster[], },
[PROGRAM_NAMES.SERUM_1]: MAINNET_ONLY, MERLuDFBMmsHnsBPZw2sDQZHvXFMwp8EdjudcU2HKky: {
[PROGRAM_NAMES.SERUM_2]: MAINNET_ONLY, name: PROGRAM_NAMES.MERCURIAL,
[PROGRAM_NAMES.SERUM_3]: MAINNET_ONLY, deployments: [Cluster.Devnet, Cluster.MainnetBeta],
[PROGRAM_NAMES.SERUM_SWAP]: MAINNET_ONLY, },
[PROGRAM_NAMES.SOLEND]: MAINNET_ONLY, p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98: {
[PROGRAM_NAMES.SOLIDO]: MAINNET_ONLY, name: PROGRAM_NAMES.METAPLEX,
[PROGRAM_NAMES.STEP_SWAP]: MAINNET_ONLY, deployments: LIVE_CLUSTERS,
[PROGRAM_NAMES.SWITCHBOARD]: MAINNET_ONLY, },
[PROGRAM_NAMES.WORMHOLE]: MAINNET_ONLY, auctxRXPeJoc4817jDhf4HbjnhEcr1cCXenosMhK5R8: {
} as const; name: PROGRAM_NAMES.NFT_AUCTION,
deployments: LIVE_CLUSTERS,
export const PROGRAM_NAME_BY_ID = { },
// native built-ins cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ: {
AddressMap111111111111111111111111111111111: PROGRAM_NAMES.ADDRESS_MAP, name: PROGRAM_NAMES.NFT_CANDY_MACHINE,
Config1111111111111111111111111111111111111: PROGRAM_NAMES.CONFIG, deployments: LIVE_CLUSTERS,
[StakeProgram.programId.toBase58()]: PROGRAM_NAMES.STAKE, },
[SystemProgram.programId.toBase58()]: PROGRAM_NAMES.SYSTEM, DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1: {
[VOTE_PROGRAM_ID.toBase58()]: PROGRAM_NAMES.VOTE, name: PROGRAM_NAMES.ORCA_SWAP_1,
deployments: [Cluster.MainnetBeta],
// native precompiles },
[Secp256k1Program.programId.toBase58()]: PROGRAM_NAMES.SECP256K1, "9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP": {
[Ed25519Program.programId.toBase58()]: PROGRAM_NAMES.ED25519, name: PROGRAM_NAMES.ORCA_SWAP_2,
deployments: [Cluster.MainnetBeta],
// spl },
ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL: PROGRAM_NAMES.ASSOCIATED_TOKEN, "82yxjeMsvaURa4MbZZ7WZZHfobirZYkH1zF8fmeGtyaQ": {
Feat1YXHhH6t1juaWF74WLcfv4XoNocjXA6sPWHNgAse: PROGRAM_NAMES.FEATURE_PROPOSAL, name: PROGRAM_NAMES.ORCA_AQUAFARM,
LendZqTs7gn5CTSJU1jWKhKuVpjJGom45nnwPb2AMTi: PROGRAM_NAMES.LENDING, deployments: [Cluster.MainnetBeta],
Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo: PROGRAM_NAMES.MEMO, },
MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr: PROGRAM_NAMES.MEMO_2, Port7uDYB3wk6GJAw4KT1WpTeMtSu9bTcChBHkX2LfR: {
namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX: PROGRAM_NAMES.NAME, name: PROGRAM_NAMES.PORT,
SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy: PROGRAM_NAMES.STAKE_POOL, deployments: [Cluster.MainnetBeta],
SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8: PROGRAM_NAMES.SWAP, },
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA: PROGRAM_NAMES.TOKEN, gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s: {
metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s: PROGRAM_NAMES.TOKEN_METADATA, name: PROGRAM_NAMES.PYTH_DEVNET,
vau1zxA2LbssAUEF7Gpw91zMM1LvXrvpzJtmZ58rPsn: PROGRAM_NAMES.TOKEN_VAULT, deployments: [Cluster.Devnet],
},
// other "8tfDNiaEyrV6Q1U4DEXrEigs9DoDtkugzFbybENEbCDz": {
C64kTdg1Hzv5KoQmZrQRcm2Qz7PkxtFBgw7EpFhvYn8W: PROGRAM_NAMES.ACUMEN, name: PROGRAM_NAMES.PYTH_TESTNET,
WvmTNLpGMVbwJVYztYL4Hnsy82cJhQorxjnnXcRm3b6: PROGRAM_NAMES.BONFIDA_POOL, deployments: [Cluster.Testnet],
BrEAK7zGZ6dM71zUDACDqJnekihmwF15noTddWTsknjC: PROGRAM_NAMES.BREAK_SOLANA, },
GqTPL6qRf5aUuqscLh8Rg2HTxPUXfhhAXDptTLhp1t2J: PROGRAM_NAMES.MANGO_GOVERNANCE, FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH: {
"7sPptkymzvayoSbLXzBsXEF8TSf3typNnAWkrKrDizNb": PROGRAM_NAMES.MANGO_ICO, name: PROGRAM_NAMES.PYTH_MAINNET,
JD3bq9hGdy38PuWQ4h2YJpELmHVGPPfFSuFkpzAd9zfu: PROGRAM_NAMES.MANGO_1, deployments: [Cluster.MainnetBeta],
"5fNfvyp5czQVX77yoACa3JJVEhdRaWjPuazuWgjhTqEH": PROGRAM_NAMES.MANGO_2, },
mv3ekLzLbnVPNxjSKvqBpU3ZeZXPQdEC3bp5MDEBG68: PROGRAM_NAMES.MANGO_3, QMMD16kjauP5knBwxNUJRZ1Z5o3deBuFrqVjBVmmqto: {
MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD: PROGRAM_NAMES.MARINADE, name: PROGRAM_NAMES.QUARRY_MERGE_MINE,
MERLuDFBMmsHnsBPZw2sDQZHvXFMwp8EdjudcU2HKky: PROGRAM_NAMES.MERCURIAL, deployments: LIVE_CLUSTERS,
p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98: PROGRAM_NAMES.METAPLEX, },
auctxRXPeJoc4817jDhf4HbjnhEcr1cCXenosMhK5R8: PROGRAM_NAMES.NFT_AUCTION, QMNeHCGYnLVDn1icRAfQZpjPLBNkfGbSKRB83G5d8KB: {
cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ: PROGRAM_NAMES.NFT_CANDY_MACHINE, name: PROGRAM_NAMES.QUARRY_MINE,
DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1: PROGRAM_NAMES.ORCA_SWAP_1, deployments: LIVE_CLUSTERS,
"9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP": PROGRAM_NAMES.ORCA_SWAP_2, },
"82yxjeMsvaURa4MbZZ7WZZHfobirZYkH1zF8fmeGtyaQ": PROGRAM_NAMES.ORCA_AQUAFARM, QMWoBmAyJLAsA1Lh9ugMTw2gciTihncciphzdNzdZYV: {
Port7uDYB3wk6GJAw4KT1WpTeMtSu9bTcChBHkX2LfR: PROGRAM_NAMES.PORT, name: PROGRAM_NAMES.QUARRY_MINT_WRAPPER,
FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH: PROGRAM_NAMES.PYTH, deployments: LIVE_CLUSTERS,
QMMD16kjauP5knBwxNUJRZ1Z5o3deBuFrqVjBVmmqto: PROGRAM_NAMES.QUARRY_MERGE_MINE, },
QMNeHCGYnLVDn1icRAfQZpjPLBNkfGbSKRB83G5d8KB: PROGRAM_NAMES.QUARRY_MINE, QRDxhMw1P2NEfiw5mYXG79bwfgHTdasY2xNP76XSea9: {
QMWoBmAyJLAsA1Lh9ugMTw2gciTihncciphzdNzdZYV: name: PROGRAM_NAMES.QUARRY_REDEEMER,
PROGRAM_NAMES.QUARRY_MINT_WRAPPER, deployments: LIVE_CLUSTERS,
QRDxhMw1P2NEfiw5mYXG79bwfgHTdasY2xNP76XSea9: PROGRAM_NAMES.QUARRY_REDEEMER, },
QREGBnEj9Sa5uR91AV8u3FxThgP5ZCvdZUW2bHAkfNc: PROGRAM_NAMES.QUARRY_REGISTRY, QREGBnEj9Sa5uR91AV8u3FxThgP5ZCvdZUW2bHAkfNc: {
"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8": PROGRAM_NAMES.RAYDIUM_AMM, name: PROGRAM_NAMES.QUARRY_REGISTRY,
"9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC": PROGRAM_NAMES.RAYDIUM_IDO, deployments: LIVE_CLUSTERS,
RVKd61ztZW9GUwhRbbLoYVRE5Xf1B2tVscKqwZqXgEr: PROGRAM_NAMES.RAYDIUM_LP_1, },
"27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv": PROGRAM_NAMES.RAYDIUM_LP_2, "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8": {
EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q: PROGRAM_NAMES.RAYDIUM_STAKING, name: PROGRAM_NAMES.RAYDIUM_AMM,
Crt7UoUR6QgrFrN7j8rmSQpUTNWNSitSwWvsWGf1qZ5t: PROGRAM_NAMES.SABER_ROUTER, deployments: [Cluster.MainnetBeta],
SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ: PROGRAM_NAMES.SABER_SWAP, },
BJ3jrUzddfuSrZHXSCxMUUQsjKEyLmuuyZebkcaFp2fg: PROGRAM_NAMES.SERUM_1, "9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC": {
EUqojwWA2rd19FZrzeBncJsm38Jm1hEhE3zsmX3bRc2o: PROGRAM_NAMES.SERUM_2, name: PROGRAM_NAMES.RAYDIUM_IDO,
"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin": PROGRAM_NAMES.SERUM_3, deployments: [Cluster.MainnetBeta],
"22Y43yTVxuUkoRKdm9thyRhQ3SdgQS7c7kB6UNCiaczD": PROGRAM_NAMES.SERUM_SWAP, },
So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo: PROGRAM_NAMES.SOLEND, RVKd61ztZW9GUwhRbbLoYVRE5Xf1B2tVscKqwZqXgEr: {
CrX7kMhLC3cSsXJdT7JDgqrRVWGnUpX3gfEfxxU2NVLi: PROGRAM_NAMES.SOLIDO, name: PROGRAM_NAMES.RAYDIUM_LP_1,
SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1: PROGRAM_NAMES.STEP_SWAP, deployments: [Cluster.MainnetBeta],
DtmE9D2CSB4L5D6A15mraeEjrGMm6auWVzgaD8hK2tZM: PROGRAM_NAMES.SWITCHBOARD, },
WormT3McKhFJ2RkiGpdw9GKvNCrB2aB54gb2uV9MfQC: PROGRAM_NAMES.WORMHOLE, "27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv": {
} as const; name: PROGRAM_NAMES.RAYDIUM_LP_2,
deployments: [Cluster.MainnetBeta],
},
EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q: {
name: PROGRAM_NAMES.RAYDIUM_STAKING,
deployments: [Cluster.MainnetBeta],
},
Crt7UoUR6QgrFrN7j8rmSQpUTNWNSitSwWvsWGf1qZ5t: {
name: PROGRAM_NAMES.SABER_ROUTER,
deployments: [Cluster.Devnet, Cluster.MainnetBeta],
},
SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ: {
name: PROGRAM_NAMES.SABER_SWAP,
deployments: [Cluster.Devnet, Cluster.MainnetBeta],
},
BJ3jrUzddfuSrZHXSCxMUUQsjKEyLmuuyZebkcaFp2fg: {
name: PROGRAM_NAMES.SERUM_1,
deployments: [Cluster.MainnetBeta],
},
EUqojwWA2rd19FZrzeBncJsm38Jm1hEhE3zsmX3bRc2o: {
name: PROGRAM_NAMES.SERUM_2,
deployments: [Cluster.MainnetBeta],
},
"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin": {
name: PROGRAM_NAMES.SERUM_3,
deployments: [Cluster.MainnetBeta],
},
"22Y43yTVxuUkoRKdm9thyRhQ3SdgQS7c7kB6UNCiaczD": {
name: PROGRAM_NAMES.SERUM_SWAP,
deployments: [Cluster.MainnetBeta],
},
So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo: {
name: PROGRAM_NAMES.SOLEND,
deployments: [Cluster.MainnetBeta],
},
CrX7kMhLC3cSsXJdT7JDgqrRVWGnUpX3gfEfxxU2NVLi: {
name: PROGRAM_NAMES.SOLIDO,
deployments: [Cluster.MainnetBeta],
},
SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1: {
name: PROGRAM_NAMES.STEP_SWAP,
deployments: [Cluster.MainnetBeta],
},
DtmE9D2CSB4L5D6A15mraeEjrGMm6auWVzgaD8hK2tZM: {
name: PROGRAM_NAMES.SWITCHBOARD,
deployments: [Cluster.MainnetBeta],
},
WormT3McKhFJ2RkiGpdw9GKvNCrB2aB54gb2uV9MfQC: {
name: PROGRAM_NAMES.WORMHOLE,
deployments: [Cluster.MainnetBeta],
},
};
export type LoaderName = typeof LOADER_IDS[keyof typeof LOADER_IDS]; export type LoaderName = typeof LOADER_IDS[keyof typeof LOADER_IDS];
export const LOADER_IDS = { export const LOADER_IDS = {
@@ -273,9 +381,9 @@ export function programLabel(
address: string, address: string,
cluster: Cluster cluster: Cluster
): string | undefined { ): string | undefined {
const programName = PROGRAM_NAME_BY_ID[address]; const programInfo = PROGRAM_INFO_BY_ID[address];
if (programName && PROGRAM_DEPLOYMENTS[programName].includes(cluster)) { if (programInfo && programInfo.deployments.includes(cluster)) {
return programName; return programInfo.name;
} }
return LOADER_IDS[address]; return LOADER_IDS[address];