From af55619367befb0f07cff7057fa4fbf059befd8d Mon Sep 17 00:00:00 2001 From: Jack Gilcrest Date: Sat, 9 Jul 2022 04:01:02 -0400 Subject: [PATCH] quin tree update tests --- .../contracts/IncrementalQuinTree.sol | 6 ++-- .../test/IncrementalBinaryTreeTest.sol | 1 - .../test/IncrementalBinaryTreeTest.ts | 5 +-- .../test/IncrementalQuinTreeTest.ts | 31 ++++++++++++++++++- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol b/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol index 84e50c9..f5b0811 100644 --- a/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol +++ b/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol @@ -103,11 +103,11 @@ library IncrementalQuinTree { uint8[] calldata proofPathIndices ) public { require( - verify(self, leaf, proofSiblings, proofPathIndices), - "IncrementalQuinTree: leaf is not part of the tree" + leaf < SNARK_SCALAR_FIELD, + "IncrementalQuinTree: leaf must be < SNARK_SCALAR_FIELD" ); - uint256 hash = self.zeroes[0]; + uint256 hash = leaf; for (uint8 i = 0; i < self.depth; i++) { uint256[5] memory nodes; diff --git a/packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol b/packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol index 1f658d5..f8b942d 100644 --- a/packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol +++ b/packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol @@ -43,7 +43,6 @@ contract IncrementalBinaryTreeTest { trees[_treeId].depth != 0, "BinaryTreeTest: tree does not exist" ); - trees[_treeId].update(_leaf, _proofSiblings, _proofPathIndices); emit LeafUpdated(_treeId, _leaf, trees[_treeId].root); diff --git a/packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts b/packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts index 6256e0e..9aa4a0e 100644 --- a/packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts +++ b/packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts @@ -87,6 +87,8 @@ describe("IncrementalBinaryTreeTest", () => { const treeId = ethers.utils.formatBytes32String("none") const transaction = contract.updateLeaf(treeId, leaf, [0, 1], [0, 1]) + + await expect(transaction).to.be.revertedWith("BinaryTreeTest: tree does not exist") }) it("Should not update a leaf if its value is > SNARK_SCALAR_FIELD", async () => { @@ -103,7 +105,7 @@ describe("IncrementalBinaryTreeTest", () => { for (let i = 0; i < 4; i += 1) tree.insert(BigInt(i + 1)) - const leaf = BigInt(22) + const leaf = BigInt(1337) tree.update(2, leaf) const { root, pathIndices, siblings } = tree.createProof(2) const transaction = contract.updateLeaf( @@ -114,7 +116,6 @@ describe("IncrementalBinaryTreeTest", () => { ) await expect(transaction).to.emit(contract, "LeafUpdated").withArgs(treeId, leaf, root); - }) it("Should not remove a leaf if the tree does not exist", async () => { diff --git a/packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts b/packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts index 950ef55..bf178d5 100644 --- a/packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts +++ b/packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts @@ -86,6 +86,36 @@ describe("IncrementalQuinTreeTest", () => { await expect(transaction).to.be.revertedWith("IncrementalQuinTree: tree is full") }) + it("Should not update a leaf if the tree does not exist", async () => { + const treeId = ethers.utils.formatBytes32String("none") + + const transaction = contract.updateLeaf(treeId, leaf, [[0, 1, 2, 3]], [0]) + + await expect(transaction).to.be.revertedWith("QuinTreeTest: tree does not exist") + }) + + it("Should not update a leaf if its value is > SNARK_SCALAR_FIELD", async () => { + const leaf = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495618") + + const transaction = contract.updateLeaf(treeId, leaf, [[0, 1, 2, 3]], [0]) + + await expect(transaction).to.be.revertedWith("IncrementalQuinTree: leaf must be < SNARK_SCALAR_FIELD") + }) + + it("Should update a leaf", async () => { + const treeId = ethers.utils.formatBytes32String("tree2") + const tree = createTree(depth, 0, 5) + for (let i = 0; i < 6; i += 1) + tree.insert(BigInt(i + 1)) + + const leaf = BigInt(1337) + tree.update(2, leaf) + const { pathIndices, siblings, root } = tree.createProof(2) + const transaction = contract.updateLeaf(treeId, leaf, siblings, pathIndices) + + await expect(transaction).to.emit(contract, "LeafUpdated").withArgs(treeId, leaf, root) + }) + it("Should not remove a leaf if the tree does not exist", async () => { const treeId = ethers.utils.formatBytes32String("none") @@ -114,7 +144,6 @@ describe("IncrementalQuinTreeTest", () => { await contract.insertLeaf(treeId, BigInt(3)) const { siblings, pathIndices, root } = tree.createProof(0) - const transaction = contract.removeLeaf(treeId, BigInt(1), siblings, pathIndices) await expect(transaction).to.emit(contract, "LeafRemoved").withArgs(treeId, BigInt(1), root)