import { ethers } from "ethers";
import { EthereumProofPointEvent } from "./ethereumProofPointEvent";
import { EthereumAddress } from "./ethereumAddress";
import { EthereumTransactionHash } from "./ethereumTransactionHash";
import { ProofPoint } from "../proofPoint";
import { ProofPointId } from "../proofPointId";
export declare const ProofPointRegistryAbi: {
    abi: ({
        inputs: {
            internalType: string;
            name: string;
            type: string;
        }[];
        stateMutability: string;
        type: string;
        anonymous?: undefined;
        name?: undefined;
        outputs?: undefined;
    } | {
        anonymous: boolean;
        inputs: {
            indexed: boolean;
            internalType: string;
            name: string;
            type: string;
        }[];
        name: string;
        type: string;
        stateMutability?: undefined;
        outputs?: undefined;
    } | {
        inputs: {
            internalType: string;
            name: string;
            type: string;
        }[];
        name: string;
        outputs: {
            internalType: string;
            name: string;
            type: string;
        }[];
        stateMutability: string;
        type: string; /**
         * Revokes the given proof point from this registry using the given issuer. You must control the issuer account.
         * The issuer must be the original issuer of the proof point.
         * @param id The ID of the proof point to revoke.
         * @param issuerAddress The account that is issuing the proof point.
         * @returns The Ethereum transaction hash of the revoking transaction.
         */
        anonymous?: undefined;
    })[];
    evm: {
        bytecode: {
            linkReferences: {};
            object: string;
            opcodes: string;
            sourceMap: string;
        };
        deployedBytecode: {
            linkReferences: {};
            object: string;
            opcodes: string;
            sourceMap: string;
        };
    };
    bytecode: string;
}[];
export declare const PROOF_POINT_REGISTRY_VERSION = 2;
export declare const ETHEREUM_PROOF_TYPE = "https://open.provenance.org/ontology/ptf/v2/ProvenanceProofType1";
export declare class EthereumProofPointRegistry {
    private _rootAddress;
    private _address;
    private _registry;
    private _provider;
    /**
     * Creates an instance of Proof Point registry for interacting with a pre-existing deployment of the registry contracts.
     * @param rootAddress The Ethereum address of the deployed eternal storage contract.
     * @param address The Ethereum address of the current deployed logic contract.
     * @param provider An ethers.providers.JsonRpcProvider to use for interacting with the blockchain.
     */
    constructor(rootAddress: EthereumAddress, address: EthereumAddress, provider: ethers.providers.JsonRpcProvider);
    /**
     * Determines whether the given proof point can be authenticated using this registry.
     * @param proofPoint The proof point to check.
     * @returns True if the given proof point can be authenticated using this registry.
     */
    isSameRegistry(proofPoint: ProofPoint): boolean;
    /**
     * Issues the given proof point in this registry from the given issuer. You must control the issuer account.
     * @param id The ID of the proof point to issue.
     * @param issuerAddress The account that is issuing the proof point.
     * @returns The Ethereum transaction hash of the issuing transaction.
     */
    issue(id: ProofPointId, issuerAddress: EthereumAddress): Promise<EthereumTransactionHash>;
    /**
     * Commits the given proof point in this registry from the given issuer. You must control the issuer account.
     * @param id The ID of the proof point to commit.
     * @param issuerAddress The account that is committing the proof point.
     * @returns The Ethereum transaction hash of the committing transaction.
     */
    commit(id: ProofPointId, issuerAddress: EthereumAddress): Promise<EthereumTransactionHash>;
    /**
     * Revokes the given proof point from this registry using the given issuer. You must control the issuer account.
     * The issuer must be the original issuer of the proof point.
     * @param id The ID of the proof point to revoke.
     * @param issuerAddress The account that is issuing the proof point.
     * @returns The Ethereum transaction hash of the revoking transaction.
     */
    revoke(id: ProofPointId, revokerAddress: EthereumAddress): Promise<EthereumTransactionHash>;
    /**
     * Determines whether the identified proof point is authentic, meaning is has been
     * issued and not revoked by the given issuer, or has been committed by the given issuer.
     * @param id The ID of proof point to check.
     * @param issuerAddress The address of the expected issuer.
     * @returns True if the proof point is issued and not revoked, or committed by the given issuer.
     */
    isAuthentic(id: ProofPointId, issuerAddress: EthereumAddress): Promise<boolean>;
    /**
     * Gets a list of all events related to the given Proof Point, identified by its ID.
     * @param proofPointId The ID of the Proof Point.
     * @returns A list of {@link EthereumProofPointEvent} describing the history of the Proof Point.
     */
    getHistory(proofPointId: ProofPointId): Promise<Array<EthereumProofPointEvent>>;
    /**
     * Get a list of the IDs of all Proof Points ever issued or committed
     * to this registry.
     */
    getAll(): Promise<Array<ProofPointId>>;
    private _logDataToProofPointId;
    private _getVersion;
    private _topicToEventType;
    private _getHistory;
    private _getEventsByFilter;
    private _proofPointIdToBytes;
    private _issue;
}
