import { MerkleTree, MerkleTreeJson } from '../../merkle-tree';
import { CommitmentEvent, EncryptedOutputWithCommitment, EncryptedOutputWithSign } from '../../../types';
import { AbstractSnapshotService, Snapshot } from './AbstractSnapshotService';
import { BlockchainEventEmitter } from './BlockchainEventEmitter';
import { BlockchainEvent } from '../../BlockchainEvent/BlockchainEvent';
export type CommitmentsSnapshotPayload = {
    readonly merkleTree: MerkleTree<bigint>;
    readonly encryptedOutputs: EncryptedOutputWithSign[];
    readonly encryptedOutputsByCommitment: Map<bigint, string>;
};
export type CommitmentsSerializedSnapshot = {
    latestBlockNumber?: number;
    merkleTree?: MerkleTreeJson;
    encryptedOutputs?: EncryptedOutputWithSign<string>[];
    encryptedOutputsByCommitment?: EncryptedOutputWithCommitment[];
};
export declare abstract class AbstractCommitmentsSnapshotService extends AbstractSnapshotService<CommitmentEvent<bigint>, CommitmentsSnapshotPayload, CommitmentsSerializedSnapshot> {
    constructor(hinkalEventEmitter: BlockchainEventEmitter);
    private _merkleTree;
    private _encryptedOutputs;
    private _encryptedOutputsByCommitment;
    get merkleTree(): MerkleTree<bigint>;
    get encryptedOutputs(): EncryptedOutputWithSign<boolean>[];
    protected serializeSnapshot(snapshot: Snapshot<CommitmentsSnapshotPayload>): CommitmentsSerializedSnapshot;
    protected deserializeSnapshot(serializedSnapshot: CommitmentsSerializedSnapshot): Snapshot<CommitmentsSnapshotPayload>;
    protected getSnapshotPayload(): {
        merkleTree: MerkleTree<bigint>;
        encryptedOutputs: EncryptedOutputWithSign<boolean>[];
        encryptedOutputsByCommitment: Map<bigint, string>;
    };
    protected populateSnapshot({ payload: { merkleTree, encryptedOutputs, encryptedOutputsByCommitment }, }: Snapshot<CommitmentsSnapshotPayload>): void;
    protected mapEvent(event: BlockchainEvent): CommitmentEvent<bigint>;
    protected acceptEvent(event: CommitmentEvent<bigint>, _blockNumber: number, _txHash?: string, isBlocked?: boolean): boolean;
}
