/// <reference types="node" />
/// <reference types="node" />
/// <reference types="bn.js" />
import type { AccountMeta, Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
import * as pdas from '../addresses/pda';
import * as constants from '../constants';
import { CustomBorshCoder } from '../decode/customCoder';
import type { Drift } from '../idl/drift';
import type { UserAccount } from '../types';
import type { DriftProgram } from '../config';
import type { BN } from '@coral-xyz/anchor';
import * as remainingAccounts from './remainingAccounts';
import * as signedMsg from './signedMsg';
export type DriftCoreContext = {
    /** Drift program id. */
    programId: PublicKey;
    /** Anchor IDL json for Drift (defaults to bundled `idl/drift.json`). */
    idl?: Drift;
};
/**
 * DriftCore is the minimal, core SDK surface:
 * - No subscriptions / polling / websockets.
 * - Pure helpers for PDAs, decoding, constants, and instruction building.
 *
 * Transaction/instruction builders will be progressively moved here from `DriftClient`.
 */
export declare class DriftCore {
    /** Re-export PDA helpers (pure). */
    static readonly pdas: typeof pdas;
    /** Re-export SDK constants (market configs, numeric constants, etc). */
    static readonly constants: typeof constants;
    /** Re-export remaining-accounts logic (pure). */
    static readonly remainingAccounts: typeof remainingAccounts;
    static readonly signedMsg: typeof signedMsg;
    static defaultIdl(): Drift;
    static coder(idl?: Drift): CustomBorshCoder;
    /** Decode a Drift `User` account buffer without creating a Program. */
    static decodeUserAccount(buffer: Buffer): UserAccount;
    /** Fetch and decode a Drift `User` account. */
    static fetchUserAccount(connection: Connection, userAccountPublicKey: PublicKey): Promise<UserAccount | null>;
    static buildDepositInstruction(args: {
        program: DriftProgram;
        marketIndex: number;
        amount: BN;
        reduceOnly: boolean;
        state: PublicKey;
        spotMarket: PublicKey;
        spotMarketVault: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        userTokenAccount: PublicKey;
        authority: PublicKey;
        tokenProgram: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildWithdrawInstruction(args: {
        program: DriftProgram;
        marketIndex: number;
        amount: BN;
        reduceOnly: boolean;
        state: PublicKey;
        spotMarket: PublicKey;
        spotMarketVault: PublicKey;
        driftSigner: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        userTokenAccount: PublicKey;
        authority: PublicKey;
        tokenProgram: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildPlaceOrdersInstruction(args: {
        program: DriftProgram;
        formattedParams: any[];
        state: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildCancelOrdersInstruction(args: {
        program: DriftProgram;
        marketType: any;
        marketIndex: number | null;
        direction: any;
        user: PublicKey;
        state: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildFillPerpOrderInstruction(args: {
        program: DriftProgram;
        orderId: number | null;
        state: PublicKey;
        filler: PublicKey;
        fillerStats: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildTriggerOrderInstruction(args: {
        program: DriftProgram;
        orderId: number;
        state: PublicKey;
        filler: PublicKey;
        user: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildSettlePnlInstruction(args: {
        program: DriftProgram;
        marketIndex: number;
        state: PublicKey;
        authority: PublicKey;
        user: PublicKey;
        spotMarketVault: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildLiquidatePerpInstruction(args: {
        program: DriftProgram;
        marketIndex: number;
        maxBaseAssetAmount: any;
        limitPrice: any | null;
        state: PublicKey;
        authority: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        liquidator: PublicKey;
        liquidatorStats: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildPlacePerpOrderInstruction(args: {
        program: DriftProgram;
        orderParams: any;
        state: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildPlaceAndTakePerpOrderInstruction(args: {
        program: DriftProgram;
        orderParams: any;
        optionalParams: number | null;
        state: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildPlaceAndMakePerpOrderInstruction(args: {
        program: DriftProgram;
        orderParams: any;
        takerOrderId: number;
        state: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        taker: PublicKey;
        takerStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildCancelOrderInstruction(args: {
        program: DriftProgram;
        orderId: number | null;
        state: PublicKey;
        user: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildCancelOrderByUserIdInstruction(args: {
        program: DriftProgram;
        userOrderId: number;
        state: PublicKey;
        user: PublicKey;
        authority: PublicKey;
        oracle: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildCancelOrdersByIdsInstruction(args: {
        program: DriftProgram;
        orderIds: number[] | undefined;
        state: PublicKey;
        user: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildModifyOrderInstruction(args: {
        program: DriftProgram;
        orderId: number;
        modifyParams: any;
        state: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildModifyOrderByUserIdInstruction(args: {
        program: DriftProgram;
        userOrderId: number;
        modifyParams: any;
        state: PublicKey;
        user: PublicKey;
        userStats: PublicKey;
        authority: PublicKey;
        remainingAccounts: AccountMeta[];
    }): Promise<TransactionInstruction>;
    static buildUpdateFundingRateInstruction(args: {
        program: DriftProgram;
        perpMarketIndex: number;
        state: PublicKey;
        perpMarket: PublicKey;
        oracle: PublicKey;
    }): Promise<TransactionInstruction>;
    /**
     * Placeholder for instruction builders.
     *
     * In follow-up refactors, DriftClient methods like `getDepositInstruction`,
     * `getPlaceOrdersIx`, etc. will be moved here as pure builders.
     */
    static buildInstructions(_ctx: DriftCoreContext): TransactionInstruction[];
}
