/** * 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, getU16Decoder, getU16Encoder, 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 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'; import { getStarbaseLevelDecoder, getStarbaseLevelEncoder, type StarbaseLevel, type StarbaseLevelArgs, } from '../types'; export const DECONSTRUCT_CLAIM_STAKE_INSTANCE_DISCRIMINATOR = new Uint8Array([ 178, 113, 183, 25, 151, 223, 45, 3, ]); export function getDeconstructClaimStakeInstanceDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( DECONSTRUCT_CLAIM_STAKE_INSTANCE_DISCRIMINATOR, ); } export type DeconstructClaimStakeInstanceInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountProfileSigner extends string | AccountMeta = string, TAccountProfileProfile extends string | AccountMeta = string, TAccountProfileCertificate extends string | AccountMeta = string, TAccountProfileProgram extends string | AccountMeta = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u', TAccountCharacter extends string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountClaimStakeInstance extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerSystem extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends | string | AccountMeta = string, TAccountCelestialBody 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, TAccountCurrencyCache 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< [ TAccountProfileSigner extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountProfileSigner, TAccountProfileProfile extends string ? WritableAccount : TAccountProfileProfile, TAccountProfileCertificate extends string ? ReadonlyAccount : TAccountProfileCertificate, TAccountProfileProgram extends string ? ReadonlyAccount : TAccountProfileProgram, TAccountCharacter extends string ? WritableAccount : TAccountCharacter, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountClaimStakeInstance extends string ? WritableAccount : TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem extends string ? ReadonlyAccount : TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer extends string ? WritableAccount : TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody extends string ? WritableAccount : TAccountCelestialBody, 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, TAccountCurrencyCache extends string ? WritableAccount : TAccountCurrencyCache, 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 DeconstructClaimStakeInstanceInstructionData = { discriminator: ReadonlyUint8Array; /** The index of the key in the player profile */ keyIndex: number; /** 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). */ rentHints: Array; }; export type DeconstructClaimStakeInstanceInstructionDataArgs = { /** The index of the key in the player profile */ keyIndex: number; /** 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). */ rentHints: Array; }; export function getDeconstructClaimStakeInstanceInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['keyIndex', getU16Encoder()], ['claimStakeLevel', getStarbaseLevelEncoder()], ['claimStakeIndex', getU32Encoder()], ['rentHints', getArrayEncoder(getU32Encoder(), { size: 3 })], ]), (value) => ({ ...value, discriminator: DECONSTRUCT_CLAIM_STAKE_INSTANCE_DISCRIMINATOR, }), ); } export function getDeconstructClaimStakeInstanceInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['keyIndex', getU16Decoder()], ['claimStakeLevel', getStarbaseLevelDecoder()], ['claimStakeIndex', getU32Decoder()], ['rentHints', getArrayDecoder(getU32Decoder(), { size: 3 })], ]); } export function getDeconstructClaimStakeInstanceInstructionDataCodec(): FixedSizeCodec< DeconstructClaimStakeInstanceInstructionDataArgs, DeconstructClaimStakeInstanceInstructionData > { return combineCodec( getDeconstructClaimStakeInstanceInstructionDataEncoder(), getDeconstructClaimStakeInstanceInstructionDataDecoder(), ); } export type DeconstructClaimStakeInstanceAsyncInput< TAccountProfileSigner extends string = string, TAccountProfileProfile extends string = string, TAccountProfileCertificate extends string = string, TAccountProfileProgram extends string = string, TAccountCharacter extends string = string, TAccountGame extends string = string, TAccountClaimStakeInstance extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountCelestialBody extends string = string, TAccountSystemProgram extends string = string, TAccountRentCatalog extends string = string, TAccountRentAuthority extends string = string, TAccountRentEval extends string = string, TAccountRentEvalRefund extends string = string, TAccountCurrencyCache 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, > = { profileSigner: TransactionSigner; profileProfile: Address; profileCertificate?: Address; profileProgram?: Address; /** The Character account associated with the profile */ character?: Address; /** The active game account */ game: Address; /** The claim stake instance to remove */ claimStakeInstance: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The CelestialBody account holding the claim stake instance */ celestialBody: 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 currency config cache (its DAO ATLAS vault receives the history-priced rent under Active). */ currencyCache?: 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; keyIndex: DeconstructClaimStakeInstanceInstructionDataArgs['keyIndex']; claimStakeLevel: DeconstructClaimStakeInstanceInstructionDataArgs['claimStakeLevel']; claimStakeIndex: DeconstructClaimStakeInstanceInstructionDataArgs['claimStakeIndex']; rentHints: DeconstructClaimStakeInstanceInstructionDataArgs['rentHints']; rentPages: Array
; }; export async function getDeconstructClaimStakeInstanceInstructionAsync< TAccountProfileSigner extends string, TAccountProfileProfile extends string, TAccountProfileCertificate extends string, TAccountProfileProgram extends string, TAccountCharacter extends string, TAccountGame extends string, TAccountClaimStakeInstance extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountCelestialBody extends string, TAccountSystemProgram extends string, TAccountRentCatalog extends string, TAccountRentAuthority extends string, TAccountRentEval extends string, TAccountRentEvalRefund extends string, TAccountCurrencyCache 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: DeconstructClaimStakeInstanceAsyncInput< TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountCharacter, TAccountGame, TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountCurrencyCache, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): Promise< DeconstructClaimStakeInstanceInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountCharacter, TAccountGame, TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountCurrencyCache, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig > > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { profileSigner: { value: input.profileSigner ?? null, isWritable: false }, profileProfile: { value: input.profileProfile ?? null, isWritable: true }, profileCertificate: { value: input.profileCertificate ?? null, isWritable: false, }, profileProgram: { value: input.profileProgram ?? null, isWritable: false }, character: { value: input.character ?? null, isWritable: true }, game: { value: input.game ?? null, isWritable: false }, claimStakeInstance: { value: input.claimStakeInstance ?? null, isWritable: true, }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, celestialBody: { value: input.celestialBody ?? 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 }, currencyCache: { value: input.currencyCache ?? 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.profileProgram.value) { accounts.profileProgram.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( 'profileProfile', accounts.profileProfile.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount('game', accounts.game.value), ), ], }); } if (!accounts.systemProgram.value) { accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; } 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), ), ], }); } // Remaining accounts. const remainingAccounts: AccountMeta[] = args.rentPages.map((address) => ({ address, role: AccountRole.READONLY, })); const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta('profileSigner', accounts.profileSigner), getAccountMeta('profileProfile', accounts.profileProfile), getAccountMeta('profileCertificate', accounts.profileCertificate), getAccountMeta('profileProgram', accounts.profileProgram), getAccountMeta('character', accounts.character), getAccountMeta('game', accounts.game), getAccountMeta('claimStakeInstance', accounts.claimStakeInstance), getAccountMeta( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('celestialBody', accounts.celestialBody), getAccountMeta('systemProgram', accounts.systemProgram), getAccountMeta('rentCatalog', accounts.rentCatalog), getAccountMeta('rentAuthority', accounts.rentAuthority), getAccountMeta('rentEval', accounts.rentEval), getAccountMeta('rentEvalRefund', accounts.rentEvalRefund), getAccountMeta('currencyCache', accounts.currencyCache), 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: getDeconstructClaimStakeInstanceInstructionDataEncoder().encode( args as DeconstructClaimStakeInstanceInstructionDataArgs, ), programAddress, } as DeconstructClaimStakeInstanceInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountCharacter, TAccountGame, TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountCurrencyCache, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >); } export type DeconstructClaimStakeInstanceInput< TAccountProfileSigner extends string = string, TAccountProfileProfile extends string = string, TAccountProfileCertificate extends string = string, TAccountProfileProgram extends string = string, TAccountCharacter extends string = string, TAccountGame extends string = string, TAccountClaimStakeInstance extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountCelestialBody extends string = string, TAccountSystemProgram extends string = string, TAccountRentCatalog extends string = string, TAccountRentAuthority extends string = string, TAccountRentEval extends string = string, TAccountRentEvalRefund extends string = string, TAccountCurrencyCache 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, > = { profileSigner: TransactionSigner; profileProfile: Address; profileCertificate?: Address; profileProgram?: Address; /** The Character account associated with the profile */ character: Address; /** The active game account */ game: Address; /** The claim stake instance to remove */ claimStakeInstance: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The CelestialBody account holding the claim stake instance */ celestialBody: 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 currency config cache (its DAO ATLAS vault receives the history-priced rent under Active). */ currencyCache: 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; keyIndex: DeconstructClaimStakeInstanceInstructionDataArgs['keyIndex']; claimStakeLevel: DeconstructClaimStakeInstanceInstructionDataArgs['claimStakeLevel']; claimStakeIndex: DeconstructClaimStakeInstanceInstructionDataArgs['claimStakeIndex']; rentHints: DeconstructClaimStakeInstanceInstructionDataArgs['rentHints']; rentPages: Array
; }; export function getDeconstructClaimStakeInstanceInstruction< TAccountProfileSigner extends string, TAccountProfileProfile extends string, TAccountProfileCertificate extends string, TAccountProfileProgram extends string, TAccountCharacter extends string, TAccountGame extends string, TAccountClaimStakeInstance extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountCelestialBody extends string, TAccountSystemProgram extends string, TAccountRentCatalog extends string, TAccountRentAuthority extends string, TAccountRentEval extends string, TAccountRentEvalRefund extends string, TAccountCurrencyCache 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: DeconstructClaimStakeInstanceInput< TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountCharacter, TAccountGame, TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountCurrencyCache, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >, config?: { programAddress?: TProgramAddress }, ): DeconstructClaimStakeInstanceInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountCharacter, TAccountGame, TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountCurrencyCache, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { profileSigner: { value: input.profileSigner ?? null, isWritable: false }, profileProfile: { value: input.profileProfile ?? null, isWritable: true }, profileCertificate: { value: input.profileCertificate ?? null, isWritable: false, }, profileProgram: { value: input.profileProgram ?? null, isWritable: false }, character: { value: input.character ?? null, isWritable: true }, game: { value: input.game ?? null, isWritable: false }, claimStakeInstance: { value: input.claimStakeInstance ?? null, isWritable: true, }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, celestialBody: { value: input.celestialBody ?? 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 }, currencyCache: { value: input.currencyCache ?? 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.profileProgram.value) { accounts.profileProgram.value = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u' as Address<'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u'>; } 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('profileSigner', accounts.profileSigner), getAccountMeta('profileProfile', accounts.profileProfile), getAccountMeta('profileCertificate', accounts.profileCertificate), getAccountMeta('profileProgram', accounts.profileProgram), getAccountMeta('character', accounts.character), getAccountMeta('game', accounts.game), getAccountMeta('claimStakeInstance', accounts.claimStakeInstance), getAccountMeta( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('celestialBody', accounts.celestialBody), getAccountMeta('systemProgram', accounts.systemProgram), getAccountMeta('rentCatalog', accounts.rentCatalog), getAccountMeta('rentAuthority', accounts.rentAuthority), getAccountMeta('rentEval', accounts.rentEval), getAccountMeta('rentEvalRefund', accounts.rentEvalRefund), getAccountMeta('currencyCache', accounts.currencyCache), 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: getDeconstructClaimStakeInstanceInstructionDataEncoder().encode( args as DeconstructClaimStakeInstanceInstructionDataArgs, ), programAddress, } as DeconstructClaimStakeInstanceInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountCharacter, TAccountGame, TAccountClaimStakeInstance, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCelestialBody, TAccountSystemProgram, TAccountRentCatalog, TAccountRentAuthority, TAccountRentEval, TAccountRentEvalRefund, TAccountCurrencyCache, TAccountRentGridHead, TAccountRentLevelHead, TAccountRentDefHead, TAccountXpAccrual, TAccountXpBudget, TAccountXpBudgetConfig >); } export type ParsedDeconstructClaimStakeInstanceInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { profileSigner: TAccountMetas[0]; profileProfile: TAccountMetas[1]; profileCertificate?: TAccountMetas[2] | undefined; profileProgram: TAccountMetas[3]; /** The Character account associated with the profile */ character: TAccountMetas[4]; /** The active game account */ game: TAccountMetas[5]; /** The claim stake instance to remove */ claimStakeInstance: TAccountMetas[6]; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: TAccountMetas[7]; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: TAccountMetas[8]; /** The CelestialBody account holding the claim stake instance */ celestialBody: TAccountMetas[9]; /** The Solana System program */ systemProgram: TAccountMetas[10]; /** The game's rent-catalog PDA (REQUIRED; never created = Disabled). */ rentCatalog: TAccountMetas[11]; /** The stake's settlement-authority PDA (REQUIRED; never created = never evaluated). */ rentAuthority: TAccountMetas[12]; /** The stake's ACTIVE evaluation: required iff the authority has one (retired without charge). */ rentEval?: TAccountMetas[13] | undefined; /** The active evaluation's ORIGINAL funder (receives its rent): required iff `rent_eval` is. */ rentEvalRefund?: TAccountMetas[14] | undefined; /** The currency config cache (its DAO ATLAS vault receives the history-priced rent under Active). */ currencyCache: TAccountMetas[15]; /** 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: DeconstructClaimStakeInstanceInstructionData; }; export function parseDeconstructClaimStakeInstanceInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedDeconstructClaimStakeInstanceInstruction { 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: { profileSigner: getNextAccount(), profileProfile: getNextAccount(), profileCertificate: getNextOptionalAccount(), profileProgram: getNextAccount(), character: getNextAccount(), game: getNextAccount(), claimStakeInstance: getNextAccount(), systemAndStarbasePlayerSystem: getNextAccount(), systemAndStarbasePlayerStarbasePlayer: getNextAccount(), celestialBody: getNextAccount(), systemProgram: getNextAccount(), rentCatalog: getNextAccount(), rentAuthority: getNextAccount(), rentEval: getNextOptionalAccount(), rentEvalRefund: getNextOptionalAccount(), currencyCache: getNextAccount(), rentGridHead: getNextOptionalAccount(), rentLevelHead: getNextOptionalAccount(), rentDefHead: getNextOptionalAccount(), xpAccrual: getNextAccount(), xpBudget: getNextOptionalAccount(), xpBudgetConfig: getNextOptionalAccount(), }, data: getDeconstructClaimStakeInstanceInstructionDataDecoder().decode( instruction.data, ), }; }