import { JSONSerializable } from '../util/json';
import { LegacyAminoPubKey as LegacyAminoPubKey_pb } from '@glitterprotocol/glitter.proto/cosmos/crypto/multisig/keys';
import { Any } from '@glitterprotocol/glitter.proto/google/protobuf/any';
import { PubKey as PubKey_pb } from '@glitterprotocol/glitter.proto/cosmos/crypto/secp256k1/keys';
export declare type PublicKey = SimplePublicKey | EthSimplePublicKey | LegacyAminoMultisigPublicKey | ValConsPublicKey;
export declare namespace PublicKey {
    type Amino = SimplePublicKey.Amino | EthSimplePublicKey.Amino | LegacyAminoMultisigPublicKey.Amino | ValConsPublicKey.Amino;
    type Data = SimplePublicKey.Data | EthSimplePublicKey.Data | LegacyAminoMultisigPublicKey.Data | ValConsPublicKey.Data;
    type Proto = Any;
    function fromAmino(data: PublicKey.Amino): PublicKey;
    function fromData(data: PublicKey.Data): PublicKey;
    function fromProto(pubkeyAny: PublicKey.Proto): PublicKey;
}
export declare class SimplePublicKey extends JSONSerializable<SimplePublicKey.Amino, SimplePublicKey.Data, SimplePublicKey.Proto> {
    key: string;
    constructor(key: string);
    static fromAmino(data: SimplePublicKey.Amino): SimplePublicKey;
    toAmino(): SimplePublicKey.Amino;
    static fromData(data: SimplePublicKey.Data): SimplePublicKey;
    toData(): SimplePublicKey.Data;
    static fromProto(pubkeyProto: SimplePublicKey.Proto): SimplePublicKey;
    toProto(): SimplePublicKey.Proto;
    packAny(): Any;
    static unpackAny(pubkeyAny: Any): SimplePublicKey;
    encodeAminoPubkey(): Uint8Array;
    rawAddress(): Uint8Array;
    address(): string;
    pubkeyAddress(): string;
}
export declare namespace SimplePublicKey {
    interface Amino {
        type: 'tendermint/PubKeySecp256k1';
        value: string;
    }
    interface Data {
        '@type': '/cosmos.crypto.secp256k1.PubKey';
        key: string;
    }
    type Proto = PubKey_pb;
}
export declare class EthSimplePublicKey extends JSONSerializable<EthSimplePublicKey.Amino, EthSimplePublicKey.Data, EthSimplePublicKey.Proto> {
    key: string;
    constructor(key: string);
    static fromAmino(data: EthSimplePublicKey.Amino): EthSimplePublicKey;
    toAmino(): EthSimplePublicKey.Amino;
    static fromData(data: EthSimplePublicKey.Data): EthSimplePublicKey;
    toData(): EthSimplePublicKey.Data;
    static fromProto(pubkeyProto: EthSimplePublicKey.Proto): EthSimplePublicKey;
    toProto(): EthSimplePublicKey.Proto;
    packAny(): Any;
    static unpackAny(pubkeyAny: Any): EthSimplePublicKey;
    encodeAminoPubkey(): Uint8Array;
    rawAddress(): Uint8Array;
    address(): string;
    pubkeyAddress(): string;
}
export declare namespace EthSimplePublicKey {
    interface Amino {
        type: 'ethermint/PubKeyEthSecp256k1';
        value: string;
    }
    interface Data {
        '@type': '/ethermint.crypto.v1.ethsecp256k1.PubKey';
        key: string;
    }
    type Proto = PubKey_pb;
}
export declare class LegacyAminoMultisigPublicKey extends JSONSerializable<LegacyAminoMultisigPublicKey.Amino, LegacyAminoMultisigPublicKey.Data, LegacyAminoMultisigPublicKey.Proto> {
    threshold: number;
    pubkeys: SimplePublicKey[];
    constructor(threshold: number, pubkeys: SimplePublicKey[]);
    encodeAminoPubkey(): Uint8Array;
    rawAddress(): Uint8Array;
    address(): string;
    pubkeyAddress(): string;
    static fromAmino(data: LegacyAminoMultisigPublicKey.Amino): LegacyAminoMultisigPublicKey;
    toAmino(): LegacyAminoMultisigPublicKey.Amino;
    static fromData(data: LegacyAminoMultisigPublicKey.Data): LegacyAminoMultisigPublicKey;
    toData(): LegacyAminoMultisigPublicKey.Data;
    static fromProto(pubkeyProto: LegacyAminoMultisigPublicKey.Proto): LegacyAminoMultisigPublicKey;
    toProto(): LegacyAminoMultisigPublicKey.Proto;
    packAny(): Any;
    static unpackAny(pubkeyAny: Any): LegacyAminoMultisigPublicKey;
}
export declare namespace LegacyAminoMultisigPublicKey {
    interface Amino {
        type: 'tendermint/PubKeyMultisigThreshold';
        value: {
            threshold: string;
            pubkeys: SimplePublicKey.Amino[];
        };
    }
    interface Data {
        '@type': '/cosmos.crypto.multisig.LegacyAminoPubKey';
        threshold: string;
        public_keys: SimplePublicKey.Data[];
    }
    type Proto = LegacyAminoPubKey_pb;
}
export declare class ValConsPublicKey extends JSONSerializable<ValConsPublicKey.Amino, ValConsPublicKey.Data, ValConsPublicKey.Proto> {
    key: string;
    constructor(key: string);
    static fromAmino(data: ValConsPublicKey.Amino): ValConsPublicKey;
    toAmino(): ValConsPublicKey.Amino;
    static fromData(data: ValConsPublicKey.Data): ValConsPublicKey;
    toData(): ValConsPublicKey.Data;
    static fromProto(pubkeyProto: ValConsPublicKey.Proto): ValConsPublicKey;
    toProto(): ValConsPublicKey.Proto;
    packAny(): Any;
    static unpackAny(pubkeyAny: Any): ValConsPublicKey;
    encodeAminoPubkey(): Uint8Array;
    rawAddress(): Uint8Array;
    address(): string;
    pubkeyAddress(): string;
}
export declare namespace ValConsPublicKey {
    interface Amino {
        type: 'tendermint/PubKeyEd25519';
        value: string;
    }
    interface Data {
        '@type': '/cosmos.crypto.ed25519.PubKey';
        key: string;
    }
    type Proto = PubKey_pb;
}
