12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { Buffer } from 'node:buffer';
- import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
- import * as borsh from 'borsh';
- export enum InstructionType {
- CpiTransfer = 0,
- ProgramTransfer = 1,
- }
- export class TransferInstruction {
- instruction: InstructionType;
- amount: number;
- constructor(props: {
- instruction: InstructionType;
- amount: number;
- }) {
- this.instruction = props.instruction;
- this.amount = props.amount;
- }
- toBuffer() {
- return Buffer.from(borsh.serialize(TransferInstructionSchema, this));
- }
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(TransferInstructionSchema, TransferInstruction, buffer);
- }
- }
- export const TransferInstructionSchema = new Map([
- [
- TransferInstruction,
- {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['amount', 'u64'],
- ],
- },
- ],
- ]);
- export function createTransferInstruction(
- payerPubkey: PublicKey,
- recipientPubkey: PublicKey,
- programId: PublicKey,
- instruction: InstructionType,
- amount: number,
- ): TransactionInstruction {
- const instructionObject = new TransferInstruction({
- instruction,
- amount,
- });
- const ix = new TransactionInstruction({
- keys: [
- { pubkey: payerPubkey, isSigner: true, isWritable: true },
- { pubkey: recipientPubkey, isSigner: false, isWritable: true },
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
- ],
- programId,
- data: instructionObject.toBuffer(),
- });
- return ix;
- }
|