import { Field, Provable } from 'o1js'; import { Hasher } from '../model.js'; import { Store } from '../store/store.js'; import { CompactSparseMerkleProof, CSparseCompactMerkleProof } from './proofs.js'; import { TreeHasher } from './tree_hasher.js'; export { CompactSparseMerkleTree }; /** * Compact Sparse Merkle Tree * * @class CompactSparseMerkleTree * @template K * @template V */ declare class CompactSparseMerkleTree { protected th: TreeHasher; protected store: Store; protected root: Field; protected config: { hashKey: boolean; hashValue: boolean; }; protected keyType: Provable; protected valueType: Provable; /** * Creates an instance of CompactSparseMerkleTree. * @param {Store} store * @param {Provable} keyType * @param {Provable} valueType * @param {Field} [root] * @param {{ hasher?: Hasher; hashKey?: boolean; hashValue?: boolean }} [options={ * hasher: PoseidonHasherFunc, * hashKey: true, * hashValue: true, * }] hasher: The hash function to use, defaults to PoseidonHasherFunc; hashKey: * whether to hash the key, the default is true; hashValue: whether to hash the value, * the default is true. * @memberof CompactSparseMerkleTree */ constructor(store: Store, keyType: Provable, valueType: Provable, root?: Field, options?: { hasher?: Hasher; hashKey?: boolean; hashValue?: boolean; }); /** * Import a compacted sparse merkle tree * * @static * @template K * @template V * @param {Store} store * @param {Provable} keyType * @param {Provable} valueType * @param {{ hasher?: Hasher; hashKey?: boolean; hashValue?: boolean }} [options={ * hasher: PoseidonHasherFunc, * hashKey: true, * hashValue: true, * }] hasher: The hash function to use, defaults to PoseidonHasherFunc; hashKey: * whether to hash the key, the default is true; hashValue: whether to hash the value, * the default is true. * @return {*} {Promise>} * @memberof CompactSparseMerkleTree */ static import(store: Store, keyType: Provable, valueType: Provable, options?: { hasher?: Hasher; hashKey?: boolean; hashValue?: boolean; }): Promise>; protected getKeyField(key: K): Field; /** * Get the root of the tree. * * @return {*} {Field} * @memberof CompactSparseMerkleTree */ getRoot(): Field; /** * Get the tree hasher used by the tree. * * @return {*} {TreeHasher} * @memberof CompactSparseMerkleTree */ getTreeHasher(): TreeHasher; /** * Get the data store of the tree. * * @return {*} {Store} * @memberof CompactSparseMerkleTree */ getStore(): Store; /** * Set the root of the tree. * * @param {Field} root * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ setRoot(root: Field): Promise; /** * Get the depth of the tree. * * @return {*} {number} * @memberof CompactSparseMerkleTree */ depth(): number; /** * Clear the tree. * * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ clear(): Promise; /** * Get the value for a key from the tree. * * @param {K} key * @return {*} {(Promise)} * @memberof CompactSparseMerkleTree */ get(key: K): Promise; /** * Check if the key exists in the tree. * * @param {K} key * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ has(key: K): Promise; /** * Update a new value for a key in the tree and return the new root of the tree. * * @param {K} key * @param {V} [value] * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ update(key: K, value?: V): Promise; /** * Update multiple leaves and return the new root of the tree. * * @param {{ key: K; value?: V }[]} kvs * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ updateAll(kvs: { key: K; value?: V; }[]): Promise; /** * Delete a value from tree and return the new root of the tree. * * @param {K} key * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ delete(key: K): Promise; /** * Create a merkle proof for a key against the current root. * * @param {K} key * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ prove(key: K): Promise; /** * Create an updatable Merkle proof for a key against the current root. * * @param {K} key * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ proveUpdatable(key: K): Promise; /** * Create a compacted merkle proof for a key against the current root. * * @param {K} key * @return {*} {Promise} * @memberof CompactSparseMerkleTree */ proveCompact(key: K): Promise; private proveCompactForRoot; private doProveForRoot; private updateForRoot; private updateWithSideNodes; private deleteWithSideNodes; private sideNodesForRoot; }