/** * 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, 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, type ResolvedInstructionAccount, } from '@solana/program-client-core'; import { SAGE_PROGRAM_ADDRESS } from '../programs'; export const ADVANCE_DEMOCRACY_REQUIREMENTS_CONFIG_DISCRIMINATOR = new Uint8Array([141, 84, 251, 137, 175, 171, 141, 169]); export function getAdvanceDemocracyRequirementsConfigDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( ADVANCE_DEMOCRACY_REQUIREMENTS_CONFIG_DISCRIMINATOR, ); } export type AdvanceDemocracyRequirementsConfigInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountFunder extends string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountRegistry extends string | AccountMeta = string, TAccountPendingCurveConfig extends string | AccountMeta = string, TAccountPendingHousingMap extends string | AccountMeta = string, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountFunder extends string ? WritableSignerAccount & AccountSignerMeta : TAccountFunder, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountRegistry extends string ? WritableAccount : TAccountRegistry, TAccountPendingCurveConfig extends string ? ReadonlyAccount : TAccountPendingCurveConfig, TAccountPendingHousingMap extends string ? ReadonlyAccount : TAccountPendingHousingMap, ...TRemainingAccounts, ] >; export type AdvanceDemocracyRequirementsConfigInstructionData = { discriminator: ReadonlyUint8Array; }; export type AdvanceDemocracyRequirementsConfigInstructionDataArgs = {}; export function getAdvanceDemocracyRequirementsConfigInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: ADVANCE_DEMOCRACY_REQUIREMENTS_CONFIG_DISCRIMINATOR, }), ); } export function getAdvanceDemocracyRequirementsConfigInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ]); } export function getAdvanceDemocracyRequirementsConfigInstructionDataCodec(): FixedSizeCodec< AdvanceDemocracyRequirementsConfigInstructionDataArgs, AdvanceDemocracyRequirementsConfigInstructionData > { return combineCodec( getAdvanceDemocracyRequirementsConfigInstructionDataEncoder(), getAdvanceDemocracyRequirementsConfigInstructionDataDecoder(), ); } export type AdvanceDemocracyRequirementsConfigInput< TAccountFunder extends string = string, TAccountGame extends string = string, TAccountRegistry extends string = string, TAccountPendingCurveConfig extends string = string, TAccountPendingHousingMap extends string = string, > = { funder: TransactionSigner; game: Address; registry: Address; /** Required with `pending_housing_map` whenever the registry has a pending pair. */ pendingCurveConfig?: Address; /** Required with `pending_curve_config` whenever the registry has a pending pair. */ pendingHousingMap?: Address; }; export function getAdvanceDemocracyRequirementsConfigInstruction< TAccountFunder extends string, TAccountGame extends string, TAccountRegistry extends string, TAccountPendingCurveConfig extends string, TAccountPendingHousingMap extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: AdvanceDemocracyRequirementsConfigInput< TAccountFunder, TAccountGame, TAccountRegistry, TAccountPendingCurveConfig, TAccountPendingHousingMap >, config?: { programAddress?: TProgramAddress }, ): AdvanceDemocracyRequirementsConfigInstruction< TProgramAddress, TAccountFunder, TAccountGame, TAccountRegistry, TAccountPendingCurveConfig, TAccountPendingHousingMap > { // Program address. const programAddress = config?.programAddress ?? SAGE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { funder: { value: input.funder ?? null, isWritable: true }, game: { value: input.game ?? null, isWritable: false }, registry: { value: input.registry ?? null, isWritable: true }, pendingCurveConfig: { value: input.pendingCurveConfig ?? null, isWritable: false, }, pendingHousingMap: { value: input.pendingHousingMap ?? null, isWritable: false, }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedInstructionAccount >; const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta('funder', accounts.funder), getAccountMeta('game', accounts.game), getAccountMeta('registry', accounts.registry), getAccountMeta('pendingCurveConfig', accounts.pendingCurveConfig), getAccountMeta('pendingHousingMap', accounts.pendingHousingMap), ], data: getAdvanceDemocracyRequirementsConfigInstructionDataEncoder().encode( {}, ), programAddress, } as AdvanceDemocracyRequirementsConfigInstruction< TProgramAddress, TAccountFunder, TAccountGame, TAccountRegistry, TAccountPendingCurveConfig, TAccountPendingHousingMap >); } export type ParsedAdvanceDemocracyRequirementsConfigInstruction< TProgram extends string = typeof SAGE_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { funder: TAccountMetas[0]; game: TAccountMetas[1]; registry: TAccountMetas[2]; /** Required with `pending_housing_map` whenever the registry has a pending pair. */ pendingCurveConfig?: TAccountMetas[3] | undefined; /** Required with `pending_curve_config` whenever the registry has a pending pair. */ pendingHousingMap?: TAccountMetas[4] | undefined; }; data: AdvanceDemocracyRequirementsConfigInstructionData; }; export function parseAdvanceDemocracyRequirementsConfigInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedAdvanceDemocracyRequirementsConfigInstruction< TProgram, TAccountMetas > { if (instruction.accounts.length < 5) { throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 5, }, ); } 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(), game: getNextAccount(), registry: getNextAccount(), pendingCurveConfig: getNextOptionalAccount(), pendingHousingMap: getNextOptionalAccount(), }, data: getAdvanceDemocracyRequirementsConfigInstructionDataDecoder().decode( instruction.data, ), }; }