/** * 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'; export const RESPAWN_CLAIM_STAKE_INSTANCE_DISCRIMINATOR = new Uint8Array([ 43, 173, 10, 203, 201, 74, 19, 96, ]); export function getRespawnClaimStakeInstanceDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( RESPAWN_CLAIM_STAKE_INSTANCE_DISCRIMINATOR, ); } export type RespawnClaimStakeInstanceInstruction< 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, TAccountStarSystem extends string | AccountMeta = string, TAccountStarbasePlayer extends string | AccountMeta = string, TAccountCssStarSystem extends string | AccountMeta = string, TAccountCssStarbasePlayer extends string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountCurrencyCache 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, TAccountStarSystem extends string ? ReadonlyAccount : TAccountStarSystem, TAccountStarbasePlayer extends string ? WritableAccount : TAccountStarbasePlayer, TAccountCssStarSystem extends string ? ReadonlyAccount : TAccountCssStarSystem, TAccountCssStarbasePlayer extends string ? WritableAccount : TAccountCssStarbasePlayer, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountCurrencyCache extends string ? WritableAccount : TAccountCurrencyCache, 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 RespawnClaimStakeInstanceInstructionData = { discriminator: ReadonlyUint8Array; /** * Rent Option B: the GRID / LEVEL / DEF baseline-record indices at `max(paid_clock, activation_time)` * (read only under an Active catalog). */ rentHints: Array; }; export type RespawnClaimStakeInstanceInstructionDataArgs = { /** * Rent Option B: the GRID / LEVEL / DEF baseline-record indices at `max(paid_clock, activation_time)` * (read only under an Active catalog). */ rentHints: Array; }; export function getRespawnClaimStakeInstanceInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['rentHints', getArrayEncoder(getU32Encoder(), { size: 3 })], ]), (value) => ({ ...value, discriminator: RESPAWN_CLAIM_STAKE_INSTANCE_DISCRIMINATOR, }), ); } export function getRespawnClaimStakeInstanceInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['rentHints', getArrayDecoder(getU32Decoder(), { size: 3 })], ]); } export function getRespawnClaimStakeInstanceInstructionDataCodec(): FixedSizeCodec< RespawnClaimStakeInstanceInstructionDataArgs, RespawnClaimStakeInstanceInstructionData > { return combineCodec( getRespawnClaimStakeInstanceInstructionDataEncoder(), getRespawnClaimStakeInstanceInstructionDataDecoder(), ); } export type RespawnClaimStakeInstanceAsyncInput< TAccountFunder extends string = string, TAccountProfile extends string = string, TAccountCharacter extends string = string, TAccountClaimStakeInstance extends string = string, TAccountCelestialBody extends string = string, TAccountStarSystem extends string = string, TAccountStarbasePlayer extends string = string, TAccountCssStarSystem extends string = string, TAccountCssStarbasePlayer extends string = string, TAccountGame extends string = string, TAccountCurrencyCache 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`] in which the claim stake was placed */ starSystem: Address; /** The `star_system` [`crate::state::StarbasePlayer`] Account */ starbasePlayer?: Address; /** The CSS [`StarSystem`] account */ cssStarSystem: Address; /** The CSS [`crate::state::StarbasePlayer`] Account */ cssStarbasePlayer?: Address; /** The game account */ game: Address; /** The currency config cache account */ currencyCache?: 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 the catalog is Active). */ rentGridHead?: Address; /** The stake's system LEVEL source head (required iff the catalog is Active). */ rentLevelHead?: Address; /** The stake's definition DEF source head (required iff the catalog is Active). */ 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; rentHints: RespawnClaimStakeInstanceInstructionDataArgs['rentHints']; rentPages: Array
; }; export async function getRespawnClaimStakeInstanceInstructionAsync< TAccountFunder extends string, TAccountProfile extends string, TAccountCharacter extends string, TAccountClaimStakeInstance extends string, TAccountCelestialBody extends string, TAccountStarSystem extends string, TAccountStarbasePlayer extends string, TAccountCssStarSystem extends string, TAccountCssStarbasePlayer extends string, TAccountGame extends string, TAccountCurrencyCache 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: RespawnClaimStakeInstanceAsyncInput< TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountStarSystem, TAccountStarbasePlayer, TAccountCssStarSystem, TAccountCssStarbasePlayer, TAccountGame, TAccountCurrencyCache, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): Promise< RespawnClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountStarSystem, TAccountStarbasePlayer, TAccountCssStarSystem, TAccountCssStarbasePlayer, TAccountGame, TAccountCurrencyCache, 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 }, starSystem: { value: input.starSystem ?? null, isWritable: false }, starbasePlayer: { value: input.starbasePlayer ?? null, isWritable: true }, cssStarSystem: { value: input.cssStarSystem ?? null, isWritable: false }, cssStarbasePlayer: { value: input.cssStarbasePlayer ?? null, isWritable: true, }, game: { value: input.game ?? null, isWritable: false }, currencyCache: { value: input.currencyCache ?? null, isWritable: true }, 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.starbasePlayer.value) { accounts.starbasePlayer.value = await getProgramDerivedAddress({ programAddress, seeds: [ getBytesEncoder().encode( new Uint8Array([ 83, 116, 97, 114, 98, 97, 115, 101, 80, 108, 97, 121, 101, 114, ]), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( 'starSystem', accounts.starSystem.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( 'character', accounts.character.value, ), ), ], }); } if (!accounts.cssStarbasePlayer.value) { accounts.cssStarbasePlayer.value = await getProgramDerivedAddress({ programAddress, seeds: [ getBytesEncoder().encode( new Uint8Array([ 83, 116, 97, 114, 98, 97, 115, 101, 80, 108, 97, 121, 101, 114, ]), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( 'cssStarSystem', accounts.cssStarSystem.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( 'character', accounts.character.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('starSystem', accounts.starSystem), getAccountMeta('starbasePlayer', accounts.starbasePlayer), getAccountMeta('cssStarSystem', accounts.cssStarSystem), getAccountMeta('cssStarbasePlayer', accounts.cssStarbasePlayer), getAccountMeta('game', accounts.game), getAccountMeta('currencyCache', accounts.currencyCache), 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: getRespawnClaimStakeInstanceInstructionDataEncoder().encode( args as RespawnClaimStakeInstanceInstructionDataArgs, ), programAddress, } as RespawnClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountStarSystem, TAccountStarbasePlayer, TAccountCssStarSystem, TAccountCssStarbasePlayer, TAccountGame, TAccountCurrencyCache, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >); } export type RespawnClaimStakeInstanceInput< TAccountFunder extends string = string, TAccountProfile extends string = string, TAccountCharacter extends string = string, TAccountClaimStakeInstance extends string = string, TAccountCelestialBody extends string = string, TAccountStarSystem extends string = string, TAccountStarbasePlayer extends string = string, TAccountCssStarSystem extends string = string, TAccountCssStarbasePlayer extends string = string, TAccountGame extends string = string, TAccountCurrencyCache 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`] in which the claim stake was placed */ starSystem: Address; /** The `star_system` [`crate::state::StarbasePlayer`] Account */ starbasePlayer: Address; /** The CSS [`StarSystem`] account */ cssStarSystem: Address; /** The CSS [`crate::state::StarbasePlayer`] Account */ cssStarbasePlayer: Address; /** The game account */ game: Address; /** The currency config cache account */ currencyCache: 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 the catalog is Active). */ rentGridHead?: Address; /** The stake's system LEVEL source head (required iff the catalog is Active). */ rentLevelHead?: Address; /** The stake's definition DEF source head (required iff the catalog is Active). */ 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; rentHints: RespawnClaimStakeInstanceInstructionDataArgs['rentHints']; rentPages: Array
; }; export function getRespawnClaimStakeInstanceInstruction< TAccountFunder extends string, TAccountProfile extends string, TAccountCharacter extends string, TAccountClaimStakeInstance extends string, TAccountCelestialBody extends string, TAccountStarSystem extends string, TAccountStarbasePlayer extends string, TAccountCssStarSystem extends string, TAccountCssStarbasePlayer extends string, TAccountGame extends string, TAccountCurrencyCache 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: RespawnClaimStakeInstanceInput< TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountStarSystem, TAccountStarbasePlayer, TAccountCssStarSystem, TAccountCssStarbasePlayer, TAccountGame, TAccountCurrencyCache, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): RespawnClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountStarSystem, TAccountStarbasePlayer, TAccountCssStarSystem, TAccountCssStarbasePlayer, TAccountGame, TAccountCurrencyCache, 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 }, starSystem: { value: input.starSystem ?? null, isWritable: false }, starbasePlayer: { value: input.starbasePlayer ?? null, isWritable: true }, cssStarSystem: { value: input.cssStarSystem ?? null, isWritable: false }, cssStarbasePlayer: { value: input.cssStarbasePlayer ?? null, isWritable: true, }, game: { value: input.game ?? null, isWritable: false }, currencyCache: { value: input.currencyCache ?? null, isWritable: true }, 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('starSystem', accounts.starSystem), getAccountMeta('starbasePlayer', accounts.starbasePlayer), getAccountMeta('cssStarSystem', accounts.cssStarSystem), getAccountMeta('cssStarbasePlayer', accounts.cssStarbasePlayer), getAccountMeta('game', accounts.game), getAccountMeta('currencyCache', accounts.currencyCache), 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: getRespawnClaimStakeInstanceInstructionDataEncoder().encode( args as RespawnClaimStakeInstanceInstructionDataArgs, ), programAddress, } as RespawnClaimStakeInstanceInstruction< TProgramAddress, TAccountFunder, TAccountProfile, TAccountCharacter, TAccountClaimStakeInstance, TAccountCelestialBody, TAccountStarSystem, TAccountStarbasePlayer, TAccountCssStarSystem, TAccountCssStarbasePlayer, TAccountGame, TAccountCurrencyCache, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >); } export type ParsedRespawnClaimStakeInstanceInstruction< 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`] in which the claim stake was placed */ starSystem: TAccountMetas[5]; /** The `star_system` [`crate::state::StarbasePlayer`] Account */ starbasePlayer: TAccountMetas[6]; /** The CSS [`StarSystem`] account */ cssStarSystem: TAccountMetas[7]; /** The CSS [`crate::state::StarbasePlayer`] Account */ cssStarbasePlayer: TAccountMetas[8]; /** The game account */ game: TAccountMetas[9]; /** The currency config cache account */ currencyCache: TAccountMetas[10]; /** The Solana System program */ systemProgram: TAccountMetas[11]; /** The game's rent-catalog PDA (REQUIRED; never created = Disabled). */ rentCatalog: TAccountMetas[12]; /** The stake's settlement-authority PDA (REQUIRED; never created = never evaluated). */ rentAuthority: TAccountMetas[13]; /** The stake's ACTIVE evaluation: required iff the authority has one (retired without charge). */ rentEval?: TAccountMetas[14] | undefined; /** The active evaluation's ORIGINAL funder (receives its rent): required iff `rent_eval` is. */ rentEvalRefund?: TAccountMetas[15] | undefined; /** The stake's GRID source head (required iff the catalog is Active). */ rentGridHead?: TAccountMetas[16] | undefined; /** The stake's system LEVEL source head (required iff the catalog is Active). */ rentLevelHead?: TAccountMetas[17] | undefined; /** The stake's definition DEF source head (required iff the catalog is Active). */ rentDefHead?: TAccountMetas[18] | undefined; /** The stake's Building XP ledger PDA (REQUIRED; never created = nothing accrued). Closed to `profile`. */ xpAccrual: TAccountMetas[19]; /** The Character's Building budget: required iff the ledger exists (v1 games only). */ xpBudget?: TAccountMetas[20] | undefined; /** The game's XP budget config: required iff the ledger exists (v1 games only). */ xpBudgetConfig?: TAccountMetas[21] | undefined; }; data: RespawnClaimStakeInstanceInstructionData; }; export function parseRespawnClaimStakeInstanceInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedRespawnClaimStakeInstanceInstruction { if (instruction.accounts.length < 22) { throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 22, }, ); } 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(), starSystem: getNextAccount(), starbasePlayer: getNextAccount(), cssStarSystem: getNextAccount(), cssStarbasePlayer: getNextAccount(), game: getNextAccount(), currencyCache: getNextAccount(), systemProgram: getNextAccount(), rentCatalog: getNextAccount(), rentAuthority: getNextAccount(), rentEval: getNextOptionalAccount(), rentEvalRefund: getNextOptionalAccount(), rentGridHead: getNextOptionalAccount(), rentLevelHead: getNextOptionalAccount(), rentDefHead: getNextOptionalAccount(), xpAccrual: getNextAccount(), xpBudget: getNextOptionalAccount(), xpBudgetConfig: getNextOptionalAccount(), }, data: getRespawnClaimStakeInstanceInstructionDataDecoder().decode( instruction.data, ), }; }