import { HexEncodedString } from '../utils';
import { AliasId, NftId } from './id';
/**
 * Address type variants.
 */
declare enum AddressType {
    /** An Ed25519 address. */
    Ed25519 = 0,
    /** An Alias address. */
    Alias = 8,
    /** An NFT address. */
    Nft = 16
}
/**
 * The base class for addresses.
 */
declare abstract class Address {
    readonly type: AddressType;
    /**
     * @param type The type of the address.
     */
    constructor(type: AddressType);
    /**
     * Get the type of address.
     */
    getType(): AddressType;
    abstract toString(): string;
    /**
     * Parse an address from a JSON string.
     */
    static parse(data: any): Address;
}
/**
 * An Ed25519 Address.
 */
declare class Ed25519Address extends Address {
    readonly pubKeyHash: HexEncodedString;
    /**
     * @param address An Ed25519 address as hex-encoded string.
     */
    constructor(address: HexEncodedString);
    /**
     * Get the public key hash.
     */
    getPubKeyHash(): HexEncodedString;
    toString(): string;
}
/**
 * An Alias address.
 */
declare class AliasAddress extends Address {
    readonly aliasId: AliasId;
    /**
     * @param address An Alias address as Alias ID.
     */
    constructor(address: AliasId);
    /**
     * Get the alias ID.
     */
    getAliasId(): AliasId;
    toString(): string;
}
/**
 * An NFT address.
 */
declare class NftAddress extends Address {
    readonly nftId: NftId;
    /**
     * @param address An NFT address as NFT ID.
     */
    constructor(address: NftId);
    /**
     * Get the NFT ID.
     */
    getNftId(): NftId;
    toString(): string;
}
declare const AddressDiscriminator: {
    property: string;
    subTypes: ({
        value: typeof Ed25519Address;
        name: any;
    } | {
        value: typeof AliasAddress;
        name: any;
    } | {
        value: typeof NftAddress;
        name: any;
    })[];
};
export { AddressDiscriminator, Address, AddressType, Ed25519Address, AliasAddress, NftAddress, };
