/** * 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 { AccountRole, combineCodec, fixDecoderSize, fixEncoderSize, getAddressEncoder, getArrayDecoder, getArrayEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, getU32Decoder, getU32Encoder, 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 ReadonlyUint8Array, type TransactionSigner, type WritableAccount, type WritableSignerAccount, } from '@solana/kit'; import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount, type ResolvedInstructionAccount, } from '@solana/program-client-core'; import { SAGE_PROGRAM_ADDRESS } from '../programs'; import { getStarbaseLevelDecoder, getStarbaseLevelEncoder, type StarbaseLevel, type StarbaseLevelArgs, } from '../types'; export const EVICT_CLAIM_STAKE_INSTANCE_DISCRIMINATOR = new Uint8Array([ 214, 113, 185, 10, 57, 171, 13, 152, ]); export function getEvictClaimStakeInstanceDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( EVICT_CLAIM_STAKE_INSTANCE_DISCRIMINATOR, ); } export type EvictClaimStakeInstanceInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountFunder extends string | AccountMeta = string, TAccountProfile extends string | AccountMeta = string, TAccountCharacter extends string | AccountMeta = string, TAccountClaimStakeInstance extends string | AccountMeta = string, TAccountCelestialBody extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerSystem extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends | string | AccountMeta = string, TAccountCurrencyCache extends string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', TAccountRentCatalog extends string | AccountMeta = string, TAccountRentAuthority extends string | AccountMeta = string, TAccountRentEval extends string | AccountMeta = string, TAccountRentEvalRefund extends string | AccountMeta = string, TAccountRentGridHead extends string | AccountMeta = string, TAccountRentLevelHead extends string | AccountMeta = string, TAccountRentDefHead extends string | AccountMeta = string, TAccountXpAccrual extends string | AccountMeta = string, TAccountXpBudget extends string | AccountMeta = string, TAccountXpBudgetConfig extends string | AccountMeta = string, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountFunder extends string ? WritableSignerAccount & AccountSignerMeta : TAccountFunder, TAccountProfile extends string ? WritableAccount : TAccountProfile, TAccountCharacter extends string ? WritableAccount : TAccountCharacter, TAccountClaimStakeInstance extends string ? WritableAccount : TAccountClaimStakeInstance, TAccountCelestialBody extends string ? WritableAccount : TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem extends string ? ReadonlyAccount : TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer extends string ? WritableAccount : TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache extends string ? WritableAccount : TAccountCurrencyCache, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, TAccountRentCatalog extends string ? ReadonlyAccount : TAccountRentCatalog, TAccountRentAuthority extends string ? WritableAccount : TAccountRentAuthority, TAccountRentEval extends string ? WritableAccount : TAccountRentEval, TAccountRentEvalRefund extends string ? WritableAccount : TAccountRentEvalRefund, TAccountRentGridHead extends string ? ReadonlyAccount : TAccountRentGridHead, TAccountRentLevelHead extends string ? ReadonlyAccount : TAccountRentLevelHead, TAccountRentDefHead extends string ? ReadonlyAccount : TAccountRentDefHead, TAccountXpAccrual extends string ? WritableAccount : TAccountXpAccrual, TAccountXpBudget extends string ? WritableAccount : TAccountXpBudget, TAccountXpBudgetConfig extends string ? ReadonlyAccount : TAccountXpBudgetConfig, ...TRemainingAccounts, ] >; export type EvictClaimStakeInstanceInstructionData = { discriminator: ReadonlyUint8Array; /** The starbase level on the celestial body's plot map at which the claim stake is placed */ claimStakeLevel: StarbaseLevel; /** The index in the celestial body's claim_stakes list of the claim stake to remove */ claimStakeIndex: number; /** * Rent Option B: the GRID / LEVEL / DEF baseline-record indices at `max(paid_clock, activation_time)` * (read only under an Active catalog, for a stake that is not Deactivated). */ rentHints: Array; }; export type EvictClaimStakeInstanceInstructionDataArgs = { /** The starbase level on the celestial body's plot map at which the claim stake is placed */ claimStakeLevel: StarbaseLevelArgs; /** The index in the celestial body's claim_stakes list of the claim stake to remove */ claimStakeIndex: number; /** * Rent Option B: the GRID / LEVEL / DEF baseline-record indices at `max(paid_clock, activation_time)` * (read only under an Active catalog, for a stake that is not Deactivated). */ rentHints: Array; }; export function getEvictClaimStakeInstanceInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['claimStakeLevel', getStarbaseLevelEncoder()], ['claimStakeIndex', getU32Encoder()], ['rentHints', getArrayEncoder(getU32Encoder(), { size: 3 })], ]), (value) => ({ ...value, discriminator: EVICT_CLAIM_STAKE_INSTANCE_DISCRIMINATOR, }), ); } export function getEvictClaimStakeInstanceInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['claimStakeLevel', getStarbaseLevelDecoder()], ['claimStakeIndex', getU32Decoder()], ['rentHints', getArrayDecoder(getU32Decoder(), { size: 3 })], ]); } export function getEvictClaimStakeInstanceInstructionDataCodec(): FixedSizeCodec< EvictClaimStakeInstanceInstructionDataArgs, EvictClaimStakeInstanceInstructionData > { return combineCodec( getEvictClaimStakeInstanceInstructionDataEncoder(), getEvictClaimStakeInstanceInstructionDataDecoder(), ); } export type EvictClaimStakeInstanceAsyncInput< TAccountFunder extends string = string, TAccountProfile extends string = string, TAccountCharacter extends string = string, TAccountClaimStakeInstance extends string = string, TAccountCelestialBody extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountCurrencyCache extends string = string, TAccountGame extends string = string, TAccountSystemProgram extends string = string, TAccountRentCatalog extends string = string, TAccountRentAuthority extends string = string, TAccountRentEval extends string = string, TAccountRentEvalRefund extends string = string, TAccountRentGridHead extends string = string, TAccountRentLevelHead extends string = string, TAccountRentDefHead extends string = string, TAccountXpAccrual extends string = string, TAccountXpBudget extends string = string, TAccountXpBudgetConfig extends string = string, > = { /** The funder for any Solana rent payments. */ funder: TransactionSigner; /** The player profile */ profile: Address; /** The Character account associated with the profile */ character?: Address; /** The claim stake instance */ claimStakeInstance: Address; /** The CelestialBody account containing the claim stake */ celestialBody: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The currency config cache account */ currencyCache?: Address; /** The game account */ game: Address; /** The Solana System program */ systemProgram?: Address; /** The game's rent-catalog PDA (REQUIRED; never created = Disabled). */ rentCatalog: Address; /** The stake's settlement-authority PDA (REQUIRED; never created = never evaluated). */ rentAuthority: Address; /** The stake's ACTIVE evaluation: required iff the authority has one (retired without charge). */ rentEval?: Address; /** The active evaluation's ORIGINAL funder (receives its rent): required iff `rent_eval` is. */ rentEvalRefund?: Address; /** The stake's GRID source head (required iff Active and the stake is not Deactivated). */ rentGridHead?: Address; /** The stake's system LEVEL source head (required iff Active and the stake is not Deactivated). */ rentLevelHead?: Address; /** The stake's definition DEF source head (required iff Active and the stake is not Deactivated). */ rentDefHead?: Address; /** The stake's Building XP ledger PDA (REQUIRED; never created = nothing accrued). Closed to `profile`. */ xpAccrual: Address; /** The Character's Building budget: required iff the ledger exists (v1 games only). */ xpBudget?: Address; /** The game's XP budget config: required iff the ledger exists (v1 games only). */ xpBudgetConfig?: Address; claimStakeLevel: EvictClaimStakeInstanceInstructionDataArgs['claimStakeLevel']; claimStakeIndex: EvictClaimStakeInstanceInstructionDataArgs['claimStakeIndex']; rentHints: EvictClaimStakeInstanceInstructionDataArgs['rentHints']; rentPages: Array
; }; export async function getEvictClaimStakeInstanceInstructionAsync< TAccountFunder extends string, TAccountProfile extends string, TAccountCharacter extends string, TAccountClaimStakeInstance extends string, TAccountCelestialBody extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountCurrencyCache extends string, TAccountGame extends string, TAccountSystemProgram extends string, TAccountRentCatalog extends string, TAccountRentAuthority extends string, TAccountRentEval extends string, TAccountRentEvalRefund extends string, TAccountRentGridHead extends string, TAccountRentLevelHead extends string, TAccountRentDefHead extends string, TAccountXpAccrual extends string, TAccountXpBudget extends string, TAccountXpBudgetConfig extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: EvictClaimStakeInstanceAsyncInput< TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache, TAccountGame, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): Promise< EvictClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache, TAccountGame, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig > > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { funder: { value: input.funder ?? null, isWritable: true }, profile: { value: input.profile ?? null, isWritable: true }, character: { value: input.character ?? null, isWritable: true }, claimStakeInstance: { value: input.claimStakeInstance ?? null, isWritable: true, }, celestialBody: { value: input.celestialBody ?? null, isWritable: true }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, currencyCache: { value: input.currencyCache ?? null, isWritable: true }, game: { value: input.game ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false }, rentCatalog: { value: input.rentCatalog ?? null, isWritable: false }, rentAuthority: { value: input.rentAuthority ?? null, isWritable: true }, rentEval: { value: input.rentEval ?? null, isWritable: true }, rentEvalRefund: { value: input.rentEvalRefund ?? null, isWritable: true }, rentGridHead: { value: input.rentGridHead ?? null, isWritable: false }, rentLevelHead: { value: input.rentLevelHead ?? null, isWritable: false }, rentDefHead: { value: input.rentDefHead ?? null, isWritable: false }, xpAccrual: { value: input.xpAccrual ?? 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.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( 'profile', accounts.profile.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), ), ], }); } if (!accounts.systemProgram.value) { accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; } // Remaining accounts. const remainingAccounts: AccountMeta[] = args.rentPages.map((address) => ({ address, role: AccountRole.READONLY, })); const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta('funder', accounts.funder), getAccountMeta('profile', accounts.profile), getAccountMeta('character', accounts.character), getAccountMeta('claimStakeInstance', accounts.claimStakeInstance), getAccountMeta('celestialBody', accounts.celestialBody), getAccountMeta( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('currencyCache', accounts.currencyCache), getAccountMeta('game', accounts.game), getAccountMeta('systemProgram', accounts.systemProgram), getAccountMeta('rentCatalog', accounts.rentCatalog), getAccountMeta('rentAuthority', accounts.rentAuthority), getAccountMeta('rentEval', accounts.rentEval), getAccountMeta('rentEvalRefund', accounts.rentEvalRefund), getAccountMeta('rentGridHead', accounts.rentGridHead), getAccountMeta('rentLevelHead', accounts.rentLevelHead), getAccountMeta('rentDefHead', accounts.rentDefHead), getAccountMeta('xpAccrual', accounts.xpAccrual), getAccountMeta('xpBudget', accounts.xpBudget), getAccountMeta('xpBudgetConfig', accounts.xpBudgetConfig), ...remainingAccounts, ], data: getEvictClaimStakeInstanceInstructionDataEncoder().encode( args as EvictClaimStakeInstanceInstructionDataArgs, ), programAddress, } as EvictClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache, TAccountGame, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >); } export type EvictClaimStakeInstanceInput< TAccountFunder extends string = string, TAccountProfile extends string = string, TAccountCharacter extends string = string, TAccountClaimStakeInstance extends string = string, TAccountCelestialBody extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountCurrencyCache extends string = string, TAccountGame extends string = string, TAccountSystemProgram extends string = string, TAccountRentCatalog extends string = string, TAccountRentAuthority extends string = string, TAccountRentEval extends string = string, TAccountRentEvalRefund extends string = string, TAccountRentGridHead extends string = string, TAccountRentLevelHead extends string = string, TAccountRentDefHead extends string = string, TAccountXpAccrual extends string = string, TAccountXpBudget extends string = string, TAccountXpBudgetConfig extends string = string, > = { /** The funder for any Solana rent payments. */ funder: TransactionSigner; /** The player profile */ profile: Address; /** The Character account associated with the profile */ character: Address; /** The claim stake instance */ claimStakeInstance: Address; /** The CelestialBody account containing the claim stake */ celestialBody: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The currency config cache account */ currencyCache: Address; /** The game account */ game: Address; /** The Solana System program */ systemProgram?: Address; /** The game's rent-catalog PDA (REQUIRED; never created = Disabled). */ rentCatalog: Address; /** The stake's settlement-authority PDA (REQUIRED; never created = never evaluated). */ rentAuthority: Address; /** The stake's ACTIVE evaluation: required iff the authority has one (retired without charge). */ rentEval?: Address; /** The active evaluation's ORIGINAL funder (receives its rent): required iff `rent_eval` is. */ rentEvalRefund?: Address; /** The stake's GRID source head (required iff Active and the stake is not Deactivated). */ rentGridHead?: Address; /** The stake's system LEVEL source head (required iff Active and the stake is not Deactivated). */ rentLevelHead?: Address; /** The stake's definition DEF source head (required iff Active and the stake is not Deactivated). */ rentDefHead?: Address; /** The stake's Building XP ledger PDA (REQUIRED; never created = nothing accrued). Closed to `profile`. */ xpAccrual: Address; /** The Character's Building budget: required iff the ledger exists (v1 games only). */ xpBudget?: Address; /** The game's XP budget config: required iff the ledger exists (v1 games only). */ xpBudgetConfig?: Address; claimStakeLevel: EvictClaimStakeInstanceInstructionDataArgs['claimStakeLevel']; claimStakeIndex: EvictClaimStakeInstanceInstructionDataArgs['claimStakeIndex']; rentHints: EvictClaimStakeInstanceInstructionDataArgs['rentHints']; rentPages: Array
; }; export function getEvictClaimStakeInstanceInstruction< TAccountFunder extends string, TAccountProfile extends string, TAccountCharacter extends string, TAccountClaimStakeInstance extends string, TAccountCelestialBody extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountCurrencyCache extends string, TAccountGame extends string, TAccountSystemProgram extends string, TAccountRentCatalog extends string, TAccountRentAuthority extends string, TAccountRentEval extends string, TAccountRentEvalRefund extends string, TAccountRentGridHead extends string, TAccountRentLevelHead extends string, TAccountRentDefHead extends string, TAccountXpAccrual extends string, TAccountXpBudget extends string, TAccountXpBudgetConfig extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: EvictClaimStakeInstanceInput< TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache, TAccountGame, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): EvictClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache, TAccountGame, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { funder: { value: input.funder ?? null, isWritable: true }, profile: { value: input.profile ?? null, isWritable: true }, character: { value: input.character ?? null, isWritable: true }, claimStakeInstance: { value: input.claimStakeInstance ?? null, isWritable: true, }, celestialBody: { value: input.celestialBody ?? null, isWritable: true }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, currencyCache: { value: input.currencyCache ?? null, isWritable: true }, game: { value: input.game ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false }, rentCatalog: { value: input.rentCatalog ?? null, isWritable: false }, rentAuthority: { value: input.rentAuthority ?? null, isWritable: true }, rentEval: { value: input.rentEval ?? null, isWritable: true }, rentEvalRefund: { value: input.rentEvalRefund ?? null, isWritable: true }, rentGridHead: { value: input.rentGridHead ?? null, isWritable: false }, rentLevelHead: { value: input.rentLevelHead ?? null, isWritable: false }, rentDefHead: { value: input.rentDefHead ?? null, isWritable: false }, xpAccrual: { value: input.xpAccrual ?? 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.systemProgram.value) { accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; } // Remaining accounts. const remainingAccounts: AccountMeta[] = args.rentPages.map((address) => ({ address, role: AccountRole.READONLY, })); const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta('funder', accounts.funder), getAccountMeta('profile', accounts.profile), getAccountMeta('character', accounts.character), getAccountMeta('claimStakeInstance', accounts.claimStakeInstance), getAccountMeta('celestialBody', accounts.celestialBody), getAccountMeta( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('currencyCache', accounts.currencyCache), getAccountMeta('game', accounts.game), getAccountMeta('systemProgram', accounts.systemProgram), getAccountMeta('rentCatalog', accounts.rentCatalog), getAccountMeta('rentAuthority', accounts.rentAuthority), getAccountMeta('rentEval', accounts.rentEval), getAccountMeta('rentEvalRefund', accounts.rentEvalRefund), getAccountMeta('rentGridHead', accounts.rentGridHead), getAccountMeta('rentLevelHead', accounts.rentLevelHead), getAccountMeta('rentDefHead', accounts.rentDefHead), getAccountMeta('xpAccrual', accounts.xpAccrual), getAccountMeta('xpBudget', accounts.xpBudget), getAccountMeta('xpBudgetConfig', accounts.xpBudgetConfig), ...remainingAccounts, ], data: getEvictClaimStakeInstanceInstructionDataEncoder().encode( args as EvictClaimStakeInstanceInstructionDataArgs, ), programAddress, } as EvictClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCurrencyCache, TAccountGame, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >); } export type ParsedEvictClaimStakeInstanceInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { /** The funder for any Solana rent payments. */ funder: TAccountMetas[0]; /** The player profile */ profile: TAccountMetas[1]; /** The Character account associated with the profile */ character: TAccountMetas[2]; /** The claim stake instance */ claimStakeInstance: TAccountMetas[3]; /** The CelestialBody account containing the claim stake */ celestialBody: TAccountMetas[4]; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: TAccountMetas[5]; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: TAccountMetas[6]; /** The currency config cache account */ currencyCache: TAccountMetas[7]; /** The game account */ game: TAccountMetas[8]; /** The Solana System program */ systemProgram: TAccountMetas[9]; /** The game's rent-catalog PDA (REQUIRED; never created = Disabled). */ rentCatalog: TAccountMetas[10]; /** The stake's settlement-authority PDA (REQUIRED; never created = never evaluated). */ rentAuthority: TAccountMetas[11]; /** The stake's ACTIVE evaluation: required iff the authority has one (retired without charge). */ rentEval?: TAccountMetas[12] | undefined; /** The active evaluation's ORIGINAL funder (receives its rent): required iff `rent_eval` is. */ rentEvalRefund?: TAccountMetas[13] | undefined; /** The stake's GRID source head (required iff Active and the stake is not Deactivated). */ rentGridHead?: TAccountMetas[14] | undefined; /** The stake's system LEVEL source head (required iff Active and the stake is not Deactivated). */ rentLevelHead?: TAccountMetas[15] | undefined; /** The stake's definition DEF source head (required iff Active and the stake is not Deactivated). */ rentDefHead?: TAccountMetas[16] | undefined; /** The stake's Building XP ledger PDA (REQUIRED; never created = nothing accrued). Closed to `profile`. */ xpAccrual: TAccountMetas[17]; /** The Character's Building budget: required iff the ledger exists (v1 games only). */ xpBudget?: TAccountMetas[18] | undefined; /** The game's XP budget config: required iff the ledger exists (v1 games only). */ xpBudgetConfig?: TAccountMetas[19] | undefined; }; data: EvictClaimStakeInstanceInstructionData; }; export function parseEvictClaimStakeInstanceInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedEvictClaimStakeInstanceInstruction { if (instruction.accounts.length < 20) { throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 20, }, ); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; accountIndex += 1; return accountMeta; }; const getNextOptionalAccount = () => { const accountMeta = getNextAccount(); return accountMeta.address === SAGE_PROGRAM_ADDRESS ? undefined : accountMeta; }; return { programAddress: instruction.programAddress, accounts: { funder: getNextAccount(), profile: getNextAccount(), character: getNextAccount(), claimStakeInstance: getNextAccount(), celestialBody: getNextAccount(), systemAndStarbasePlayerSystem: getNextAccount(), systemAndStarbasePlayerStarbasePlayer: getNextAccount(), currencyCache: getNextAccount(), game: getNextAccount(), systemProgram: getNextAccount(), rentCatalog: getNextAccount(), rentAuthority: getNextAccount(), rentEval: getNextOptionalAccount(), rentEvalRefund: getNextOptionalAccount(), rentGridHead: getNextOptionalAccount(), rentLevelHead: getNextOptionalAccount(), rentDefHead: getNextOptionalAccount(), xpAccrual: getNextAccount(), xpBudget: getNextOptionalAccount(), xpBudgetConfig: getNextOptionalAccount(), }, data: getEvictClaimStakeInstanceInstructionDataDecoder().decode( instruction.data, ), }; }