You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
44 lines
1.2 KiB
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.8.20;
|
|
|
|
import {MerkleTree} from "../utils/structs/MerkleTree.sol";
|
|
|
|
contract MerkleTreeMock {
|
|
using MerkleTree for MerkleTree.Bytes32PushTree;
|
|
|
|
MerkleTree.Bytes32PushTree private _tree;
|
|
|
|
// This mock only stored the latest root.
|
|
// Production contract may want to store historical values.
|
|
bytes32 public root;
|
|
|
|
event LeafInserted(bytes32 leaf, uint256 index, bytes32 root);
|
|
|
|
function setup(uint8 _depth, bytes32 _zero) public {
|
|
root = _tree.setup(_depth, _zero);
|
|
}
|
|
|
|
function push(bytes32 leaf) public {
|
|
(uint256 leafIndex, bytes32 currentRoot) = _tree.push(leaf);
|
|
emit LeafInserted(leaf, leafIndex, currentRoot);
|
|
root = currentRoot;
|
|
}
|
|
|
|
function depth() public view returns (uint256) {
|
|
return _tree.depth();
|
|
}
|
|
|
|
// internal state
|
|
function nextLeafIndex() public view returns (uint256) {
|
|
return _tree._nextLeafIndex;
|
|
}
|
|
|
|
function sides(uint256 i) public view returns (bytes32) {
|
|
return _tree._sides[i];
|
|
}
|
|
|
|
function zeros(uint256 i) public view returns (bytes32) {
|
|
return _tree._zeros[i];
|
|
}
|
|
}
|
|
|