import type { Address, AssetId, MarketId, SpotCollateralTransferDirection, TokenId } from "./types";
type ExactlyOne<T, Keys extends keyof T = keyof T> = {
    [K in Keys]: {
        [P in K]: T[P];
    } & {
        [P in Exclude<Keys, K>]?: never;
    };
}[Keys];
type TpslOrder = {
    order_price: number;
    trigger_price: number;
    price_condition: string;
    order_type: string;
};
type TpslPair = {
    tp: TpslOrder | null;
    sl: TpslOrder | null;
};
type PendingTpslPair = {
    tpsl_pair: TpslPair;
    dynamic_size: boolean;
};
type NewOrderArgs = {
    price: number;
    size: number;
    side: string;
    order_type: string;
    reduce_only: boolean;
    client_order_id: string | null;
    pending_tpsl_pair: PendingTpslPair | null;
};
type CancelOrderArgs = {
    order_id: string | null;
    client_order_id: string | null;
};
type AmendOrderArgs = {
    cancel: CancelOrderArgs;
    place: NewOrderArgs;
};
type BankCallMessage = {
    transfer: {
        to: Address;
        coins: {
            amount: string;
            token_id: TokenId;
        };
    };
    mint: {
        mint_to_address: Address;
        coins: {
            amount: string;
            token_id: TokenId;
        };
    };
};
type WarpCallMessage = {
    register: {
        admin: {
            InsecureOwner: Address;
        };
        token_source: {
            Synthetic: {
                remote_token_id: string;
                local_decimals: number;
                remote_decimals: number;
            };
        };
        ism: {
            MessageIdMultisig: {
                threshold: number;
                validators: string[];
            };
        };
        remote_routers: [number, string][];
        inbound_transferrable_tokens_limit: string;
        inbound_limit_replenishment_per_slot: string;
        outbound_transferrable_tokens_limit: string;
        outbound_limit_replenishment_per_slot: string;
    };
    update: {
        warp_route: string;
        admin: {
            InsecureOwner: Address;
        } | null;
        ism: {
            MessageIdMultisig: {
                threshold: number;
                validators: string[];
            };
        } | null;
        inbound_transferrable_tokens_limit: string | null;
        inbound_limit_replenishment_per_slot: string | null;
        outbound_transferrable_tokens_limit: string | null;
        outbound_limit_replenishment_per_slot: string | null;
    };
    enroll_remote_router: {
        warp_route: string;
        remote_domain: number;
        remote_router_address: string;
    };
    un_enroll_remote_router: {
        warp_route: string;
        remote_domain: number;
    };
    transfer_remote: {
        amount: number;
        destination_domain: number;
        gas_payment_limit: number;
        recipient: string;
        relayer?: {
            Standard?: string;
            Vm?: string;
        } | null;
        warp_route: string;
    };
};
type InterchainGasPaymasterCallMessage = {
    set_relayer_config: {
        domain_oracle_data: {
            domain: number;
            data_value: {
                gas_price: number;
                token_exchange_rate: number;
            };
        }[];
        domain_default_gas: {
            domain: number;
            default_gas: number;
        }[];
        default_gas: number;
        beneficiary?: string;
    };
};
type ExchangeCallMessage = {
    set_value: number;
    deposit: {
        args: {
            asset_id: AssetId;
            amount: number;
        };
    };
    deposit_to_vault: {
        vault_address: Address;
        asset_operation_args: {
            asset_id: AssetId;
            amount: number;
        };
    };
    withdraw: {
        args: {
            asset_id: AssetId;
            amount: number;
        };
    };
    borrow_spot: {
        args: {
            asset_id: AssetId;
            amount: number;
        };
        sub_account_index: number | null;
    };
    place_perp_orders: {
        market_id: MarketId;
        args: NewOrderArgs[];
        replace: boolean;
        sub_account_index: number | null;
    };
    place_spot_orders: {
        market_id: MarketId;
        args: NewOrderArgs[];
        replace: boolean;
        sub_account_index: number | null;
    };
    create_perp_position_tpsl: {
        market_id: MarketId;
        tpsl_pair: TpslPair;
        size: number | null;
        sub_account_index: number | null;
    };
    amend_perp_orders: {
        market_id: MarketId;
        args: AmendOrderArgs[];
        sub_account_index: number | null;
    };
    amend_spot_orders: {
        market_id: MarketId;
        args: AmendOrderArgs[];
        sub_account_index: number | null;
    };
    cancel_perp_trigger_orders: {
        market_id: MarketId;
        trigger_order_ids: string[];
        sub_account_index: number | null;
    };
    cancel_spot_trigger_orders: {
        market_id: MarketId;
        trigger_order_ids: string[];
        sub_account_index: number | null;
    };
    cancel_perp_orders: {
        market_id: MarketId;
        args: CancelOrderArgs[];
        sub_account_index: number | null;
    };
    cancel_spot_orders: {
        market_id: MarketId;
        args: CancelOrderArgs[];
        sub_account_index: number | null;
    };
    admin_cancel_orders: {
        args: [Address, MarketId, string][];
    };
    admin_cancel_trigger_orders: {
        args: [Address, MarketId, string][];
    };
    cancel_all_perp_orders: {
        market_id: MarketId;
        sub_account_index: number | null;
    };
    cancel_all_spot_orders: {
        market_id: MarketId;
        sub_account_index: number | null;
    };
    update_oracle_prices: {
        prices_to_update: {
            asset_id: AssetId;
            oracle_price: number;
        }[];
        publish_timestamp: number;
    };
    update_mark_prices: {
        prices_to_update: {
            market_id: MarketId;
            median_cex_price: number;
            diff_ema: number;
        }[];
        publish_timestamp: number;
    };
    update_market_max_leverage: {
        market_id: MarketId;
        max_leverage: number;
        sub_account_index: number | null;
    };
    update_premium_indexes: {
        market_ids: MarketId[];
    };
    execute_perp_active_trigger_orders: {
        market_id: MarketId;
    };
    execute_spot_active_trigger_orders: {
        market_id: MarketId;
    };
    update_funding: {
        market_ids: MarketId[];
    };
    apply_funding: {
        addresses: Address[];
    };
    accrue_borrow_lend_interest: Record<string, never>;
    force_cancel_orders: {
        user_address: Address;
    };
    force_close_positions: {
        address: Address;
    };
    liquidate_perp_positions: {
        address: Address;
        positions: {
            market_id: MarketId;
            size: number;
        }[] | null;
        sub_account_index: number | null;
    };
    liquidate_spot_liability: {
        liquidatee_address: Address;
        liability_asset_id: AssetId;
        collateral_asset_id: AssetId;
        liability_amount: number;
        sub_account_index: number | null;
    };
    deposit_to_usdc_pnl_pool: {
        usdc_amount: number;
    };
    deposit_to_insurance_fund: {
        usdc_amount: number;
    };
    init_asset_info: {
        args: {
            asset_id: AssetId;
            asset_name: string;
            token_id: TokenId | null;
            decimals: number;
            withdraw_fee: number;
        };
    };
    update_asset_info: {
        args: {
            asset_id: AssetId;
            asset_name: string | null;
            token_id: TokenId | null;
            decimals: number | null;
            withdraw_fee: number | null;
        };
    };
    initialize_vault: {
        initialize_vault_args: {
            name: string;
            description: string;
            leader: Address;
            deposit_asset_ids: AssetId[];
            withdraw_asset_id: AssetId;
            withdraw_lockup_period_hours: number;
            whitelist_deposits: boolean;
            profit_share_percentage: number;
            withdrawal_fee_bps: number;
            deposit_limit: number;
        };
    };
    init_spot_market: {
        args: {
            market_id: MarketId;
            base_asset_id: AssetId;
            quote_asset_id: AssetId;
            base_min_lot_size: number;
            quote_min_lot_size: number;
            max_orders_per_side: number;
            max_orders_per_user: number;
            max_trigger_orders_per_user: number;
            taker_fees_tenth_bps: number[];
            maker_fees_tenth_bps: number[];
            max_trigger_order_price_deviation_ratio: number;
            name: string;
        };
    };
    update_spot_market: {
        args: {
            market_id: MarketId;
            base_min_lot_size: number | null;
            quote_min_lot_size: number | null;
            max_orders_per_side: number | null;
            taker_fees_tenth_bps: number[] | null;
            maker_fees_tenth_bps: number[] | null;
        };
    };
    init_perp_market: {
        args: {
            market_id: MarketId;
            base_asset_id: AssetId;
            name: string;
            min_tick_size: number;
            min_lot_size: number;
            max_orders_per_side: number;
            max_orders_per_user: number;
            max_trigger_orders_per_user: number;
            min_interest_rate_clamp: number;
            max_interest_rate_clamp: number;
            min_funding_rate_clamp: number;
            max_funding_rate_clamp: number;
            max_oi_notional: number;
            max_order_to_mark_price_deviation_ratio: number;
            max_tpsl_to_mark_price_deviation_ratio: number;
            max_tpsl_price_deviation_ratio: number;
            impact_margin: number;
            interest_rate: number;
            leverage_table_args: Record<string, number>;
            taker_fees_tenth_bps: number[];
            maker_fees_tenth_bps: number[];
        };
    };
    init_borrow_lend_pool: {
        args: {
            asset_id: AssetId;
            optimal_utilisation_rate: number;
            min_borrow_rate: number;
            max_borrow_rate: number;
            optimal_borrow_rate: number;
            asset_weight: number;
            initial_liability_weight: number;
            maintenance_liability_weight: number;
            deposit_limit: number;
            borrow_limit: number;
            liquidation_total_reward_ratio: number;
            protocol_reward_ratio: number;
            liability_liquidation_limit_ratio: number;
            interest_fee_tenth_bps: number;
        };
    };
    update_borrow_lend_pool: {
        args: {
            asset_id: AssetId;
            optimal_utilisation_rate: number | null;
            min_borrow_rate: number | null;
            max_borrow_rate: number | null;
            optimal_borrow_rate: number | null;
            asset_weight: number | null;
            initial_liability_weight: number | null;
            maintenance_liability_weight: number | null;
            deposit_limit: number | null;
            borrow_limit: number | null;
            liquidation_reward_ratio: number | null;
            liability_liquidation_limit_ratio: number | null;
        };
    };
    update_leverage_table: {
        market_id: MarketId;
        args: Record<string, number>;
    };
    update_global_parameters: {
        args: {
            max_orders_per_user: number | null;
            max_trigger_orders_per_user: number | null;
            max_orders_per_batch_msg: number | null;
            max_trigger_orders_to_execute_per_msg: number | null;
        };
    };
    deposit_spot_collateral: {
        args: {
            asset_id: AssetId;
            amount: number;
        };
    };
    withdraw_spot_collateral: {
        args: {
            asset_id: AssetId;
            amount: number;
        };
    };
    transfer_spot_collateral: {
        direction: SpotCollateralTransferDirection;
        args: {
            asset_id: AssetId;
            amount: number;
        };
        sub_account_index: number | null;
    };
    delegate_user: {
        delegate: Address;
    };
    revoke_delegation: {
        delegate: Address;
    };
    vault_delegate_user: {
        vault_address: Address;
        delegate: Address;
    };
    vault_revoke_delegation: {
        vault_address: Address;
        delegate: Address;
    };
    create_sub_account: {
        index: number;
    };
    transfer_sub_account: {
        sub_account_index: number;
        to_sub_account: boolean;
        asset_operation_args: {
            asset_id: AssetId;
            amount: number;
        };
    };
};
export type RuntimeCall = ExactlyOne<{
    exchange: ExactlyOne<ExchangeCallMessage>;
    bank: ExactlyOne<BankCallMessage>;
    warp: ExactlyOne<WarpCallMessage>;
    interchain_gas_paymaster: ExactlyOne<InterchainGasPaymasterCallMessage>;
}>;
export {};
//# sourceMappingURL=rollupTypes.d.ts.map