From d9c3aed6e224fea297ac06240e8a745e308d6c73 Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Fri, 10 May 2024 15:42:39 +0000 Subject: [PATCH 1/2] fix(public-kernel): fix nullifier non existent hints --- .../build_nullifier_non_existent_read_request_hints.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts b/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts index 5bb6fa3eb76..b2393cf4bc4 100644 --- a/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts +++ b/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts @@ -71,8 +71,13 @@ export async function buildNullifierNonExistentReadRequestHints( let nextPendingValueIndex = sortedValues.findIndex(v => !v.value.lt(siloedValue)); if (nextPendingValueIndex == -1) { nextPendingValueIndex = numPendingNullifiers; - } else if (sortedValues[nextPendingValueIndex].value.equals(siloedValue)) { - throw new Error('Nullifier exists in the pending set.'); + } else if ( + sortedValues[nextPendingValueIndex].value.equals(siloedValue) && + sortedValues[nextPendingValueIndex].counter < readRequest.counter + ) { + throw new Error( + 'Nullifier DOES exists in the pending set at the time of reading, but there is a NonExistentReadRequest for it.', + ); } builder.addHint(membershipWitness, leafPreimage, nextPendingValueIndex); From 34cb2c93374dcd15d96394306a03ea5e5b19879a Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Fri, 10 May 2024 15:48:20 +0000 Subject: [PATCH 2/2] fix test --- .../build_nullifier_non_existent_read_request_hints.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.test.ts b/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.test.ts index 89a2fb7ed6d..7c5834fe945 100644 --- a/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.test.ts +++ b/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.test.ts @@ -131,6 +131,8 @@ describe('buildNullifierNonExistentReadRequestHints', () => { nonExistentReadRequests[0] = makeReadRequest(innerNullifier(2)); - await expect(() => buildHints()).rejects.toThrow('Nullifier exists in the pending set.'); + await expect(() => buildHints()).rejects.toThrow( + 'Nullifier DOES exists in the pending set at the time of reading, but there is a NonExistentReadRequest for it.', + ); }); });