@aztec/pxe 0.0.1-commit.6d3c34e → 0.0.1-commit.72dcdcda8
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/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +11 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +72 -21
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +57 -35
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +198 -84
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -3
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +2 -2
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +17 -13
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +12 -10
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +67 -44
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +44 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +89 -32
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +66 -33
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +130 -111
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +43 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -17
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -7
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +22 -8
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +5 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -9
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +8 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +31 -33
- package/dest/notes/note_service.d.ts +10 -9
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +34 -38
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +3 -3
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +2 -2
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +140 -73
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +22 -14
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -24
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +94 -2
- package/dest/pxe.d.ts +77 -59
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +132 -136
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- package/dest/storage/contract_store/contract_store.d.ts +42 -16
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +157 -84
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +50 -51
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +284 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +16 -9
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +20 -10
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +253 -101
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +60 -0
- package/dest/tagging/index.d.ts +3 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +2 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +11 -11
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -7
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +16 -12
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +8 -11
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +7 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +23 -19
- package/package.json +27 -18
- package/src/access_scopes.ts +9 -0
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +91 -33
- package/src/config/index.ts +14 -0
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +349 -148
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -5
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +2 -2
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +22 -12
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +79 -47
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +129 -112
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +197 -116
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +63 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +16 -15
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +4 -0
- package/src/entrypoints/server/utils.ts +22 -26
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +51 -40
- package/src/notes/note_service.ts +41 -45
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +2 -2
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +195 -136
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +26 -16
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +243 -213
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/contract_store/contract_store.ts +186 -96
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +326 -320
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +111 -21
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +296 -111
- package/src/tagging/get_all_logs_by_tags.ts +92 -0
- package/src/tagging/index.ts +2 -1
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +22 -14
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +17 -16
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +12 -14
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +26 -23
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import { makeTuple } from '@aztec/foundation/array';
|
|
11
11
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
12
12
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
13
|
-
import {
|
|
13
|
+
import { assertLength } from '@aztec/foundation/serialize';
|
|
14
14
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
15
15
|
import { privateKernelResetDimensionsConfig } from '@aztec/noir-protocol-circuits-types/client';
|
|
16
16
|
import {
|
|
@@ -26,14 +26,12 @@ import {
|
|
|
26
26
|
type PrivateKernelSimulateOutput,
|
|
27
27
|
ReadRequestActionEnum,
|
|
28
28
|
ReadRequestResetActions,
|
|
29
|
-
type
|
|
30
|
-
ScopedNoteHash,
|
|
31
|
-
ScopedNullifier,
|
|
32
|
-
ScopedReadRequest,
|
|
29
|
+
type ScopedKeyValidationRequestAndSeparator,
|
|
33
30
|
TransientDataSquashingHint,
|
|
34
31
|
buildNoteHashReadRequestHintsFromResetActions,
|
|
35
32
|
buildNullifierReadRequestHintsFromResetActions,
|
|
36
33
|
buildTransientDataHints,
|
|
34
|
+
countSquashedLogs,
|
|
37
35
|
findPrivateKernelResetDimensions,
|
|
38
36
|
getNoteHashReadRequestResetActions,
|
|
39
37
|
getNullifierReadRequestResetActions,
|
|
@@ -44,15 +42,6 @@ import { VkData } from '@aztec/stdlib/vks';
|
|
|
44
42
|
|
|
45
43
|
import type { PrivateKernelOracle } from '../private_kernel_oracle.js';
|
|
46
44
|
|
|
47
|
-
function collectNestedReadRequests<N extends number>(
|
|
48
|
-
executionStack: PrivateCallExecutionResult[],
|
|
49
|
-
extractReadRequests: (execution: PrivateCallExecutionResult) => ClaimedLengthArray<ScopedReadRequest, N>,
|
|
50
|
-
): ScopedReadRequest[] {
|
|
51
|
-
return collectNested(executionStack, executionResult => {
|
|
52
|
-
return extractReadRequests(executionResult).getActiveItems();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
45
|
function getNullifierMembershipWitnessResolver(oracle: PrivateKernelOracle) {
|
|
57
46
|
return async (nullifier: Fr) => {
|
|
58
47
|
const res = await oracle.getNullifierMembershipWitness(nullifier);
|
|
@@ -68,9 +57,9 @@ function getNullifierMembershipWitnessResolver(oracle: PrivateKernelOracle) {
|
|
|
68
57
|
};
|
|
69
58
|
}
|
|
70
59
|
|
|
71
|
-
async function
|
|
60
|
+
async function getMasterSecretKeysAndKeyTypeDomainSeparators(
|
|
72
61
|
keyValidationRequests: ClaimedLengthArray<
|
|
73
|
-
|
|
62
|
+
ScopedKeyValidationRequestAndSeparator,
|
|
74
63
|
typeof MAX_KEY_VALIDATION_REQUESTS_PER_TX
|
|
75
64
|
>,
|
|
76
65
|
numRequestsToVerify: number,
|
|
@@ -91,11 +80,14 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
91
80
|
// If there's no next iteration, it's the final reset.
|
|
92
81
|
private nextIteration?: PrivateCircuitPublicInputs;
|
|
93
82
|
|
|
94
|
-
private noteHashResetActions
|
|
95
|
-
private nullifierResetActions
|
|
83
|
+
private noteHashResetActions = ReadRequestResetActions.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
84
|
+
private nullifierResetActions = ReadRequestResetActions.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
96
85
|
private numTransientData?: number;
|
|
97
|
-
private transientDataSquashingHints
|
|
98
|
-
|
|
86
|
+
private transientDataSquashingHints = makeTuple(
|
|
87
|
+
MAX_NULLIFIERS_PER_TX,
|
|
88
|
+
() => new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
|
|
89
|
+
);
|
|
90
|
+
private requestedDimensions = PrivateKernelResetDimensions.empty();
|
|
99
91
|
|
|
100
92
|
constructor(
|
|
101
93
|
private previousKernelOutput: PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>,
|
|
@@ -104,21 +96,18 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
104
96
|
private splitCounter: number,
|
|
105
97
|
) {
|
|
106
98
|
this.previousKernel = previousKernelOutput.publicInputs;
|
|
107
|
-
this.requestedDimensions = PrivateKernelResetDimensions.empty();
|
|
108
|
-
this.noteHashResetActions = ReadRequestResetActions.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
109
|
-
this.nullifierResetActions = ReadRequestResetActions.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
110
|
-
this.transientDataSquashingHints = makeTuple(
|
|
111
|
-
MAX_NULLIFIERS_PER_TX,
|
|
112
|
-
() => new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
|
|
113
|
-
);
|
|
114
99
|
this.nextIteration = executionStack[this.executionStack.length - 1]?.publicInputs;
|
|
115
100
|
}
|
|
116
101
|
|
|
102
|
+
getRequestedDimensions(): PrivateKernelResetDimensions {
|
|
103
|
+
return this.requestedDimensions;
|
|
104
|
+
}
|
|
105
|
+
|
|
117
106
|
needsReset(): boolean {
|
|
118
107
|
const fns: (() => boolean)[] = [
|
|
119
108
|
() => this.needsResetNoteHashReadRequests(),
|
|
120
109
|
() => this.needsResetNullifierReadRequests(),
|
|
121
|
-
() => this.
|
|
110
|
+
() => this.needsResetKeyValidationRequests(),
|
|
122
111
|
() => this.needsResetTransientData(),
|
|
123
112
|
];
|
|
124
113
|
|
|
@@ -145,8 +134,7 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
145
134
|
|
|
146
135
|
const isInner = !!this.nextIteration;
|
|
147
136
|
|
|
148
|
-
// "final" reset must be done
|
|
149
|
-
// Because the code that silo note hashes can't be run repeatedly.
|
|
137
|
+
// "final" reset must be done exactly once, because siloing can't be run repeatedly.
|
|
150
138
|
// The dimensions found must be big enough to reset all values, i.e. empty remainder.
|
|
151
139
|
const allowRemainder = isInner;
|
|
152
140
|
|
|
@@ -157,16 +145,6 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
157
145
|
allowRemainder,
|
|
158
146
|
);
|
|
159
147
|
|
|
160
|
-
const previousVkMembershipWitness = await oracle.getVkMembershipWitness(
|
|
161
|
-
this.previousKernelOutput.verificationKey.keyAsFields,
|
|
162
|
-
);
|
|
163
|
-
const vkData = new VkData(
|
|
164
|
-
this.previousKernelOutput.verificationKey,
|
|
165
|
-
Number(previousVkMembershipWitness.leafIndex),
|
|
166
|
-
previousVkMembershipWitness.siblingPath,
|
|
167
|
-
);
|
|
168
|
-
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
169
|
-
|
|
170
148
|
this.reduceReadRequestActions(
|
|
171
149
|
this.noteHashResetActions,
|
|
172
150
|
dimensions.NOTE_HASH_PENDING_READ,
|
|
@@ -178,29 +156,51 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
178
156
|
dimensions.NULLIFIER_SETTLED_READ,
|
|
179
157
|
);
|
|
180
158
|
|
|
181
|
-
//
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
159
|
+
// Execute all the expensive node querying operations in parallel.
|
|
160
|
+
const [previousVkMembershipWitness, noteHashReadRequestHints, nullifierReadRequestHints, keyValidationHints] =
|
|
161
|
+
await Promise.all([
|
|
162
|
+
oracle.getVkMembershipWitness(this.previousKernelOutput.verificationKey.keyAsFields),
|
|
163
|
+
buildNoteHashReadRequestHintsFromResetActions<
|
|
164
|
+
typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
165
|
+
typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX
|
|
166
|
+
>(
|
|
189
167
|
oracle,
|
|
190
168
|
this.previousKernel.validationRequests.noteHashReadRequests,
|
|
191
169
|
this.previousKernel.end.noteHashes,
|
|
192
170
|
this.noteHashResetActions,
|
|
193
171
|
),
|
|
194
|
-
|
|
172
|
+
buildNullifierReadRequestHintsFromResetActions<
|
|
173
|
+
typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
174
|
+
typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX
|
|
175
|
+
>(
|
|
195
176
|
{ getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle) },
|
|
196
177
|
this.previousKernel.validationRequests.nullifierReadRequests,
|
|
197
178
|
this.nullifierResetActions,
|
|
198
179
|
),
|
|
199
|
-
|
|
200
|
-
this.previousKernel.validationRequests.
|
|
180
|
+
getMasterSecretKeysAndKeyTypeDomainSeparators(
|
|
181
|
+
this.previousKernel.validationRequests.scopedKeyValidationRequestsAndSeparators,
|
|
201
182
|
dimensions.KEY_VALIDATION,
|
|
202
183
|
oracle,
|
|
203
184
|
),
|
|
185
|
+
]);
|
|
186
|
+
|
|
187
|
+
const vkData = new VkData(
|
|
188
|
+
this.previousKernelOutput.verificationKey,
|
|
189
|
+
Number(previousVkMembershipWitness.leafIndex),
|
|
190
|
+
previousVkMembershipWitness.siblingPath,
|
|
191
|
+
);
|
|
192
|
+
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
193
|
+
|
|
194
|
+
// TODO: Enable padding when we have a better idea what are the final amounts we should pad to.
|
|
195
|
+
const paddedSideEffects = PaddedSideEffects.empty();
|
|
196
|
+
|
|
197
|
+
return new PrivateKernelResetCircuitPrivateInputs(
|
|
198
|
+
previousKernelData,
|
|
199
|
+
paddedSideEffects,
|
|
200
|
+
new PrivateKernelResetHints(
|
|
201
|
+
noteHashReadRequestHints,
|
|
202
|
+
nullifierReadRequestHints,
|
|
203
|
+
keyValidationHints,
|
|
204
204
|
this.transientDataSquashingHints,
|
|
205
205
|
),
|
|
206
206
|
dimensions,
|
|
@@ -234,24 +234,17 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
234
234
|
resetActions.pendingReadHints = resetActions.pendingReadHints.slice(0, maxPending);
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
private needsResetNoteHashReadRequests(
|
|
237
|
+
private needsResetNoteHashReadRequests(forceReset = false) {
|
|
238
238
|
const numCurr = this.previousKernel.validationRequests.noteHashReadRequests.claimedLength;
|
|
239
239
|
const numNext = this.nextIteration ? this.nextIteration.noteHashReadRequests.claimedLength : 0;
|
|
240
|
-
const maxAmountToKeep = !this.nextIteration ||
|
|
240
|
+
const maxAmountToKeep = !this.nextIteration || forceReset ? 0 : MAX_NOTE_HASH_READ_REQUESTS_PER_TX;
|
|
241
241
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
242
242
|
return false;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
const futureNoteHashes = collectNested(this.executionStack, executionResult => {
|
|
246
|
-
return executionResult.publicInputs.noteHashes
|
|
247
|
-
.getActiveItems()
|
|
248
|
-
.map(noteHash => new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress));
|
|
249
|
-
});
|
|
250
|
-
|
|
251
245
|
const resetActions = getNoteHashReadRequestResetActions(
|
|
252
246
|
this.previousKernel.validationRequests.noteHashReadRequests,
|
|
253
247
|
this.previousKernel.end.noteHashes,
|
|
254
|
-
futureNoteHashes,
|
|
255
248
|
);
|
|
256
249
|
|
|
257
250
|
const numPendingReads = resetActions.pendingReadHints.length;
|
|
@@ -260,53 +253,72 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
260
253
|
0,
|
|
261
254
|
);
|
|
262
255
|
|
|
256
|
+
const totalReadsToReset = numPendingReads + numSettledReads;
|
|
257
|
+
const minResetNeeded = numCurr + numNext - maxAmountToKeep;
|
|
258
|
+
if (totalReadsToReset < minResetNeeded) {
|
|
259
|
+
if (!this.nextIteration) {
|
|
260
|
+
// In the final reset, all note hashes have been emitted. So if we can't reset all requests, at least one
|
|
261
|
+
// pending read request doesn't match any of them.
|
|
262
|
+
throw new Error('No matching note hash found for note hash read request.');
|
|
263
|
+
} else if (!forceReset) {
|
|
264
|
+
// A pending read request can only be reset if its note hash has already been included (e.g. a parent call might
|
|
265
|
+
// be reading a note hash emitted by a child call. The read request of the parent call is included before the note
|
|
266
|
+
// hash of the child call).
|
|
267
|
+
// If we can't clear enough read requests to make room for the next iteration's reads, we're stuck.
|
|
268
|
+
throw new Error('Number of note hash read requests exceeds the limit.');
|
|
269
|
+
} else if (totalReadsToReset == 0) {
|
|
270
|
+
// It's transient data squashing asking for the read requests to be reset first (forceReset == true), and
|
|
271
|
+
// there's nothing to reset, returns false and let needsResetTransientData throw a more descriptive error.
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
// Otherwise, forceReset is true, we should proceed to reset as many as we can.
|
|
275
|
+
}
|
|
276
|
+
|
|
263
277
|
if (!this.nextIteration) {
|
|
278
|
+
// If there's no next iteration, we need to reset all the read requests.
|
|
264
279
|
this.noteHashResetActions = resetActions;
|
|
265
280
|
this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
|
|
266
281
|
this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
|
|
267
282
|
} else {
|
|
268
|
-
//
|
|
283
|
+
// If there's a next iteration, only one dimension can be reset at a time.
|
|
284
|
+
// So we pick the dimension that has more read requests to reset.
|
|
269
285
|
if (numPendingReads > numSettledReads) {
|
|
270
|
-
|
|
271
|
-
|
|
286
|
+
// Reset the pending read requests.
|
|
287
|
+
const pendingOnlyActions = assertLength(
|
|
272
288
|
resetActions.actions.map(action =>
|
|
273
289
|
action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
|
|
274
290
|
),
|
|
275
291
|
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
276
292
|
);
|
|
277
|
-
this.noteHashResetActions
|
|
293
|
+
this.noteHashResetActions = new ReadRequestResetActions(pendingOnlyActions, resetActions.pendingReadHints);
|
|
294
|
+
this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
|
|
278
295
|
} else {
|
|
279
|
-
|
|
280
|
-
|
|
296
|
+
// Reset the settled read requests.
|
|
297
|
+
const settledOnlyActions = assertLength(
|
|
281
298
|
resetActions.actions.map(action =>
|
|
282
299
|
action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
|
|
283
300
|
),
|
|
284
301
|
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
285
302
|
);
|
|
303
|
+
this.noteHashResetActions = new ReadRequestResetActions(settledOnlyActions, []);
|
|
304
|
+
this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
|
|
286
305
|
}
|
|
287
306
|
}
|
|
288
307
|
|
|
289
308
|
return true;
|
|
290
309
|
}
|
|
291
310
|
|
|
292
|
-
private needsResetNullifierReadRequests(
|
|
311
|
+
private needsResetNullifierReadRequests(forceReset = false) {
|
|
293
312
|
const numCurr = this.previousKernel.validationRequests.nullifierReadRequests.claimedLength;
|
|
294
313
|
const numNext = this.nextIteration ? this.nextIteration.nullifierReadRequests.claimedLength : 0;
|
|
295
|
-
const maxAmountToKeep = !this.nextIteration ||
|
|
314
|
+
const maxAmountToKeep = !this.nextIteration || forceReset ? 0 : MAX_NULLIFIER_READ_REQUESTS_PER_TX;
|
|
296
315
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
297
316
|
return false;
|
|
298
317
|
}
|
|
299
318
|
|
|
300
|
-
const futureNullifiers = collectNested(this.executionStack, executionResult => {
|
|
301
|
-
return executionResult.publicInputs.nullifiers
|
|
302
|
-
.getActiveItems()
|
|
303
|
-
.map(nullifier => new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress));
|
|
304
|
-
});
|
|
305
|
-
|
|
306
319
|
const resetActions = getNullifierReadRequestResetActions(
|
|
307
320
|
this.previousKernel.validationRequests.nullifierReadRequests,
|
|
308
321
|
this.previousKernel.end.nullifiers,
|
|
309
|
-
futureNullifiers,
|
|
310
322
|
);
|
|
311
323
|
|
|
312
324
|
const numPendingReads = resetActions.pendingReadHints.length;
|
|
@@ -315,38 +327,63 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
315
327
|
0,
|
|
316
328
|
);
|
|
317
329
|
|
|
330
|
+
const totalReadsToReset = numPendingReads + numSettledReads;
|
|
331
|
+
const minResetNeeded = numCurr + numNext - maxAmountToKeep;
|
|
332
|
+
if (totalReadsToReset < minResetNeeded) {
|
|
333
|
+
if (!this.nextIteration) {
|
|
334
|
+
// In the final reset, all nullifiers have been emitted. So if we can't reset all requests, at least one pending
|
|
335
|
+
// read request doesn't match any of them.
|
|
336
|
+
throw new Error('No matching nullifier found for nullifier read request.');
|
|
337
|
+
} else if (!forceReset) {
|
|
338
|
+
// A pending read request can only be reset if its nullifier has already been included (e.g. a parent call might
|
|
339
|
+
// be reading a nullifier emitted by a child call. The read request of the parent call is included before the
|
|
340
|
+
// nullifier of the child call).
|
|
341
|
+
// If we can't clear enough read requests to make room for the next iteration's reads, we're stuck.
|
|
342
|
+
throw new Error('Number of nullifier read requests exceeds the limit.');
|
|
343
|
+
} else if (totalReadsToReset == 0) {
|
|
344
|
+
// It's transient data squashing asking for the read requests to be reset first (forceReset == true), and
|
|
345
|
+
// there's nothing to reset, returns false and let needsResetTransientData throw a more descriptive error.
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
// Otherwise, forceReset is true, we should proceed to reset as many as we can.
|
|
349
|
+
}
|
|
350
|
+
|
|
318
351
|
if (!this.nextIteration) {
|
|
352
|
+
// If there's no next iteration, we need to reset all the read requests.
|
|
319
353
|
this.nullifierResetActions = resetActions;
|
|
320
354
|
this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
|
|
321
355
|
this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
|
|
322
356
|
} else {
|
|
323
|
-
//
|
|
357
|
+
// If there's a next iteration, we can only reset one dimension at a time.
|
|
324
358
|
if (numPendingReads > numSettledReads) {
|
|
325
|
-
|
|
326
|
-
|
|
359
|
+
// Reset the pending read requests.
|
|
360
|
+
const pendingOnlyActions = assertLength(
|
|
327
361
|
resetActions.actions.map(action =>
|
|
328
362
|
action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
|
|
329
363
|
),
|
|
330
364
|
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
331
365
|
);
|
|
332
|
-
this.nullifierResetActions
|
|
366
|
+
this.nullifierResetActions = new ReadRequestResetActions(pendingOnlyActions, resetActions.pendingReadHints);
|
|
367
|
+
this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
|
|
333
368
|
} else {
|
|
334
|
-
|
|
335
|
-
|
|
369
|
+
// Reset the settled read requests.
|
|
370
|
+
const settledOnlyActions = assertLength(
|
|
336
371
|
resetActions.actions.map(action =>
|
|
337
372
|
action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
|
|
338
373
|
),
|
|
339
374
|
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
340
375
|
);
|
|
376
|
+
this.nullifierResetActions = new ReadRequestResetActions(settledOnlyActions, []);
|
|
377
|
+
this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
|
|
341
378
|
}
|
|
342
379
|
}
|
|
343
380
|
|
|
344
381
|
return true;
|
|
345
382
|
}
|
|
346
383
|
|
|
347
|
-
private
|
|
348
|
-
const numCurr = this.previousKernel.validationRequests.
|
|
349
|
-
const numNext = this.nextIteration ? this.nextIteration.
|
|
384
|
+
private needsResetKeyValidationRequests() {
|
|
385
|
+
const numCurr = this.previousKernel.validationRequests.scopedKeyValidationRequestsAndSeparators.claimedLength;
|
|
386
|
+
const numNext = this.nextIteration ? this.nextIteration.keyValidationRequestsAndSeparators.claimedLength : 0;
|
|
350
387
|
const maxAmountToKeep = !this.nextIteration ? 0 : MAX_KEY_VALIDATION_REQUESTS_PER_TX;
|
|
351
388
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
352
389
|
return false;
|
|
@@ -358,9 +395,6 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
358
395
|
}
|
|
359
396
|
|
|
360
397
|
private needsResetTransientData() {
|
|
361
|
-
// Initialize this to 0 so that needsSilo can be run.
|
|
362
|
-
this.numTransientData = 0;
|
|
363
|
-
|
|
364
398
|
const nextAccumNoteHashes =
|
|
365
399
|
this.previousKernel.end.noteHashes.claimedLength + (this.nextIteration?.noteHashes.claimedLength ?? 0);
|
|
366
400
|
const noteHashWillOverflow = nextAccumNoteHashes > MAX_NOTE_HASHES_PER_TX;
|
|
@@ -375,19 +409,19 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
375
409
|
return false;
|
|
376
410
|
}
|
|
377
411
|
|
|
378
|
-
const futureNoteHashReads =
|
|
379
|
-
|
|
380
|
-
|
|
412
|
+
const futureNoteHashReads = collectNested(this.executionStack, executionResult =>
|
|
413
|
+
executionResult.publicInputs.noteHashReadRequests.getActiveItems(),
|
|
414
|
+
);
|
|
415
|
+
const futureNullifierReads = collectNested(this.executionStack, executionResult =>
|
|
416
|
+
executionResult.publicInputs.nullifierReadRequests.getActiveItems(),
|
|
381
417
|
);
|
|
382
|
-
const
|
|
383
|
-
|
|
384
|
-
executionResult => executionResult.publicInputs.nullifierReadRequests,
|
|
418
|
+
const futureLogs = collectNested(this.executionStack, executionResult =>
|
|
419
|
+
executionResult.publicInputs.privateLogs.getActiveItems(),
|
|
385
420
|
);
|
|
386
|
-
// TODO(#15902): Collect future logs and only allow squashing a note hash when all its logs have been emitted
|
|
387
|
-
// (i.e. none of the future logs are linked to the to-be-squashed note hashes).
|
|
388
421
|
if (this.nextIteration) {
|
|
389
|
-
// If it's not the final reset, only one dimension will be reset at a time.
|
|
390
|
-
//
|
|
422
|
+
// If it's not the final reset, only one dimension will be reset at a time. Since we are resetting the transient
|
|
423
|
+
// data, the note hash and nullifier read requests in the previous kernel won't be squashed and need to be
|
|
424
|
+
// included in the future read requests.
|
|
391
425
|
futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.getActiveItems());
|
|
392
426
|
futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.getActiveItems());
|
|
393
427
|
}
|
|
@@ -397,27 +431,50 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
397
431
|
this.previousKernel.end.nullifiers,
|
|
398
432
|
futureNoteHashReads,
|
|
399
433
|
futureNullifierReads,
|
|
434
|
+
futureLogs,
|
|
400
435
|
this.noteHashNullifierCounterMap,
|
|
401
436
|
this.splitCounter,
|
|
402
437
|
);
|
|
403
438
|
|
|
404
|
-
if (this.nextIteration
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
439
|
+
if (this.nextIteration) {
|
|
440
|
+
const noteHashOverflowBy = noteHashWillOverflow
|
|
441
|
+
? nextAccumNoteHashes - MAX_NOTE_HASHES_PER_TX - numTransientData
|
|
442
|
+
: 0;
|
|
443
|
+
const nullifierOverflowBy = nullifierWillOverflow
|
|
444
|
+
? nextAccumNullifiers - MAX_NULLIFIERS_PER_TX - numTransientData
|
|
445
|
+
: 0;
|
|
446
|
+
const numSquashedLogs = logsWillOverflow
|
|
447
|
+
? countSquashedLogs(
|
|
448
|
+
this.previousKernel.end.noteHashes,
|
|
449
|
+
this.previousKernel.end.privateLogs,
|
|
450
|
+
transientDataSquashingHints.slice(0, numTransientData),
|
|
451
|
+
)
|
|
452
|
+
: 0;
|
|
453
|
+
const logsOverflowBy = logsWillOverflow ? nextAccumLogs - MAX_PRIVATE_LOGS_PER_TX - numSquashedLogs : 0;
|
|
454
|
+
|
|
455
|
+
if (noteHashOverflowBy > 0 || nullifierOverflowBy > 0 || logsOverflowBy > 0) {
|
|
456
|
+
// There's not enough transient data to squash to clear space for the overflow. It may be because some data is
|
|
457
|
+
// still required for read requests. Force a reset of the read requests first, and return to transient data
|
|
458
|
+
// squashing in the next round of reset.
|
|
459
|
+
// Note that clearing the read requests might not be enough to clear more space for the overflow. In this case,
|
|
460
|
+
// running the next reset will fail at the following check.
|
|
461
|
+
// Only one dimension can be reset at a time for an inner reset, so we try the note hash read requests first
|
|
462
|
+
// (which also helps with log overflow), then fall back to nullifier read requests.
|
|
463
|
+
const forceReset = true;
|
|
464
|
+
if ((noteHashOverflowBy > 0 || logsOverflowBy > 0) && this.needsResetNoteHashReadRequests(forceReset)) {
|
|
465
|
+
return true;
|
|
466
|
+
}
|
|
467
|
+
if (nullifierOverflowBy > 0 && this.needsResetNullifierReadRequests(forceReset)) {
|
|
468
|
+
return true;
|
|
469
|
+
}
|
|
470
|
+
if (noteHashWillOverflow) {
|
|
471
|
+
throw new Error('Number of note hashes exceeds the limit.');
|
|
472
|
+
}
|
|
473
|
+
if (nullifierWillOverflow) {
|
|
474
|
+
throw new Error('Number of nullifiers exceeds the limit.');
|
|
475
|
+
}
|
|
476
|
+
throw new Error('Number of private logs exceeds the limit.');
|
|
417
477
|
}
|
|
418
|
-
// Clearing the read requests might not be enough to squash the overflown data.
|
|
419
|
-
// In this case, the next iteration will fail at the above check.
|
|
420
|
-
return true;
|
|
421
478
|
}
|
|
422
479
|
|
|
423
480
|
this.numTransientData = numTransientData;
|
|
@@ -432,10 +489,13 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
432
489
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNoteHashes`.');
|
|
433
490
|
}
|
|
434
491
|
|
|
435
|
-
const
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
492
|
+
const noteHashes = this.previousKernel.end.noteHashes;
|
|
493
|
+
if (noteHashes.claimedLength > 0 && noteHashes.array[0].contractAddress.isZero()) {
|
|
494
|
+
// Already siloed.
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
const numToSilo = noteHashes.claimedLength - this.numTransientData;
|
|
439
499
|
this.requestedDimensions.NOTE_HASH_SILOING = numToSilo;
|
|
440
500
|
|
|
441
501
|
return numToSilo > 0;
|
|
@@ -446,15 +506,14 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
446
506
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNullifiers`.');
|
|
447
507
|
}
|
|
448
508
|
|
|
449
|
-
const
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
this.requestedDimensions.NULLIFIER_SILOING = cappedSize;
|
|
509
|
+
const nullifiers = this.previousKernel.end.nullifiers;
|
|
510
|
+
if (nullifiers.claimedLength > 0 && nullifiers.array[0].contractAddress.isZero()) {
|
|
511
|
+
// Already siloed.
|
|
512
|
+
return false;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
const numToSilo = nullifiers.claimedLength - this.numTransientData;
|
|
516
|
+
this.requestedDimensions.NULLIFIER_SILOING = numToSilo;
|
|
458
517
|
|
|
459
518
|
return numToSilo > 0;
|
|
460
519
|
}
|
|
@@ -465,17 +524,17 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
465
524
|
}
|
|
466
525
|
|
|
467
526
|
const privateLogs = this.previousKernel.end.privateLogs;
|
|
468
|
-
|
|
527
|
+
if (privateLogs.claimedLength > 0 && privateLogs.array[0].contractAddress.isZero()) {
|
|
528
|
+
// Already siloed.
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
469
531
|
|
|
470
|
-
const
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
.
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
.filter(l => squashedNoteHashCounters.includes(l.inner.noteHashCounter)).length;
|
|
477
|
-
|
|
478
|
-
const numToSilo = numLogs - numSquashedLogs;
|
|
532
|
+
const numSquashedLogs = countSquashedLogs(
|
|
533
|
+
this.previousKernel.end.noteHashes,
|
|
534
|
+
privateLogs,
|
|
535
|
+
this.transientDataSquashingHints.slice(0, this.numTransientData),
|
|
536
|
+
);
|
|
537
|
+
const numToSilo = privateLogs.claimedLength - numSquashedLogs;
|
|
479
538
|
this.requestedDimensions.PRIVATE_LOG_SILOING = numToSilo;
|
|
480
539
|
|
|
481
540
|
return numToSilo > 0;
|