@aztec/pxe 0.44.0 → 0.45.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/database/deferred_note_dao.d.ts +2 -2
- package/dest/database/deferred_note_dao.d.ts.map +1 -1
- package/dest/database/deferred_note_dao.js +4 -4
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
- package/dest/kernel_prover/kernel_prover.js +13 -17
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.d.ts.map +1 -1
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.js +9 -11
- package/dest/kernel_prover/private_inputs_builders/index.d.ts +0 -4
- package/dest/kernel_prover/private_inputs_builders/index.d.ts.map +1 -1
- package/dest/kernel_prover/private_inputs_builders/index.js +1 -5
- package/dest/kernel_prover/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/kernel_prover/test/test_circuit_prover.js +2 -2
- package/dest/note_processor/note_processor.d.ts.map +1 -1
- package/dest/note_processor/note_processor.js +10 -10
- package/dest/note_processor/produce_note_dao.d.ts +2 -2
- package/dest/note_processor/produce_note_dao.d.ts.map +1 -1
- package/dest/note_processor/produce_note_dao.js +7 -7
- package/dest/pxe_service/pxe_service.d.ts +5 -2
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +48 -9
- package/package.json +14 -14
- package/src/database/deferred_note_dao.ts +2 -2
- package/src/kernel_prover/kernel_prover.ts +13 -30
- package/src/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.ts +14 -35
- package/src/kernel_prover/private_inputs_builders/index.ts +0 -4
- package/src/kernel_prover/test/test_circuit_prover.ts +1 -3
- package/src/note_processor/note_processor.ts +9 -14
- package/src/note_processor/produce_note_dao.ts +6 -6
- package/src/pxe_service/pxe_service.ts +96 -7
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.d.ts +0 -3
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.d.ts.map +0 -1
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.js +0 -11
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_inner_hints.d.ts +0 -3
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_inner_hints.d.ts.map +0 -1
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_inner_hints.js +0 -6
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.d.ts +0 -4
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.d.ts.map +0 -1
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.js +0 -14
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.d.ts +0 -3
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.d.ts.map +0 -1
- package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.js +0 -14
- package/src/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.ts +0 -28
- package/src/kernel_prover/private_inputs_builders/build_private_kernel_inner_hints.ts +0 -17
- package/src/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.ts +0 -45
- package/src/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.ts +0 -62
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { type AztecNode, L1NotePayload, type L2Block, TaggedLog } from '@aztec/circuit-types';
|
|
2
2
|
import { type NoteProcessorStats } from '@aztec/circuit-types/stats';
|
|
3
|
-
import {
|
|
4
|
-
type AztecAddress,
|
|
5
|
-
INITIAL_L2_BLOCK_NUM,
|
|
6
|
-
MAX_NEW_NOTE_HASHES_PER_TX,
|
|
7
|
-
type PublicKey,
|
|
8
|
-
} from '@aztec/circuits.js';
|
|
3
|
+
import { type AztecAddress, INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX, type PublicKey } from '@aztec/circuits.js';
|
|
9
4
|
import { type Fr } from '@aztec/foundation/fields';
|
|
10
5
|
import { type Logger, createDebugLogger } from '@aztec/foundation/log';
|
|
11
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -128,7 +123,7 @@ export class NoteProcessor {
|
|
|
128
123
|
const { txLogs } = block.body.noteEncryptedLogs;
|
|
129
124
|
const dataStartIndexForBlock =
|
|
130
125
|
block.header.state.partial.noteHashTree.nextAvailableLeafIndex -
|
|
131
|
-
block.body.numberOfTxsIncludingPadded *
|
|
126
|
+
block.body.numberOfTxsIncludingPadded * MAX_NOTE_HASHES_PER_TX;
|
|
132
127
|
|
|
133
128
|
// We are using set for `userPertainingTxIndices` to avoid duplicates. This would happen in case there were
|
|
134
129
|
// multiple encrypted logs in a tx pertaining to a user.
|
|
@@ -138,8 +133,8 @@ export class NoteProcessor {
|
|
|
138
133
|
// Iterate over all the encrypted logs and try decrypting them. If successful, store the note.
|
|
139
134
|
for (let indexOfTxInABlock = 0; indexOfTxInABlock < txLogs.length; ++indexOfTxInABlock) {
|
|
140
135
|
this.stats.txs++;
|
|
141
|
-
const dataStartIndexForTx = dataStartIndexForBlock + indexOfTxInABlock *
|
|
142
|
-
const
|
|
136
|
+
const dataStartIndexForTx = dataStartIndexForBlock + indexOfTxInABlock * MAX_NOTE_HASHES_PER_TX;
|
|
137
|
+
const noteHashes = block.body.txEffects[indexOfTxInABlock].noteHashes;
|
|
143
138
|
// Note: Each tx generates a `TxL2Logs` object and for this reason we can rely on its index corresponding
|
|
144
139
|
// to the index of a tx in a block.
|
|
145
140
|
const txFunctionLogs = txLogs[indexOfTxInABlock].functionLogs;
|
|
@@ -172,7 +167,7 @@ export class NoteProcessor {
|
|
|
172
167
|
outgoingTaggedNote ? this.ovpkM : undefined,
|
|
173
168
|
payload,
|
|
174
169
|
txHash,
|
|
175
|
-
|
|
170
|
+
noteHashes,
|
|
176
171
|
dataStartIndexForTx,
|
|
177
172
|
excludedIndices,
|
|
178
173
|
this.log,
|
|
@@ -245,10 +240,10 @@ export class NoteProcessor {
|
|
|
245
240
|
});
|
|
246
241
|
}
|
|
247
242
|
|
|
248
|
-
const
|
|
243
|
+
const nullifiers: Fr[] = blocksAndNotes.flatMap(b =>
|
|
249
244
|
b.block.body.txEffects.flatMap(txEffect => txEffect.nullifiers),
|
|
250
245
|
);
|
|
251
|
-
const removedNotes = await this.db.removeNullifiedNotes(
|
|
246
|
+
const removedNotes = await this.db.removeNullifiedNotes(nullifiers, this.ivpkM);
|
|
252
247
|
removedNotes.forEach(noteDao => {
|
|
253
248
|
this.log.verbose(
|
|
254
249
|
`Removed note for contract ${noteDao.contractAddress} at slot ${
|
|
@@ -305,7 +300,7 @@ export class NoteProcessor {
|
|
|
305
300
|
const outgoingNotes: OutgoingNoteDao[] = [];
|
|
306
301
|
|
|
307
302
|
for (const deferredNote of deferredNoteDaos) {
|
|
308
|
-
const { publicKey, note, contractAddress, storageSlot, noteTypeId, txHash,
|
|
303
|
+
const { publicKey, note, contractAddress, storageSlot, noteTypeId, txHash, noteHashes, dataStartIndexForTx } =
|
|
309
304
|
deferredNote;
|
|
310
305
|
const payload = new L1NotePayload(note, contractAddress, storageSlot, noteTypeId);
|
|
311
306
|
|
|
@@ -323,7 +318,7 @@ export class NoteProcessor {
|
|
|
323
318
|
isOutgoing ? this.ovpkM : undefined,
|
|
324
319
|
payload,
|
|
325
320
|
txHash,
|
|
326
|
-
|
|
321
|
+
noteHashes,
|
|
327
322
|
dataStartIndexForTx,
|
|
328
323
|
excludedIndices,
|
|
329
324
|
this.log,
|
|
@@ -18,7 +18,7 @@ import { OutgoingNoteDao } from '../database/outgoing_note_dao.js';
|
|
|
18
18
|
* @param ovpkM - The public counterpart to the secret key to be used in the decryption of outgoing note logs.
|
|
19
19
|
* @param payload - An instance of l1NotePayload.
|
|
20
20
|
* @param txHash - The hash of the transaction that created the note. Equivalent to the first nullifier of the transaction.
|
|
21
|
-
* @param
|
|
21
|
+
* @param noteHashes - New note hashes in this transaction, one of which belongs to this note.
|
|
22
22
|
* @param dataStartIndexForTx - The next available leaf index for the note hash tree for this transaction.
|
|
23
23
|
* @param excludedIndices - Indices that have been assigned a note in the same tx. Notes in a tx can have the same l1NotePayload, we need to find a different index for each replicate.
|
|
24
24
|
* @param simulator - An instance of AcirSimulator.
|
|
@@ -30,7 +30,7 @@ export async function produceNoteDaos(
|
|
|
30
30
|
ovpkM: PublicKey | undefined,
|
|
31
31
|
payload: L1NotePayload,
|
|
32
32
|
txHash: TxHash,
|
|
33
|
-
|
|
33
|
+
noteHashes: Fr[],
|
|
34
34
|
dataStartIndexForTx: number,
|
|
35
35
|
excludedIndices: Set<number>,
|
|
36
36
|
log: Logger,
|
|
@@ -53,7 +53,7 @@ export async function produceNoteDaos(
|
|
|
53
53
|
if (ivpkM) {
|
|
54
54
|
const { noteHashIndex, nonce, innerNoteHash, siloedNullifier } = await findNoteIndexAndNullifier(
|
|
55
55
|
simulator,
|
|
56
|
-
|
|
56
|
+
noteHashes,
|
|
57
57
|
txHash,
|
|
58
58
|
payload,
|
|
59
59
|
excludedIndices,
|
|
@@ -87,7 +87,7 @@ export async function produceNoteDaos(
|
|
|
87
87
|
payload.storageSlot,
|
|
88
88
|
payload.noteTypeId,
|
|
89
89
|
txHash,
|
|
90
|
-
|
|
90
|
+
noteHashes,
|
|
91
91
|
dataStartIndexForTx,
|
|
92
92
|
);
|
|
93
93
|
}
|
|
@@ -115,7 +115,7 @@ export async function produceNoteDaos(
|
|
|
115
115
|
} else {
|
|
116
116
|
const { noteHashIndex, nonce, innerNoteHash } = await findNoteIndexAndNullifier(
|
|
117
117
|
simulator,
|
|
118
|
-
|
|
118
|
+
noteHashes,
|
|
119
119
|
txHash,
|
|
120
120
|
payload,
|
|
121
121
|
excludedIndices,
|
|
@@ -148,7 +148,7 @@ export async function produceNoteDaos(
|
|
|
148
148
|
payload.storageSlot,
|
|
149
149
|
payload.noteTypeId,
|
|
150
150
|
txHash,
|
|
151
|
-
|
|
151
|
+
noteHashes,
|
|
152
152
|
dataStartIndexForTx,
|
|
153
153
|
);
|
|
154
154
|
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
EncryptedNoteTxL2Logs,
|
|
5
5
|
EncryptedTxL2Logs,
|
|
6
6
|
type EventMetadata,
|
|
7
|
+
EventType,
|
|
7
8
|
ExtendedNote,
|
|
8
9
|
type FunctionCall,
|
|
9
10
|
type GetUnencryptedLogsResponse,
|
|
@@ -35,7 +36,13 @@ import {
|
|
|
35
36
|
getContractClassFromArtifact,
|
|
36
37
|
} from '@aztec/circuits.js';
|
|
37
38
|
import { computeNoteHashNonce, siloNullifier } from '@aztec/circuits.js/hash';
|
|
38
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
type ContractArtifact,
|
|
41
|
+
type DecodedReturn,
|
|
42
|
+
EventSelector,
|
|
43
|
+
FunctionSelector,
|
|
44
|
+
encodeArguments,
|
|
45
|
+
} from '@aztec/foundation/abi';
|
|
39
46
|
import { type Fq, Fr, type Point } from '@aztec/foundation/fields';
|
|
40
47
|
import { SerialQueue } from '@aztec/foundation/fifo';
|
|
41
48
|
import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
|
|
@@ -286,7 +293,7 @@ export class PXEService implements PXE {
|
|
|
286
293
|
if (!(await this.getContractInstance(contract))) {
|
|
287
294
|
throw new Error(`Contract ${contract.toString()} is not deployed`);
|
|
288
295
|
}
|
|
289
|
-
return await this.node.getPublicStorageAt(contract, slot);
|
|
296
|
+
return await this.node.getPublicStorageAt(contract, slot, 'latest');
|
|
290
297
|
}
|
|
291
298
|
|
|
292
299
|
public async getIncomingNotes(filter: IncomingNotesFilter): Promise<ExtendedNote[]> {
|
|
@@ -834,7 +841,43 @@ export class PXEService implements PXE {
|
|
|
834
841
|
return !!(await this.node.getContract(address));
|
|
835
842
|
}
|
|
836
843
|
|
|
837
|
-
public
|
|
844
|
+
public getEvents<T>(
|
|
845
|
+
type: EventType.Encrypted,
|
|
846
|
+
eventMetadata: EventMetadata<T>,
|
|
847
|
+
from: number,
|
|
848
|
+
limit: number,
|
|
849
|
+
vpks: Point[],
|
|
850
|
+
): Promise<T[]>;
|
|
851
|
+
public getEvents<T>(
|
|
852
|
+
type: EventType.Unencrypted,
|
|
853
|
+
eventMetadata: EventMetadata<T>,
|
|
854
|
+
from: number,
|
|
855
|
+
limit: number,
|
|
856
|
+
): Promise<T[]>;
|
|
857
|
+
public getEvents<T>(
|
|
858
|
+
type: EventType,
|
|
859
|
+
eventMetadata: EventMetadata<T>,
|
|
860
|
+
from: number,
|
|
861
|
+
limit: number,
|
|
862
|
+
vpks: Point[] = [],
|
|
863
|
+
): Promise<T[]> {
|
|
864
|
+
if (type.includes(EventType.Encrypted)) {
|
|
865
|
+
return this.getEncryptedEvents(from, limit, eventMetadata, vpks);
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
return this.getUnencryptedEvents(from, limit, eventMetadata);
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
async getEncryptedEvents<T>(
|
|
872
|
+
from: number,
|
|
873
|
+
limit: number,
|
|
874
|
+
eventMetadata: EventMetadata<T>,
|
|
875
|
+
vpks: Point[],
|
|
876
|
+
): Promise<T[]> {
|
|
877
|
+
if (vpks.length === 0) {
|
|
878
|
+
throw new Error('Tried to get encrypted events without supplying any viewing public keys');
|
|
879
|
+
}
|
|
880
|
+
|
|
838
881
|
const blocks = await this.node.getBlocks(from, limit);
|
|
839
882
|
|
|
840
883
|
const txEffects = blocks.flatMap(block => block.body.txEffects);
|
|
@@ -842,11 +885,20 @@ export class PXEService implements PXE {
|
|
|
842
885
|
|
|
843
886
|
const encryptedLogs = encryptedTxLogs.flatMap(encryptedTxLog => encryptedTxLog.unrollLogs());
|
|
844
887
|
|
|
845
|
-
const
|
|
888
|
+
const vsks = await Promise.all(vpks.map(vpk => this.keyStore.getMasterSecretKey(vpk)));
|
|
889
|
+
|
|
890
|
+
const visibleEvents = encryptedLogs.flatMap(encryptedLog => {
|
|
891
|
+
for (const sk of vsks) {
|
|
892
|
+
const decryptedLog =
|
|
893
|
+
TaggedLog.decryptAsIncoming(encryptedLog, sk, L1EventPayload) ??
|
|
894
|
+
TaggedLog.decryptAsOutgoing(encryptedLog, sk, L1EventPayload);
|
|
895
|
+
if (decryptedLog !== undefined) {
|
|
896
|
+
return [decryptedLog];
|
|
897
|
+
}
|
|
898
|
+
}
|
|
846
899
|
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
.filter(item => item !== undefined) as TaggedLog<L1EventPayload>[];
|
|
900
|
+
return [];
|
|
901
|
+
});
|
|
850
902
|
|
|
851
903
|
const decodedEvents = visibleEvents
|
|
852
904
|
.map(visibleEvent => {
|
|
@@ -874,4 +926,41 @@ export class PXEService implements PXE {
|
|
|
874
926
|
|
|
875
927
|
return decodedEvents;
|
|
876
928
|
}
|
|
929
|
+
|
|
930
|
+
async getUnencryptedEvents<T>(from: number, limit: number, eventMetadata: EventMetadata<T>): Promise<T[]> {
|
|
931
|
+
const { logs: unencryptedLogs } = await this.node.getUnencryptedLogs({
|
|
932
|
+
fromBlock: from,
|
|
933
|
+
toBlock: from + limit,
|
|
934
|
+
});
|
|
935
|
+
|
|
936
|
+
const decodedEvents = unencryptedLogs
|
|
937
|
+
.map(unencryptedLog => {
|
|
938
|
+
const unencryptedLogBuf = unencryptedLog.log.data;
|
|
939
|
+
// We are assuming here that event logs are the last 4 bytes of the event. This is not enshrined but is a function of aztec.nr raw log emission.
|
|
940
|
+
if (
|
|
941
|
+
!EventSelector.fromBuffer(unencryptedLogBuf.subarray(unencryptedLogBuf.byteLength - 4)).equals(
|
|
942
|
+
eventMetadata.eventSelector,
|
|
943
|
+
)
|
|
944
|
+
) {
|
|
945
|
+
return undefined;
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
if (unencryptedLogBuf.byteLength !== eventMetadata.fieldNames.length * 32 + 32) {
|
|
949
|
+
throw new Error(
|
|
950
|
+
'Something is weird here, we have matching FunctionSelectors, but the actual payload has mismatched length',
|
|
951
|
+
);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
return eventMetadata.fieldNames.reduce(
|
|
955
|
+
(acc, curr, i) => ({
|
|
956
|
+
...acc,
|
|
957
|
+
[curr]: new Fr(unencryptedLogBuf.subarray(i * 32, i * 32 + 32)),
|
|
958
|
+
}),
|
|
959
|
+
{} as T,
|
|
960
|
+
);
|
|
961
|
+
})
|
|
962
|
+
.filter(unencryptedLog => unencryptedLog !== undefined) as T[];
|
|
963
|
+
|
|
964
|
+
return decodedEvents;
|
|
965
|
+
}
|
|
877
966
|
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { type PrivateCallRequest, type PrivateCircuitPublicInputs, PrivateKernelInitHints } from '@aztec/circuits.js';
|
|
2
|
-
export declare function buildPrivateKernelInitHints(publicInputs: PrivateCircuitPublicInputs, noteHashNullifierCounterMap: Map<number, number>, privateCallRequests: PrivateCallRequest[]): PrivateKernelInitHints;
|
|
3
|
-
//# sourceMappingURL=build_private_kernel_init_hints.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build_private_kernel_init_hints.d.ts","sourceRoot":"","sources":["../../../src/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,sBAAsB,EAEvB,MAAM,oBAAoB,CAAC;AAG5B,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,0BAA0B,EACxC,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChD,mBAAmB,EAAE,kBAAkB,EAAE,0BAe1C"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { PrivateKernelInitHints, countAccumulatedItems, } from '@aztec/circuits.js';
|
|
2
|
-
export function buildPrivateKernelInitHints(publicInputs, noteHashNullifierCounterMap, privateCallRequests) {
|
|
3
|
-
const nullifierCounters = publicInputs.newNoteHashes.map(n => noteHashNullifierCounterMap.get(n.counter) ?? 0);
|
|
4
|
-
const minRevertibleCounter = publicInputs.minRevertibleSideEffectCounter.toNumber();
|
|
5
|
-
let firstRevertiblePrivateCallRequestIndex = privateCallRequests.findIndex(r => r.startSideEffectCounter >= minRevertibleCounter);
|
|
6
|
-
if (firstRevertiblePrivateCallRequestIndex === -1) {
|
|
7
|
-
firstRevertiblePrivateCallRequestIndex = countAccumulatedItems(privateCallRequests);
|
|
8
|
-
}
|
|
9
|
-
return new PrivateKernelInitHints(nullifierCounters, firstRevertiblePrivateCallRequestIndex);
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRfcHJpdmF0ZV9rZXJuZWxfaW5pdF9oaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9rZXJuZWxfcHJvdmVyL3ByaXZhdGVfaW5wdXRzX2J1aWxkZXJzL2J1aWxkX3ByaXZhdGVfa2VybmVsX2luaXRfaGludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLHNCQUFzQixFQUN0QixxQkFBcUIsR0FDdEIsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLFlBQXdDLEVBQ3hDLDJCQUFnRCxFQUNoRCxtQkFBeUM7SUFFekMsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FDQyxDQUFDO0lBRXhELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BGLElBQUksc0NBQXNDLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUN4RSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsSUFBSSxvQkFBb0IsQ0FDdEQsQ0FBQztJQUNGLElBQUksc0NBQXNDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxzQ0FBc0MsR0FBRyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxPQUFPLElBQUksc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztBQUMvRixDQUFDIn0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { type PrivateCircuitPublicInputs, PrivateKernelInnerHints } from '@aztec/circuits.js';
|
|
2
|
-
export declare function buildPrivateKernelInnerHints(publicInputs: PrivateCircuitPublicInputs, noteHashNullifierCounterMap: Map<number, number>): PrivateKernelInnerHints;
|
|
3
|
-
//# sourceMappingURL=build_private_kernel_inner_hints.d.ts.map
|
package/dest/kernel_prover/private_inputs_builders/build_private_kernel_inner_hints.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build_private_kernel_inner_hints.d.ts","sourceRoot":"","sources":["../../../src/kernel_prover/private_inputs_builders/build_private_kernel_inner_hints.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAC/B,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAG5B,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,0BAA0B,EACxC,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,2BAOjD"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { PrivateKernelInnerHints, } from '@aztec/circuits.js';
|
|
2
|
-
export function buildPrivateKernelInnerHints(publicInputs, noteHashNullifierCounterMap) {
|
|
3
|
-
const nullifierCounters = publicInputs.newNoteHashes.map(n => noteHashNullifierCounterMap.get(n.counter) ?? 0);
|
|
4
|
-
return new PrivateKernelInnerHints(nullifierCounters);
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRfcHJpdmF0ZV9rZXJuZWxfaW5uZXJfaGludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva2VybmVsX3Byb3Zlci9wcml2YXRlX2lucHV0c19idWlsZGVycy9idWlsZF9wcml2YXRlX2tlcm5lbF9pbm5lcl9oaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEdBQ3hCLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxZQUF3QyxFQUN4QywyQkFBZ0Q7SUFFaEQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FDQyxDQUFDO0lBRXhELE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hELENBQUMifQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, NoteLogHash, PrivateKernelResetOutputs, ScopedNoteHash, ScopedNullifier } from '@aztec/circuits.js';
|
|
2
|
-
import { type Tuple } from '@aztec/foundation/serialize';
|
|
3
|
-
export declare function buildPrivateKernelResetOutputs(prevNoteHashes: Tuple<ScopedNoteHash, typeof MAX_NEW_NOTE_HASHES_PER_TX>, prevNullifiers: Tuple<ScopedNullifier, typeof MAX_NEW_NULLIFIERS_PER_TX>, prevLogs: Tuple<NoteLogHash, typeof MAX_NOTE_ENCRYPTED_LOGS_PER_TX>, transientNullifierIndexesForNoteHashes: Tuple<number, typeof MAX_NEW_NOTE_HASHES_PER_TX>, transientNoteHashIndexesForNullifiers: Tuple<number, typeof MAX_NEW_NULLIFIERS_PER_TX>): PrivateKernelResetOutputs;
|
|
4
|
-
//# sourceMappingURL=build_private_kernel_reset_outputs.d.ts.map
|
package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build_private_kernel_reset_outputs.d.ts","sourceRoot":"","sources":["../../../src/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,WAAW,EACX,yBAAyB,EACzB,cAAc,EACd,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,OAAO,0BAA0B,CAAC,EACxE,cAAc,EAAE,KAAK,CAAC,eAAe,EAAE,OAAO,yBAAyB,CAAC,EACxE,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,8BAA8B,CAAC,EACnE,sCAAsC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,0BAA0B,CAAC,EACxF,qCAAqC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,6BA2BvF"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, NoteLogHash, PrivateKernelResetOutputs, ScopedNoteHash, ScopedNullifier, } from '@aztec/circuits.js';
|
|
2
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
export function buildPrivateKernelResetOutputs(prevNoteHashes, prevNullifiers, prevLogs, transientNullifierIndexesForNoteHashes, transientNoteHashIndexesForNullifiers) {
|
|
4
|
-
// Propagate note hashes that are not going to be squashed in the transient arrays.
|
|
5
|
-
// A value isn't going to be squashed if the symmetrical index in the corresponding array is the length of the array.
|
|
6
|
-
const noteHashes = padArrayEnd(prevNoteHashes.filter((_, index) => transientNullifierIndexesForNoteHashes[index] === MAX_NEW_NULLIFIERS_PER_TX), ScopedNoteHash.empty(), MAX_NEW_NOTE_HASHES_PER_TX);
|
|
7
|
-
const nullifiers = padArrayEnd(prevNullifiers.filter((_, index) => transientNoteHashIndexesForNullifiers[index] === MAX_NEW_NOTE_HASHES_PER_TX), ScopedNullifier.empty(), MAX_NEW_NULLIFIERS_PER_TX);
|
|
8
|
-
const nullifiedNotes = prevNoteHashes
|
|
9
|
-
.filter((_, index) => transientNullifierIndexesForNoteHashes[index] < MAX_NEW_NULLIFIERS_PER_TX)
|
|
10
|
-
.map(n => n.counter);
|
|
11
|
-
const logs = padArrayEnd(prevLogs.filter(l => !l.isEmpty() && !nullifiedNotes.includes(l.noteHashCounter)), NoteLogHash.empty(), MAX_NOTE_ENCRYPTED_LOGS_PER_TX);
|
|
12
|
-
return new PrivateKernelResetOutputs(noteHashes, nullifiers, logs);
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRfcHJpdmF0ZV9rZXJuZWxfcmVzZXRfb3V0cHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9rZXJuZWxfcHJvdmVyL3ByaXZhdGVfaW5wdXRzX2J1aWxkZXJzL2J1aWxkX3ByaXZhdGVfa2VybmVsX3Jlc2V0X291dHB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsOEJBQThCLEVBQzlCLFdBQVcsRUFDWCx5QkFBeUIsRUFDekIsY0FBYyxFQUNkLGVBQWUsR0FDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHM0QsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxjQUF3RSxFQUN4RSxjQUF3RSxFQUN4RSxRQUFtRSxFQUNuRSxzQ0FBd0YsRUFDeEYscUNBQXNGO0lBRXRGLG1GQUFtRjtJQUNuRixxSEFBcUg7SUFDckgsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUM1QixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsc0NBQXNDLENBQUMsS0FBSyxDQUFDLEtBQUsseUJBQXlCLENBQUMsRUFDaEgsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUN0QiwwQkFBMEIsQ0FDM0IsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FDNUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLHFDQUFxQyxDQUFDLEtBQUssQ0FBQyxLQUFLLDBCQUEwQixDQUFDLEVBQ2hILGVBQWUsQ0FBQyxLQUFLLEVBQUUsRUFDdkIseUJBQXlCLENBQzFCLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxjQUFjO1NBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLEtBQUssQ0FBQyxHQUFHLHlCQUF5QixDQUFDO1NBQy9GLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV2QixNQUFNLElBQUksR0FBRyxXQUFXLENBQ3RCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQ2pGLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFDbkIsOEJBQThCLENBQy9CLENBQUM7SUFFRixPQUFPLElBQUkseUJBQXlCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRSxDQUFDIn0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { type PrivateKernelCircuitPublicInputs, PrivateKernelTailHints } from '@aztec/circuits.js';
|
|
2
|
-
export declare function buildPrivateKernelTailHints(publicInputs: PrivateKernelCircuitPublicInputs): PrivateKernelTailHints;
|
|
3
|
-
//# sourceMappingURL=build_private_kernel_tail_hints.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build_private_kernel_tail_hints.d.ts","sourceRoot":"","sources":["../../../src/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,gCAAgC,EACrC,sBAAsB,EAEvB,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,gCAAgC,GAAG,sBAAsB,CAiDlH"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { MAX_ENCRYPTED_LOGS_PER_TX, MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, PrivateKernelTailHints, sortByCounterGetSortedHints, } from '@aztec/circuits.js';
|
|
2
|
-
export function buildPrivateKernelTailHints(publicInputs) {
|
|
3
|
-
const [sortedNoteHashes, sortedNoteHashesIndexes] = sortByCounterGetSortedHints(publicInputs.end.newNoteHashes, MAX_NEW_NOTE_HASHES_PER_TX);
|
|
4
|
-
const [sortedNullifiers, sortedNullifiersIndexes] = sortByCounterGetSortedHints(publicInputs.end.newNullifiers, MAX_NEW_NULLIFIERS_PER_TX);
|
|
5
|
-
const [sortedNoteEncryptedLogHashes, sortedNoteEncryptedLogHashesIndexes] = sortByCounterGetSortedHints(publicInputs.end.noteEncryptedLogsHashes, MAX_NOTE_ENCRYPTED_LOGS_PER_TX);
|
|
6
|
-
const [sortedEncryptedLogHashes, sortedEncryptedLogHashesIndexes] = sortByCounterGetSortedHints(publicInputs.end.encryptedLogsHashes, MAX_ENCRYPTED_LOGS_PER_TX);
|
|
7
|
-
const [sortedUnencryptedLogHashes, sortedUnencryptedLogHashesIndexes] = sortByCounterGetSortedHints(publicInputs.end.unencryptedLogsHashes, MAX_UNENCRYPTED_LOGS_PER_TX);
|
|
8
|
-
const [sortedCallRequests, sortedCallRequestsIndexes] = sortByCounterGetSortedHints(publicInputs.end.publicCallStack, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, {
|
|
9
|
-
ascending: false,
|
|
10
|
-
hintIndexesBy: 'sorted',
|
|
11
|
-
});
|
|
12
|
-
return new PrivateKernelTailHints(sortedNoteHashes, sortedNoteHashesIndexes, sortedNullifiers, sortedNullifiersIndexes, sortedNoteEncryptedLogHashes, sortedNoteEncryptedLogHashesIndexes, sortedEncryptedLogHashes, sortedEncryptedLogHashesIndexes, sortedUnencryptedLogHashes, sortedUnencryptedLogHashesIndexes, sortedCallRequests, sortedCallRequestsIndexes);
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRfcHJpdmF0ZV9rZXJuZWxfdGFpbF9oaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9rZXJuZWxfcHJvdmVyL3ByaXZhdGVfaW5wdXRzX2J1aWxkZXJzL2J1aWxkX3ByaXZhdGVfa2VybmVsX3RhaWxfaGludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLDhCQUE4QixFQUM5QixtQ0FBbUMsRUFDbkMsMkJBQTJCLEVBRTNCLHNCQUFzQixFQUN0QiwyQkFBMkIsR0FDNUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixNQUFNLFVBQVUsMkJBQTJCLENBQUMsWUFBOEM7SUFDeEYsTUFBTSxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixDQUFDLEdBQUcsMkJBQTJCLENBQzdFLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUM5QiwwQkFBMEIsQ0FDM0IsQ0FBQztJQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLDJCQUEyQixDQUM3RSxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFDOUIseUJBQXlCLENBQzFCLENBQUM7SUFFRixNQUFNLENBQUMsNEJBQTRCLEVBQUUsbUNBQW1DLENBQUMsR0FBRywyQkFBMkIsQ0FDckcsWUFBWSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFDeEMsOEJBQThCLENBQy9CLENBQUM7SUFFRixNQUFNLENBQUMsd0JBQXdCLEVBQUUsK0JBQStCLENBQUMsR0FBRywyQkFBMkIsQ0FDN0YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFDcEMseUJBQXlCLENBQzFCLENBQUM7SUFFRixNQUFNLENBQUMsMEJBQTBCLEVBQUUsaUNBQWlDLENBQUMsR0FBRywyQkFBMkIsQ0FDakcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFDdEMsMkJBQTJCLENBQzVCLENBQUM7SUFFRixNQUFNLENBQUMsa0JBQWtCLEVBQUUseUJBQXlCLENBQUMsR0FBRywyQkFBMkIsQ0FDakYsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQ2hDLG1DQUFtQyxFQUNuQztRQUNFLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLGFBQWEsRUFBRSxRQUFRO0tBQ3hCLENBQ0YsQ0FBQztJQUVGLE9BQU8sSUFBSSxzQkFBc0IsQ0FDL0IsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQiwwQkFBMEIsRUFDMUIsaUNBQWlDLEVBQ2pDLGtCQUFrQixFQUNsQix5QkFBeUIsQ0FDMUIsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type MAX_NEW_NOTE_HASHES_PER_CALL,
|
|
3
|
-
type PrivateCallRequest,
|
|
4
|
-
type PrivateCircuitPublicInputs,
|
|
5
|
-
PrivateKernelInitHints,
|
|
6
|
-
countAccumulatedItems,
|
|
7
|
-
} from '@aztec/circuits.js';
|
|
8
|
-
import { type Tuple } from '@aztec/foundation/serialize';
|
|
9
|
-
|
|
10
|
-
export function buildPrivateKernelInitHints(
|
|
11
|
-
publicInputs: PrivateCircuitPublicInputs,
|
|
12
|
-
noteHashNullifierCounterMap: Map<number, number>,
|
|
13
|
-
privateCallRequests: PrivateCallRequest[],
|
|
14
|
-
) {
|
|
15
|
-
const nullifierCounters = publicInputs.newNoteHashes.map(
|
|
16
|
-
n => noteHashNullifierCounterMap.get(n.counter) ?? 0,
|
|
17
|
-
) as Tuple<number, typeof MAX_NEW_NOTE_HASHES_PER_CALL>;
|
|
18
|
-
|
|
19
|
-
const minRevertibleCounter = publicInputs.minRevertibleSideEffectCounter.toNumber();
|
|
20
|
-
let firstRevertiblePrivateCallRequestIndex = privateCallRequests.findIndex(
|
|
21
|
-
r => r.startSideEffectCounter >= minRevertibleCounter,
|
|
22
|
-
);
|
|
23
|
-
if (firstRevertiblePrivateCallRequestIndex === -1) {
|
|
24
|
-
firstRevertiblePrivateCallRequestIndex = countAccumulatedItems(privateCallRequests);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return new PrivateKernelInitHints(nullifierCounters, firstRevertiblePrivateCallRequestIndex);
|
|
28
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type MAX_NEW_NOTE_HASHES_PER_CALL,
|
|
3
|
-
type PrivateCircuitPublicInputs,
|
|
4
|
-
PrivateKernelInnerHints,
|
|
5
|
-
} from '@aztec/circuits.js';
|
|
6
|
-
import { type Tuple } from '@aztec/foundation/serialize';
|
|
7
|
-
|
|
8
|
-
export function buildPrivateKernelInnerHints(
|
|
9
|
-
publicInputs: PrivateCircuitPublicInputs,
|
|
10
|
-
noteHashNullifierCounterMap: Map<number, number>,
|
|
11
|
-
) {
|
|
12
|
-
const nullifierCounters = publicInputs.newNoteHashes.map(
|
|
13
|
-
n => noteHashNullifierCounterMap.get(n.counter) ?? 0,
|
|
14
|
-
) as Tuple<number, typeof MAX_NEW_NOTE_HASHES_PER_CALL>;
|
|
15
|
-
|
|
16
|
-
return new PrivateKernelInnerHints(nullifierCounters);
|
|
17
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MAX_NEW_NOTE_HASHES_PER_TX,
|
|
3
|
-
MAX_NEW_NULLIFIERS_PER_TX,
|
|
4
|
-
MAX_NOTE_ENCRYPTED_LOGS_PER_TX,
|
|
5
|
-
NoteLogHash,
|
|
6
|
-
PrivateKernelResetOutputs,
|
|
7
|
-
ScopedNoteHash,
|
|
8
|
-
ScopedNullifier,
|
|
9
|
-
} from '@aztec/circuits.js';
|
|
10
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
11
|
-
import { type Tuple } from '@aztec/foundation/serialize';
|
|
12
|
-
|
|
13
|
-
export function buildPrivateKernelResetOutputs(
|
|
14
|
-
prevNoteHashes: Tuple<ScopedNoteHash, typeof MAX_NEW_NOTE_HASHES_PER_TX>,
|
|
15
|
-
prevNullifiers: Tuple<ScopedNullifier, typeof MAX_NEW_NULLIFIERS_PER_TX>,
|
|
16
|
-
prevLogs: Tuple<NoteLogHash, typeof MAX_NOTE_ENCRYPTED_LOGS_PER_TX>,
|
|
17
|
-
transientNullifierIndexesForNoteHashes: Tuple<number, typeof MAX_NEW_NOTE_HASHES_PER_TX>,
|
|
18
|
-
transientNoteHashIndexesForNullifiers: Tuple<number, typeof MAX_NEW_NULLIFIERS_PER_TX>,
|
|
19
|
-
) {
|
|
20
|
-
// Propagate note hashes that are not going to be squashed in the transient arrays.
|
|
21
|
-
// A value isn't going to be squashed if the symmetrical index in the corresponding array is the length of the array.
|
|
22
|
-
const noteHashes = padArrayEnd(
|
|
23
|
-
prevNoteHashes.filter((_, index) => transientNullifierIndexesForNoteHashes[index] === MAX_NEW_NULLIFIERS_PER_TX),
|
|
24
|
-
ScopedNoteHash.empty(),
|
|
25
|
-
MAX_NEW_NOTE_HASHES_PER_TX,
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
const nullifiers = padArrayEnd(
|
|
29
|
-
prevNullifiers.filter((_, index) => transientNoteHashIndexesForNullifiers[index] === MAX_NEW_NOTE_HASHES_PER_TX),
|
|
30
|
-
ScopedNullifier.empty(),
|
|
31
|
-
MAX_NEW_NULLIFIERS_PER_TX,
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
const nullifiedNotes = prevNoteHashes
|
|
35
|
-
.filter((_, index) => transientNullifierIndexesForNoteHashes[index] < MAX_NEW_NULLIFIERS_PER_TX)
|
|
36
|
-
.map(n => n.counter);
|
|
37
|
-
|
|
38
|
-
const logs = padArrayEnd(
|
|
39
|
-
prevLogs.filter(l => !l.isEmpty() && !nullifiedNotes.includes(l.noteHashCounter)),
|
|
40
|
-
NoteLogHash.empty(),
|
|
41
|
-
MAX_NOTE_ENCRYPTED_LOGS_PER_TX,
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
return new PrivateKernelResetOutputs(noteHashes, nullifiers, logs);
|
|
45
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MAX_ENCRYPTED_LOGS_PER_TX,
|
|
3
|
-
MAX_NEW_NOTE_HASHES_PER_TX,
|
|
4
|
-
MAX_NEW_NULLIFIERS_PER_TX,
|
|
5
|
-
MAX_NOTE_ENCRYPTED_LOGS_PER_TX,
|
|
6
|
-
MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX,
|
|
7
|
-
MAX_UNENCRYPTED_LOGS_PER_TX,
|
|
8
|
-
type PrivateKernelCircuitPublicInputs,
|
|
9
|
-
PrivateKernelTailHints,
|
|
10
|
-
sortByCounterGetSortedHints,
|
|
11
|
-
} from '@aztec/circuits.js';
|
|
12
|
-
|
|
13
|
-
export function buildPrivateKernelTailHints(publicInputs: PrivateKernelCircuitPublicInputs): PrivateKernelTailHints {
|
|
14
|
-
const [sortedNoteHashes, sortedNoteHashesIndexes] = sortByCounterGetSortedHints(
|
|
15
|
-
publicInputs.end.newNoteHashes,
|
|
16
|
-
MAX_NEW_NOTE_HASHES_PER_TX,
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
const [sortedNullifiers, sortedNullifiersIndexes] = sortByCounterGetSortedHints(
|
|
20
|
-
publicInputs.end.newNullifiers,
|
|
21
|
-
MAX_NEW_NULLIFIERS_PER_TX,
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
const [sortedNoteEncryptedLogHashes, sortedNoteEncryptedLogHashesIndexes] = sortByCounterGetSortedHints(
|
|
25
|
-
publicInputs.end.noteEncryptedLogsHashes,
|
|
26
|
-
MAX_NOTE_ENCRYPTED_LOGS_PER_TX,
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
const [sortedEncryptedLogHashes, sortedEncryptedLogHashesIndexes] = sortByCounterGetSortedHints(
|
|
30
|
-
publicInputs.end.encryptedLogsHashes,
|
|
31
|
-
MAX_ENCRYPTED_LOGS_PER_TX,
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
const [sortedUnencryptedLogHashes, sortedUnencryptedLogHashesIndexes] = sortByCounterGetSortedHints(
|
|
35
|
-
publicInputs.end.unencryptedLogsHashes,
|
|
36
|
-
MAX_UNENCRYPTED_LOGS_PER_TX,
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const [sortedCallRequests, sortedCallRequestsIndexes] = sortByCounterGetSortedHints(
|
|
40
|
-
publicInputs.end.publicCallStack,
|
|
41
|
-
MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX,
|
|
42
|
-
{
|
|
43
|
-
ascending: false,
|
|
44
|
-
hintIndexesBy: 'sorted',
|
|
45
|
-
},
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
return new PrivateKernelTailHints(
|
|
49
|
-
sortedNoteHashes,
|
|
50
|
-
sortedNoteHashesIndexes,
|
|
51
|
-
sortedNullifiers,
|
|
52
|
-
sortedNullifiersIndexes,
|
|
53
|
-
sortedNoteEncryptedLogHashes,
|
|
54
|
-
sortedNoteEncryptedLogHashesIndexes,
|
|
55
|
-
sortedEncryptedLogHashes,
|
|
56
|
-
sortedEncryptedLogHashesIndexes,
|
|
57
|
-
sortedUnencryptedLogHashes,
|
|
58
|
-
sortedUnencryptedLogHashesIndexes,
|
|
59
|
-
sortedCallRequests,
|
|
60
|
-
sortedCallRequestsIndexes,
|
|
61
|
-
);
|
|
62
|
-
}
|