Skip to content

Commit 5e7cd26

Browse files
0xjeicedoor
authored andcommitted
fix: use merkleTreeSize instead of merkleTreeDepth to support groups with one member
1 parent ac26789 commit 5e7cd26

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

packages/contracts/contracts/Semaphore.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ contract Semaphore is ISemaphore, SemaphoreGroups {
109109
uint256 scope,
110110
uint256[8] calldata proof
111111
) external override onlyExistingGroup(groupId) {
112-
uint256 merkleTreeDepth = getMerkleTreeDepth(groupId);
112+
uint256 merkleTreeSize = getMerkleTreeSize(groupId);
113113

114-
if (merkleTreeDepth == 0) {
114+
if (merkleTreeSize == 0) {
115115
revert Semaphore__GroupHasNoMembers();
116116
}
117117

packages/contracts/test/Semaphore.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,31 @@ describe("Semaphore", () => {
208208
describe("# verifyProof", () => {
209209
const message = 2
210210
const identity = new Identity("0")
211+
const groupOneMemberId = 6
211212

212213
const group = new Group()
214+
const groupOneMember = new Group()
213215

214216
group.addMembers(members)
217+
groupOneMember.addMember(members[0])
215218

216219
let fullProof: SemaphoreProof
220+
let fullProofOneMember: SemaphoreProof
217221

218222
before(async () => {
223+
await semaphoreContract["createGroup(uint256,address)"](groupOneMemberId, accounts[0])
224+
219225
await semaphoreContract.addMembers(groupId, [members[1], members[2]])
226+
await semaphoreContract.addMember(groupOneMemberId, members[0])
220227

221228
fullProof = await generateProof(identity, group, message, group.root as string, 10)
229+
fullProofOneMember = await generateProof(
230+
identity,
231+
groupOneMember,
232+
message,
233+
groupOneMember.root as string,
234+
10
235+
)
222236
})
223237

224238
it("Should not verify a proof if the group does not exist", async () => {
@@ -249,7 +263,29 @@ describe("Semaphore", () => {
249263
await expect(transaction).to.be.revertedWithCustomError(semaphoreContract, "Semaphore__InvalidProof")
250264
})
251265

252-
it("Should verify a proof for an onchain group correctly", async () => {
266+
it("Should verify a proof for an onchain group with one member correctly", async () => {
267+
const transaction = semaphoreContract.verifyProof(
268+
groupOneMemberId,
269+
fullProofOneMember.merkleRoot,
270+
fullProofOneMember.nullifier,
271+
fullProofOneMember.message,
272+
fullProofOneMember.merkleRoot,
273+
fullProofOneMember.proof
274+
)
275+
276+
await expect(transaction)
277+
.to.emit(semaphoreContract, "ProofVerified")
278+
.withArgs(
279+
groupOneMemberId,
280+
fullProofOneMember.merkleRoot,
281+
fullProofOneMember.nullifier,
282+
fullProofOneMember.message,
283+
fullProofOneMember.merkleRoot,
284+
fullProofOneMember.proof
285+
)
286+
})
287+
288+
it("Should verify a proof for an onchain group with more than one member correctly", async () => {
253289
const transaction = semaphoreContract.verifyProof(
254290
groupId,
255291
fullProof.merkleRoot,

0 commit comments

Comments
 (0)