import { MerkleTree, MerkleTreeJson } from '../../merkle-tree';
import { CommitmentEvent, EncryptedOutputWithCommitment, EncryptedOutputWithSign } from '../../../types';
import { AbstractSolanaSnapshotService, SolanaSnapshot } from './AbstractSolanaSnapshotService';
import { SolanaBlockchainEventEmitter } from './SolanaBlockchainEventEmitter';
import { BlockchainEvent } from '../../BlockchainEvent/BlockchainEvent';
export type SolanaCommitmentsSnapshotPayload = {
    readonly merkleTree: MerkleTree<bigint>;
    readonly encryptedOutputs: EncryptedOutputWithSign[];
    readonly encryptedOutputsByCommitment: Map<bigint, string>;
};
export type SolanaCommitmentsSerializedSnapshot = {
    latestBlockNumber?: number;
    merkleTree?: MerkleTreeJson;
    encryptedOutputs?: EncryptedOutputWithSign<string>[];
    encryptedOutputsByCommitment?: EncryptedOutputWithCommitment[];
};
export declare abstract class AbstractSolanaCommitmentsSnapshotService extends AbstractSolanaSnapshotService<CommitmentEvent<bigint>, SolanaCommitmentsSnapshotPayload, SolanaCommitmentsSerializedSnapshot> {
    constructor(solanaEventEmitter: SolanaBlockchainEventEmitter);
    private _merkleTree;
    private _encryptedOutputs;
    private _encryptedOutputsByCommitment;
    get merkleTree(): MerkleTree<bigint>;
    get encryptedOutputs(): EncryptedOutputWithSign<boolean>[];
    protected serializeSnapshot(snapshot: SolanaSnapshot<SolanaCommitmentsSnapshotPayload>): SolanaCommitmentsSerializedSnapshot;
    protected deserializeSnapshot(serializedSnapshot: SolanaCommitmentsSerializedSnapshot): SolanaSnapshot<SolanaCommitmentsSnapshotPayload>;
    protected getSnapshotPayload(): {
        merkleTree: MerkleTree<bigint>;
        encryptedOutputs: EncryptedOutputWithSign<boolean>[];
        encryptedOutputsByCommitment: Map<bigint, string>;
    };
    protected populateSnapshot({ payload: { merkleTree, encryptedOutputs, encryptedOutputsByCommitment }, }: SolanaSnapshot<SolanaCommitmentsSnapshotPayload>): void;
    protected mapEvent(event: BlockchainEvent): Promise<CommitmentEvent<bigint>>;
    protected acceptEvent(event: CommitmentEvent<bigint>, _slot: number, _signature?: string, isBlocked?: boolean): boolean;
}
