Skip to content

Commit 5b92c0a

Browse files
authored
fix(group): after a sequence of updates a proof is invalid (#910)
* fix(group): after a sequence of updates a proof is invalid * fix(group): after a sequence of updates a proof is invalid
1 parent 31c776e commit 5b92c0a

File tree

3 files changed

+60
-7
lines changed

3 files changed

+60
-7
lines changed

packages/contracts/test/Semaphore.ts

+54-1
Original file line numberDiff line numberDiff line change
@@ -463,9 +463,62 @@ describe("Semaphore", () => {
463463

464464
const proof = await generateProof(identity, group, message, group.root, merkleTreeDepth)
465465

466-
return { semaphoreContract, groupId, proof }
466+
return { semaphoreContract, groupId, proof, accountAddresses }
467467
}
468468

469+
it("Should insert members,remove member,update member and verifyProof", async () => {
470+
const { semaphoreContract, accountAddresses } = await loadFixture(deployValidateProofFixture)
471+
472+
const identity = new Identity("0")
473+
const members = Array.from({ length: 3 }, (_, i) => new Identity(i.toString())).map(
474+
({ commitment }) => commitment
475+
)
476+
const group = new Group(members)
477+
478+
// Create a group and add 3 members.
479+
await semaphoreContract["createGroup(address)"](accountAddresses[0])
480+
481+
const groupId = 2
482+
483+
// Adding members to group
484+
485+
await semaphoreContract.addMembers(groupId, members)
486+
487+
// Remove the third member.
488+
{
489+
group.removeMember(2)
490+
const { siblings } = group.generateMerkleProof(2)
491+
492+
await semaphoreContract.removeMember(groupId, members[2], siblings)
493+
}
494+
495+
// Update the second member.
496+
{
497+
group.updateMember(1, members[2])
498+
const { siblings } = group.generateMerkleProof(1)
499+
500+
await semaphoreContract.updateMember(groupId, members[1], members[2], siblings)
501+
}
502+
503+
// Validate a proof.
504+
505+
const proof = await generateProof(identity, group, 42, group.root)
506+
507+
const transaction = await semaphoreContract.validateProof(groupId, proof)
508+
509+
await expect(transaction)
510+
.to.emit(semaphoreContract, "ProofValidated")
511+
.withArgs(
512+
groupId,
513+
proof.merkleTreeDepth,
514+
proof.merkleTreeRoot,
515+
proof.nullifier,
516+
proof.message,
517+
proof.merkleTreeRoot,
518+
proof.points
519+
)
520+
})
521+
469522
it("Should throw an exception if the proof is not valid", async () => {
470523
const { semaphoreContract, groupId, proof } = await loadFixture(deployValidateProofFixture)
471524

packages/group/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"rollup-plugin-cleanup": "^3.2.1"
3737
},
3838
"dependencies": {
39-
"@zk-kit/lean-imt": "2.2.1",
39+
"@zk-kit/lean-imt": "2.2.2",
4040
"@zk-kit/utils": "1.2.1",
4141
"poseidon-lite": "0.3.0"
4242
}

yarn.lock

+5-5
Original file line numberDiff line numberDiff line change
@@ -7451,7 +7451,7 @@ __metadata:
74517451
resolution: "@semaphore-protocol/group@workspace:packages/group"
74527452
dependencies:
74537453
"@rollup/plugin-typescript": "npm:^11.1.6"
7454-
"@zk-kit/lean-imt": "npm:2.2.1"
7454+
"@zk-kit/lean-imt": "npm:2.2.2"
74557455
"@zk-kit/utils": "npm:1.2.1"
74567456
poseidon-lite: "npm:0.3.0"
74577457
rimraf: "npm:^5.0.5"
@@ -9589,12 +9589,12 @@ __metadata:
95899589
languageName: node
95909590
linkType: hard
95919591

9592-
"@zk-kit/lean-imt@npm:2.2.1":
9593-
version: 2.2.1
9594-
resolution: "@zk-kit/lean-imt@npm:2.2.1"
9592+
"@zk-kit/lean-imt@npm:2.2.2":
9593+
version: 2.2.2
9594+
resolution: "@zk-kit/lean-imt@npm:2.2.2"
95959595
dependencies:
95969596
"@zk-kit/utils": "npm:1.2.1"
9597-
checksum: 10/f57ba0ab15ff38609c352862b21023d370bd250c37c7ef15d4ee7724c8179a7fdd6647ac8a555e6cf523032d1c769fb9eae6de5364a97574224ff7de1a34f8a8
9597+
checksum: 10/321e1964a4a0b7a19083c01743f5ee2a7311b1eede6775ce952a6fecf07d347dc4cdb250a557ff459bc6d3bff030e2a571f5116510c2392ca523f50c4d02311d
95989598
languageName: node
95999599
linkType: hard
96009600

0 commit comments

Comments
 (0)