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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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 {
LOADER_IDS,
PROGRAM_NAME_BY_ID,
PROGRAM_INFO_BY_ID,
SPECIAL_IDS,
SYSVAR_IDS,
LoaderName,
programLabel,
} from "utils/tx";
import { Cluster, useCluster } from "providers/cluster";
import { useTokenRegistry } from "providers/mints/token-registry";
@ -73,10 +72,9 @@ export function SearchBar() {
}
function buildProgramOptions(search: string, cluster: Cluster) {
const matchedPrograms = Object.entries(PROGRAM_NAME_BY_ID).filter(
([address]) => {
const name = programLabel(address, cluster);
if (!name) return false;
const matchedPrograms = Object.entries(PROGRAM_INFO_BY_ID).filter(
([address, { name, deployments }]) => {
if (!deployments.includes(cluster)) return false;
return (
name.toLowerCase().includes(search.toLowerCase()) ||
address.includes(search)
@ -87,10 +85,10 @@ function buildProgramOptions(search: string, cluster: Cluster) {
if (matchedPrograms.length > 0) {
return {
label: "Programs",
options: matchedPrograms.map(([id, name]) => ({
options: matchedPrograms.map(([address, { name }]) => ({
label: name,
value: [name, id],
pathname: "/address/" + id,
value: [name, address],
pathname: "/address/" + address,
})),
};
}

View File

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