import { ethers } from "ethers";
import { EthereumAddress, EthereumTransactionHash } from "./types";
export declare const isAddressTitleEscrow: ({ address, web3Provider, }: {
    address: string;
    web3Provider?: ethers.providers.BaseProvider | undefined;
}) => Promise<any>;
export declare abstract class Owner {
    address: string;
    constructor({ address }: {
        address: EthereumAddress;
    });
    abstract isTitleEscrow(): boolean;
}
export declare class EthereumAccountOwner extends Owner {
    isTitleEscrow(): boolean;
}
export declare class TitleEscrowOwner extends Owner {
    web3Provider: ethers.providers.BaseProvider;
    contractInstance: ethers.Contract;
    constructor({ address, web3Provider, }: {
        address: EthereumAddress;
        web3Provider?: ethers.providers.BaseProvider;
    });
    isTitleEscrow(): boolean;
    beneficiary(): Promise<EthereumAddress>;
    holder(): Promise<EthereumAddress>;
    endorsedTransferTarget(): Promise<EthereumAddress>;
}
export declare class WriteableTitleEscrowOwner extends TitleEscrowOwner {
    wallet: ethers.Wallet;
    constructor({ address, wallet, web3Provider, }: {
        address: EthereumAddress;
        web3Provider: ethers.providers.BaseProvider;
        wallet: ethers.Wallet | undefined;
    });
    static deployEscrowContract({ registryAddress, beneficiaryAddress, holderAddress, wallet, web3Provider, }: {
        registryAddress: EthereumAddress;
        beneficiaryAddress: EthereumAddress;
        holderAddress: EthereumAddress;
        wallet: ethers.Wallet | undefined;
        web3Provider: ethers.providers.BaseProvider;
    }): Promise<TitleEscrowOwner>;
    changeHolder(newHolder: EthereumAddress): Promise<EthereumTransactionHash>;
    endorseTransfer(newBeneficiary: EthereumAddress): Promise<EthereumTransactionHash>;
    transferTo(newBeneficiary: EthereumAddress): Promise<EthereumTransactionHash>;
}
export declare const createOwner: ({ address, web3Provider, wallet, }: {
    address: string;
    web3Provider?: ethers.providers.BaseProvider | undefined;
    wallet?: ethers.Wallet | undefined;
}) => Promise<EthereumAccountOwner | TitleEscrowOwner>;
