import { MerkleTree, MerkleTreeJson } from '../../merkle-tree';
import { SolanaAccessTokenEvent } from '../../../types';
import { AbstractSolanaSnapshotService, SolanaSnapshot } from './AbstractSolanaSnapshotService';
import { SolanaBlockchainEventEmitter } from './SolanaBlockchainEventEmitter';
import { BlockchainEvent } from '../../BlockchainEvent/BlockchainEvent';
export type SolanaSenderAddressIndexMapJson = {
    address: string;
    index: number;
}[];
export type SolanaAccessTokenSnapshotPayload = {
    readonly merkleTree: MerkleTree<bigint>;
    readonly senderAddresses: string[];
    readonly senderAddressIndexMap: Map<string, number>;
};
export type SolanaAccessTokenSerializedSnapshot = {
    latestBlockNumber?: number;
    merkleTree?: MerkleTreeJson;
    senderAddresses?: string[];
    senderAddressIndexMap?: SolanaSenderAddressIndexMapJson;
};
export declare abstract class AbstractSolanaAccessTokenSnapshotService extends AbstractSolanaSnapshotService<SolanaAccessTokenEvent<bigint, string>, SolanaAccessTokenSnapshotPayload, SolanaAccessTokenSerializedSnapshot> {
    constructor(accessTokenEventFetcher: SolanaBlockchainEventEmitter);
    private _merkleTree;
    private _senderAddresses;
    private _senderAddressIndexMap;
    get merkleTree(): MerkleTree<bigint>;
    get senderAddresses(): string[];
    get senderAddressIndexMap(): Map<string, number>;
    protected serializeSnapshot(snapshot: SolanaSnapshot<SolanaAccessTokenSnapshotPayload>): SolanaAccessTokenSerializedSnapshot;
    protected deserializeSnapshot(serializedSnapshot: SolanaAccessTokenSerializedSnapshot): SolanaSnapshot<SolanaAccessTokenSnapshotPayload>;
    protected acceptEvent(event: SolanaAccessTokenEvent<bigint, string>, _slot: number): boolean;
    protected mapEvent(event: BlockchainEvent): SolanaAccessTokenEvent<bigint, string>;
    protected getSnapshotPayload(): SolanaAccessTokenSnapshotPayload;
    protected populateSnapshot({ payload: { merkleTree, senderAddresses, senderAddressIndexMap }, }: SolanaSnapshot<SolanaAccessTokenSnapshotPayload>): void;
}
