/// <reference types="node" />
import { CosmosTransactionResult, CosmosTransactionCursor } from './CosmosTypes';
import { KeyPair } from '../../data/KeyPair';
import BigNumber from '../../dependencies/src/bignumber.js-9.0.0/bignumber';
import { AirGapTransactionStatus, IAirGapTransaction } from '../../interfaces/IAirGapTransaction';
import { SignedCosmosTransaction } from '../../serializer/schemas/definitions/signed-transaction-cosmos';
import { UnsignedCosmosTransaction } from '../../serializer/types';
import { DelegateeDetails, DelegationDetails, DelegatorDetails, ICoinDelegateProtocol } from '../ICoinDelegateProtocol';
import { CurrencyUnit, FeeDefaults } from '../ICoinProtocol';
import { ICoinSubProtocol } from '../ICoinSubProtocol';
import { NonExtendedProtocol } from '../NonExtendedProtocol';
import { CosmosInfoClient } from './CosmosInfoClient';
import { CosmosDelegation, CosmosNodeClient, CosmosUnbondingDelegation, CosmosValidator } from './CosmosNodeClient';
import { CosmosProtocolOptions } from './CosmosProtocolOptions';
import { CosmosTransaction } from './CosmosTransaction';
import { ProtocolSymbols } from '../../utils/ProtocolSymbols';
export declare enum CosmosDelegationActionType {
    DELEGATE = "delegate",
    UNDELEGATE = "undelegate",
    WITHDRAW_ALL_REWARDS = "withdraw_all_rewards",
    WITHDRAW_VALIDATOR_REWARDS = "withdraw_validator_rewards"
}
export declare class CosmosProtocol extends NonExtendedProtocol implements ICoinDelegateProtocol {
    readonly options: CosmosProtocolOptions;
    symbol: string;
    name: string;
    marketSymbol: string;
    feeSymbol: string;
    feeDefaults: FeeDefaults;
    decimals: number;
    feeDecimals: number;
    identifier: ProtocolSymbols;
    units: CurrencyUnit[];
    supportsHD: boolean;
    standardDerivationPath: string;
    addressIsCaseSensitive: boolean;
    addressValidationPattern: string;
    addressPlaceholder: string;
    subProtocols?: ICoinSubProtocol[];
    private readonly addressPrefix;
    private readonly defaultGas;
    get infoClient(): CosmosInfoClient;
    get nodeClient(): CosmosNodeClient;
    constructor(options?: CosmosProtocolOptions);
    getBlockExplorerLinkForAddress(address: string): Promise<string>;
    getBlockExplorerLinkForTxId(txId: string): Promise<string>;
    generateKeyPair(mnemonic: string, derivationPath?: string, password?: string): KeyPair;
    private generateKeyPairFromNode;
    getPublicKeyFromMnemonic(mnemonic: string, derivationPath: string, password?: string): Promise<string>;
    getPrivateKeyFromMnemonic(mnemonic: string, derivationPath: string, password?: string): Promise<Buffer>;
    getPublicKeyFromHexSecret(secret: string, derivationPath: string): Promise<string>;
    getPublicKeyFromPrivateKey(privateKey: Buffer): Buffer;
    getPrivateKeyFromHexSecret(secret: string, derivationPath: string): Promise<Buffer>;
    getAddressFromPublicKey(publicKey: string): Promise<string>;
    getAddressesFromPublicKey(publicKey: string): Promise<string[]>;
    getTransactionsFromPublicKey(publicKey: string, limit: number, cursor?: CosmosTransactionCursor): Promise<CosmosTransactionResult>;
    getTransactionsFromAddresses(addresses: string[], limit: number, cursor?: CosmosTransactionCursor): Promise<CosmosTransactionResult>;
    signWithPrivateKey(privateKey: Buffer, transaction: CosmosTransaction): Promise<string>;
    getTransactionDetails(transaction: UnsignedCosmosTransaction): Promise<IAirGapTransaction[]>;
    getTransactionDetailsFromSigned(transaction: SignedCosmosTransaction): Promise<IAirGapTransaction[]>;
    getBalanceOfAddresses(addresses: string[]): Promise<string>;
    getBalanceOfPublicKey(publicKey: string): Promise<string>;
    getAvailableBalanceOfAddresses(addresses: string[]): Promise<string>;
    getBalanceOfPublicKeyForSubProtocols(publicKey: string, subProtocols: ICoinSubProtocol[]): Promise<string[]>;
    private getBalance;
    estimateMaxTransactionValueFromPublicKey(publicKey: string, recipients: string[], fee?: string): Promise<string>;
    estimateFeeDefaultsFromPublicKey(publicKey: string, recipients: string[], values: string[], data?: any): Promise<FeeDefaults>;
    prepareTransactionFromPublicKey(publicKey: string, recipients: string[], values: string[], fee: string, data?: unknown): Promise<CosmosTransaction>;
    getDefaultDelegatee(): Promise<string>;
    getCurrentDelegateesForPublicKey(publicKey: string): Promise<string[]>;
    getCurrentDelegateesForAddress(address: string): Promise<string[]>;
    getDelegateeDetails(address: string): Promise<DelegateeDetails>;
    isPublicKeyDelegating(publicKey: string): Promise<boolean>;
    isAddressDelegating(address: string): Promise<boolean>;
    getDelegatorDetailsFromPublicKey(publicKey: string): Promise<DelegatorDetails>;
    getDelegatorDetailsFromAddress(address: string): Promise<DelegatorDetails>;
    getDelegationDetailsFromPublicKey(publicKey: string, delegatees: string[]): Promise<DelegationDetails>;
    getDelegationDetailsFromAddress(address: string, delegatees: string[]): Promise<DelegationDetails>;
    prepareDelegatorActionFromPublicKey(publicKey: string, type: CosmosDelegationActionType, data?: any): Promise<CosmosTransaction[]>;
    undelegate(publicKey: string, validatorAddress: string, amount: string, memo?: string): Promise<CosmosTransaction>;
    delegate(publicKey: string, validatorAddress: string | string[], amount: string, undelegate?: boolean, memo?: string): Promise<CosmosTransaction>;
    withdrawDelegationRewards(publicKey: string, _validatorAddresses?: string[], memo?: string): Promise<CosmosTransaction>;
    withdrawAllDelegationRewards(delegatorAddress: string, fee: BigNumber, memo?: string): Promise<string>;
    fetchTotalReward(delegatorAddress: string): Promise<BigNumber>;
    fetchRewardForDelegation(delegatorAddress: string, validatorAddress: string): Promise<BigNumber>;
    fetchDelegations(address: string): Promise<CosmosDelegation[]>;
    fetchTotalDelegatedAmount(address: string): Promise<BigNumber>;
    fetchValidator(address: string): Promise<CosmosValidator>;
    fetchUnbondingDelegations(delegatorAddress: string): Promise<CosmosUnbondingDelegation[]>;
    fetchTotalUnbondingAmount(address: string): Promise<BigNumber>;
    fetchValidators(): Promise<CosmosValidator[]>;
    fetchSelfDelegation(address: string): Promise<CosmosDelegation>;
    broadcastTransaction(rawTransaction: string): Promise<string>;
    private getDelegatorDetails;
    private getAvailableDelegatorActions;
    signMessage(message: string, keypair: {
        privateKey: Buffer;
    }): Promise<string>;
    verifyMessage(message: string, signature: string, publicKey: string): Promise<boolean>;
    getTransactionStatuses(transactionHashes: string[]): Promise<AirGapTransactionStatus[]>;
}
