/** * This code was AUTOGENERATED using the Codama library. * Please DO NOT EDIT THIS FILE, instead use visitors * to add features, then rerun Codama to update it. * * @see https://github.com/codama-idl/codama */ import { combineCodec, fixDecoderSize, fixEncoderSize, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, getU16Decoder, getU16Encoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder, type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount, } from '@solana/kit'; import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount, type ResolvedInstructionAccount, } from '@solana/program-client-core'; import { SAGE_PROGRAM_ADDRESS } from '../programs'; export const MINE_ASTEROID_TO_RESPAWN_DISCRIMINATOR = new Uint8Array([ 208, 63, 135, 108, 218, 252, 36, 0, ]); export function getMineAsteroidToRespawnDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( MINE_ASTEROID_TO_RESPAWN_DISCRIMINATOR, ); } export type MineAsteroidToRespawnInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountProfileValidationSigner extends string | AccountMeta = string, TAccountProfileValidationProfile extends string | AccountMeta = string, TAccountProfileValidationCertificate extends string | AccountMeta = string, TAccountProfileValidationProgram extends string | AccountMeta = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u', TAccountCharacter extends string | AccountMeta = string, TAccountFleet extends string | AccountMeta = string, TAccountStarSystem extends string | AccountMeta = string, TAccountCssStarSystem extends string | AccountMeta = string, TAccountAsteroid extends string | AccountMeta = string, TAccountRegionTracker extends string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountCurrencyCache extends string | AccountMeta = string, TAccountXpBudget extends string | AccountMeta = string, TAccountXpBudgetConfig extends string | AccountMeta = string, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountProfileValidationSigner extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountProfileValidationSigner, TAccountProfileValidationProfile extends string ? WritableAccount : TAccountProfileValidationProfile, TAccountProfileValidationCertificate extends string ? ReadonlyAccount : TAccountProfileValidationCertificate, TAccountProfileValidationProgram extends string ? ReadonlyAccount : TAccountProfileValidationProgram, TAccountCharacter extends string ? WritableAccount : TAccountCharacter, TAccountFleet extends string ? WritableAccount : TAccountFleet, TAccountStarSystem extends string ? ReadonlyAccount : TAccountStarSystem, TAccountCssStarSystem extends string ? ReadonlyAccount : TAccountCssStarSystem, TAccountAsteroid extends string ? WritableAccount : TAccountAsteroid, TAccountRegionTracker extends string ? ReadonlyAccount : TAccountRegionTracker, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountCurrencyCache extends string ? WritableAccount : TAccountCurrencyCache, TAccountXpBudget extends string ? WritableAccount : TAccountXpBudget, TAccountXpBudgetConfig extends string ? ReadonlyAccount : TAccountXpBudgetConfig, ...TRemainingAccounts, ] >; export type MineAsteroidToRespawnInstructionData = { discriminator: ReadonlyUint8Array; keyIndex: number; }; export type MineAsteroidToRespawnInstructionDataArgs = { keyIndex: number }; export function getMineAsteroidToRespawnInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['keyIndex', getU16Encoder()], ]), (value) => ({ ...value, discriminator: MINE_ASTEROID_TO_RESPAWN_DISCRIMINATOR, }), ); } export function getMineAsteroidToRespawnInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['keyIndex', getU16Decoder()], ]); } export function getMineAsteroidToRespawnInstructionDataCodec(): FixedSizeCodec< MineAsteroidToRespawnInstructionDataArgs, MineAsteroidToRespawnInstructionData > { return combineCodec( getMineAsteroidToRespawnInstructionDataEncoder(), getMineAsteroidToRespawnInstructionDataDecoder(), ); } export type MineAsteroidToRespawnAsyncInput< TAccountProfileValidationSigner extends string = string, TAccountProfileValidationProfile extends string = string, TAccountProfileValidationCertificate extends string = string, TAccountProfileValidationProgram extends string = string, TAccountCharacter extends string = string, TAccountFleet extends string = string, TAccountStarSystem extends string = string, TAccountCssStarSystem extends string = string, TAccountAsteroid extends string = string, TAccountRegionTracker extends string = string, TAccountGame extends string = string, TAccountCurrencyCache extends string = string, TAccountXpBudget extends string = string, TAccountXpBudgetConfig extends string = string, > = { profileValidationSigner: TransactionSigner; profileValidationProfile: Address; profileValidationCertificate?: Address; profileValidationProgram?: Address; character?: Address; /** The [`Fleet`](crate::state::Fleet) account */ fleet: Address; /** The [`StarSystem`] account */ starSystem: Address; /** The CSS [`StarSystem`] account */ cssStarSystem: Address; /** The [`CelestialBody`] account */ asteroid: Address; /** Region tracker account */ regionTracker: Address; /** The game account */ game: Address; /** * The currency config cache account — debited the recovery fee * (summed per-hull `recovery_fee` of the fleet composition). */ currencyCache?: Address; /** The acting Character's XP budget. Append after the legacy recovery accounts. */ xpBudget?: Address; /** Game-scoped XP rules; required with the budget when settling active-v1 mining. */ xpBudgetConfig?: Address; keyIndex: MineAsteroidToRespawnInstructionDataArgs['keyIndex']; }; export async function getMineAsteroidToRespawnInstructionAsync< TAccountProfileValidationSigner extends string, TAccountProfileValidationProfile extends string, TAccountProfileValidationCertificate extends string, TAccountProfileValidationProgram extends string, TAccountCharacter extends string, TAccountFleet extends string, TAccountStarSystem extends string, TAccountCssStarSystem extends string, TAccountAsteroid extends string, TAccountRegionTracker extends string, TAccountGame extends string, TAccountCurrencyCache extends string, TAccountXpBudget extends string, TAccountXpBudgetConfig extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: MineAsteroidToRespawnAsyncInput< TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountCharacter, TAccountFleet, TAccountStarSystem, TAccountCssStarSystem, TAccountAsteroid, TAccountRegionTracker, TAccountGame, TAccountCurrencyCache, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): Promise< MineAsteroidToRespawnInstruction< TProgramAddress, TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountCharacter, TAccountFleet, TAccountStarSystem, TAccountCssStarSystem, TAccountAsteroid, TAccountRegionTracker, TAccountGame, TAccountCurrencyCache, TAccountXpBudget, TAccountXpBudgetConfig > > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { profileValidationSigner: { value: input.profileValidationSigner ?? null, isWritable: false, }, profileValidationProfile: { value: input.profileValidationProfile ?? null, isWritable: true, }, profileValidationCertificate: { value: input.profileValidationCertificate ?? null, isWritable: false, }, profileValidationProgram: { value: input.profileValidationProgram ?? null, isWritable: false, }, character: { value: input.character ?? null, isWritable: true }, fleet: { value: input.fleet ?? null, isWritable: true }, starSystem: { value: input.starSystem ?? null, isWritable: false }, cssStarSystem: { value: input.cssStarSystem ?? null, isWritable: false }, asteroid: { value: input.asteroid ?? null, isWritable: true }, regionTracker: { value: input.regionTracker ?? null, isWritable: false }, game: { value: input.game ?? null, isWritable: false }, currencyCache: { value: input.currencyCache ?? null, isWritable: true }, xpBudget: { value: input.xpBudget ?? null, isWritable: true }, xpBudgetConfig: { value: input.xpBudgetConfig ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedInstructionAccount >; // Original args. const args = { ...input }; // Resolve default values. if (!accounts.profileValidationProgram.value) { accounts.profileValidationProgram.value = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u' as Address<'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u'>; } if (!accounts.character.value) { accounts.character.value = await getProgramDerivedAddress({ programAddress, seeds: [ getBytesEncoder().encode( new Uint8Array([67, 104, 97, 114, 97, 99, 116, 101, 114]), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( 'profileValidationProfile', accounts.profileValidationProfile.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount('game', accounts.game.value), ), ], }); } if (!accounts.currencyCache.value) { accounts.currencyCache.value = await getProgramDerivedAddress({ programAddress, seeds: [ getBytesEncoder().encode( new Uint8Array([ 67, 117, 114, 114, 101, 110, 99, 121, 67, 111, 110, 102, 105, 103, ]), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount('game', accounts.game.value), ), ], }); } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta( 'profileValidationSigner', accounts.profileValidationSigner, ), getAccountMeta( 'profileValidationProfile', accounts.profileValidationProfile, ), getAccountMeta( 'profileValidationCertificate', accounts.profileValidationCertificate, ), getAccountMeta( 'profileValidationProgram', accounts.profileValidationProgram, ), getAccountMeta('character', accounts.character), getAccountMeta('fleet', accounts.fleet), getAccountMeta('starSystem', accounts.starSystem), getAccountMeta('cssStarSystem', accounts.cssStarSystem), getAccountMeta('asteroid', accounts.asteroid), getAccountMeta('regionTracker', accounts.regionTracker), getAccountMeta('game', accounts.game), getAccountMeta('currencyCache', accounts.currencyCache), getAccountMeta('xpBudget', accounts.xpBudget), getAccountMeta('xpBudgetConfig', accounts.xpBudgetConfig), ], data: getMineAsteroidToRespawnInstructionDataEncoder().encode( args as MineAsteroidToRespawnInstructionDataArgs, ), programAddress, } as MineAsteroidToRespawnInstruction< TProgramAddress, TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountCharacter, TAccountFleet, TAccountStarSystem, TAccountCssStarSystem, TAccountAsteroid, TAccountRegionTracker, TAccountGame, TAccountCurrencyCache, TAccountXpBudget, TAccountXpBudgetConfig >); } export type MineAsteroidToRespawnInput< TAccountProfileValidationSigner extends string = string, TAccountProfileValidationProfile extends string = string, TAccountProfileValidationCertificate extends string = string, TAccountProfileValidationProgram extends string = string, TAccountCharacter extends string = string, TAccountFleet extends string = string, TAccountStarSystem extends string = string, TAccountCssStarSystem extends string = string, TAccountAsteroid extends string = string, TAccountRegionTracker extends string = string, TAccountGame extends string = string, TAccountCurrencyCache extends string = string, TAccountXpBudget extends string = string, TAccountXpBudgetConfig extends string = string, > = { profileValidationSigner: TransactionSigner; profileValidationProfile: Address; profileValidationCertificate?: Address; profileValidationProgram?: Address; character: Address; /** The [`Fleet`](crate::state::Fleet) account */ fleet: Address; /** The [`StarSystem`] account */ starSystem: Address; /** The CSS [`StarSystem`] account */ cssStarSystem: Address; /** The [`CelestialBody`] account */ asteroid: Address; /** Region tracker account */ regionTracker: Address; /** The game account */ game: Address; /** * The currency config cache account — debited the recovery fee * (summed per-hull `recovery_fee` of the fleet composition). */ currencyCache: Address; /** The acting Character's XP budget. Append after the legacy recovery accounts. */ xpBudget?: Address; /** Game-scoped XP rules; required with the budget when settling active-v1 mining. */ xpBudgetConfig?: Address; keyIndex: MineAsteroidToRespawnInstructionDataArgs['keyIndex']; }; export function getMineAsteroidToRespawnInstruction< TAccountProfileValidationSigner extends string, TAccountProfileValidationProfile extends string, TAccountProfileValidationCertificate extends string, TAccountProfileValidationProgram extends string, TAccountCharacter extends string, TAccountFleet extends string, TAccountStarSystem extends string, TAccountCssStarSystem extends string, TAccountAsteroid extends string, TAccountRegionTracker extends string, TAccountGame extends string, TAccountCurrencyCache extends string, TAccountXpBudget extends string, TAccountXpBudgetConfig extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: MineAsteroidToRespawnInput< TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountCharacter, TAccountFleet, TAccountStarSystem, TAccountCssStarSystem, TAccountAsteroid, TAccountRegionTracker, TAccountGame, TAccountCurrencyCache, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): MineAsteroidToRespawnInstruction< TProgramAddress, TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountCharacter, TAccountFleet, TAccountStarSystem, TAccountCssStarSystem, TAccountAsteroid, TAccountRegionTracker, TAccountGame, TAccountCurrencyCache, TAccountXpBudget, TAccountXpBudgetConfig > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { profileValidationSigner: { value: input.profileValidationSigner ?? null, isWritable: false, }, profileValidationProfile: { value: input.profileValidationProfile ?? null, isWritable: true, }, profileValidationCertificate: { value: input.profileValidationCertificate ?? null, isWritable: false, }, profileValidationProgram: { value: input.profileValidationProgram ?? null, isWritable: false, }, character: { value: input.character ?? null, isWritable: true }, fleet: { value: input.fleet ?? null, isWritable: true }, starSystem: { value: input.starSystem ?? null, isWritable: false }, cssStarSystem: { value: input.cssStarSystem ?? null, isWritable: false }, asteroid: { value: input.asteroid ?? null, isWritable: true }, regionTracker: { value: input.regionTracker ?? null, isWritable: false }, game: { value: input.game ?? null, isWritable: false }, currencyCache: { value: input.currencyCache ?? null, isWritable: true }, xpBudget: { value: input.xpBudget ?? null, isWritable: true }, xpBudgetConfig: { value: input.xpBudgetConfig ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedInstructionAccount >; // Original args. const args = { ...input }; // Resolve default values. if (!accounts.profileValidationProgram.value) { accounts.profileValidationProgram.value = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u' as Address<'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u'>; } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta( 'profileValidationSigner', accounts.profileValidationSigner, ), getAccountMeta( 'profileValidationProfile', accounts.profileValidationProfile, ), getAccountMeta( 'profileValidationCertificate', accounts.profileValidationCertificate, ), getAccountMeta( 'profileValidationProgram', accounts.profileValidationProgram, ), getAccountMeta('character', accounts.character), getAccountMeta('fleet', accounts.fleet), getAccountMeta('starSystem', accounts.starSystem), getAccountMeta('cssStarSystem', accounts.cssStarSystem), getAccountMeta('asteroid', accounts.asteroid), getAccountMeta('regionTracker', accounts.regionTracker), getAccountMeta('game', accounts.game), getAccountMeta('currencyCache', accounts.currencyCache), getAccountMeta('xpBudget', accounts.xpBudget), getAccountMeta('xpBudgetConfig', accounts.xpBudgetConfig), ], data: getMineAsteroidToRespawnInstructionDataEncoder().encode( args as MineAsteroidToRespawnInstructionDataArgs, ), programAddress, } as MineAsteroidToRespawnInstruction< TProgramAddress, TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountCharacter, TAccountFleet, TAccountStarSystem, TAccountCssStarSystem, TAccountAsteroid, TAccountRegionTracker, TAccountGame, TAccountCurrencyCache, TAccountXpBudget, TAccountXpBudgetConfig >); } export type ParsedMineAsteroidToRespawnInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { profileValidationSigner: TAccountMetas[0]; profileValidationProfile: TAccountMetas[1]; profileValidationCertificate?: TAccountMetas[2] | undefined; profileValidationProgram: TAccountMetas[3]; character: TAccountMetas[4]; /** The [`Fleet`](crate::state::Fleet) account */ fleet: TAccountMetas[5]; /** The [`StarSystem`] account */ starSystem: TAccountMetas[6]; /** The CSS [`StarSystem`] account */ cssStarSystem: TAccountMetas[7]; /** The [`CelestialBody`] account */ asteroid: TAccountMetas[8]; /** Region tracker account */ regionTracker: TAccountMetas[9]; /** The game account */ game: TAccountMetas[10]; /** * The currency config cache account — debited the recovery fee * (summed per-hull `recovery_fee` of the fleet composition). */ currencyCache: TAccountMetas[11]; /** The acting Character's XP budget. Append after the legacy recovery accounts. */ xpBudget?: TAccountMetas[12] | undefined; /** Game-scoped XP rules; required with the budget when settling active-v1 mining. */ xpBudgetConfig?: TAccountMetas[13] | undefined; }; data: MineAsteroidToRespawnInstructionData; }; export function parseMineAsteroidToRespawnInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedMineAsteroidToRespawnInstruction { if (instruction.accounts.length < 12) { throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 12, }, ); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; accountIndex += 1; return accountMeta; }; const getNextOptionalAccount = () => { const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]; accountIndex += 1; return !accountMeta || accountMeta.address === instruction.programAddress ? undefined : accountMeta; }; return { programAddress: instruction.programAddress, accounts: { profileValidationSigner: getNextAccount(), profileValidationProfile: getNextAccount(), profileValidationCertificate: getNextOptionalAccount(), profileValidationProgram: getNextAccount(), character: getNextAccount(), fleet: getNextAccount(), starSystem: getNextAccount(), cssStarSystem: getNextAccount(), asteroid: getNextAccount(), regionTracker: getNextAccount(), game: getNextAccount(), currencyCache: getNextAccount(), xpBudget: getNextOptionalAccount(), xpBudgetConfig: getNextOptionalAccount(), }, data: getMineAsteroidToRespawnInstructionDataDecoder().decode( instruction.data, ), }; }