import { TxBody, SignDoc, SignerInfo, AuthInfo, Fee, TxRaw } from '@routerprotocol/chain-api/cosmos/tx/v1beta1/tx_pb';
import { SignModeMap } from '@routerprotocol/chain-api/cosmos/tx/signing/v1beta1/signing_pb';
import { CreateTransactionArgs, CreateTransactionResult, CreateTransactionWithSignersArgs, MsgArg } from '../types';
export declare const SIGN_DIRECT: 1;
export declare const SIGN_AMINO: 127;
export declare const getPublicKey: ({ chainId, key, }: {
    chainId: string;
    key: string;
}) => import("google-protobuf/google/protobuf/any_pb").Any;
export declare const createBody: ({ message, memo, timeoutHeight, }: {
    message: MsgArg | MsgArg[];
    memo?: string | undefined;
    timeoutHeight?: number | undefined;
}) => TxBody;
export declare const createFee: ({ fee, payer, gasLimit, }: {
    fee: {
        amount: string;
        denom: string;
    };
    payer?: string | undefined;
    gasLimit: number;
}) => Fee;
export declare const createSigners: ({ chainId, mode, signers, }: {
    chainId: string;
    signers: {
        pubKey: string;
        sequence: number;
    }[];
    mode: SignModeMap[keyof SignModeMap];
}) => SignerInfo[];
export declare const createSignerInfo: ({ chainId, publicKey, sequence, mode, }: {
    chainId: string;
    publicKey: string;
    sequence: number;
    mode: SignModeMap[keyof SignModeMap];
}) => SignerInfo;
export declare const createAuthInfo: ({ signerInfo, fee, }: {
    signerInfo: SignerInfo[];
    fee: Fee;
}) => AuthInfo;
export declare const createSigDoc: ({ bodyBytes, authInfoBytes, chainId, accountNumber, }: {
    bodyBytes: Uint8Array;
    authInfoBytes: Uint8Array;
    chainId: string;
    accountNumber: number;
}) => SignDoc;
/**
 * @hidden
 * @typedef {Object} CreateTransactionWithSignersArgs
 * @param {CreateTransactionWithSignersArgs} params
 * @property {MsgArg | MsgArg[]} message - the Cosmos messages to wrap them in a transaction
 * @property {string} memo - the memo to attach to the transaction
 * @property {StdFee} fee - the fee to attach to the transaction
 * @property {SignerDetails} signers - the signers of the transaction
 * @property {number} number - the account number to attach to the transaction
 * @property {number} chainId - the chain-id to attach to the transaction
 * @property {string} pubKey - the account pubKey to attach to the transaction (in base64)
 *
 * @typedef {Object} CreateTransactionResult
 * @property {TxRaw} txRaw  - the Tx raw that was created
 * @property {SignDoc} signDoc  - the SignDoc that was created - used for signing of the transaction
 * @property {SignerDetails} signers  - the signers of the transaction
 * @property {Uint8Array} bodyBytes  - the body bytes of the transaction
 * @property {Uint8Array} authInfoBytes  - the auth info bytes of the transaction
 * @property {Uint8Array} signBytes  - the sign bytes of the transaction (SignDoc serialized to binary)
 * @property {Uint8Array} signHashedBytes  - the sign bytes of the transaction (SignDoc serialized to binary) and hashed using keccak256
 * @returns {CreateTransactionResult} result
 */
export declare const createTransactionWithSigners: ({ signers, chainId, message, timeoutHeight, memo, fee, signMode, }: CreateTransactionWithSignersArgs) => CreateTransactionResult;
/**
 * @typedef {Object} CreateTransactionArgs
 * @param {CreateTransactionArgs} params
 * @property {MsgArg | MsgArg[]} message - the Cosmos messages to wrap them in a transaction
 * @property {string} memo - the memo to attach to the transaction
 * @property {StdFee} fee - the fee to attach to the transaction
 * @property {string} sequence - the account sequence to attach to the transaction
 * @property {number} number - the account number to attach to the transaction
 * @property {number} chainId - the chain-id to attach to the transaction
 * @property {string} pubKey - the account pubKey to attach to the transaction (in base64)
 *
 * @typedef {Object} CreateTransactionResult
 * @property {TxRaw} txRaw  // the Tx raw that was created
 * @property {SignDoc} signDoc  // the SignDoc that was created - used for signing of the transaction
 * @property {number} accountNumber  // the account number of the signer of the transaction
 * @property {Uint8Array} bodyBytes  // the body bytes of the transaction
 * @property {Uint8Array} authInfoBytes  // the auth info bytes of the transaction
 * @property {Uint8Array} signBytes  // the sign bytes of the transaction (SignDoc serialized to binary)
 * @property {Uint8Array} signHashedBytes  // the sign bytes of the transaction (SignDoc serialized to binary) and hashed using keccak256
 * @returns {CreateTransactionResult} result
 */
export declare const createTransaction: (args: CreateTransactionArgs) => CreateTransactionResult;
export declare const getTransactionPartsFromTxRaw: (txRaw: TxRaw) => {
    authInfo: AuthInfo;
    body: TxBody;
    signatures: Uint8Array[];
};
