@robertprp/intents-sdk
Version:
Shogun Network Intent-based cross-chain swaps SDK
363 lines (344 loc) • 14.1 kB
text/typescript
/**
* 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 { type Address } from '@solana/kit';
import {
combineCodec,
fixDecoderSize,
fixEncoderSize,
getBytesDecoder,
getBytesEncoder,
getStructDecoder,
getStructEncoder,
transformEncoder,
type Codec,
type Decoder,
type Encoder,
type ReadonlyUint8Array,
} from '@solana/kit';
import {
type IAccountMeta,
type IInstruction,
type IInstructionWithAccounts,
type IInstructionWithData,
type ReadonlyAccount,
type WritableAccount,
type WritableSignerAccount,
} from '@solana/kit';
import { type IAccountSignerMeta, type TransactionSigner } from '@solana/kit';
import { SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';
import { getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';
export const PRE_START_ORDER_EXECUTION_DISCRIMINATOR = new Uint8Array([69, 230, 54, 217, 254, 93, 181, 32]);
export function getPreStartOrderExecutionDiscriminatorBytes() {
return fixEncoderSize(getBytesEncoder(), 8).encode(PRE_START_ORDER_EXECUTION_DISCRIMINATOR);
}
export type PreStartOrderExecutionInstruction<
TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
TAccountSolver extends string | IAccountMeta<string> = string,
TAccountOrder extends string | IAccountMeta<string> = string,
TAccountGuard extends string | IAccountMeta<string> = string,
TAccountIxSysvar extends string | IAccountMeta<string> = 'Sysvar1nstructions1111111111111111111111111',
TAccountCollateralTokenMint extends string | IAccountMeta<string> = string,
TAccountSolverCollateralTokenAccount extends string | IAccountMeta<string> = string,
TAccountGuardCollateralTokenAccount extends string | IAccountMeta<string> = string,
TAccountCollateralTokenProgram extends string | IAccountMeta<string> = string,
TAccountTokenInMint extends string | IAccountMeta<string> = string,
TAccountSolverTokenInAccount extends string | IAccountMeta<string> = string,
TAccountGuardTokenInAccount extends string | IAccountMeta<string> = string,
TAccountTokenInProgram extends string | IAccountMeta<string> = string,
TRemainingAccounts extends readonly IAccountMeta<string>[] = [],
> = IInstruction<TProgram> &
IInstructionWithData<Uint8Array> &
IInstructionWithAccounts<
[
TAccountSolver extends string
? WritableSignerAccount<TAccountSolver> & IAccountSignerMeta<TAccountSolver>
: TAccountSolver,
TAccountOrder extends string ? WritableAccount<TAccountOrder> : TAccountOrder,
TAccountGuard extends string ? WritableAccount<TAccountGuard> : TAccountGuard,
TAccountIxSysvar extends string ? ReadonlyAccount<TAccountIxSysvar> : TAccountIxSysvar,
TAccountCollateralTokenMint extends string
? ReadonlyAccount<TAccountCollateralTokenMint>
: TAccountCollateralTokenMint,
TAccountSolverCollateralTokenAccount extends string
? WritableAccount<TAccountSolverCollateralTokenAccount>
: TAccountSolverCollateralTokenAccount,
TAccountGuardCollateralTokenAccount extends string
? WritableAccount<TAccountGuardCollateralTokenAccount>
: TAccountGuardCollateralTokenAccount,
TAccountCollateralTokenProgram extends string
? ReadonlyAccount<TAccountCollateralTokenProgram>
: TAccountCollateralTokenProgram,
TAccountTokenInMint extends string ? ReadonlyAccount<TAccountTokenInMint> : TAccountTokenInMint,
TAccountSolverTokenInAccount extends string
? WritableAccount<TAccountSolverTokenInAccount>
: TAccountSolverTokenInAccount,
TAccountGuardTokenInAccount extends string
? WritableAccount<TAccountGuardTokenInAccount>
: TAccountGuardTokenInAccount,
TAccountTokenInProgram extends string ? ReadonlyAccount<TAccountTokenInProgram> : TAccountTokenInProgram,
...TRemainingAccounts,
]
>;
export type PreStartOrderExecutionInstructionData = {
discriminator: ReadonlyUint8Array;
};
export type PreStartOrderExecutionInstructionDataArgs = {};
export function getPreStartOrderExecutionInstructionDataEncoder(): Encoder<PreStartOrderExecutionInstructionDataArgs> {
return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({
...value,
discriminator: PRE_START_ORDER_EXECUTION_DISCRIMINATOR,
}));
}
export function getPreStartOrderExecutionInstructionDataDecoder(): Decoder<PreStartOrderExecutionInstructionData> {
return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);
}
export function getPreStartOrderExecutionInstructionDataCodec(): Codec<
PreStartOrderExecutionInstructionDataArgs,
PreStartOrderExecutionInstructionData
> {
return combineCodec(
getPreStartOrderExecutionInstructionDataEncoder(),
getPreStartOrderExecutionInstructionDataDecoder(),
);
}
export type PreStartOrderExecutionInput<
TAccountSolver extends string = string,
TAccountOrder extends string = string,
TAccountGuard extends string = string,
TAccountIxSysvar extends string = string,
TAccountCollateralTokenMint extends string = string,
TAccountSolverCollateralTokenAccount extends string = string,
TAccountGuardCollateralTokenAccount extends string = string,
TAccountCollateralTokenProgram extends string = string,
TAccountTokenInMint extends string = string,
TAccountSolverTokenInAccount extends string = string,
TAccountGuardTokenInAccount extends string = string,
TAccountTokenInProgram extends string = string,
> = {
/** Solver that starts order execution */
solver: TransactionSigner<TAccountSolver>;
/** Order data */
order: Address<TAccountOrder>;
/** Guard address, that protects this order execution */
guard: Address<TAccountGuard>;
/**
* the supplied Sysvar could be anything else.
* The Instruction Sysvar has not been implemented
* in the Anchor framework yet, so this is the safe approach.
*/
ixSysvar?: Address<TAccountIxSysvar>;
/** Collateral token mint */
collateralTokenMint: Address<TAccountCollateralTokenMint>;
/** Solver collateral account, from which solver is paying collateral tokens and fees */
solverCollateralTokenAccount: Address<TAccountSolverCollateralTokenAccount>;
/** Guard collateral account, where Guard is collecting collateral tokens */
guardCollateralTokenAccount: Address<TAccountGuardCollateralTokenAccount>;
/** Solana token program */
collateralTokenProgram: Address<TAccountCollateralTokenProgram>;
/** Token IN mint */
tokenInMint: Address<TAccountTokenInMint>;
/** Solver Token IN account, to which token IN will be sent */
solverTokenInAccount: Address<TAccountSolverTokenInAccount>;
/** Guard Token IN account, where Tokens IN is stored */
guardTokenInAccount: Address<TAccountGuardTokenInAccount>;
/** Solana token program */
tokenInProgram: Address<TAccountTokenInProgram>;
};
export function getPreStartOrderExecutionInstruction<
TAccountSolver extends string,
TAccountOrder extends string,
TAccountGuard extends string,
TAccountIxSysvar extends string,
TAccountCollateralTokenMint extends string,
TAccountSolverCollateralTokenAccount extends string,
TAccountGuardCollateralTokenAccount extends string,
TAccountCollateralTokenProgram extends string,
TAccountTokenInMint extends string,
TAccountSolverTokenInAccount extends string,
TAccountGuardTokenInAccount extends string,
TAccountTokenInProgram extends string,
TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
>(
input: PreStartOrderExecutionInput<
TAccountSolver,
TAccountOrder,
TAccountGuard,
TAccountIxSysvar,
TAccountCollateralTokenMint,
TAccountSolverCollateralTokenAccount,
TAccountGuardCollateralTokenAccount,
TAccountCollateralTokenProgram,
TAccountTokenInMint,
TAccountSolverTokenInAccount,
TAccountGuardTokenInAccount,
TAccountTokenInProgram
>,
config?: { programAddress?: TProgramAddress },
): PreStartOrderExecutionInstruction<
TProgramAddress,
TAccountSolver,
TAccountOrder,
TAccountGuard,
TAccountIxSysvar,
TAccountCollateralTokenMint,
TAccountSolverCollateralTokenAccount,
TAccountGuardCollateralTokenAccount,
TAccountCollateralTokenProgram,
TAccountTokenInMint,
TAccountSolverTokenInAccount,
TAccountGuardTokenInAccount,
TAccountTokenInProgram
> {
// Program address.
const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;
// Original accounts.
const originalAccounts = {
solver: { value: input.solver ?? null, isWritable: true },
order: { value: input.order ?? null, isWritable: true },
guard: { value: input.guard ?? null, isWritable: true },
ixSysvar: { value: input.ixSysvar ?? null, isWritable: false },
collateralTokenMint: {
value: input.collateralTokenMint ?? null,
isWritable: false,
},
solverCollateralTokenAccount: {
value: input.solverCollateralTokenAccount ?? null,
isWritable: true,
},
guardCollateralTokenAccount: {
value: input.guardCollateralTokenAccount ?? null,
isWritable: true,
},
collateralTokenProgram: {
value: input.collateralTokenProgram ?? null,
isWritable: false,
},
tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },
solverTokenInAccount: {
value: input.solverTokenInAccount ?? null,
isWritable: true,
},
guardTokenInAccount: {
value: input.guardTokenInAccount ?? null,
isWritable: true,
},
tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },
};
const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;
// Resolve default values.
if (!accounts.ixSysvar.value) {
accounts.ixSysvar.value =
'Sysvar1nstructions1111111111111111111111111' as Address<'Sysvar1nstructions1111111111111111111111111'>;
}
const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
const instruction = {
accounts: [
getAccountMeta(accounts.solver),
getAccountMeta(accounts.order),
getAccountMeta(accounts.guard),
getAccountMeta(accounts.ixSysvar),
getAccountMeta(accounts.collateralTokenMint),
getAccountMeta(accounts.solverCollateralTokenAccount),
getAccountMeta(accounts.guardCollateralTokenAccount),
getAccountMeta(accounts.collateralTokenProgram),
getAccountMeta(accounts.tokenInMint),
getAccountMeta(accounts.solverTokenInAccount),
getAccountMeta(accounts.guardTokenInAccount),
getAccountMeta(accounts.tokenInProgram),
],
programAddress,
data: getPreStartOrderExecutionInstructionDataEncoder().encode({}),
} as PreStartOrderExecutionInstruction<
TProgramAddress,
TAccountSolver,
TAccountOrder,
TAccountGuard,
TAccountIxSysvar,
TAccountCollateralTokenMint,
TAccountSolverCollateralTokenAccount,
TAccountGuardCollateralTokenAccount,
TAccountCollateralTokenProgram,
TAccountTokenInMint,
TAccountSolverTokenInAccount,
TAccountGuardTokenInAccount,
TAccountTokenInProgram
>;
return instruction;
}
export type ParsedPreStartOrderExecutionInstruction<
TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[],
> = {
programAddress: Address<TProgram>;
accounts: {
/** Solver that starts order execution */
solver: TAccountMetas[0];
/** Order data */
order: TAccountMetas[1];
/** Guard address, that protects this order execution */
guard: TAccountMetas[2];
/**
* the supplied Sysvar could be anything else.
* The Instruction Sysvar has not been implemented
* in the Anchor framework yet, so this is the safe approach.
*/
ixSysvar: TAccountMetas[3];
/** Collateral token mint */
collateralTokenMint: TAccountMetas[4];
/** Solver collateral account, from which solver is paying collateral tokens and fees */
solverCollateralTokenAccount: TAccountMetas[5];
/** Guard collateral account, where Guard is collecting collateral tokens */
guardCollateralTokenAccount: TAccountMetas[6];
/** Solana token program */
collateralTokenProgram: TAccountMetas[7];
/** Token IN mint */
tokenInMint: TAccountMetas[8];
/** Solver Token IN account, to which token IN will be sent */
solverTokenInAccount: TAccountMetas[9];
/** Guard Token IN account, where Tokens IN is stored */
guardTokenInAccount: TAccountMetas[10];
/** Solana token program */
tokenInProgram: TAccountMetas[11];
};
data: PreStartOrderExecutionInstructionData;
};
export function parsePreStartOrderExecutionInstruction<
TProgram extends string,
TAccountMetas extends readonly IAccountMeta[],
>(
instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>,
): ParsedPreStartOrderExecutionInstruction<TProgram, TAccountMetas> {
if (instruction.accounts.length < 12) {
// TODO: Coded error.
throw new Error('Not enough accounts');
}
let accountIndex = 0;
const getNextAccount = () => {
const accountMeta = instruction.accounts![accountIndex]!;
accountIndex += 1;
return accountMeta;
};
return {
programAddress: instruction.programAddress,
accounts: {
solver: getNextAccount(),
order: getNextAccount(),
guard: getNextAccount(),
ixSysvar: getNextAccount(),
collateralTokenMint: getNextAccount(),
solverCollateralTokenAccount: getNextAccount(),
guardCollateralTokenAccount: getNextAccount(),
collateralTokenProgram: getNextAccount(),
tokenInMint: getNextAccount(),
solverTokenInAccount: getNextAccount(),
guardTokenInAccount: getNextAccount(),
tokenInProgram: getNextAccount(),
},
data: getPreStartOrderExecutionInstructionDataDecoder().decode(instruction.data),
};
}