Skip to main content
Version: v3.x

LeanIMTData

struct LeanIMTData {
uint256 size;
uint256 depth;
mapping(uint256 => uint256) sideNodes;
mapping(uint256 => uint256) leaves;
}

WrongSiblingNodes​

error WrongSiblingNodes()

LeafGreaterThanSnarkScalarField​

error LeafGreaterThanSnarkScalarField()

LeafCannotBeZero​

error LeafCannotBeZero()

LeafAlreadyExists​

error LeafAlreadyExists()

LeafDoesNotExist​

error LeafDoesNotExist()

InternalLeanIMT​

The LeanIMT is an optimized version of the BinaryIMT. This implementation eliminates the use of zeroes, and make the tree depth dynamic. When a node doesn't have the right child, instead of using a zero hash as in the BinaryIMT, the node's value becomes that of its left child. Furthermore, rather than utilizing a static tree depth, it is updated based on the number of leaves in the tree. This approach results in the calculation of significantly fewer hashes, making the tree more efficient.

SNARK_SCALAR_FIELD​

uint256 SNARK_SCALAR_FIELD

The scalar field

_insert​

function _insert(struct LeanIMTData self, uint256 leaf) internal returns (uint256)

Inserts a new leaf into the incremental merkle tree. The function ensures that the leaf is valid according to the constraints of the tree and then updates the tree's structure accordingly.

Parameters​

NameTypeDescription
selfstruct LeanIMTData
leafuint256

Return Values​

NameTypeDescription
[0]uint256The new hash of the node after the leaf has been inserted.

_insertMany​

function _insertMany(struct LeanIMTData self, uint256[] leaves) internal returns (uint256)

Inserts many leaves into the incremental merkle tree. The function ensures that the leaves are valid according to the constraints of the tree and then updates the tree's structure accordingly.

Parameters​

NameTypeDescription
selfstruct LeanIMTData
leavesuint256[]

Return Values​

NameTypeDescription
[0]uint256The root after the leaves have been inserted.

_update​

function _update(struct LeanIMTData self, uint256 oldLeaf, uint256 newLeaf, uint256[] siblingNodes) internal returns (uint256)

Updates the value of an existing leaf and recalculates hashes to maintain tree integrity.

Parameters​

NameTypeDescription
selfstruct LeanIMTData
oldLeafuint256
newLeafuint256
siblingNodesuint256[]

Return Values​

NameTypeDescription
[0]uint256The new hash of the updated node after the leaf has been updated.

_remove​

function _remove(struct LeanIMTData self, uint256 oldLeaf, uint256[] siblingNodes) internal returns (uint256)

Removes a leaf from the tree by setting its value to zero. This function utilizes the update function to set the leaf's value to zero and update the tree's state accordingly.

Parameters​

NameTypeDescription
selfstruct LeanIMTData
oldLeafuint256
siblingNodesuint256[]

Return Values​

NameTypeDescription
[0]uint256The new root hash of the tree after the leaf has been removed.

_has​

function _has(struct LeanIMTData self, uint256 leaf) internal view returns (bool)

Checks if a leaf exists in the tree.

Parameters​

NameTypeDescription
selfstruct LeanIMTData
leafuint256

Return Values​

NameTypeDescription
[0]boolA boolean value indicating whether the leaf exists in the tree.

_indexOf​

function _indexOf(struct LeanIMTData self, uint256 leaf) internal view returns (uint256)

Retrieves the index of a given leaf in the tree.

Parameters​

NameTypeDescription
selfstruct LeanIMTData
leafuint256

Return Values​

NameTypeDescription
[0]uint256The index of the specified leaf within the tree. If the leaf is not present, the function reverts with a custom error.

_root​

function _root(struct LeanIMTData self) internal view returns (uint256)

Retrieves the root of the tree from the 'sideNodes' mapping using the current tree depth.

Parameters​

NameTypeDescription
selfstruct LeanIMTData

Return Values​

NameTypeDescription
[0]uint256The root hash of the tree.