/**
 * @module MerkleTree
 * This module provides an implementation of a Merkle Tree, a fundamental component
 * in blockchain and cryptographic applications. It leverages the 'o1js' library for
 * efficient Merkle Tree operations and is tailored for managing leaves represented as `Field` elements.
 */
import { Field } from 'o1js';
import { TreeWitness } from './merkle-membership-program.js';
import { Logger } from 'minauth/dist/plugin/logger.js';
/**
 * A wrapper class for the Merkle Tree implementation from 'o1js' library.
 * Non-unique leaves will be discarded.
 */
export declare class MerkleTree {
    private readonly logger?;
    /** Set of indexes of occupied leaves */
    private leafMap;
    /** Internal representation of the Merkle Tree using 'o1js' library */
    private merkleTree;
    private readonly leaves;
    /**
     * Constructs a Merkle Tree from a given array of leaves.
     * @param leaves An array of `Field` elements to be used as leaves in the tree.
     */
    constructor(leaves: Field[], logger?: Logger | undefined);
    /**
     * Creates a mapping from leaves to their corresponding indices in the tree.
     * @param leaves An array of `Field` elements representing the leaves.
     * @returns A Map object mapping each leaf to its index.
     */
    private mkLeafToIndexMap;
    /**
     * Returns the root of the Merkle Tree.
     * @returns The `Field` element representing the root of the tree.
     */
    get root(): Field;
    /**
     * Returns the number of leaves in the Merkle Tree.
     * @returns The count of leaves as a bigint.
     */
    get leafCount(): number;
    /**
     * Generates a witness for a given leaf in the Merkle Tree.
     * @param leaf The `Field` element for which the witness is to be generated.
     * @returns A `TreeWitness` object representing the proof of the leaf's inclusion in the tree.
     * @throws Error if the leaf is not found in the tree.
     */
    getWitness(leaf: Field): TreeWitness;
}
