/** * This code was AUTOGENERATED using the Codama library. * Please DO NOT EDIT THIS FILE, instead use visitors * to add features, then rerun Codama to update it. * * @see https://github.com/codama-idl/codama */ import { combineCodec, fixDecoderSize, fixEncoderSize, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, getU16Decoder, getU16Encoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder, type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount, } from '@solana/kit'; import { getAccountMetaFactory, type ResolvedInstructionAccount, } from '@solana/program-client-core'; import { SAGE_PROGRAM_ADDRESS } from '../programs'; export const IDLE_TO_DOCKED_DISCRIMINATOR = new Uint8Array([ 80, 240, 6, 69, 156, 48, 37, 147, ]); export function getIdleToDockedDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( IDLE_TO_DOCKED_DISCRIMINATOR, ); } export type IdleToDockedInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountProfileValidationSigner extends string | AccountMeta = string, TAccountProfileValidationProfile extends string | AccountMeta = string, TAccountProfileValidationCertificate extends string | AccountMeta = string, TAccountProfileValidationProgram extends string | AccountMeta = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u', TAccountFleet extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerSystem extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends | string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountFactionRelationTracker extends string | AccountMeta = string, TAccountFactionStanding extends string | AccountMeta = string, TAccountFactionConfig extends string | AccountMeta = string, TAccountFactionOwnership extends string | AccountMeta = string, TAccountOwnerFactionAccount extends string | AccountMeta = string, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountProfileValidationSigner extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountProfileValidationSigner, TAccountProfileValidationProfile extends string ? WritableAccount : TAccountProfileValidationProfile, TAccountProfileValidationCertificate extends string ? ReadonlyAccount : TAccountProfileValidationCertificate, TAccountProfileValidationProgram extends string ? ReadonlyAccount : TAccountProfileValidationProgram, TAccountFleet extends string ? WritableAccount : TAccountFleet, TAccountSystemAndStarbasePlayerSystem extends string ? ReadonlyAccount : TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer extends string ? WritableAccount : TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountFactionRelationTracker extends string ? ReadonlyAccount : TAccountFactionRelationTracker, TAccountFactionStanding extends string ? ReadonlyAccount : TAccountFactionStanding, TAccountFactionConfig extends string ? ReadonlyAccount : TAccountFactionConfig, TAccountFactionOwnership extends string ? ReadonlyAccount : TAccountFactionOwnership, TAccountOwnerFactionAccount extends string ? ReadonlyAccount : TAccountOwnerFactionAccount, ...TRemainingAccounts, ] >; export type IdleToDockedInstructionData = { discriminator: ReadonlyUint8Array; /** the index of the key in the player profile */ keyIndex: number; }; export type IdleToDockedInstructionDataArgs = { /** the index of the key in the player profile */ keyIndex: number; }; export function getIdleToDockedInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['keyIndex', getU16Encoder()], ]), (value) => ({ ...value, discriminator: IDLE_TO_DOCKED_DISCRIMINATOR }), ); } export function getIdleToDockedInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['keyIndex', getU16Decoder()], ]); } export function getIdleToDockedInstructionDataCodec(): FixedSizeCodec< IdleToDockedInstructionDataArgs, IdleToDockedInstructionData > { return combineCodec( getIdleToDockedInstructionDataEncoder(), getIdleToDockedInstructionDataDecoder(), ); } export type IdleToDockedInput< TAccountProfileValidationSigner extends string = string, TAccountProfileValidationProfile extends string = string, TAccountProfileValidationCertificate extends string = string, TAccountProfileValidationProgram extends string = string, TAccountFleet extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountGame extends string = string, TAccountFactionRelationTracker extends string = string, TAccountFactionStanding extends string = string, TAccountFactionConfig extends string = string, TAccountFactionOwnership extends string = string, TAccountOwnerFactionAccount extends string = string, > = { profileValidationSigner: TransactionSigner; profileValidationProfile: Address; profileValidationCertificate?: Address; profileValidationProgram?: Address; /** The [`Fleet`](crate::state::Fleet) account */ fleet: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The game account */ game: Address; /** * Current diplomacy state and canonical dynamic-capture regime switch. Required so callers cannot * omit it to force legacy ownership resolution while dynamic capture is enabled. */ factionRelationTracker: Address; /** The player's standing with the starbase's current controlling faction. */ factionStanding?: Address; /** Reputation policy, including the minimum docking band and lazy decay. */ factionConfig?: Address; /** * Current starbase ownership. Required so a previously-created `StarbasePlayer` cannot preserve * docking access after a dynamic-faction capture. */ factionOwnership: Address; /** Dynamic controller account used only to recognize its configured NPC operator profile. */ ownerFactionAccount?: Address; keyIndex: IdleToDockedInstructionDataArgs['keyIndex']; }; export function getIdleToDockedInstruction< TAccountProfileValidationSigner extends string, TAccountProfileValidationProfile extends string, TAccountProfileValidationCertificate extends string, TAccountProfileValidationProgram extends string, TAccountFleet extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountGame extends string, TAccountFactionRelationTracker extends string, TAccountFactionStanding extends string, TAccountFactionConfig extends string, TAccountFactionOwnership extends string, TAccountOwnerFactionAccount extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: IdleToDockedInput< TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountFleet, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountGame, TAccountFactionRelationTracker, TAccountFactionStanding, TAccountFactionConfig, TAccountFactionOwnership, TAccountOwnerFactionAccount >, config?: { programAddress?: TProgramAddress }, ): IdleToDockedInstruction< TProgramAddress, TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountFleet, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountGame, TAccountFactionRelationTracker, TAccountFactionStanding, TAccountFactionConfig, TAccountFactionOwnership, TAccountOwnerFactionAccount > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { profileValidationSigner: { value: input.profileValidationSigner ?? null, isWritable: false, }, profileValidationProfile: { value: input.profileValidationProfile ?? null, isWritable: true, }, profileValidationCertificate: { value: input.profileValidationCertificate ?? null, isWritable: false, }, profileValidationProgram: { value: input.profileValidationProgram ?? null, isWritable: false, }, fleet: { value: input.fleet ?? null, isWritable: true }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, game: { value: input.game ?? null, isWritable: false }, factionRelationTracker: { value: input.factionRelationTracker ?? null, isWritable: false, }, factionStanding: { value: input.factionStanding ?? null, isWritable: false, }, factionConfig: { value: input.factionConfig ?? null, isWritable: false }, factionOwnership: { value: input.factionOwnership ?? null, isWritable: false, }, ownerFactionAccount: { value: input.ownerFactionAccount ?? null, isWritable: false, }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedInstructionAccount >; // Original args. const args = { ...input }; // Resolve default values. if (!accounts.profileValidationProgram.value) { accounts.profileValidationProgram.value = 'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u' as Address<'C4PRoFNroxxzdgeCoM31LJjYRg7kT6ymogSTAT99iD1u'>; } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta( 'profileValidationSigner', accounts.profileValidationSigner, ), getAccountMeta( 'profileValidationProfile', accounts.profileValidationProfile, ), getAccountMeta( 'profileValidationCertificate', accounts.profileValidationCertificate, ), getAccountMeta( 'profileValidationProgram', accounts.profileValidationProgram, ), getAccountMeta('fleet', accounts.fleet), getAccountMeta( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('game', accounts.game), getAccountMeta('factionRelationTracker', accounts.factionRelationTracker), getAccountMeta('factionStanding', accounts.factionStanding), getAccountMeta('factionConfig', accounts.factionConfig), getAccountMeta('factionOwnership', accounts.factionOwnership), getAccountMeta('ownerFactionAccount', accounts.ownerFactionAccount), ], data: getIdleToDockedInstructionDataEncoder().encode( args as IdleToDockedInstructionDataArgs, ), programAddress, } as IdleToDockedInstruction< TProgramAddress, TAccountProfileValidationSigner, TAccountProfileValidationProfile, TAccountProfileValidationCertificate, TAccountProfileValidationProgram, TAccountFleet, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountGame, TAccountFactionRelationTracker, TAccountFactionStanding, TAccountFactionConfig, TAccountFactionOwnership, TAccountOwnerFactionAccount >); } export type ParsedIdleToDockedInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { profileValidationSigner: TAccountMetas[0]; profileValidationProfile: TAccountMetas[1]; profileValidationCertificate?: TAccountMetas[2] | undefined; profileValidationProgram: TAccountMetas[3]; /** The [`Fleet`](crate::state::Fleet) account */ fleet: TAccountMetas[4]; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: TAccountMetas[5]; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: TAccountMetas[6]; /** The game account */ game: TAccountMetas[7]; /** * Current diplomacy state and canonical dynamic-capture regime switch. Required so callers cannot * omit it to force legacy ownership resolution while dynamic capture is enabled. */ factionRelationTracker: TAccountMetas[8]; /** The player's standing with the starbase's current controlling faction. */ factionStanding?: TAccountMetas[9] | undefined; /** Reputation policy, including the minimum docking band and lazy decay. */ factionConfig?: TAccountMetas[10] | undefined; /** * Current starbase ownership. Required so a previously-created `StarbasePlayer` cannot preserve * docking access after a dynamic-faction capture. */ factionOwnership: TAccountMetas[11]; /** Dynamic controller account used only to recognize its configured NPC operator profile. */ ownerFactionAccount?: TAccountMetas[12] | undefined; }; data: IdleToDockedInstructionData; }; export function parseIdleToDockedInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedIdleToDockedInstruction { if (instruction.accounts.length < 13) { throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 13, }, ); } 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: { profileValidationSigner: getNextAccount(), profileValidationProfile: getNextAccount(), profileValidationCertificate: getNextOptionalAccount(), profileValidationProgram: getNextAccount(), fleet: getNextAccount(), systemAndStarbasePlayerSystem: getNextAccount(), systemAndStarbasePlayerStarbasePlayer: getNextAccount(), game: getNextAccount(), factionRelationTracker: getNextAccount(), factionStanding: getNextOptionalAccount(), factionConfig: getNextOptionalAccount(), factionOwnership: getNextAccount(), ownerFactionAccount: getNextOptionalAccount(), }, data: getIdleToDockedInstructionDataDecoder().decode(instruction.data), }; }