import { ContractTransaction, BigNumber } from 'ethers';
import { Timestamp } from '@energyweb/utils-general';
import { IShareInCertificate } from './CertificateUtils';
import { IBlockchainProperties } from './BlockchainProperties';
import { IOwnershipCommitmentProof } from '../utils/PreciseProofUtils';
export interface IClaimData {
    beneficiary: string;
    location: string;
    countryCode: string;
    periodStartDate: string;
    periodEndDate: string;
    purpose: string;
}
export interface IData {
    deviceId: string;
    generationStartTime: Timestamp;
    generationEndTime: Timestamp;
    metadata: string;
}
export interface IClaim {
    id: number;
    from: string;
    to: string;
    topic: string;
    value: string;
    claimData: IClaimData;
}
export interface ICertificate extends IData {
    id: number;
    issuer: string;
    creationTime: Timestamp;
    creationTransactionHash: string;
    owners: IShareInCertificate;
    claimers: IShareInCertificate;
}
export declare class Certificate implements ICertificate {
    id: number;
    blockchainProperties: IBlockchainProperties;
    deviceId: string;
    generationStartTime: Timestamp;
    generationEndTime: Timestamp;
    issuer: string;
    creationTime: Timestamp;
    creationTransactionHash: string;
    initialized: boolean;
    metadata: string;
    owners: IShareInCertificate;
    claimers: IShareInCertificate;
    constructor(id: number, blockchainProperties: IBlockchainProperties);
    static create(to: string, value: BigNumber, generationStartTime: Timestamp, generationEndTime: Timestamp, deviceId: string, blockchainProperties: IBlockchainProperties, metadata?: string): Promise<ContractTransaction>;
    static fromTxHash(txHash: string, blockchainProperties: IBlockchainProperties): Promise<Certificate>;
    static createPrivate(to: string, value: BigNumber, generationStartTime: Timestamp, generationEndTime: Timestamp, deviceId: string, blockchainProperties: IBlockchainProperties, metadata?: string): Promise<{
        proof: IOwnershipCommitmentProof;
        tx: ContractTransaction;
    }>;
    sync(): Promise<Certificate>;
    claim(claimData: IClaimData, amount?: BigNumber, to?: string, from?: string): Promise<ContractTransaction>;
    transfer(to: string, amount?: BigNumber, from?: string): Promise<ContractTransaction>;
    mint(to: string, volume: BigNumber): Promise<ContractTransaction>;
    revoke(): Promise<ContractTransaction>;
    isRevoked(): Promise<boolean>;
    getClaimedData(): Promise<IClaim[]>;
    private getIssuanceTransaction;
}
