import { v2, v3, WrappedDocument } from "@govtechsg/open-attestation";
import { providers, Wallet } from "ethers";
import { TokenRegistry } from "./registry";
import { EthereumAddress, EthereumNetwork, EthereumTransactionHash } from "./types";
import { Owner, TitleEscrowOwner, WriteableTitleEscrowOwner } from "./owner";
/**
 * Class Token to read info from ERC721 contract.
 */
export declare class ReadOnlyToken {
    document: WrappedDocument<v2.OpenAttestationDocument> | WrappedDocument<v3.OpenAttestationDocument>;
    web3Provider: providers.BaseProvider;
    tokenRegistry: TokenRegistry;
    constructor({ document, web3Provider, network, }: {
        document: WrappedDocument<v2.OpenAttestationDocument> | WrappedDocument<v3.OpenAttestationDocument>;
        web3Provider?: providers.BaseProvider;
        network?: EthereumNetwork;
    });
    getOwner(): Promise<Owner | TitleEscrowOwner>;
}
export declare class WriteableToken extends ReadOnlyToken {
    wallet: Wallet;
    constructor({ document, web3Provider, wallet, network, }: {
        document: WrappedDocument<v2.OpenAttestationDocument> | WrappedDocument<v3.OpenAttestationDocument>;
        web3Provider?: providers.BaseProvider;
        wallet: Wallet | undefined;
        network?: EthereumNetwork;
    });
    getOwner(): Promise<Owner | WriteableTitleEscrowOwner>;
    transferOwnership(to: EthereumAddress): Promise<string | undefined>;
    mint(to: EthereumAddress): Promise<string | undefined>;
    transferToNewEscrow(beneficiary: EthereumAddress, holder: EthereumAddress): Promise<string | undefined>;
    mintToEscrow(beneficiary: EthereumAddress, holder: EthereumAddress): Promise<string | undefined>;
    surrender(): Promise<EthereumTransactionHash>;
}
