import { Fee, ModeInfo } from '@routerprotocol/chain-api/cosmos/tx/v1beta1/tx_pb';
import { PublicKey } from '@routerprotocol/chain-api/tendermint/crypto/keys_pb';
export interface SignerInfo {
    public_key: PublicKey | null;
    mode_info: ModeInfo;
    sequence: string;
}
export interface AuthInfo {
    signer_infos: SignerInfo[];
    fee: Fee;
}
export interface TxBody {
    messages: any[];
    memo: string;
    timeout_height: string;
}
export interface Tx {
    body: TxBody;
    auth_info: AuthInfo;
    signatures: string[];
}
export interface TxLog {
    msg_index: number;
    log: string;
    events: {
        type: string;
        attributes: {
            key: string;
            value: string;
        }[];
    }[];
}
export interface TxInfo {
    height: string;
    txhash: string;
    codespace: string;
    code: number;
    data: string;
    raw_log: string;
    logs: TxLog[];
    info: string;
    gas_wanted: string;
    gas_used: string;
    tx: Tx;
    timestamp: string;
}
export interface Wait {
    height: number;
    txhash: string;
    raw_log: string;
    gas_wanted: number;
    gas_used: number;
    logs: TxLog[];
    timestamp: string;
}
export interface Block extends Wait {
    info: string;
    data: string;
}
export interface Sync {
    height: number;
    txhash: string;
    raw_log: string;
}
export interface Async {
    height: number;
    txhash: string;
}
export interface TxSuccess {
    logs: TxLog[];
}
export interface TxError {
    code: number | string;
    codespace?: string;
}
export declare type TxBroadcastResult<B extends Wait | Block | Sync | Async, C extends TxSuccess | TxError | {}> = B & C;
export declare type WaitTxBroadcastResult = TxBroadcastResult<Wait, TxSuccess | TxError>;
export declare type BlockTxBroadcastResult = TxBroadcastResult<Block, TxSuccess | TxError>;
export declare type SyncTxBroadcastResult = TxBroadcastResult<Sync, TxError | {}>;
export declare type AsyncTxBroadcastResult = TxBroadcastResult<Async, {}>;
export declare enum BroadcastMode {
    Sync = "BROADCAST_MODE_SYNC",
    Async = "BROADCAST_MODE_ASYNC",
    Block = "BROADCAST_MODE_BLOCK"
}
export interface TxResult {
    tx: Tx;
    tx_response: TxInfo;
}
export interface TxSearchResult {
    pagination: any;
    txs: TxInfo[];
}
export interface TxSearchResultParams {
    txs: Tx;
    tx_responses: TxInfo;
    pagination: any;
}
export interface SimulationResponse {
    gas_info: {
        gas_wanted: string;
        gas_used: string;
    };
    result: {
        data: string;
        log: string;
        events: {
            type: string;
            attributes: {
                key: string;
                value: string;
            }[];
        }[];
    };
}
