@solana/instructions
Version:
Helpers for creating transaction instructions
68 lines • 3.7 kB
TypeScript
import { Address } from '@solana/addresses';
import { ReadonlyUint8Array } from '@solana/codecs-core';
import { AccountLookupMeta, AccountMeta } from './accounts';
/**
* An instruction destined for a given program.
*
* @example
* ```ts
* type StakeProgramInstruction = Instruction<'StakeConfig11111111111111111111111111111111'>;
* ```
*/
export interface Instruction<TProgramAddress extends string = string, TAccounts extends readonly (AccountLookupMeta | AccountMeta)[] = readonly (AccountLookupMeta | AccountMeta)[]> {
readonly accounts?: TAccounts;
readonly data?: ReadonlyUint8Array;
readonly programAddress: Address<TProgramAddress>;
}
/**
* An instruction that loads certain accounts.
*
* @example
* ```ts
* type InstructionWithTwoAccounts = InstructionWithAccounts<
* [
* WritableAccount, // First account
* RentSysvar, // Second account
* ]
* >;
* ```
*/
export interface InstructionWithAccounts<TAccounts extends readonly (AccountLookupMeta | AccountMeta)[]> extends Instruction {
readonly accounts: TAccounts;
}
export declare function isInstructionForProgram<TProgramAddress extends string, TInstruction extends Instruction>(instruction: TInstruction, programAddress: Address<TProgramAddress>): instruction is TInstruction & {
programAddress: Address<TProgramAddress>;
};
export declare function assertIsInstructionForProgram<TProgramAddress extends string, TInstruction extends Instruction>(instruction: TInstruction, programAddress: Address<TProgramAddress>): asserts instruction is TInstruction & {
programAddress: Address<TProgramAddress>;
};
export declare function isInstructionWithAccounts<TAccounts extends readonly (AccountLookupMeta | AccountMeta)[] = readonly (AccountLookupMeta | AccountMeta)[], TInstruction extends Instruction = Instruction>(instruction: TInstruction): instruction is InstructionWithAccounts<TAccounts> & TInstruction;
export declare function assertIsInstructionWithAccounts<TAccounts extends readonly (AccountLookupMeta | AccountMeta)[] = readonly (AccountLookupMeta | AccountMeta)[], TInstruction extends Instruction = Instruction>(instruction: TInstruction): asserts instruction is InstructionWithAccounts<TAccounts> & TInstruction;
/**
* An instruction whose data conforms to a certain type.
*
* This is most useful when you have a branded `Uint8Array` that represents a particular
* instruction's data.
*
* @example A type for the \`AdvanceNonce\` instruction of the System program
* ```ts
* type AdvanceNonceAccountInstruction<
* TNonceAccountAddress extends string = string,
* TNonceAuthorityAddress extends string = string,
* > = Instruction<'11111111111111111111111111111111'> &
* InstructionWithAccounts<
* [
* WritableAccount<TNonceAccountAddress>,
* ReadonlyAccount<'SysvarRecentB1ockHashes11111111111111111111'>,
* ReadonlySignerAccount<TNonceAuthorityAddress>,
* ]
* > &
* InstructionWithData<AdvanceNonceAccountInstructionData>;
* ```
*/
export interface InstructionWithData<TData extends ReadonlyUint8Array> extends Instruction {
readonly data: TData;
}
export declare function isInstructionWithData<TData extends ReadonlyUint8Array = ReadonlyUint8Array, TInstruction extends Instruction = Instruction>(instruction: TInstruction): instruction is InstructionWithData<TData> & TInstruction;
export declare function assertIsInstructionWithData<TData extends ReadonlyUint8Array = ReadonlyUint8Array, TInstruction extends Instruction = Instruction>(instruction: TInstruction): asserts instruction is InstructionWithData<TData> & TInstruction;
//# sourceMappingURL=instruction.d.ts.map