/// <reference types="node" />
import BigNumber from '../../dependencies/src/bignumber.js-9.0.0/bignumber';
import { AirGapTransactionStatus, IAirGapTransaction } from '../../interfaces/IAirGapTransaction';
import { SignedSubstrateTransaction } from '../../serializer/schemas/definitions/signed-transaction-substrate';
import { UnsignedSubstrateTransaction } from '../../serializer/schemas/definitions/unsigned-transaction-substrate';
import { RawSubstrateTransaction } from '../../serializer/types';
import { ProtocolSymbols } from '../../utils/ProtocolSymbols';
import { DelegateeDetails, DelegationDetails, DelegatorDetails, ICoinDelegateProtocol } from '../ICoinDelegateProtocol';
import { CurrencyUnit, FeeDefaults } from '../ICoinProtocol';
import { ICoinSubProtocol } from '../ICoinSubProtocol';
import { NonExtendedProtocol } from '../NonExtendedProtocol';
import { SubstrateAccountId } from './helpers/data/account/SubstrateAddress';
import { SubstratePayee } from './helpers/data/staking/SubstratePayee';
import { SubstrateStakingActionType } from './helpers/data/staking/SubstrateStakingActionType';
import { SubstrateTransactionType } from './helpers/data/transaction/SubstrateTransaction';
import { SubstrateProtocolOptions } from './SubstrateProtocolOptions';
import { SubstrateTransactionCursor, SubstrateTransactionResult } from './SubstrateTypes';
export declare abstract class SubstrateProtocol extends NonExtendedProtocol implements ICoinDelegateProtocol {
    readonly options: SubstrateProtocolOptions;
    abstract symbol: string;
    abstract name: string;
    abstract marketSymbol: string;
    abstract feeSymbol: string;
    abstract decimals: number;
    abstract feeDecimals: number;
    abstract identifier: ProtocolSymbols;
    abstract feeDefaults: FeeDefaults;
    abstract units: CurrencyUnit[];
    abstract standardDerivationPath: string;
    supportsHD: boolean;
    addressIsCaseSensitive: boolean;
    addressValidationPattern: string;
    addressPlaceholder: string;
    protected defaultValidator?: string;
    constructor(options: SubstrateProtocolOptions);
    getBlockExplorerLinkForAddress(address: string): Promise<string>;
    getBlockExplorerLinkForTxId(txId: string): Promise<string>;
    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>;
    getPrivateKeyFromHexSecret(secret: string, derivationPath: string): Promise<Buffer>;
    getAddressFromPublicKey(publicKey: string): Promise<string>;
    getAddressesFromPublicKey(publicKey: string): Promise<string[]>;
    getTransactionsFromPublicKey(publicKey: string, limit: number, cursor?: SubstrateTransactionCursor): Promise<SubstrateTransactionResult>;
    getTransactionsFromAddresses(addresses: string[], limit: number, cursor?: SubstrateTransactionCursor): Promise<SubstrateTransactionResult>;
    signWithPrivateKey(privateKey: Buffer, rawTransaction: RawSubstrateTransaction): Promise<string>;
    getTransactionDetails(transaction: UnsignedSubstrateTransaction): Promise<IAirGapTransaction[]>;
    getTransactionDetailsFromSigned(transaction: SignedSubstrateTransaction): Promise<IAirGapTransaction[]>;
    getBalanceOfAddresses(addresses: string[]): Promise<string>;
    getAvailableBalanceOfAddresses(addresses: string[]): Promise<string>;
    getBalanceOfPublicKey(publicKey: string): Promise<string>;
    getBalanceOfPublicKeyForSubProtocols(publicKey: string, subProtocols: ICoinSubProtocol[]): Promise<string[]>;
    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?: any): Promise<RawSubstrateTransaction>;
    broadcastTransaction(encoded: string): Promise<string>;
    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: SubstrateStakingActionType, data?: any): Promise<RawSubstrateTransaction[]>;
    prepareDelegation(publicKey: string, tip: string | number | BigNumber, targets: string[] | string, controller?: string, value?: string | number | BigNumber, payee?: string | SubstratePayee): Promise<RawSubstrateTransaction[]>;
    prepareRebondNominate(publicKey: string, tip: string | number | BigNumber, targets: string[] | string, value: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    prepareCancelDelegation(publicKey: string, tip: string | number | BigNumber, value?: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    prepareChangeValidator(publicKey: string, tip: string | number | BigNumber, targets: string[] | string): Promise<RawSubstrateTransaction[]>;
    prepareUnbond(publicKey: string, tip: string | number | BigNumber, value: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    prepareRebond(publicKey: string, tip: string | number | BigNumber, value: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    prepareBondExtra(publicKey: string, tip: string | number | BigNumber, value: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    prepareRebondExtra(publicKey: string, tip: string | number | BigNumber, value: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    prepareWithdrawUnbonded(publicKey: string, tip: string | number | BigNumber): Promise<RawSubstrateTransaction[]>;
    estimateMaxDelegationValueFromAddress(address: string): Promise<string>;
    getFutureRequiredTransactions(accountId: SubstrateAccountId, intention: 'check' | 'transfer' | 'delegate'): Promise<[SubstrateTransactionType, any][]>;
    private getTransactionDetailsFromEncoded;
    signMessage(message: string, keypair: {
        publicKey: string;
        privateKey: Buffer;
    }): Promise<string>;
    verifyMessage(message: string, signature: string, publicKey: string): Promise<boolean>;
    getTransactionStatuses(transactionHashes: string[]): Promise<AirGapTransactionStatus[]>;
}
