import { ethers } from "ethers";
import { StorageProvider } from "./storage";
import { ProofPointRegistry } from "./proofPointRegistry";
import { HttpClient } from "./httpClient";
import { EthereumAddress } from "./proofPointEvent";
/**
 * 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.
 */
declare class ProofPointRegistryRoot {
    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 ProofPointRegistry representing the current logic contract that is controlling
     * this eternal storage contract.
     * @param storage A @StorageProvider to use for storing and retrieving bulk data.
     * @param httpClient An @HttpClient to use for fetching DID documents.
     * @returns An instance of @ProofPointRegistry to use for interacting with proof points.
     */
    getRegistry(storage?: StorageProvider | null, httpClient?: HttpClient | null): Promise<ProofPointRegistry>;
    /**
     * 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 fromAddress 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 web3 a web3 instance to use for interacting with the Ethereum blockchain.
     * @returns a {@link ProofPointRegistryRoot} for interacting with the newly deployed contracts.
     */
    static deploy(provider: ethers.providers.JsonRpcProvider, from: EthereumAddress): Promise<ProofPointRegistryRoot>;
    /**
     * 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;
}
export { ProofPointRegistryRoot };
