/** * 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, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, getU16Decoder, getU16Encoder, getU64Decoder, getU64Encoder, 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'; export const DEPOSIT_CARGO_TO_GAME_DISCRIMINATOR = new Uint8Array([ 87, 49, 117, 148, 241, 247, 176, 18, ]); export function getDepositCargoToGameDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( DEPOSIT_CARGO_TO_GAME_DISCRIMINATOR, ); } export type DepositCargoToGameInstruction< 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', TAccountSystemAndStarbasePlayerSystem extends string | AccountMeta = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends | string | AccountMeta = string, TAccountCharacter extends string | AccountMeta = string, TAccountOwner extends string | AccountMeta = string, TAccountGame extends string | AccountMeta = string, TAccountCargoCache extends string | AccountMeta = string, TAccountSource extends string | AccountMeta = string, TAccountDestination extends string | AccountMeta = string, TAccountTokenProgram extends string | AccountMeta = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', 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, TAccountSystemAndStarbasePlayerSystem extends string ? ReadonlyAccount : TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer extends string ? WritableAccount : TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter extends string ? WritableAccount : TAccountCharacter, TAccountOwner extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountOwner, TAccountGame extends string ? ReadonlyAccount : TAccountGame, TAccountCargoCache extends string ? ReadonlyAccount : TAccountCargoCache, TAccountSource extends string ? WritableAccount : TAccountSource, TAccountDestination extends string ? WritableAccount : TAccountDestination, TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, ...TRemainingAccounts, ] >; export type DepositCargoToGameInstructionData = { discriminator: ReadonlyUint8Array; /** The amount of cargo tokens to deposit */ amount: bigint; /** The index of the key in the player profile */ keyIndex: number; }; export type DepositCargoToGameInstructionDataArgs = { /** The amount of cargo tokens to deposit */ amount: number | bigint; /** The index of the key in the player profile */ keyIndex: number; }; export function getDepositCargoToGameInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['amount', getU64Encoder()], ['keyIndex', getU16Encoder()], ]), (value) => ({ ...value, discriminator: DEPOSIT_CARGO_TO_GAME_DISCRIMINATOR, }), ); } export function getDepositCargoToGameInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['amount', getU64Decoder()], ['keyIndex', getU16Decoder()], ]); } export function getDepositCargoToGameInstructionDataCodec(): FixedSizeCodec< DepositCargoToGameInstructionDataArgs, DepositCargoToGameInstructionData > { return combineCodec( getDepositCargoToGameInstructionDataEncoder(), getDepositCargoToGameInstructionDataDecoder(), ); } export type DepositCargoToGameAsyncInput< TAccountProfileSigner extends string = string, TAccountProfileProfile extends string = string, TAccountProfileCertificate extends string = string, TAccountProfileProgram extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountCharacter extends string = string, TAccountOwner extends string = string, TAccountGame extends string = string, TAccountCargoCache extends string = string, TAccountSource extends string = string, TAccountDestination extends string = string, TAccountTokenProgram extends string = string, > = { profileSigner: TransactionSigner; profileProfile: Address; profileCertificate?: Address; profileProgram?: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The Character associated with the profile and game (for access gating) */ character?: Address; /** The authority who owns the source token account and must sign the transaction */ owner: TransactionSigner; game: Address; /** Account containing cargo definitions cache */ cargoCache: Address; /** The source token account containing cargo tokens to transfer */ source: Address; /** The destination token account that will receive the cargo tokens */ destination: Address; /** The SPL Token program */ tokenProgram?: Address; amount: DepositCargoToGameInstructionDataArgs['amount']; keyIndex: DepositCargoToGameInstructionDataArgs['keyIndex']; }; export async function getDepositCargoToGameInstructionAsync< TAccountProfileSigner extends string, TAccountProfileProfile extends string, TAccountProfileCertificate extends string, TAccountProfileProgram extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountCharacter extends string, TAccountOwner extends string, TAccountGame extends string, TAccountCargoCache extends string, TAccountSource extends string, TAccountDestination extends string, TAccountTokenProgram extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: DepositCargoToGameAsyncInput< TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter, TAccountOwner, TAccountGame, TAccountCargoCache, TAccountSource, TAccountDestination, TAccountTokenProgram >, config?: { programAddress?: TProgramAddress }, ): Promise< DepositCargoToGameInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter, TAccountOwner, TAccountGame, TAccountCargoCache, TAccountSource, TAccountDestination, TAccountTokenProgram > > { // 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 }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, character: { value: input.character ?? null, isWritable: true }, owner: { value: input.owner ?? null, isWritable: false }, game: { value: input.game ?? null, isWritable: false }, cargoCache: { value: input.cargoCache ?? null, isWritable: false }, source: { value: input.source ?? null, isWritable: true }, destination: { value: input.destination ?? null, isWritable: true }, tokenProgram: { value: input.tokenProgram ?? 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.tokenProgram.value) { accounts.tokenProgram.value = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>; } 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( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('character', accounts.character), getAccountMeta('owner', accounts.owner), getAccountMeta('game', accounts.game), getAccountMeta('cargoCache', accounts.cargoCache), getAccountMeta('source', accounts.source), getAccountMeta('destination', accounts.destination), getAccountMeta('tokenProgram', accounts.tokenProgram), ], data: getDepositCargoToGameInstructionDataEncoder().encode( args as DepositCargoToGameInstructionDataArgs, ), programAddress, } as DepositCargoToGameInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter, TAccountOwner, TAccountGame, TAccountCargoCache, TAccountSource, TAccountDestination, TAccountTokenProgram >); } export type DepositCargoToGameInput< TAccountProfileSigner extends string = string, TAccountProfileProfile extends string = string, TAccountProfileCertificate extends string = string, TAccountProfileProgram extends string = string, TAccountSystemAndStarbasePlayerSystem extends string = string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string = string, TAccountCharacter extends string = string, TAccountOwner extends string = string, TAccountGame extends string = string, TAccountCargoCache extends string = string, TAccountSource extends string = string, TAccountDestination extends string = string, TAccountTokenProgram extends string = string, > = { profileSigner: TransactionSigner; profileProfile: Address; profileCertificate?: Address; profileProgram?: Address; /** The [`StarSystem`] account */ systemAndStarbasePlayerSystem: Address; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: Address; /** The Character associated with the profile and game (for access gating) */ character: Address; /** The authority who owns the source token account and must sign the transaction */ owner: TransactionSigner; game: Address; /** Account containing cargo definitions cache */ cargoCache: Address; /** The source token account containing cargo tokens to transfer */ source: Address; /** The destination token account that will receive the cargo tokens */ destination: Address; /** The SPL Token program */ tokenProgram?: Address; amount: DepositCargoToGameInstructionDataArgs['amount']; keyIndex: DepositCargoToGameInstructionDataArgs['keyIndex']; }; export function getDepositCargoToGameInstruction< TAccountProfileSigner extends string, TAccountProfileProfile extends string, TAccountProfileCertificate extends string, TAccountProfileProgram extends string, TAccountSystemAndStarbasePlayerSystem extends string, TAccountSystemAndStarbasePlayerStarbasePlayer extends string, TAccountCharacter extends string, TAccountOwner extends string, TAccountGame extends string, TAccountCargoCache extends string, TAccountSource extends string, TAccountDestination extends string, TAccountTokenProgram extends string, TProgramAddress extends Address = typeof SAGE_PROGRAM_ADDRESS, >( input: DepositCargoToGameInput< TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter, TAccountOwner, TAccountGame, TAccountCargoCache, TAccountSource, TAccountDestination, TAccountTokenProgram >, config?: { programAddress?: TProgramAddress }, ): DepositCargoToGameInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter, TAccountOwner, TAccountGame, TAccountCargoCache, TAccountSource, TAccountDestination, TAccountTokenProgram > { // 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 }, systemAndStarbasePlayerSystem: { value: input.systemAndStarbasePlayerSystem ?? null, isWritable: false, }, systemAndStarbasePlayerStarbasePlayer: { value: input.systemAndStarbasePlayerStarbasePlayer ?? null, isWritable: true, }, character: { value: input.character ?? null, isWritable: true }, owner: { value: input.owner ?? null, isWritable: false }, game: { value: input.game ?? null, isWritable: false }, cargoCache: { value: input.cargoCache ?? null, isWritable: false }, source: { value: input.source ?? null, isWritable: true }, destination: { value: input.destination ?? null, isWritable: true }, tokenProgram: { value: input.tokenProgram ?? 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.tokenProgram.value) { accounts.tokenProgram.value = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>; } 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( 'systemAndStarbasePlayerSystem', accounts.systemAndStarbasePlayerSystem, ), getAccountMeta( 'systemAndStarbasePlayerStarbasePlayer', accounts.systemAndStarbasePlayerStarbasePlayer, ), getAccountMeta('character', accounts.character), getAccountMeta('owner', accounts.owner), getAccountMeta('game', accounts.game), getAccountMeta('cargoCache', accounts.cargoCache), getAccountMeta('source', accounts.source), getAccountMeta('destination', accounts.destination), getAccountMeta('tokenProgram', accounts.tokenProgram), ], data: getDepositCargoToGameInstructionDataEncoder().encode( args as DepositCargoToGameInstructionDataArgs, ), programAddress, } as DepositCargoToGameInstruction< TProgramAddress, TAccountProfileSigner, TAccountProfileProfile, TAccountProfileCertificate, TAccountProfileProgram, TAccountSystemAndStarbasePlayerSystem, TAccountSystemAndStarbasePlayerStarbasePlayer, TAccountCharacter, TAccountOwner, TAccountGame, TAccountCargoCache, TAccountSource, TAccountDestination, TAccountTokenProgram >); } export type ParsedDepositCargoToGameInstruction< 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 [`StarSystem`] account */ systemAndStarbasePlayerSystem: TAccountMetas[4]; /** The [`StarbasePlayer`] Account */ systemAndStarbasePlayerStarbasePlayer: TAccountMetas[5]; /** The Character associated with the profile and game (for access gating) */ character: TAccountMetas[6]; /** The authority who owns the source token account and must sign the transaction */ owner: TAccountMetas[7]; game: TAccountMetas[8]; /** Account containing cargo definitions cache */ cargoCache: TAccountMetas[9]; /** The source token account containing cargo tokens to transfer */ source: TAccountMetas[10]; /** The destination token account that will receive the cargo tokens */ destination: TAccountMetas[11]; /** The SPL Token program */ tokenProgram: TAccountMetas[12]; }; data: DepositCargoToGameInstructionData; }; export function parseDepositCargoToGameInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedDepositCargoToGameInstruction { 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: { profileSigner: getNextAccount(), profileProfile: getNextAccount(), profileCertificate: getNextOptionalAccount(), profileProgram: getNextAccount(), systemAndStarbasePlayerSystem: getNextAccount(), systemAndStarbasePlayerStarbasePlayer: getNextAccount(), character: getNextAccount(), owner: getNextAccount(), game: getNextAccount(), cargoCache: getNextAccount(), source: getNextAccount(), destination: getNextAccount(), tokenProgram: getNextAccount(), }, data: getDepositCargoToGameInstructionDataDecoder().decode( instruction.data, ), }; }