import { PublicKey, TransactionInstruction, SystemProgram } from "@solana/web3.js"; import type { PitProgram } from "../program.js"; import { getRegistryAddress } from "../accounts/pda.js"; /** * Parameters for creating an initialize_registry instruction */ interface InitializeRegistryParams { /** Operator's public key (must match hardcoded OPERATOR) */ operator: PublicKey; } /** * Create an initialize_registry instruction * * This instruction is operator-only and should be called once before * any markets are initialized. It creates the singleton registry account * that tracks all active market week numbers. * * @param program - Anchor Program instance * @param params - Initialize registry parameters * @returns Promise resolving to TransactionInstruction * * @example * ```typescript * import { createProgram, createInitializeRegistryInstruction } from "@pit-protocol/sdk"; * * const program = createProgram(provider); * const ix = await createInitializeRegistryInstruction(program, { * operator: operatorKeypair.publicKey, * }); * * const tx = new Transaction().add(ix); * await sendAndConfirmTransaction(connection, tx, [operatorKeypair]); * ``` */ export async function createInitializeRegistryInstruction( program: PitProgram, params: InitializeRegistryParams ): Promise { const { operator } = params; const registry = getRegistryAddress(); return await program.methods .initializeRegistry() .accountsPartial({ registry, operator, systemProgram: SystemProgram.programId, }) .instruction(); }