@aztec/pxe 0.0.0-test.1 → 0.0.1-commit.24de95ac
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/README.md +5 -5
- package/dest/bin/check_oracle_version.d.ts +2 -0
- package/dest/bin/check_oracle_version.d.ts.map +1 -0
- package/dest/bin/check_oracle_version.js +39 -0
- package/dest/config/index.d.ts +10 -15
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +11 -20
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +56 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -0
- package/dest/contract_function_simulator/contract_function_simulator.js +301 -0
- package/dest/contract_function_simulator/execution_data_provider.d.ts +274 -0
- package/dest/contract_function_simulator/execution_data_provider.d.ts.map +1 -0
- package/dest/contract_function_simulator/execution_data_provider.js +14 -0
- package/dest/contract_function_simulator/execution_note_cache.d.ts +93 -0
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/execution_note_cache.js +183 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +16 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +26 -0
- package/dest/contract_function_simulator/hashed_values_cache.d.ts +28 -0
- package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/hashed_values_cache.js +36 -0
- package/dest/contract_function_simulator/index.d.ts +14 -0
- package/dest/contract_function_simulator/index.d.ts.map +1 -0
- package/dest/contract_function_simulator/index.js +12 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +20 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +37 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +15 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +25 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +17 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +65 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +22 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +42 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +22 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.js +33 -0
- package/dest/contract_function_simulator/oracle/index.d.ts +14 -0
- package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/index.js +2 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +97 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/interfaces.js +4 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +19 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +24 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +22 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +49 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +57 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle.js +328 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +48 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +123 -0
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +236 -0
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +417 -0
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +154 -0
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +265 -0
- package/dest/contract_function_simulator/pick_notes.d.ts +85 -0
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -0
- package/dest/contract_function_simulator/pick_notes.js +51 -0
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +6 -0
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -0
- package/dest/contract_function_simulator/proxied_contract_data_source.js +62 -0
- package/dest/contract_function_simulator/proxied_node.d.ts +9 -0
- package/dest/contract_function_simulator/proxied_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/proxied_node.js +27 -0
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +122 -0
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +1 -0
- package/dest/contract_function_simulator/pxe_oracle_interface.js +701 -0
- package/dest/entrypoints/client/bundle/index.d.ts +4 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -2
- package/dest/entrypoints/client/bundle/utils.d.ts +9 -9
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +18 -12
- package/dest/entrypoints/client/lazy/index.d.ts +4 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -2
- package/dest/entrypoints/client/lazy/utils.d.ts +8 -8
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +17 -11
- package/dest/entrypoints/{client/pxe_creation_options.d.ts → pxe_creation_options.d.ts} +4 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -0
- package/dest/entrypoints/server/index.d.ts +5 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -3
- package/dest/entrypoints/server/utils.d.ts +7 -15
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +34 -28
- package/dest/{pxe_service/error_enriching.d.ts → error_enriching.d.ts} +1 -1
- package/dest/error_enriching.d.ts.map +1 -0
- package/dest/{pxe_service/error_enriching.js → error_enriching.js} +26 -18
- package/dest/oracle_version.d.ts +3 -0
- package/dest/oracle_version.d.ts.map +1 -0
- package/dest/oracle_version.js +10 -0
- package/dest/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.d.ts +6 -6
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -0
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.js +271 -0
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.js +41 -0
- package/dest/private_kernel/hints/index.d.ts +3 -0
- package/dest/private_kernel/hints/index.d.ts.map +1 -0
- package/dest/{kernel_prover → private_kernel}/hints/index.js +1 -0
- package/dest/private_kernel/index.d.ts +3 -0
- package/dest/private_kernel/index.d.ts.map +1 -0
- package/dest/private_kernel/index.js +2 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +44 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -0
- package/dest/private_kernel/private_kernel_execution_prover.js +285 -0
- package/dest/{kernel_prover/proving_data_oracle.d.ts → private_kernel/private_kernel_oracle.d.ts} +17 -28
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -0
- package/dest/private_kernel/private_kernel_oracle.js +4 -0
- package/dest/{kernel_oracle/index.d.ts → private_kernel/private_kernel_oracle_impl.d.ts} +8 -8
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -0
- package/dest/{kernel_oracle/index.js → private_kernel/private_kernel_oracle_impl.js} +19 -9
- package/dest/pxe.d.ts +233 -0
- package/dest/pxe.d.ts.map +1 -0
- package/dest/pxe.js +789 -0
- package/dest/storage/address_data_provider/address_data_provider.d.ts +1 -3
- package/dest/storage/address_data_provider/address_data_provider.d.ts.map +1 -1
- package/dest/storage/address_data_provider/address_data_provider.js +0 -3
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +14 -5
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +1 -1
- package/dest/storage/capsule_data_provider/capsule_data_provider.js +85 -24
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts +12 -47
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +1 -1
- package/dest/storage/contract_data_provider/contract_data_provider.js +92 -70
- package/dest/storage/contract_data_provider/index.d.ts +0 -1
- package/dest/storage/contract_data_provider/index.d.ts.map +1 -1
- package/dest/storage/contract_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts +2 -41
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +1 -1
- package/dest/storage/contract_data_provider/private_functions_tree.js +9 -61
- package/dest/storage/index.d.ts +2 -3
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -3
- package/dest/storage/metadata.d.ts +2 -0
- package/dest/storage/metadata.d.ts.map +1 -0
- package/dest/storage/metadata.js +1 -0
- package/dest/storage/note_data_provider/note_dao.d.ts +16 -22
- package/dest/storage/note_data_provider/note_dao.d.ts.map +1 -1
- package/dest/storage/note_data_provider/note_dao.js +16 -20
- package/dest/storage/note_data_provider/note_data_provider.d.ts +71 -8
- package/dest/storage/note_data_provider/note_data_provider.d.ts.map +1 -1
- package/dest/storage/note_data_provider/note_data_provider.js +133 -74
- package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +43 -0
- package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +1 -0
- package/dest/storage/private_event_data_provider/private_event_data_provider.js +104 -0
- package/dest/storage/sync_data_provider/sync_data_provider.d.ts +2 -4
- package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +1 -1
- package/dest/storage/sync_data_provider/sync_data_provider.js +2 -5
- package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +28 -6
- package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +1 -1
- package/dest/storage/tagging_data_provider/tagging_data_provider.js +48 -24
- package/dest/synchronizer/synchronizer.d.ts +7 -9
- package/dest/synchronizer/synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/synchronizer.js +17 -19
- package/dest/tagging/constants.d.ts +2 -0
- package/dest/tagging/constants.d.ts.map +1 -0
- package/dest/tagging/constants.js +2 -0
- package/dest/tagging/index.d.ts +7 -0
- package/dest/tagging/index.d.ts.map +1 -0
- package/dest/tagging/index.js +5 -0
- package/dest/tagging/siloed_tag.d.ts +14 -0
- package/dest/tagging/siloed_tag.d.ts.map +1 -0
- package/dest/tagging/siloed_tag.js +20 -0
- package/dest/tagging/tag.d.ts +12 -0
- package/dest/tagging/tag.d.ts.map +1 -0
- package/dest/tagging/tag.js +17 -0
- package/dest/tagging/utils.d.ts +18 -0
- package/dest/tagging/utils.d.ts.map +1 -0
- package/dest/tagging/utils.js +24 -0
- package/package.json +34 -32
- package/src/bin/check_oracle_version.ts +50 -0
- package/src/config/index.ts +20 -33
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +548 -0
- package/src/contract_function_simulator/execution_data_provider.ts +343 -0
- package/src/contract_function_simulator/execution_note_cache.ts +222 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +32 -0
- package/src/contract_function_simulator/hashed_values_cache.ts +47 -0
- package/src/contract_function_simulator/index.ts +13 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +47 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +69 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +52 -0
- package/src/contract_function_simulator/noir-structs/utility_context.ts +42 -0
- package/src/contract_function_simulator/oracle/index.ts +16 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +160 -0
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +23 -0
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +52 -0
- package/src/contract_function_simulator/oracle/oracle.ts +575 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +207 -0
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +625 -0
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +358 -0
- package/src/contract_function_simulator/pick_notes.ts +141 -0
- package/src/contract_function_simulator/proxied_contract_data_source.ts +66 -0
- package/src/contract_function_simulator/proxied_node.ts +33 -0
- package/src/contract_function_simulator/pxe_oracle_interface.ts +1019 -0
- package/src/entrypoints/client/bundle/index.ts +4 -2
- package/src/entrypoints/client/bundle/utils.ts +36 -36
- package/src/entrypoints/client/lazy/index.ts +4 -2
- package/src/entrypoints/client/lazy/utils.ts +36 -31
- package/src/entrypoints/{client/pxe_creation_options.ts → pxe_creation_options.ts} +4 -1
- package/src/entrypoints/server/index.ts +5 -3
- package/src/entrypoints/server/utils.ts +69 -47
- package/src/{pxe_service/error_enriching.ts → error_enriching.ts} +36 -27
- package/src/oracle_version.ts +11 -0
- package/src/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.ts +158 -142
- package/src/private_kernel/hints/compute_tx_include_by_timestamp.ts +58 -0
- package/src/{kernel_prover → private_kernel}/hints/index.ts +1 -0
- package/src/private_kernel/index.ts +2 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +436 -0
- package/src/{kernel_prover/proving_data_oracle.ts → private_kernel/private_kernel_oracle.ts} +17 -29
- package/src/{kernel_oracle/index.ts → private_kernel/private_kernel_oracle_impl.ts} +30 -15
- package/src/pxe.ts +1113 -0
- package/src/storage/address_data_provider/address_data_provider.ts +1 -7
- package/src/storage/capsule_data_provider/capsule_data_provider.ts +97 -30
- package/src/storage/contract_data_provider/contract_data_provider.ts +114 -81
- package/src/storage/contract_data_provider/index.ts +0 -1
- package/src/storage/contract_data_provider/private_functions_tree.ts +11 -75
- package/src/storage/index.ts +2 -4
- package/src/storage/metadata.ts +1 -0
- package/src/storage/note_data_provider/note_dao.ts +19 -27
- package/src/storage/note_data_provider/note_data_provider.ts +161 -113
- package/src/storage/private_event_data_provider/private_event_data_provider.ts +148 -0
- package/src/storage/sync_data_provider/sync_data_provider.ts +4 -10
- package/src/storage/tagging_data_provider/tagging_data_provider.ts +58 -30
- package/src/synchronizer/synchronizer.ts +21 -22
- package/src/tagging/constants.ts +2 -0
- package/src/tagging/index.ts +6 -0
- package/src/tagging/siloed_tag.ts +22 -0
- package/src/tagging/tag.ts +16 -0
- package/src/tagging/utils.ts +31 -0
- package/dest/bin/index.d.ts +0 -3
- package/dest/bin/index.d.ts.map +0 -1
- package/dest/bin/index.js +0 -28
- package/dest/entrypoints/client/pxe_creation_options.d.ts.map +0 -1
- package/dest/kernel_oracle/index.d.ts.map +0 -1
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +0 -270
- package/dest/kernel_prover/hints/index.d.ts +0 -2
- package/dest/kernel_prover/hints/index.d.ts.map +0 -1
- package/dest/kernel_prover/index.d.ts +0 -3
- package/dest/kernel_prover/index.d.ts.map +0 -1
- package/dest/kernel_prover/index.js +0 -2
- package/dest/kernel_prover/kernel_prover.d.ts +0 -38
- package/dest/kernel_prover/kernel_prover.d.ts.map +0 -1
- package/dest/kernel_prover/kernel_prover.js +0 -217
- package/dest/kernel_prover/proving_data_oracle.d.ts.map +0 -1
- package/dest/kernel_prover/proving_data_oracle.js +0 -4
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +0 -11
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +0 -1
- package/dest/note_decryption_utils/add_public_values_to_payload.js +0 -47
- package/dest/pxe_http/index.d.ts +0 -2
- package/dest/pxe_http/index.d.ts.map +0 -1
- package/dest/pxe_http/index.js +0 -1
- package/dest/pxe_http/pxe_http_server.d.ts +0 -16
- package/dest/pxe_http/pxe_http_server.d.ts.map +0 -1
- package/dest/pxe_http/pxe_http_server.js +0 -27
- package/dest/pxe_oracle_interface/index.d.ts +0 -159
- package/dest/pxe_oracle_interface/index.d.ts.map +0 -1
- package/dest/pxe_oracle_interface/index.js +0 -692
- package/dest/pxe_oracle_interface/tagging_utils.d.ts +0 -17
- package/dest/pxe_oracle_interface/tagging_utils.d.ts.map +0 -1
- package/dest/pxe_oracle_interface/tagging_utils.js +0 -23
- package/dest/pxe_service/error_enriching.d.ts.map +0 -1
- package/dest/pxe_service/index.d.ts +0 -3
- package/dest/pxe_service/index.d.ts.map +0 -1
- package/dest/pxe_service/index.js +0 -2
- package/dest/pxe_service/pxe_service.d.ts +0 -111
- package/dest/pxe_service/pxe_service.d.ts.map +0 -1
- package/dest/pxe_service/pxe_service.js +0 -664
- package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts +0 -11
- package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts.map +0 -1
- package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.js +0 -20
- package/dest/storage/auth_witness_data_provider/index.d.ts +0 -2
- package/dest/storage/auth_witness_data_provider/index.d.ts.map +0 -1
- package/dest/storage/auth_witness_data_provider/index.js +0 -1
- package/dest/storage/data_provider.d.ts +0 -4
- package/dest/storage/data_provider.d.ts.map +0 -1
- package/dest/storage/data_provider.js +0 -1
- package/dest/test/pxe_test_suite.d.ts +0 -3
- package/dest/test/pxe_test_suite.d.ts.map +0 -1
- package/dest/test/pxe_test_suite.js +0 -97
- package/src/bin/index.ts +0 -38
- package/src/kernel_prover/index.ts +0 -2
- package/src/kernel_prover/kernel_prover.ts +0 -351
- package/src/note_decryption_utils/add_public_values_to_payload.ts +0 -64
- package/src/pxe_http/index.ts +0 -1
- package/src/pxe_http/pxe_http_server.ts +0 -29
- package/src/pxe_oracle_interface/index.ts +0 -925
- package/src/pxe_oracle_interface/tagging_utils.ts +0 -32
- package/src/pxe_service/index.ts +0 -2
- package/src/pxe_service/pxe_service.ts +0 -949
- package/src/storage/auth_witness_data_provider/auth_witness_data_provider.ts +0 -34
- package/src/storage/auth_witness_data_provider/index.ts +0 -1
- package/src/storage/data_provider.ts +0 -3
- package/src/test/pxe_test_suite.ts +0 -111
- /package/dest/entrypoints/{client/pxe_creation_options.js → pxe_creation_options.js} +0 -0
package/src/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.ts
RENAMED
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
5
5
|
MAX_NULLIFIERS_PER_TX,
|
|
6
6
|
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
7
|
+
MAX_PRIVATE_LOGS_PER_TX,
|
|
7
8
|
NULLIFIER_TREE_HEIGHT,
|
|
8
|
-
VK_TREE_HEIGHT,
|
|
9
9
|
} from '@aztec/constants';
|
|
10
10
|
import { makeTuple } from '@aztec/foundation/array';
|
|
11
11
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -14,7 +14,9 @@ import { type Tuple, 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 {
|
|
17
|
+
ClaimedLengthArray,
|
|
17
18
|
KeyValidationHint,
|
|
19
|
+
PaddedSideEffects,
|
|
18
20
|
type PrivateCircuitPublicInputs,
|
|
19
21
|
type PrivateKernelCircuitPublicInputs,
|
|
20
22
|
PrivateKernelData,
|
|
@@ -23,40 +25,38 @@ import {
|
|
|
23
25
|
PrivateKernelResetHints,
|
|
24
26
|
type PrivateKernelSimulateOutput,
|
|
25
27
|
type ReadRequest,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
ReadRequestActionEnum,
|
|
29
|
+
ReadRequestResetActions,
|
|
28
30
|
type ScopedKeyValidationRequestAndGenerator,
|
|
29
31
|
ScopedNoteHash,
|
|
30
32
|
ScopedNullifier,
|
|
31
33
|
ScopedReadRequest,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
TransientDataSquashingHint,
|
|
35
|
+
buildNoteHashReadRequestHintsFromResetActions,
|
|
36
|
+
buildNullifierReadRequestHintsFromResetActions,
|
|
35
37
|
buildTransientDataHints,
|
|
36
|
-
countAccumulatedItems,
|
|
37
38
|
findPrivateKernelResetDimensions,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
getNullifierReadRequestResetStates,
|
|
39
|
+
getNoteHashReadRequestResetActions,
|
|
40
|
+
getNullifierReadRequestResetActions,
|
|
41
41
|
privateKernelResetDimensionNames,
|
|
42
42
|
} from '@aztec/stdlib/kernel';
|
|
43
43
|
import { type PrivateCallExecutionResult, collectNested } from '@aztec/stdlib/tx';
|
|
44
|
+
import { VkData } from '@aztec/stdlib/vks';
|
|
44
45
|
|
|
45
|
-
import type {
|
|
46
|
+
import type { PrivateKernelOracle } from '../private_kernel_oracle.js';
|
|
46
47
|
|
|
47
|
-
function collectNestedReadRequests(
|
|
48
|
+
function collectNestedReadRequests<N extends number>(
|
|
48
49
|
executionStack: PrivateCallExecutionResult[],
|
|
49
|
-
extractReadRequests: (execution: PrivateCallExecutionResult) => ReadRequest
|
|
50
|
+
extractReadRequests: (execution: PrivateCallExecutionResult) => ClaimedLengthArray<ReadRequest, N>,
|
|
50
51
|
): ScopedReadRequest[] {
|
|
51
52
|
return collectNested(executionStack, executionResult => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
readRequest => new ScopedReadRequest(readRequest, executionResult.publicInputs.callContext.contractAddress)
|
|
55
|
-
);
|
|
53
|
+
return extractReadRequests(executionResult)
|
|
54
|
+
.getActiveItems()
|
|
55
|
+
.map(readRequest => new ScopedReadRequest(readRequest, executionResult.publicInputs.callContext.contractAddress));
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function getNullifierMembershipWitnessResolver(oracle:
|
|
59
|
+
function getNullifierMembershipWitnessResolver(oracle: PrivateKernelOracle) {
|
|
60
60
|
return async (nullifier: Fr) => {
|
|
61
61
|
const res = await oracle.getNullifierMembershipWitness(nullifier);
|
|
62
62
|
if (!res) {
|
|
@@ -72,23 +72,21 @@ function getNullifierMembershipWitnessResolver(oracle: ProvingDataOracle) {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
async function getMasterSecretKeysAndAppKeyGenerators(
|
|
75
|
-
keyValidationRequests:
|
|
76
|
-
|
|
75
|
+
keyValidationRequests: ClaimedLengthArray<
|
|
76
|
+
ScopedKeyValidationRequestAndGenerator,
|
|
77
|
+
typeof MAX_KEY_VALIDATION_REQUESTS_PER_TX
|
|
78
|
+
>,
|
|
79
|
+
numRequestsToVerify: number,
|
|
80
|
+
oracle: PrivateKernelOracle,
|
|
77
81
|
) {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
const secretKeys = await oracle.getMasterSecretKey(request.request.pkM);
|
|
85
|
-
keysHints.push(new KeyValidationHint(secretKeys, i));
|
|
86
|
-
}
|
|
87
|
-
return padArrayEnd(
|
|
88
|
-
keysHints,
|
|
89
|
-
KeyValidationHint.nada(MAX_KEY_VALIDATION_REQUESTS_PER_TX),
|
|
90
|
-
MAX_KEY_VALIDATION_REQUESTS_PER_TX,
|
|
82
|
+
const numRequestsToProcess = Math.min(keyValidationRequests.claimedLength, numRequestsToVerify);
|
|
83
|
+
const keysHints = await Promise.all(
|
|
84
|
+
keyValidationRequests.array.slice(0, numRequestsToProcess).map(async ({ request }) => {
|
|
85
|
+
const secretKeys = await oracle.getMasterSecretKey(request.request.pkM);
|
|
86
|
+
return new KeyValidationHint(secretKeys);
|
|
87
|
+
}),
|
|
91
88
|
);
|
|
89
|
+
return padArrayEnd(keysHints, KeyValidationHint.empty(), MAX_KEY_VALIDATION_REQUESTS_PER_TX);
|
|
92
90
|
}
|
|
93
91
|
|
|
94
92
|
export class PrivateKernelResetPrivateInputsBuilder {
|
|
@@ -96,10 +94,10 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
96
94
|
// If there's no next iteration, it's the final reset.
|
|
97
95
|
private nextIteration?: PrivateCircuitPublicInputs;
|
|
98
96
|
|
|
99
|
-
private
|
|
100
|
-
private
|
|
97
|
+
private noteHashResetActions: ReadRequestResetActions<typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>;
|
|
98
|
+
private nullifierResetActions: ReadRequestResetActions<typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>;
|
|
101
99
|
private numTransientData?: number;
|
|
102
|
-
private
|
|
100
|
+
private transientDataSquashingHints: Tuple<TransientDataSquashingHint, typeof MAX_NULLIFIERS_PER_TX>;
|
|
103
101
|
private requestedDimensions: PrivateKernelResetDimensions;
|
|
104
102
|
|
|
105
103
|
constructor(
|
|
@@ -110,11 +108,11 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
110
108
|
) {
|
|
111
109
|
this.previousKernel = previousKernelOutput.publicInputs;
|
|
112
110
|
this.requestedDimensions = PrivateKernelResetDimensions.empty();
|
|
113
|
-
this.
|
|
114
|
-
this.
|
|
115
|
-
this.
|
|
111
|
+
this.noteHashResetActions = ReadRequestResetActions.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
112
|
+
this.nullifierResetActions = ReadRequestResetActions.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
113
|
+
this.transientDataSquashingHints = makeTuple(
|
|
116
114
|
MAX_NULLIFIERS_PER_TX,
|
|
117
|
-
() => new
|
|
115
|
+
() => new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
|
|
118
116
|
);
|
|
119
117
|
this.nextIteration = executionStack[this.executionStack.length - 1]?.publicInputs;
|
|
120
118
|
}
|
|
@@ -143,7 +141,7 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
143
|
|
|
146
|
-
async build(oracle:
|
|
144
|
+
async build(oracle: PrivateKernelOracle, noteHashLeafIndexMap: Map<bigint, bigint>) {
|
|
147
145
|
if (privateKernelResetDimensionNames.every(name => !this.requestedDimensions[name])) {
|
|
148
146
|
throw new Error('Reset is not required.');
|
|
149
147
|
}
|
|
@@ -162,122 +160,132 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
162
160
|
allowRemainder,
|
|
163
161
|
);
|
|
164
162
|
|
|
165
|
-
const previousVkMembershipWitness = await oracle.getVkMembershipWitness(
|
|
166
|
-
|
|
167
|
-
|
|
163
|
+
const previousVkMembershipWitness = await oracle.getVkMembershipWitness(
|
|
164
|
+
this.previousKernelOutput.verificationKey.keyAsFields,
|
|
165
|
+
);
|
|
166
|
+
const vkData = new VkData(
|
|
168
167
|
this.previousKernelOutput.verificationKey,
|
|
169
168
|
Number(previousVkMembershipWitness.leafIndex),
|
|
170
|
-
|
|
169
|
+
previousVkMembershipWitness.siblingPath,
|
|
171
170
|
);
|
|
171
|
+
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
172
172
|
|
|
173
|
-
this.
|
|
174
|
-
this.
|
|
175
|
-
dimensions.
|
|
176
|
-
dimensions.
|
|
173
|
+
this.reduceReadRequestActions(
|
|
174
|
+
this.noteHashResetActions,
|
|
175
|
+
dimensions.NOTE_HASH_PENDING_READ,
|
|
176
|
+
dimensions.NOTE_HASH_SETTLED_READ,
|
|
177
177
|
);
|
|
178
|
-
this.
|
|
179
|
-
this.
|
|
180
|
-
dimensions.
|
|
181
|
-
dimensions.
|
|
178
|
+
this.reduceReadRequestActions(
|
|
179
|
+
this.nullifierResetActions,
|
|
180
|
+
dimensions.NULLIFIER_PENDING_READ,
|
|
181
|
+
dimensions.NULLIFIER_SETTLED_READ,
|
|
182
182
|
);
|
|
183
183
|
|
|
184
|
+
// TODO: Enable padding when we have a better idea what are the final amounts we should pad to.
|
|
185
|
+
const paddedSideEffects = PaddedSideEffects.empty();
|
|
186
|
+
|
|
184
187
|
return new PrivateKernelResetCircuitPrivateInputs(
|
|
185
188
|
previousKernelData,
|
|
189
|
+
paddedSideEffects,
|
|
186
190
|
new PrivateKernelResetHints(
|
|
187
|
-
await
|
|
191
|
+
await buildNoteHashReadRequestHintsFromResetActions(
|
|
188
192
|
oracle,
|
|
189
193
|
this.previousKernel.validationRequests.noteHashReadRequests,
|
|
190
194
|
this.previousKernel.end.noteHashes,
|
|
191
|
-
this.
|
|
195
|
+
this.noteHashResetActions,
|
|
192
196
|
noteHashLeafIndexMap,
|
|
193
197
|
),
|
|
194
|
-
await
|
|
198
|
+
await buildNullifierReadRequestHintsFromResetActions(
|
|
195
199
|
{ getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle) },
|
|
196
200
|
this.previousKernel.validationRequests.nullifierReadRequests,
|
|
197
|
-
this.
|
|
201
|
+
this.nullifierResetActions,
|
|
198
202
|
),
|
|
199
203
|
await getMasterSecretKeysAndAppKeyGenerators(
|
|
200
204
|
this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators,
|
|
205
|
+
dimensions.KEY_VALIDATION,
|
|
201
206
|
oracle,
|
|
202
207
|
),
|
|
203
|
-
this.
|
|
208
|
+
this.transientDataSquashingHints,
|
|
204
209
|
this.validationRequestsSplitCounter,
|
|
205
210
|
),
|
|
206
211
|
dimensions,
|
|
207
212
|
);
|
|
208
213
|
}
|
|
209
214
|
|
|
210
|
-
private
|
|
211
|
-
|
|
215
|
+
private reduceReadRequestActions<NUM_READS extends number>(
|
|
216
|
+
resetActions: ReadRequestResetActions<NUM_READS>,
|
|
212
217
|
maxPending: number,
|
|
213
218
|
maxSettled: number,
|
|
214
219
|
) {
|
|
215
220
|
let numPending = 0;
|
|
216
221
|
let numSettled = 0;
|
|
217
|
-
for (let i = 0; i <
|
|
218
|
-
const
|
|
219
|
-
if (
|
|
222
|
+
for (let i = 0; i < resetActions.actions.length; i++) {
|
|
223
|
+
const action = resetActions.actions[i];
|
|
224
|
+
if (action === ReadRequestActionEnum.READ_AS_PENDING) {
|
|
220
225
|
if (numPending < maxPending) {
|
|
221
226
|
numPending++;
|
|
222
227
|
} else {
|
|
223
|
-
|
|
228
|
+
resetActions.actions[i] = ReadRequestActionEnum.SKIP;
|
|
224
229
|
}
|
|
225
|
-
} else if (
|
|
230
|
+
} else if (action === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
226
231
|
if (numSettled < maxSettled) {
|
|
227
232
|
numSettled++;
|
|
228
233
|
} else {
|
|
229
|
-
|
|
234
|
+
resetActions.actions[i] = ReadRequestActionEnum.SKIP;
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
237
|
}
|
|
233
238
|
|
|
234
|
-
|
|
239
|
+
resetActions.pendingReadHints = resetActions.pendingReadHints.slice(0, maxPending);
|
|
235
240
|
}
|
|
236
241
|
|
|
237
242
|
private needsResetNoteHashReadRequests(forceResetAll = false) {
|
|
238
|
-
const numCurr =
|
|
239
|
-
const numNext = this.nextIteration ?
|
|
243
|
+
const numCurr = this.previousKernel.validationRequests.noteHashReadRequests.claimedLength;
|
|
244
|
+
const numNext = this.nextIteration ? this.nextIteration.noteHashReadRequests.claimedLength : 0;
|
|
240
245
|
const maxAmountToKeep = !this.nextIteration || forceResetAll ? 0 : MAX_NOTE_HASH_READ_REQUESTS_PER_TX;
|
|
241
246
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
242
247
|
return false;
|
|
243
248
|
}
|
|
244
249
|
|
|
245
250
|
const futureNoteHashes = collectNested(this.executionStack, executionResult => {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
noteHash => new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress)
|
|
249
|
-
);
|
|
251
|
+
return executionResult.publicInputs.noteHashes
|
|
252
|
+
.getActiveItems()
|
|
253
|
+
.map(noteHash => new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress));
|
|
250
254
|
});
|
|
251
255
|
|
|
252
|
-
const
|
|
256
|
+
const resetActions = getNoteHashReadRequestResetActions(
|
|
253
257
|
this.previousKernel.validationRequests.noteHashReadRequests,
|
|
254
258
|
this.previousKernel.end.noteHashes,
|
|
255
259
|
futureNoteHashes,
|
|
256
260
|
);
|
|
257
261
|
|
|
258
|
-
const numPendingReads =
|
|
259
|
-
const numSettledReads =
|
|
260
|
-
(accum,
|
|
262
|
+
const numPendingReads = resetActions.pendingReadHints.length;
|
|
263
|
+
const numSettledReads = resetActions.actions.reduce(
|
|
264
|
+
(accum, action) => accum + (action === ReadRequestActionEnum.READ_AS_SETTLED ? 1 : 0),
|
|
261
265
|
0,
|
|
262
266
|
);
|
|
263
267
|
|
|
264
268
|
if (!this.nextIteration) {
|
|
265
|
-
this.
|
|
266
|
-
this.requestedDimensions.
|
|
267
|
-
this.requestedDimensions.
|
|
269
|
+
this.noteHashResetActions = resetActions;
|
|
270
|
+
this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
|
|
271
|
+
this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
|
|
268
272
|
} else {
|
|
269
273
|
// Pick only one dimension to reset if next iteration is not empty.
|
|
270
274
|
if (numPendingReads > numSettledReads) {
|
|
271
|
-
this.requestedDimensions.
|
|
272
|
-
this.
|
|
273
|
-
|
|
275
|
+
this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
|
|
276
|
+
this.noteHashResetActions.actions = assertLength(
|
|
277
|
+
resetActions.actions.map(action =>
|
|
278
|
+
action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
|
|
279
|
+
),
|
|
274
280
|
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
275
281
|
);
|
|
276
|
-
this.
|
|
282
|
+
this.noteHashResetActions.pendingReadHints = resetActions.pendingReadHints;
|
|
277
283
|
} else {
|
|
278
|
-
this.requestedDimensions.
|
|
279
|
-
this.
|
|
280
|
-
|
|
284
|
+
this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
|
|
285
|
+
this.noteHashResetActions.actions = assertLength(
|
|
286
|
+
resetActions.actions.map(action =>
|
|
287
|
+
action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
|
|
288
|
+
),
|
|
281
289
|
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
282
290
|
);
|
|
283
291
|
}
|
|
@@ -287,49 +295,52 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
287
295
|
}
|
|
288
296
|
|
|
289
297
|
private needsResetNullifierReadRequests(forceResetAll = false) {
|
|
290
|
-
const numCurr =
|
|
291
|
-
const numNext = this.nextIteration ?
|
|
298
|
+
const numCurr = this.previousKernel.validationRequests.nullifierReadRequests.claimedLength;
|
|
299
|
+
const numNext = this.nextIteration ? this.nextIteration.nullifierReadRequests.claimedLength : 0;
|
|
292
300
|
const maxAmountToKeep = !this.nextIteration || forceResetAll ? 0 : MAX_NULLIFIER_READ_REQUESTS_PER_TX;
|
|
293
301
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
294
302
|
return false;
|
|
295
303
|
}
|
|
296
304
|
|
|
297
305
|
const futureNullifiers = collectNested(this.executionStack, executionResult => {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
nullifier => new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress)
|
|
301
|
-
);
|
|
306
|
+
return executionResult.publicInputs.nullifiers
|
|
307
|
+
.getActiveItems()
|
|
308
|
+
.map(nullifier => new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress));
|
|
302
309
|
});
|
|
303
310
|
|
|
304
|
-
const
|
|
311
|
+
const resetActions = getNullifierReadRequestResetActions(
|
|
305
312
|
this.previousKernel.validationRequests.nullifierReadRequests,
|
|
306
313
|
this.previousKernel.end.nullifiers,
|
|
307
314
|
futureNullifiers,
|
|
308
315
|
);
|
|
309
316
|
|
|
310
|
-
const numPendingReads =
|
|
311
|
-
const numSettledReads =
|
|
312
|
-
(accum,
|
|
317
|
+
const numPendingReads = resetActions.pendingReadHints.length;
|
|
318
|
+
const numSettledReads = resetActions.actions.reduce(
|
|
319
|
+
(accum, action) => accum + (action === ReadRequestActionEnum.READ_AS_SETTLED ? 1 : 0),
|
|
313
320
|
0,
|
|
314
321
|
);
|
|
315
322
|
|
|
316
323
|
if (!this.nextIteration) {
|
|
317
|
-
this.
|
|
318
|
-
this.requestedDimensions.
|
|
319
|
-
this.requestedDimensions.
|
|
324
|
+
this.nullifierResetActions = resetActions;
|
|
325
|
+
this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
|
|
326
|
+
this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
|
|
320
327
|
} else {
|
|
321
328
|
// Pick only one dimension to reset if next iteration is not empty.
|
|
322
329
|
if (numPendingReads > numSettledReads) {
|
|
323
|
-
this.requestedDimensions.
|
|
324
|
-
this.
|
|
325
|
-
|
|
330
|
+
this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
|
|
331
|
+
this.nullifierResetActions.actions = assertLength(
|
|
332
|
+
resetActions.actions.map(action =>
|
|
333
|
+
action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
|
|
334
|
+
),
|
|
326
335
|
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
327
336
|
);
|
|
328
|
-
this.
|
|
337
|
+
this.nullifierResetActions.pendingReadHints = resetActions.pendingReadHints;
|
|
329
338
|
} else {
|
|
330
|
-
this.requestedDimensions.
|
|
331
|
-
this.
|
|
332
|
-
|
|
339
|
+
this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
|
|
340
|
+
this.nullifierResetActions.actions = assertLength(
|
|
341
|
+
resetActions.actions.map(action =>
|
|
342
|
+
action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
|
|
343
|
+
),
|
|
333
344
|
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
334
345
|
);
|
|
335
346
|
}
|
|
@@ -339,18 +350,14 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
339
350
|
}
|
|
340
351
|
|
|
341
352
|
private needsResetNullifierKeys() {
|
|
342
|
-
const numCurr =
|
|
343
|
-
|
|
344
|
-
);
|
|
345
|
-
const numNext = this.nextIteration
|
|
346
|
-
? countAccumulatedItems(this.nextIteration.keyValidationRequestsAndGenerators)
|
|
347
|
-
: 0;
|
|
353
|
+
const numCurr = this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators.claimedLength;
|
|
354
|
+
const numNext = this.nextIteration ? this.nextIteration.keyValidationRequestsAndGenerators.claimedLength : 0;
|
|
348
355
|
const maxAmountToKeep = !this.nextIteration ? 0 : MAX_KEY_VALIDATION_REQUESTS_PER_TX;
|
|
349
356
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
350
357
|
return false;
|
|
351
358
|
}
|
|
352
359
|
|
|
353
|
-
this.requestedDimensions.
|
|
360
|
+
this.requestedDimensions.KEY_VALIDATION = numCurr;
|
|
354
361
|
|
|
355
362
|
return true;
|
|
356
363
|
}
|
|
@@ -360,14 +367,16 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
360
367
|
this.numTransientData = 0;
|
|
361
368
|
|
|
362
369
|
const nextAccumNoteHashes =
|
|
363
|
-
|
|
364
|
-
countAccumulatedItems(this.nextIteration?.noteHashes ?? []);
|
|
370
|
+
this.previousKernel.end.noteHashes.claimedLength + (this.nextIteration?.noteHashes.claimedLength ?? 0);
|
|
365
371
|
const noteHashWillOverflow = nextAccumNoteHashes > MAX_NOTE_HASHES_PER_TX;
|
|
366
372
|
const nextAccumNullifiers =
|
|
367
|
-
|
|
368
|
-
countAccumulatedItems(this.nextIteration?.nullifiers ?? []);
|
|
373
|
+
this.previousKernel.end.nullifiers.claimedLength + (this.nextIteration?.nullifiers.claimedLength ?? 0);
|
|
369
374
|
const nullifierWillOverflow = nextAccumNullifiers > MAX_NULLIFIERS_PER_TX;
|
|
370
|
-
|
|
375
|
+
const nextAccumLogs =
|
|
376
|
+
this.previousKernel.end.privateLogs.claimedLength + (this.nextIteration?.privateLogs.claimedLength ?? 0);
|
|
377
|
+
const logsWillOverflow = nextAccumLogs > MAX_PRIVATE_LOGS_PER_TX;
|
|
378
|
+
|
|
379
|
+
if (this.nextIteration && !noteHashWillOverflow && !nullifierWillOverflow && !logsWillOverflow) {
|
|
371
380
|
return false;
|
|
372
381
|
}
|
|
373
382
|
|
|
@@ -379,35 +388,36 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
379
388
|
this.executionStack,
|
|
380
389
|
executionResult => executionResult.publicInputs.nullifierReadRequests,
|
|
381
390
|
);
|
|
391
|
+
// TODO(#15902): Collect future logs and only allow squashing a note hash when all its logs have been emitted
|
|
392
|
+
// (i.e. none of the future logs are linked to the to-be-squashed note hashes).
|
|
382
393
|
if (this.nextIteration) {
|
|
383
394
|
// If it's not the final reset, only one dimension will be reset at a time.
|
|
384
395
|
// The note hashes and nullifiers for the remaining read requests can't be squashed.
|
|
385
|
-
futureNoteHashReads.push(
|
|
386
|
-
|
|
387
|
-
);
|
|
388
|
-
futureNullifierReads.push(
|
|
389
|
-
...this.previousKernel.validationRequests.nullifierReadRequests.filter(r => !r.isEmpty()),
|
|
390
|
-
);
|
|
396
|
+
futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.getActiveItems());
|
|
397
|
+
futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.getActiveItems());
|
|
391
398
|
}
|
|
392
399
|
|
|
393
|
-
const { numTransientData, hints:
|
|
400
|
+
const { numTransientData, hints: transientDataSquashingHints } = buildTransientDataHints(
|
|
394
401
|
this.previousKernel.end.noteHashes,
|
|
395
402
|
this.previousKernel.end.nullifiers,
|
|
396
403
|
futureNoteHashReads,
|
|
397
404
|
futureNullifierReads,
|
|
398
405
|
this.noteHashNullifierCounterMap,
|
|
399
406
|
this.validationRequestsSplitCounter,
|
|
400
|
-
MAX_NOTE_HASHES_PER_TX,
|
|
401
|
-
MAX_NULLIFIERS_PER_TX,
|
|
402
407
|
);
|
|
403
408
|
|
|
404
409
|
if (this.nextIteration && !numTransientData) {
|
|
405
410
|
const forceResetAll = true;
|
|
406
411
|
const canClearReadRequests =
|
|
407
412
|
(noteHashWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll)) ||
|
|
408
|
-
(nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll))
|
|
413
|
+
(nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll)) ||
|
|
414
|
+
(logsWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll));
|
|
409
415
|
if (!canClearReadRequests) {
|
|
410
|
-
const overflownData = noteHashWillOverflow
|
|
416
|
+
const overflownData = noteHashWillOverflow
|
|
417
|
+
? 'note hashes'
|
|
418
|
+
: nullifierWillOverflow
|
|
419
|
+
? 'nullifiers'
|
|
420
|
+
: 'private logs';
|
|
411
421
|
throw new Error(`Number of ${overflownData} exceeds the limit.`);
|
|
412
422
|
}
|
|
413
423
|
// Clearing the read requests might not be enough to squash the overflown data.
|
|
@@ -416,8 +426,8 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
416
426
|
}
|
|
417
427
|
|
|
418
428
|
this.numTransientData = numTransientData;
|
|
419
|
-
this.
|
|
420
|
-
this.requestedDimensions.
|
|
429
|
+
this.transientDataSquashingHints = transientDataSquashingHints;
|
|
430
|
+
this.requestedDimensions.TRANSIENT_DATA_SQUASHING = numTransientData;
|
|
421
431
|
|
|
422
432
|
return numTransientData > 0;
|
|
423
433
|
}
|
|
@@ -427,9 +437,11 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
427
437
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNoteHashes`.');
|
|
428
438
|
}
|
|
429
439
|
|
|
430
|
-
const numNoteHashes = this.previousKernel.end.noteHashes
|
|
440
|
+
const numNoteHashes = this.previousKernel.end.noteHashes
|
|
441
|
+
.getActiveItems()
|
|
442
|
+
.filter(n => !n.contractAddress.isZero()).length;
|
|
431
443
|
const numToSilo = Math.max(0, numNoteHashes - this.numTransientData);
|
|
432
|
-
this.requestedDimensions.
|
|
444
|
+
this.requestedDimensions.NOTE_HASH_SILOING = numToSilo;
|
|
433
445
|
|
|
434
446
|
return numToSilo > 0;
|
|
435
447
|
}
|
|
@@ -439,13 +451,15 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
439
451
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNullifiers`.');
|
|
440
452
|
}
|
|
441
453
|
|
|
442
|
-
const numNullifiers = this.previousKernel.end.nullifiers
|
|
454
|
+
const numNullifiers = this.previousKernel.end.nullifiers
|
|
455
|
+
.getActiveItems()
|
|
456
|
+
.filter(n => !n.contractAddress.isZero()).length;
|
|
443
457
|
const numToSilo = Math.max(0, numNullifiers - this.numTransientData);
|
|
444
458
|
// Include the first nullifier if there's something to silo.
|
|
445
459
|
// The reset circuit checks that capped_size must be greater than or equal to all non-empty nullifiers.
|
|
446
460
|
// Which includes the first nullifier, even though its contract address is always zero and doesn't need siloing.
|
|
447
461
|
const cappedSize = numToSilo ? numToSilo + 1 : 0;
|
|
448
|
-
this.requestedDimensions.
|
|
462
|
+
this.requestedDimensions.NULLIFIER_SILOING = cappedSize;
|
|
449
463
|
|
|
450
464
|
return numToSilo > 0;
|
|
451
465
|
}
|
|
@@ -456,16 +470,18 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
456
470
|
}
|
|
457
471
|
|
|
458
472
|
const privateLogs = this.previousKernel.end.privateLogs;
|
|
459
|
-
const numLogs = privateLogs.filter(l => !l.contractAddress.isZero()).length;
|
|
473
|
+
const numLogs = privateLogs.getActiveItems().filter(l => !l.contractAddress.isZero()).length;
|
|
460
474
|
|
|
461
475
|
const noteHashes = this.previousKernel.end.noteHashes;
|
|
462
|
-
const squashedNoteHashCounters = this.
|
|
463
|
-
.filter(h => h.noteHashIndex < noteHashes.
|
|
464
|
-
.map(h => noteHashes[h.noteHashIndex].counter);
|
|
465
|
-
const numSquashedLogs = privateLogs
|
|
476
|
+
const squashedNoteHashCounters = this.transientDataSquashingHints
|
|
477
|
+
.filter(h => h.noteHashIndex < noteHashes.claimedLength)
|
|
478
|
+
.map(h => noteHashes.array[h.noteHashIndex].counter);
|
|
479
|
+
const numSquashedLogs = privateLogs
|
|
480
|
+
.getActiveItems()
|
|
481
|
+
.filter(l => squashedNoteHashCounters.includes(l.inner.noteHashCounter)).length;
|
|
466
482
|
|
|
467
483
|
const numToSilo = numLogs - numSquashedLogs;
|
|
468
|
-
this.requestedDimensions.
|
|
484
|
+
this.requestedDimensions.PRIVATE_LOG_SILOING = numToSilo;
|
|
469
485
|
|
|
470
486
|
return numToSilo > 0;
|
|
471
487
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { MAX_INCLUDE_BY_TIMESTAMP_DURATION } from '@aztec/constants';
|
|
2
|
+
import type { PrivateKernelCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
3
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
4
|
+
|
|
5
|
+
const ROUNDED_DURATIONS = [
|
|
6
|
+
3600, // 1 hour
|
|
7
|
+
1800, // 30 mins
|
|
8
|
+
1, // 1 second
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
function roundTimestamp(blockTimestamp: bigint, includeByTimestamp: bigint): UInt64 {
|
|
12
|
+
return ROUNDED_DURATIONS.reduce((timestamp, duration) => {
|
|
13
|
+
if (timestamp <= blockTimestamp) {
|
|
14
|
+
// The timestamp must be greater than the block timestamp.
|
|
15
|
+
// If it is too small, round it down again using a smaller duration.
|
|
16
|
+
const totalDuration = includeByTimestamp - blockTimestamp;
|
|
17
|
+
const roundedDuration = totalDuration - (totalDuration % BigInt(duration));
|
|
18
|
+
return blockTimestamp + roundedDuration;
|
|
19
|
+
}
|
|
20
|
+
return timestamp;
|
|
21
|
+
}, 0n);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function computeTxIncludeByTimestamp(
|
|
25
|
+
previousKernel: PrivateKernelCircuitPublicInputs,
|
|
26
|
+
maxDuration = MAX_INCLUDE_BY_TIMESTAMP_DURATION,
|
|
27
|
+
): UInt64 {
|
|
28
|
+
if (maxDuration > MAX_INCLUDE_BY_TIMESTAMP_DURATION) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Custom max duration cannot be greater than the max allowed. Max allowed: ${MAX_INCLUDE_BY_TIMESTAMP_DURATION}. Custom value: ${maxDuration}.`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const anchorBlockTimestamp = previousKernel.constants.anchorBlockHeader.globalVariables.timestamp;
|
|
35
|
+
const maxTimestamp = anchorBlockTimestamp + BigInt(maxDuration);
|
|
36
|
+
const includeByTimestamp = previousKernel.includeByTimestamp;
|
|
37
|
+
|
|
38
|
+
// If the includeByTimestamp set during the tx execution is greater than or equal to the max allowed duration,
|
|
39
|
+
// use the maximum allowed timestamp.
|
|
40
|
+
// Note: It shouldn't be larger than the max allowed duration, but we check for it anyway.
|
|
41
|
+
if (includeByTimestamp >= maxTimestamp) {
|
|
42
|
+
return maxTimestamp;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Round it down to the nearest hour/min/second to reduce precision and avoid revealing the exact value.
|
|
46
|
+
// This makes it harder for others to infer what function calls may have been used to produce a specific timestamp.
|
|
47
|
+
const roundedTimestamp = roundTimestamp(anchorBlockTimestamp, includeByTimestamp);
|
|
48
|
+
|
|
49
|
+
// The tx can't be published if the timestamp is the same or less than the anchor block's timestamp.
|
|
50
|
+
// Future blocks will have a greater timestamp, so the tx would never be included.
|
|
51
|
+
if (roundedTimestamp <= anchorBlockTimestamp) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${includeByTimestamp}.`,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return roundedTimestamp;
|
|
58
|
+
}
|