import { ethers } from "ethers";
import { EthereumAddress } from "./ethereumAddress";
import { EthereumProofPointRegistry } from "./ethereumProofPointRegistry";
/**
 * Proof point registry root
 * Represents the eternal storage contract of the ProofPointRegistry, which has a well known address
 * and provides methods to deploy and upgrade the logic contract as well as to get a proxy to the logic
 * contract by looking up its address in the eternal storage contract.
 */
export declare class EthereumProofPointRegistryRoot {
    private _address;
    private _contract;
    private _provider;
    /**
     * Creates an instance of proof point registry root.
     * @param address The well-known address of the deployed eternal storage contract.
     * @param provider An ethers.providers.JsonRpcProvider to use for interacting with the blockchain.
     */
    constructor(address: EthereumAddress, provider: ethers.providers.JsonRpcProvider);
    /**
     * Gets an instance of @EthereumProofPointRegistry representing the current logic contract that is controlling
     * this eternal storage contract.
     * @returns An instance of @EthereumProofPointRegistry to use for interacting with proof points.
     */
    getRegistry(): Promise<EthereumProofPointRegistry>;
    /**
     * Gets the address of the registry root - which is the address of the eternal storage contract.
     * @returns Address of registry root.
     */
    getAddress(): EthereumAddress;
    /**
     * Determines whether the deployed logic contract is the latest known version. If not then the
     * {@link upgrade} method can be called to deploy the latest logic contract and update the plumbing
     * so that the latest version will be used for future interactions.
     * @returns True if the {@link upgrade} method can be called to upgrade the logic contract.
     */
    canUpgrade(): Promise<boolean>;
    /**
     * Deploys an instance of the Proof Point registry, including an eternal storage contract and a logic
     * contract.
     * @param from The Ethereum account to use for signing transactions. This will become the admin account that must be used for all future smart contract upgrades.
     * @param provider A provider instance to use for interacting with the Ethereum blockchain.
     * @returns A @EthereumProofPointRegistryRoot for interacting with the newly deployed contracts.
     */
    static deploy(provider: ethers.providers.JsonRpcProvider, from: EthereumAddress): Promise<EthereumProofPointRegistryRoot>;
    /**
     * Upgrades Proof Point registry. Performs the upgrade procedure to deploy an instance of the latest
     * logic contract, then set that as the owner of the eternal storage contract. You must control the admin
     * account to do this. Throws if already at latest version. Use {@link canUpgrade} to determine whether
     * this method can be called.
     */
    upgrade(): Promise<void>;
    private getLogicContractVersion;
}
