/// <reference types="node" />
import { TransactionInstruction, PublicKey } from '@solana/web3.js';
import * as Borsh from './utils/borsh';
import BN from 'bn.js';
export declare const toPublicKey: (key: string | PublicKey) => PublicKey;
export declare type StringPublicKey = string;
export declare const findProgramAddress: (seeds: (Buffer | Uint8Array)[], programId: PublicKey) => Promise<[PublicKey, number]>;
export declare const VAULT_PREFIX = "vault";
export declare enum VaultKey {
    Uninitialized = 0,
    VaultV1 = 3,
    SafetyDepositBoxV1 = 1,
    ExternalPriceAccountV1 = 2,
    AuctionV1 = 4,
    BidV1 = 5,
    PoolWhitelistV1 = 6
}
export declare enum WhitelistType {
    CreatorWhitelist = 0,
    SingleNFTWhitelist = 1
}
export declare enum VaultState {
    Inactive = 0,
    Active = 1,
    Combined = 2,
    Deactivated = 3,
    AuctionStarted = 4
}
export declare const MAX_VAULT_SIZE: number;
export declare const MAX_SAFETY_DEPOSIT_SIZE: number;
export declare const MAX_AUCTION_SIZE: number;
export declare const MAX_BID_SIZE: number;
export declare const MAX_POOL_WHITELIST_SIZE: number;
export declare const MAX_EXTERNAL_ACCOUNT_SIZE: number;
export declare class Vault {
    key: VaultKey;
    tokenProgram: StringPublicKey;
    fractionMint: StringPublicKey;
    authority: StringPublicKey;
    fractionTreasury: StringPublicKey;
    redeemTreasury: StringPublicKey;
    allowFurtherShareCreation: boolean;
    pricingLookupAddress: StringPublicKey;
    priceMint: StringPublicKey;
    fractionsSupply: BN;
    createdAt: number;
    tokenTypeCount: number;
    state: VaultState;
    lockedPricePerShare: BN;
    constructor(args: {
        tokenProgram: StringPublicKey;
        fractionMint: StringPublicKey;
        authority: StringPublicKey;
        fractionTreasury: StringPublicKey;
        redeemTreasury: StringPublicKey;
        allowFurtherShareCreation: boolean;
        pricingLookupAddress: StringPublicKey;
        priceMint: StringPublicKey;
        fractionsSupply: BN;
        tokenTypeCount: number;
        state: VaultState;
        lockedPricePerShare: BN;
    });
}
export declare class SafetyDepositBox {
    key: VaultKey;
    vault: StringPublicKey;
    tokenMint: StringPublicKey;
    store: StringPublicKey;
    order: number;
    constructor(args: {
        vault: StringPublicKey;
        tokenMint: StringPublicKey;
        store: StringPublicKey;
        order: number;
    });
}
export declare class ExternalPriceAccount {
    key: VaultKey;
    pricePerShare: BN;
    priceMint: StringPublicKey;
    allowedToCombine: boolean;
    constructor(args: {
        pricePerShare: BN;
        priceMint: StringPublicKey;
        allowedToCombine: boolean;
    });
}
export declare class Auction {
    key: VaultKey;
    vault: StringPublicKey;
    current_winning_bid: StringPublicKey;
    version: BN;
    started_at: number;
    ending_at: number;
    end_auction_gap: number;
    min_tick_size: BN;
    is_started: boolean;
    is_enabled: boolean;
    total_uncancelled_bids: number;
    gap_tick_size_percentage: number;
    instant_sale_price: BN;
    constructor(args: {
        vault: StringPublicKey;
        current_winning_bid: StringPublicKey;
        version: BN;
        started_at: number;
        ending_at: number;
        end_auction_gap: number;
        min_tick_size: BN;
        is_started: boolean;
        is_enabled: boolean;
        total_uncancelled_bids: number;
        gap_tick_size_percentage: number;
        instant_sale_price: BN;
    });
}
export declare const VAULT_SCHEMA: Map<any, any>;
export declare const decodePoolWhitelist: (buffer: Buffer) => any;
export declare const decodeBid: (buffer: Buffer) => any;
export declare const decodeAuction: (buffer: Buffer) => any;
export declare const decodeVault: (buffer: Buffer) => any;
export declare const decodeExternalPriceAccount: (buffer: Buffer) => ExternalPriceAccount;
export declare const decodeSafetyDeposit: (buffer: Buffer) => SafetyDepositBox;
export declare function depositNFT(poolWhitelist: StringPublicKey, userNftTokenAccount: StringPublicKey, nftMint: StringPublicKey, store: StringPublicKey, userPubkey: StringPublicKey, transfer_authority_info: StringPublicKey, fractionalTreasury: StringPublicKey, fractionMint: StringPublicKey, userFractionsTokenAccount: StringPublicKey, vault: StringPublicKey, instructions: TransactionInstruction[], vaultProgramId: PublicKey): Promise<void>;
export declare function withdrawNFT(userPubkey: StringPublicKey, userNftTokenAccount: StringPublicKey, nftMint: StringPublicKey, store: StringPublicKey, fractions_transfer_authority_info: StringPublicKey, fractionalTreasury: StringPublicKey, fractionMint: StringPublicKey, userFractionsTokenAccount: StringPublicKey, vault: StringPublicKey, instructions: TransactionInstruction[], vaultProgramId: PublicKey): Promise<void>;
export declare function initVault(allowFurtherShareCreation: boolean, fractionalMint: StringPublicKey, priceMint: StringPublicKey, redeemTreasury: StringPublicKey, fractionalTreasury: StringPublicKey, vault: StringPublicKey, vaultAuthority: StringPublicKey, instructions: TransactionInstruction[], vaultProgramId: PublicKey): Promise<void>;
export declare function addToWhitelist(is_creator: boolean, userPubkey: StringPublicKey, whitelisted_address: StringPublicKey, whitelist_info: StringPublicKey, vault: StringPublicKey, instructions: TransactionInstruction[], vaultProgramId: StringPublicKey): Promise<void>;
export declare function getSafetyDepositBox(vault: StringPublicKey, tokenMint: StringPublicKey, vaultProgramId: PublicKey): Promise<StringPublicKey>;
export declare function activateVault(vault: StringPublicKey, adminPubkey: StringPublicKey, vaultAuthority: StringPublicKey, instructions: TransactionInstruction[], vaultProgramId: PublicKey): Promise<void>;
export declare function getSafetyDepositBoxAddress(vault: StringPublicKey, tokenMint: StringPublicKey, vaultProgramId: PublicKey): Promise<StringPublicKey>;
declare type Args = {
    tokenProgram: StringPublicKey;
    fractionMint: StringPublicKey;
    authority: StringPublicKey;
    fractionTreasury: StringPublicKey;
    redeemTreasury: StringPublicKey;
    allowFurtherShareCreation: boolean;
    pricingLookupAddress: StringPublicKey;
    priceMintAddress: StringPublicKey;
    fractionsSupply: number;
    createdAt: number;
    tokenTypeCount: number;
    state: VaultState;
    lockedPricePerShare: BN;
};
export declare class VaultData extends Borsh.Data<Args> {
    static readonly SCHEMA: Map<any, any>;
    key: VaultKey;
    tokenProgram: StringPublicKey;
    fractionMint: StringPublicKey;
    authority: StringPublicKey;
    fractionTreasury: StringPublicKey;
    redeemTreasury: StringPublicKey;
    allowFurtherShareCreation: boolean;
    pricingLookupAddress: StringPublicKey;
    priceMintAddress: StringPublicKey;
    fractionsSupply: number;
    createdAt: number;
    tokenTypeCount: number;
    state: VaultState;
    lockedPricePerShare: BN;
    constructor(args: Args);
}
export declare class AuctionData extends Borsh.Data<Args> {
    static readonly SCHEMA: Map<any, any>;
    key: VaultKey;
    vault: StringPublicKey;
    current_winning_bid: StringPublicKey;
    version: BN;
    started_at: number;
    ending_at: number;
    end_auction_gap: number;
    min_tick_size: BN;
    is_started: boolean;
    is_enabled: boolean;
    total_uncancelled_bids: number;
    gap_tick_size_percentage: number;
    instant_sale_price: BN;
    constructor(args: Args);
}
export declare class BidData extends Borsh.Data<Args> {
    static readonly SCHEMA: Map<any, any>;
    key: VaultKey;
    auction: StringPublicKey;
    bidder: StringPublicKey;
    bid_amount_per_share: BN;
    version: BN;
    placed_at: number;
    is_canceled: boolean;
    constructor(args: Args);
}
export declare class PoolWhitelistData extends Borsh.Data<Args> {
    static readonly SCHEMA: Map<any, any>;
    key: VaultKey;
    vault: StringPublicKey;
    whitelisted_address: StringPublicKey;
    whitelist_type: WhitelistType;
    constructor(args: Args);
}
export {};
