@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
125 lines • 4.02 kB
JavaScript
/**
* @purpose Centralized program and token addresses for different networks
*
* Single source of truth for all Solana program addresses used by SRSLY.
* Supports mainnet-beta, devnet, and localnet environments.
*/
import { SRSLY_PROGRAM_ADDRESS } from '../generated/codama';
import { ANTEGEN_THREAD_PROGRAM } from '../pda/constants';
/**
* Genesis hash constants — canonical chain identifiers
*/
export const MAINNET_GENESIS = '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d';
export const DEVNET_GENESIS = 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG';
export const ATLASNET_GENESIS = 'Ccod9gttTtZWqCeMgyTW3iCSoPLjkptAGsBUeP2CpchR';
const ALIAS_TO_GENESIS = {
mainnet: MAINNET_GENESIS,
atlasnet: ATLASNET_GENESIS,
holosim: ATLASNET_GENESIS,
localnet: ATLASNET_GENESIS,
};
/**
* Antegen program address (same across all networks)
*/
const ANTEGEN_PROGRAM = ANTEGEN_THREAD_PROGRAM;
/**
* Mainnet addresses (production Star Atlas)
*/
const MAINNET_ADDRESSES = {
srsly: SRSLY_PROGRAM_ADDRESS,
sage: 'SAGE2HAwep459SNq61LHvjxPk4pLPEJLoMETef7f7EE',
antegen: ANTEGEN_PROGRAM,
atlasMint: 'ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx',
profileFaction: 'pFACSRuobDmvfMKq1bAzwj27t6d2GJhSCHb1VcfnRmq',
gameId: 'GAMEC7U7cqmFFaRow33j1LwuV8u4YhAS1mJ5Dqjnar2k',
};
/**
* Atlasnet addresses (Star Atlas testnet/devnet)
*/
const ATLASNET_ADDRESSES = {
srsly: SRSLY_PROGRAM_ADDRESS,
sage: 'SAgEeT8u14TE69JXtanGSgNkEdoPUcLabeyZD2uw8x9',
antegen: ANTEGEN_PROGRAM,
atlasMint: '6PhneWhbN4R3nFutrRUVnE3sNgRsFS6yPrjRC29mMWnv',
profileFaction: 'pFACzkX2eSpAjDyEohD6i3VRJvREtH9ynbtM1DwVFsj',
gameId: 'GAmEqxNYaUqLmLkXGhzUvv4Ud8FotnWPLj6ChdBkUh9j',
};
/**
* Program address sets keyed by genesis hash (source of truth)
*/
const PROGRAM_ADDRESS_SETS = {
[MAINNET_GENESIS]: MAINNET_ADDRESSES,
[DEVNET_GENESIS]: ATLASNET_ADDRESSES,
[ATLASNET_GENESIS]: ATLASNET_ADDRESSES,
};
/**
* Resolve a program set input (alias or genesis hash) to a genesis hash
*
* @param programSet - Named alias or genesis hash string
* @returns Genesis hash string
*/
export function resolveGenesisHash(programSet) {
// Check if it's a named alias
if (programSet in ALIAS_TO_GENESIS) {
return ALIAS_TO_GENESIS[programSet];
}
// Otherwise treat as genesis hash directly
return programSet;
}
/**
* Get addresses for a specific program set
*
* @param programSet - Program set identifier ('mainnet', 'atlasnet', or 'localnet')
* @returns Program-specific addresses
* @throws Error if program set is unknown
*
* @example
* ```typescript
* const addresses = getProgramAddresses('mainnet');
* console.log(addresses.atlasMint); // 'ATLASXmbP...'
*
* const testnetAddresses = getProgramAddresses('atlasnet');
* console.log(testnetAddresses.sage); // 'SAGEqqFew...'
* ```
*/
export function getProgramAddresses(programSet) {
const genesisHash = resolveGenesisHash(programSet);
const addresses = PROGRAM_ADDRESS_SETS[genesisHash];
if (!addresses) {
// Unknown genesis hash — fall back to devnet addresses
return PROGRAM_ADDRESS_SETS[DEVNET_GENESIS];
}
return addresses;
}
/**
* @deprecated Use getProgramAddresses instead
*/
export function getNetworkAddresses(network) {
return getProgramAddresses(network);
}
/**
* Check if a program set is valid
*
* @param programSet - Program set to validate
* @returns True if program set is supported
*/
export function isValidProgramSet(programSet) {
// Accept named aliases
if (programSet in ALIAS_TO_GENESIS)
return true;
// Accept known genesis hashes
if (programSet in PROGRAM_ADDRESS_SETS)
return true;
return false;
}
/**
* @deprecated Use isValidProgramSet instead
*/
export function isValidNetwork(network) {
return isValidProgramSet(network);
}
/**
* Re-export individual network addresses for direct access
*/
export { MAINNET_ADDRESSES, ATLASNET_ADDRESSES };
//# sourceMappingURL=addresses.js.map