@aztec/pxe 0.0.1-commit.96dac018d → 0.0.1-commit.993d240
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/bin/check_oracle_version.d.ts +12 -2
- package/dest/bin/check_oracle_version.d.ts.map +1 -1
- package/dest/bin/check_oracle_version.js +31 -25
- package/dest/bin/index.d.ts +2 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +1 -0
- package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
- package/dest/block_synchronizer/block_stream_source.js +62 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -10
- package/dest/config/index.d.ts +8 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +13 -15
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +16 -5
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +53 -18
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
- package/dest/contract_function_simulator/index.d.ts +4 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +3 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +48 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +45 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -9
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +13 -3
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +35 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
- 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 +6 -10
- package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +62 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +67 -51
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
- package/dest/contract_function_simulator/oracle/oracle.d.ts +74 -45
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +471 -287
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +147 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +1199 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +44 -70
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +96 -99
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +112 -67
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +395 -141
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -64
- package/dest/contract_logging.d.ts +9 -4
- package/dest/contract_logging.d.ts.map +1 -1
- package/dest/contract_logging.js +21 -6
- package/dest/contract_sync/contract_sync_service.d.ts +7 -8
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +87 -49
- package/dest/contract_sync/helpers.d.ts +2 -4
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +12 -14
- package/dest/debug/pxe_debug_utils.d.ts +3 -8
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +0 -6
- package/dest/entrypoints/client/bundle/index.d.ts +1 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +0 -1
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +13 -5
- package/dest/entrypoints/client/lazy/index.d.ts +1 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +0 -1
- 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 +13 -5
- package/dest/entrypoints/pxe_creation_options.d.ts +9 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +3 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -2
- package/dest/entrypoints/server/utils.d.ts +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +13 -5
- package/dest/events/event_service.d.ts +15 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +44 -11
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/hooks/authorize_utility_call.d.ts +41 -0
- package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
- package/dest/hooks/authorize_utility_call.js +4 -0
- package/dest/hooks/execution_hooks.d.ts +42 -0
- package/dest/hooks/execution_hooks.d.ts.map +1 -0
- package/dest/hooks/execution_hooks.js +9 -0
- package/dest/hooks/index.d.ts +4 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +1 -0
- package/dest/logs/log_service.d.ts +9 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +122 -72
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +38 -0
- package/dest/notes/note_service.d.ts +27 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +80 -56
- package/dest/notes_filter.d.ts +2 -3
- package/dest/notes_filter.d.ts.map +1 -1
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/batch_planner.d.ts +47 -0
- package/dest/private_kernel/batch_planner.d.ts.map +1 -0
- package/dest/private_kernel/batch_planner.js +104 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
- package/dest/private_kernel/hints/test_utils.js +2 -3
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +152 -59
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -10
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +24 -22
- package/dest/pxe.d.ts +61 -11
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +162 -97
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +591 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +50 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +36 -28
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +1 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +9 -26
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +1 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +2 -2
- package/dest/storage/open_pxe_stores.d.ts +33 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +27 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +3 -0
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
- package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +36 -37
- package/dest/tagging/index.d.ts +6 -5
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +4 -3
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +56 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +163 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +30 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
- 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 +41 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -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 +37 -25
- package/package.json +20 -17
- package/src/bin/check_oracle_version.ts +41 -31
- package/src/bin/index.ts +1 -0
- package/src/block_synchronizer/block_stream_source.ts +81 -0
- package/src/block_synchronizer/block_synchronizer.ts +33 -11
- package/src/config/index.ts +15 -9
- package/src/contract_function_simulator/contract_function_simulator.ts +82 -22
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +3 -0
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +5 -10
- package/src/contract_function_simulator/noir-structs/option.ts +69 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +85 -72
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +558 -484
- package/src/contract_function_simulator/oracle/oracle_registry.ts +904 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +120 -130
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +543 -221
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
- package/src/contract_logging.ts +18 -5
- package/src/contract_sync/contract_sync_service.ts +120 -83
- package/src/contract_sync/helpers.ts +13 -25
- package/src/debug/pxe_debug_utils.ts +3 -11
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +10 -5
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +10 -5
- package/src/entrypoints/pxe_creation_options.ts +14 -0
- package/src/entrypoints/server/index.ts +2 -2
- package/src/entrypoints/server/utils.ts +15 -6
- package/src/events/event_service.ts +69 -21
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/hooks/authorize_utility_call.ts +44 -0
- package/src/hooks/execution_hooks.ts +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/logs/log_service.ts +153 -129
- package/src/messages/message_context_service.ts +45 -0
- package/src/notes/note_service.ts +119 -85
- package/src/notes_filter.ts +1 -3
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +169 -0
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +1 -1
- package/src/private_kernel/hints/test_utils.ts +2 -9
- package/src/private_kernel/private_kernel_execution_prover.ts +240 -82
- package/src/private_kernel/private_kernel_oracle.ts +35 -25
- package/src/pxe.ts +270 -102
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +46 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +712 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +14 -35
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +2 -5
- package/src/storage/open_pxe_stores.ts +49 -0
- package/src/storage/private_event_store/private_event_store.ts +4 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
- package/src/tagging/get_all_logs_by_tags.ts +78 -50
- package/src/tagging/index.ts +5 -4
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +240 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -27
- package/dest/access_scopes.d.ts +0 -9
- package/dest/access_scopes.d.ts.map +0 -1
- package/dest/access_scopes.js +0 -6
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
- package/src/access_scopes.ts +0 -9
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
package/src/notes_filter.ts
CHANGED
|
@@ -2,8 +2,6 @@ import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
2
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
4
4
|
|
|
5
|
-
import type { AccessScopes } from './access_scopes.js';
|
|
6
|
-
|
|
7
5
|
/**
|
|
8
6
|
* A filter used to fetch notes.
|
|
9
7
|
* @remarks This filter is applied as an intersection of all its params.
|
|
@@ -22,5 +20,5 @@ export type NotesFilter = {
|
|
|
22
20
|
status?: NoteStatus;
|
|
23
21
|
/** The siloed nullifier for the note. */
|
|
24
22
|
siloedNullifier?: Fr;
|
|
25
|
-
scopes:
|
|
23
|
+
scopes: AztecAddress[];
|
|
26
24
|
};
|
package/src/oracle_version.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
/// The
|
|
2
|
-
///
|
|
3
|
-
///
|
|
1
|
+
/// The oracle version constants are used to check that the oracle interface is in sync between PXE and Aztec.nr.
|
|
2
|
+
/// We version the oracle interface as `major.minor` where:
|
|
3
|
+
/// - `major` = backward-breaking changes (must match exactly between PXE and Aztec.nr)
|
|
4
|
+
/// - `minor` = oracle additions (non-breaking; PXE minor >= contract minor)
|
|
4
5
|
///
|
|
5
|
-
///
|
|
6
|
-
///
|
|
7
|
-
|
|
6
|
+
/// The Noir counterparts are in `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
|
|
7
|
+
///
|
|
8
|
+
/// @dev Whenever a contract function or Noir test is run, the `aztec_utl_assertCompatibleOracleVersion` oracle is called.
|
|
9
|
+
/// If the major version is incompatible, an error is thrown immediately. The minor version is recorded by the PXE and
|
|
10
|
+
/// used to provide helpful error messages if a contract calls an oracle that doesn't exist. We don't throw immediately
|
|
11
|
+
/// if AZTEC_NR_MINOR > PXE_MINOR because if a contract is updated to use a newer Aztec.nr dependency without actually
|
|
12
|
+
/// using any of the new oracles then there is no reason to throw.
|
|
13
|
+
export const ORACLE_VERSION_MAJOR = 27;
|
|
14
|
+
export const ORACLE_VERSION_MINOR = 0;
|
|
8
15
|
|
|
9
|
-
/// This hash is computed
|
|
10
|
-
///
|
|
11
|
-
/// `
|
|
12
|
-
|
|
16
|
+
/// This hash is computed from the Oracle interface and is used to detect when that interface changes. When it does,
|
|
17
|
+
/// you need to either:
|
|
18
|
+
/// - increment `ORACLE_VERSION_MAJOR` and reset `ORACLE_VERSION_MINOR` to zero if the change is breaking, or
|
|
19
|
+
/// - increment only `ORACLE_VERSION_MINOR` if the change is additive (a new oracle was added).
|
|
20
|
+
///
|
|
21
|
+
/// These constants must be kept in sync between this file and `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
|
|
22
|
+
export const ORACLE_INTERFACE_HASH = '43383f5a2cf9b39908e86a3d733862b08d307c08fa58db681f8b08804042e550';
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { Serializable, Tuple } from '@aztec/foundation/serialize';
|
|
2
|
+
import {
|
|
3
|
+
ClaimedLengthArray,
|
|
4
|
+
PrivateAccumulatedData,
|
|
5
|
+
PrivateKernelCircuitPublicInputs,
|
|
6
|
+
PrivateValidationRequests,
|
|
7
|
+
ScopedKeyValidationRequestAndSeparator,
|
|
8
|
+
ScopedPrivateLogData,
|
|
9
|
+
} from '@aztec/stdlib/kernel';
|
|
10
|
+
import type { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
11
|
+
import { VerificationKeyData } from '@aztec/stdlib/vks';
|
|
12
|
+
|
|
13
|
+
import { PrivateKernelResetPrivateInputsBuilder } from './hints/private_kernel_reset_private_inputs_builder.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Decides how many apps from the top of the execution stack the next kernel iteration should
|
|
17
|
+
* absorb. The decision is made by keeping track of an app-by-app accumulator calling
|
|
18
|
+
* `PrivateKernelResetPrivateInputsBuilder.needsReset()` whether a reset would be required before
|
|
19
|
+
* taking each candidate.
|
|
20
|
+
*
|
|
21
|
+
* The K-batched kernels are mathematically equivalent to running K sequential `init`/`inner`
|
|
22
|
+
* iterations so a multi-app fit-check reduces to a sequence of single-app fit-checks against a rolling
|
|
23
|
+
* accumulator.
|
|
24
|
+
*/
|
|
25
|
+
export class BatchPlanner {
|
|
26
|
+
constructor(
|
|
27
|
+
private noteHashNullifierCounterMap: Map<number, number>,
|
|
28
|
+
private splitCounter: number,
|
|
29
|
+
private maxBatchSize: number,
|
|
30
|
+
) {}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Returns the number of apps from the top of `stack` that the next kernel iteration should
|
|
34
|
+
* batch. Always at least 1 — the caller is expected to have run any pending resets first, so
|
|
35
|
+
* the next single app must always fit.
|
|
36
|
+
*
|
|
37
|
+
* The walk mirrors `consumeNextApp`'s stack manipulation (pop top, push reversed nested
|
|
38
|
+
* children, then DFS into them) on a copy of the stack, so the planner can look ahead past
|
|
39
|
+
* the parent's children without mutating the real prover stack.
|
|
40
|
+
*/
|
|
41
|
+
decideBatchSize(currentAccumulator: PrivateKernelCircuitPublicInputs, stack: PrivateCallExecutionResult[]): number {
|
|
42
|
+
const virtualStack = [...stack];
|
|
43
|
+
let projected = currentAccumulator;
|
|
44
|
+
let chosen = 0;
|
|
45
|
+
for (let i = 0; i < this.maxBatchSize && virtualStack.length > 0; i++) {
|
|
46
|
+
const probe = new PrivateKernelResetPrivateInputsBuilder(
|
|
47
|
+
{
|
|
48
|
+
publicInputs: projected,
|
|
49
|
+
verificationKey: VerificationKeyData.empty(),
|
|
50
|
+
outputWitness: new Map(),
|
|
51
|
+
bytecode: Buffer.from([]),
|
|
52
|
+
},
|
|
53
|
+
virtualStack,
|
|
54
|
+
this.noteHashNullifierCounterMap,
|
|
55
|
+
this.splitCounter,
|
|
56
|
+
);
|
|
57
|
+
if (probe.needsReset()) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
// Speculatively consume the top of the virtual stack the same way `consumeNextApp` does
|
|
61
|
+
// on the real stack: pop the candidate, push its reversed nested children so the next
|
|
62
|
+
// iteration's top is the next DFS app.
|
|
63
|
+
const candidate = virtualStack.pop()!;
|
|
64
|
+
virtualStack.push(...[...candidate.nestedExecutionResults].reverse());
|
|
65
|
+
projected = appendApp(projected, candidate);
|
|
66
|
+
chosen++;
|
|
67
|
+
}
|
|
68
|
+
return Math.max(1, chosen);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Returns a new `PrivateKernelCircuitPublicInputs` representing the accumulator after one kernel
|
|
74
|
+
* iteration has absorbed `app`. Mirrors the kernel composer's accumulator-update step
|
|
75
|
+
* (`PrivateKernelCircuitOutputComposer::scope_and_propagate_from_private_call`) for the six
|
|
76
|
+
* fields that `PrivateKernelResetPrivateInputsBuilder.needsReset()` inspects:
|
|
77
|
+
*
|
|
78
|
+
* - `validationRequests.noteHashReadRequests` (already scoped per app; appended as-is)
|
|
79
|
+
* - `validationRequests.nullifierReadRequests` (already scoped per app; appended as-is)
|
|
80
|
+
* - `validationRequests.scopedKeyValidationRequestsAndSeparators` (scope with call's contract address)
|
|
81
|
+
* - `end.noteHashes` (scope)
|
|
82
|
+
* - `end.nullifiers` (scope)
|
|
83
|
+
* - `end.privateLogs` (scope)
|
|
84
|
+
*
|
|
85
|
+
* Other fields on `PrivateKernelCircuitPublicInputs` (constants, fee_payer, expiration_timestamp,
|
|
86
|
+
* public_call_requests, l2_to_l1_msgs, contract_class_logs_hashes, etc.) are not read by
|
|
87
|
+
* `needsReset()` and are carried over unchanged from `acc`.
|
|
88
|
+
*/
|
|
89
|
+
export function appendApp(
|
|
90
|
+
acc: PrivateKernelCircuitPublicInputs,
|
|
91
|
+
app: PrivateCallExecutionResult,
|
|
92
|
+
): PrivateKernelCircuitPublicInputs {
|
|
93
|
+
const ca = app.publicInputs.callContext.contractAddress;
|
|
94
|
+
const appPi = app.publicInputs;
|
|
95
|
+
|
|
96
|
+
const newNoteHashReadRequests = cloneClaimedLengthArray(acc.validationRequests.noteHashReadRequests);
|
|
97
|
+
pushAll(newNoteHashReadRequests, appPi.noteHashReadRequests.getActiveItems());
|
|
98
|
+
|
|
99
|
+
const newNullifierReadRequests = cloneClaimedLengthArray(acc.validationRequests.nullifierReadRequests);
|
|
100
|
+
pushAll(newNullifierReadRequests, appPi.nullifierReadRequests.getActiveItems());
|
|
101
|
+
|
|
102
|
+
const newScopedKvrs = cloneClaimedLengthArray(acc.validationRequests.scopedKeyValidationRequestsAndSeparators);
|
|
103
|
+
pushAll(
|
|
104
|
+
newScopedKvrs,
|
|
105
|
+
appPi.keyValidationRequestsAndSeparators
|
|
106
|
+
.getActiveItems()
|
|
107
|
+
.map(kvr => new ScopedKeyValidationRequestAndSeparator(kvr, ca)),
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
const newNoteHashes = cloneClaimedLengthArray(acc.end.noteHashes);
|
|
111
|
+
pushAll(
|
|
112
|
+
newNoteHashes,
|
|
113
|
+
appPi.noteHashes.getActiveItems().map(nh => nh.scope(ca)),
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
const newNullifiers = cloneClaimedLengthArray(acc.end.nullifiers);
|
|
117
|
+
pushAll(
|
|
118
|
+
newNullifiers,
|
|
119
|
+
appPi.nullifiers.getActiveItems().map(n => n.scope(ca)),
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
const newPrivateLogs = cloneClaimedLengthArray(acc.end.privateLogs);
|
|
123
|
+
pushAll(
|
|
124
|
+
newPrivateLogs,
|
|
125
|
+
appPi.privateLogs.getActiveItems().map(pl => new ScopedPrivateLogData(pl, ca)),
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
const validationRequests = new PrivateValidationRequests(
|
|
129
|
+
newNoteHashReadRequests,
|
|
130
|
+
newNullifierReadRequests,
|
|
131
|
+
newScopedKvrs,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
const end = new PrivateAccumulatedData(
|
|
135
|
+
newNoteHashes,
|
|
136
|
+
newNullifiers,
|
|
137
|
+
acc.end.l2ToL1Msgs,
|
|
138
|
+
newPrivateLogs,
|
|
139
|
+
acc.end.contractClassLogsHashes,
|
|
140
|
+
acc.end.publicCallRequests,
|
|
141
|
+
acc.end.privateCallStack,
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
return new PrivateKernelCircuitPublicInputs(
|
|
145
|
+
acc.constants,
|
|
146
|
+
acc.minRevertibleSideEffectCounter,
|
|
147
|
+
validationRequests,
|
|
148
|
+
end,
|
|
149
|
+
acc.publicTeardownCallRequest,
|
|
150
|
+
acc.feePayer,
|
|
151
|
+
acc.expirationTimestamp,
|
|
152
|
+
acc.isPrivateOnly,
|
|
153
|
+
acc.claimedFirstNullifier,
|
|
154
|
+
acc.claimedRevertibleCounter,
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function cloneClaimedLengthArray<T extends Serializable, N extends number>(
|
|
159
|
+
src: ClaimedLengthArray<T, N>,
|
|
160
|
+
): ClaimedLengthArray<T, N> {
|
|
161
|
+
return new ClaimedLengthArray([...src.array] as Tuple<T, N>, src.claimedLength);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function pushAll<T extends Serializable, N extends number>(arr: ClaimedLengthArray<T, N>, items: T[]) {
|
|
165
|
+
for (const item of items) {
|
|
166
|
+
arr.array[arr.claimedLength] = item;
|
|
167
|
+
arr.claimedLength++;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -68,7 +68,7 @@ async function getMasterSecretKeysAndKeyTypeDomainSeparators(
|
|
|
68
68
|
const numRequestsToProcess = Math.min(keyValidationRequests.claimedLength, numRequestsToVerify);
|
|
69
69
|
const keysHints = await Promise.all(
|
|
70
70
|
keyValidationRequests.array.slice(0, numRequestsToProcess).map(async ({ request }) => {
|
|
71
|
-
const secretKeys = await oracle.getMasterSecretKey(request.request.
|
|
71
|
+
const secretKeys = await oracle.getMasterSecretKey(request.request.pkMHash);
|
|
72
72
|
return new KeyValidationHint(secretKeys);
|
|
73
73
|
}),
|
|
74
74
|
);
|
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
} from '@aztec/constants';
|
|
15
15
|
import { makeTuple } from '@aztec/foundation/array';
|
|
16
16
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
17
|
-
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
18
17
|
import type { Serializable } from '@aztec/foundation/serialize';
|
|
19
18
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
20
19
|
import {
|
|
@@ -130,10 +129,7 @@ export class PrivateKernelCircuitPublicInputsBuilder {
|
|
|
130
129
|
const addr = opts?.contractAddress ?? this.contractAddress;
|
|
131
130
|
this.keyValidationRequests.push(
|
|
132
131
|
new ScopedKeyValidationRequestAndSeparator(
|
|
133
|
-
new KeyValidationRequestAndSeparator(
|
|
134
|
-
new KeyValidationRequest(new Point(Fr.random(), Fr.random(), false), Fr.random()),
|
|
135
|
-
Fr.random(),
|
|
136
|
-
),
|
|
132
|
+
new KeyValidationRequestAndSeparator(new KeyValidationRequest(Fr.random(), Fr.random()), Fr.random()),
|
|
137
133
|
addr,
|
|
138
134
|
),
|
|
139
135
|
);
|
|
@@ -253,10 +249,7 @@ export class PrivateCircuitPublicInputsBuilder {
|
|
|
253
249
|
/** Adds a key validation request. */
|
|
254
250
|
addKeyValidationRequest(): this {
|
|
255
251
|
this.keyValidationRequests.push(
|
|
256
|
-
new KeyValidationRequestAndSeparator(
|
|
257
|
-
new KeyValidationRequest(new Point(Fr.random(), Fr.random(), false), Fr.random()),
|
|
258
|
-
Fr.random(),
|
|
259
|
-
),
|
|
252
|
+
new KeyValidationRequestAndSeparator(new KeyValidationRequest(Fr.random(), Fr.random()), Fr.random()),
|
|
260
253
|
);
|
|
261
254
|
return this;
|
|
262
255
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { MAX_APPS_PER_KERNEL } from '@aztec/constants';
|
|
2
|
+
import { uniqueBy } from '@aztec/foundation/collection';
|
|
1
3
|
import { vkAsFieldsMegaHonk } from '@aztec/foundation/crypto/keys';
|
|
2
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
@@ -16,23 +18,31 @@ import {
|
|
|
16
18
|
PrivateKernelCircuitPublicInputs,
|
|
17
19
|
PrivateKernelData,
|
|
18
20
|
type PrivateKernelExecutionProofOutput,
|
|
21
|
+
PrivateKernelInit2CircuitPrivateInputs,
|
|
22
|
+
PrivateKernelInit3CircuitPrivateInputs,
|
|
19
23
|
PrivateKernelInitCircuitPrivateInputs,
|
|
24
|
+
PrivateKernelInner2CircuitPrivateInputs,
|
|
25
|
+
PrivateKernelInner3CircuitPrivateInputs,
|
|
20
26
|
PrivateKernelInnerCircuitPrivateInputs,
|
|
21
27
|
type PrivateKernelSimulateOutput,
|
|
22
28
|
PrivateKernelTailCircuitPrivateInputs,
|
|
23
29
|
type PrivateKernelTailCircuitPublicInputs,
|
|
24
30
|
PrivateVerificationKeyHints,
|
|
31
|
+
type UpdatedClassIdHints,
|
|
25
32
|
} from '@aztec/stdlib/kernel';
|
|
26
33
|
import { ChonkProof, ChonkProofWithPublicInputs } from '@aztec/stdlib/proofs';
|
|
27
34
|
import {
|
|
28
35
|
type PrivateCallExecutionResult,
|
|
29
36
|
type PrivateExecutionResult,
|
|
30
37
|
TxRequest,
|
|
38
|
+
collectNested,
|
|
31
39
|
collectNoteHashNullifierCounterMap,
|
|
32
40
|
getFinalMinRevertibleSideEffectCounter,
|
|
33
41
|
} from '@aztec/stdlib/tx';
|
|
34
42
|
import { VerificationKeyAsFields, VerificationKeyData, VkData } from '@aztec/stdlib/vks';
|
|
35
43
|
|
|
44
|
+
import { BatchPlanner } from './batch_planner.js';
|
|
45
|
+
import { computeTxExpirationTimestamp } from './hints/compute_tx_expiration_timestamp.js';
|
|
36
46
|
import { PrivateKernelResetPrivateInputsBuilder } from './hints/private_kernel_reset_private_inputs_builder.js';
|
|
37
47
|
import type { PrivateKernelOracle } from './private_kernel_oracle.js';
|
|
38
48
|
|
|
@@ -63,6 +73,7 @@ export class PrivateKernelExecutionProver {
|
|
|
63
73
|
private proofCreator: PrivateKernelProver,
|
|
64
74
|
private fakeProofs = false,
|
|
65
75
|
bindings?: LoggerBindings,
|
|
76
|
+
private maxBatchSize: number = MAX_APPS_PER_KERNEL,
|
|
66
77
|
) {
|
|
67
78
|
this.log = createLogger('pxe:private-kernel-execution-prover', bindings);
|
|
68
79
|
}
|
|
@@ -107,6 +118,13 @@ export class PrivateKernelExecutionProver {
|
|
|
107
118
|
const minRevertibleSideEffectCounter = getFinalMinRevertibleSideEffectCounter(executionResult);
|
|
108
119
|
const splitCounter = isPrivateOnlyTx ? 0 : minRevertibleSideEffectCounter;
|
|
109
120
|
|
|
121
|
+
// Each kernel iteration absorbs up to `maxBatchSize` apps. The planner walks the upcoming
|
|
122
|
+
// apps and decides where the next reset must fall by using an accumulator and
|
|
123
|
+
// reusing the existing single-app `needsReset()` check.
|
|
124
|
+
const planner = new BatchPlanner(noteHashNullifierCounterMap, splitCounter, this.maxBatchSize);
|
|
125
|
+
|
|
126
|
+
const updatedClassIdHintsMap = await this.prefetchUpdatedClassIdHints(executionResult);
|
|
127
|
+
|
|
110
128
|
while (executionStack.length) {
|
|
111
129
|
if (!firstIteration) {
|
|
112
130
|
let resetBuilder = new PrivateKernelResetPrivateInputsBuilder(
|
|
@@ -140,80 +158,24 @@ export class PrivateKernelExecutionProver {
|
|
|
140
158
|
}
|
|
141
159
|
}
|
|
142
160
|
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
currentExecution.publicInputs.callContext.contractAddress,
|
|
149
|
-
currentExecution.publicInputs.callContext.functionSelector,
|
|
150
|
-
);
|
|
161
|
+
const batchSize = planner.decideBatchSize(output.publicInputs, executionStack);
|
|
162
|
+
const apps: PrivateCallData[] = [];
|
|
163
|
+
for (let i = 0; i < batchSize; i++) {
|
|
164
|
+
apps.push(await this.consumeNextApp(executionStack, executionSteps, updatedClassIdHintsMap));
|
|
165
|
+
}
|
|
151
166
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
output = await this.runBatchedKernel({
|
|
168
|
+
apps,
|
|
169
|
+
firstIteration,
|
|
170
|
+
previousOutput: output,
|
|
171
|
+
txRequest,
|
|
172
|
+
isPrivateOnlyTx,
|
|
173
|
+
firstNullifierHint: executionResult.firstNullifier,
|
|
174
|
+
minRevertibleSideEffectCounter,
|
|
175
|
+
executionSteps,
|
|
176
|
+
generateWitnesses,
|
|
161
177
|
});
|
|
162
178
|
|
|
163
|
-
const privateCallData = await this.createPrivateCallData(currentExecution);
|
|
164
|
-
|
|
165
|
-
if (firstIteration) {
|
|
166
|
-
const witgenTimer = new Timer();
|
|
167
|
-
|
|
168
|
-
const proofInput = new PrivateKernelInitCircuitPrivateInputs(
|
|
169
|
-
txRequest,
|
|
170
|
-
getVKTreeRoot(),
|
|
171
|
-
ProtocolContractsList,
|
|
172
|
-
privateCallData,
|
|
173
|
-
isPrivateOnlyTx,
|
|
174
|
-
executionResult.firstNullifier,
|
|
175
|
-
minRevertibleSideEffectCounter,
|
|
176
|
-
);
|
|
177
|
-
this.log.debug(
|
|
178
|
-
`Calling private kernel init with isPrivateOnly ${isPrivateOnlyTx} and firstNullifierHint ${proofInput.firstNullifierHint}`,
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
pushTestData('private-kernel-inputs-init', proofInput);
|
|
182
|
-
|
|
183
|
-
output = generateWitnesses
|
|
184
|
-
? await this.proofCreator.generateInitOutput(proofInput)
|
|
185
|
-
: await this.proofCreator.simulateInit(proofInput);
|
|
186
|
-
|
|
187
|
-
executionSteps.push({
|
|
188
|
-
functionName: 'private_kernel_init',
|
|
189
|
-
bytecode: output.bytecode,
|
|
190
|
-
witness: output.outputWitness,
|
|
191
|
-
vk: output.verificationKey.keyAsBytes,
|
|
192
|
-
timings: {
|
|
193
|
-
witgen: witgenTimer.ms(),
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
} else {
|
|
197
|
-
const witgenTimer = new Timer();
|
|
198
|
-
const vkData = await this.getVkData(output.verificationKey);
|
|
199
|
-
const previousKernelData = new PrivateKernelData(output.publicInputs, vkData);
|
|
200
|
-
const proofInput = new PrivateKernelInnerCircuitPrivateInputs(previousKernelData, privateCallData);
|
|
201
|
-
|
|
202
|
-
pushTestData('private-kernel-inputs-inner', proofInput);
|
|
203
|
-
output = generateWitnesses
|
|
204
|
-
? await this.proofCreator.generateInnerOutput(proofInput)
|
|
205
|
-
: await this.proofCreator.simulateInner(proofInput);
|
|
206
|
-
|
|
207
|
-
executionSteps.push({
|
|
208
|
-
functionName: 'private_kernel_inner',
|
|
209
|
-
bytecode: output.bytecode,
|
|
210
|
-
witness: output.outputWitness,
|
|
211
|
-
vk: output.verificationKey.keyAsBytes,
|
|
212
|
-
timings: {
|
|
213
|
-
witgen: witgenTimer.ms(),
|
|
214
|
-
},
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
179
|
firstIteration = false;
|
|
218
180
|
}
|
|
219
181
|
|
|
@@ -267,15 +229,9 @@ export class PrivateKernelExecutionProver {
|
|
|
267
229
|
// TODO: Enable padding once we better understand the final amounts to pad to.
|
|
268
230
|
const paddedSideEffectAmounts = PaddedSideEffectAmounts.empty();
|
|
269
231
|
|
|
270
|
-
//
|
|
271
|
-
//
|
|
272
|
-
const expirationTimestampUpperBound = previousKernelData.publicInputs
|
|
273
|
-
const anchorBlockTimestamp = previousKernelData.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp;
|
|
274
|
-
if (expirationTimestampUpperBound <= anchorBlockTimestamp) {
|
|
275
|
-
throw new Error(
|
|
276
|
-
`Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${expirationTimestampUpperBound}.`,
|
|
277
|
-
);
|
|
278
|
-
}
|
|
232
|
+
// Round the aggregated expirationTimestamp down to reduce precision and avoid leaking which private
|
|
233
|
+
// functions were called via their exact expiration offsets.
|
|
234
|
+
const expirationTimestampUpperBound = computeTxExpirationTimestamp(previousKernelData.publicInputs);
|
|
279
235
|
|
|
280
236
|
const privateInputs = new PrivateKernelTailCircuitPrivateInputs(
|
|
281
237
|
previousKernelData,
|
|
@@ -406,7 +362,60 @@ export class PrivateKernelExecutionProver {
|
|
|
406
362
|
);
|
|
407
363
|
}
|
|
408
364
|
|
|
409
|
-
|
|
365
|
+
/**
|
|
366
|
+
* Pops the next app off the execution stack, pushes its nested calls back on (preserving DFS
|
|
367
|
+
* order), records the app's execution step, and returns its constructed `PrivateCallData`.
|
|
368
|
+
* Caller is responsible for ensuring the stack is non-empty.
|
|
369
|
+
*/
|
|
370
|
+
private async consumeNextApp(
|
|
371
|
+
executionStack: PrivateCallExecutionResult[],
|
|
372
|
+
executionSteps: PrivateExecutionStep[],
|
|
373
|
+
updatedClassIdHintsMap: Map<string, UpdatedClassIdHints>,
|
|
374
|
+
): Promise<PrivateCallData> {
|
|
375
|
+
const next = executionStack.pop()!;
|
|
376
|
+
executionStack.push(...[...next.nestedExecutionResults].reverse());
|
|
377
|
+
|
|
378
|
+
const functionName = await this.oracle.getDebugFunctionName(
|
|
379
|
+
next.publicInputs.callContext.contractAddress,
|
|
380
|
+
next.publicInputs.callContext.functionSelector,
|
|
381
|
+
);
|
|
382
|
+
|
|
383
|
+
executionSteps.push({
|
|
384
|
+
functionName: functionName!,
|
|
385
|
+
bytecode: next.acir,
|
|
386
|
+
witness: next.partialWitness,
|
|
387
|
+
vk: next.vk,
|
|
388
|
+
timings: {
|
|
389
|
+
witgen: next.profileResult?.timings.witgen ?? 0,
|
|
390
|
+
oracles: next.profileResult?.timings.oracles,
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
return await this.createPrivateCallData(next, updatedClassIdHintsMap);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/** Prefetches updated class id hints for all unique contracts in the execution tree in parallel. */
|
|
398
|
+
private async prefetchUpdatedClassIdHints(
|
|
399
|
+
executionResult: PrivateExecutionResult,
|
|
400
|
+
): Promise<Map<string, UpdatedClassIdHints>> {
|
|
401
|
+
const allAddresses = collectNested([executionResult.entrypoint], exec => [
|
|
402
|
+
exec.publicInputs.callContext.contractAddress,
|
|
403
|
+
]);
|
|
404
|
+
const uniqueAddresses = uniqueBy(allAddresses, a => a.toString());
|
|
405
|
+
return new Map<string, UpdatedClassIdHints>(
|
|
406
|
+
await Promise.all(
|
|
407
|
+
uniqueAddresses.map(
|
|
408
|
+
async addr =>
|
|
409
|
+
[addr.toString(), await this.oracle.getUpdatedClassIdHints(addr)] as [string, UpdatedClassIdHints],
|
|
410
|
+
),
|
|
411
|
+
),
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
private async createPrivateCallData(
|
|
416
|
+
{ publicInputs, vk: vkAsBuffer }: PrivateCallExecutionResult,
|
|
417
|
+
updatedClassIdHintsMap: Map<string, UpdatedClassIdHints>,
|
|
418
|
+
) {
|
|
410
419
|
const { contractAddress, functionSelector } = publicInputs.callContext;
|
|
411
420
|
|
|
412
421
|
const vkAsFields = await vkAsFieldsMegaHonk(vkAsBuffer);
|
|
@@ -422,7 +431,7 @@ export class PrivateKernelExecutionProver {
|
|
|
422
431
|
const { artifactHash: contractClassArtifactHash, publicBytecodeCommitment: contractClassPublicBytecodeCommitment } =
|
|
423
432
|
await this.oracle.getContractClassIdPreimage(currentContractClassId);
|
|
424
433
|
|
|
425
|
-
const updatedClassIdHints =
|
|
434
|
+
const updatedClassIdHints = updatedClassIdHintsMap.get(contractAddress.toString())!;
|
|
426
435
|
|
|
427
436
|
return PrivateCallData.from({
|
|
428
437
|
publicInputs,
|
|
@@ -437,4 +446,153 @@ export class PrivateKernelExecutionProver {
|
|
|
437
446
|
}),
|
|
438
447
|
});
|
|
439
448
|
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Runs one batched kernel iteration. Picks the right circuit variant based on whether this is
|
|
452
|
+
* the first iteration or a later one and the size of the batch.
|
|
453
|
+
*/
|
|
454
|
+
private async runBatchedKernel(args: {
|
|
455
|
+
apps: PrivateCallData[];
|
|
456
|
+
firstIteration: boolean;
|
|
457
|
+
previousOutput: PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>;
|
|
458
|
+
txRequest: TxRequest;
|
|
459
|
+
isPrivateOnlyTx: boolean;
|
|
460
|
+
firstNullifierHint: Fr;
|
|
461
|
+
minRevertibleSideEffectCounter: number;
|
|
462
|
+
executionSteps: PrivateExecutionStep[];
|
|
463
|
+
generateWitnesses: boolean;
|
|
464
|
+
}): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>> {
|
|
465
|
+
const {
|
|
466
|
+
apps,
|
|
467
|
+
firstIteration,
|
|
468
|
+
previousOutput,
|
|
469
|
+
txRequest,
|
|
470
|
+
isPrivateOnlyTx,
|
|
471
|
+
firstNullifierHint,
|
|
472
|
+
minRevertibleSideEffectCounter,
|
|
473
|
+
executionSteps,
|
|
474
|
+
generateWitnesses,
|
|
475
|
+
} = args;
|
|
476
|
+
|
|
477
|
+
const witgenTimer = new Timer();
|
|
478
|
+
let output: PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>;
|
|
479
|
+
let functionName: string;
|
|
480
|
+
|
|
481
|
+
if (firstIteration) {
|
|
482
|
+
const vkTreeRoot = getVKTreeRoot();
|
|
483
|
+
switch (apps.length) {
|
|
484
|
+
case 1: {
|
|
485
|
+
const proofInput = new PrivateKernelInitCircuitPrivateInputs(
|
|
486
|
+
txRequest,
|
|
487
|
+
vkTreeRoot,
|
|
488
|
+
ProtocolContractsList,
|
|
489
|
+
apps[0],
|
|
490
|
+
isPrivateOnlyTx,
|
|
491
|
+
firstNullifierHint,
|
|
492
|
+
minRevertibleSideEffectCounter,
|
|
493
|
+
);
|
|
494
|
+
this.log.debug(
|
|
495
|
+
`Calling private kernel init with isPrivateOnly ${isPrivateOnlyTx} and firstNullifierHint ${proofInput.firstNullifierHint}`,
|
|
496
|
+
);
|
|
497
|
+
pushTestData('private-kernel-inputs-init', proofInput);
|
|
498
|
+
output = generateWitnesses
|
|
499
|
+
? await this.proofCreator.generateInitOutput(proofInput)
|
|
500
|
+
: await this.proofCreator.simulateInit(proofInput);
|
|
501
|
+
functionName = 'private_kernel_init';
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
504
|
+
case 2: {
|
|
505
|
+
const proofInput = new PrivateKernelInit2CircuitPrivateInputs(
|
|
506
|
+
txRequest,
|
|
507
|
+
vkTreeRoot,
|
|
508
|
+
ProtocolContractsList,
|
|
509
|
+
apps[0],
|
|
510
|
+
apps[1],
|
|
511
|
+
isPrivateOnlyTx,
|
|
512
|
+
firstNullifierHint,
|
|
513
|
+
minRevertibleSideEffectCounter,
|
|
514
|
+
);
|
|
515
|
+
this.log.debug(
|
|
516
|
+
`Calling private kernel init_2 with isPrivateOnly ${isPrivateOnlyTx} and firstNullifierHint ${proofInput.firstNullifierHint}`,
|
|
517
|
+
);
|
|
518
|
+
pushTestData('private-kernel-inputs-init-2', proofInput);
|
|
519
|
+
output = generateWitnesses
|
|
520
|
+
? await this.proofCreator.generateInit2Output(proofInput)
|
|
521
|
+
: await this.proofCreator.simulateInit2(proofInput);
|
|
522
|
+
functionName = 'private_kernel_init_2';
|
|
523
|
+
break;
|
|
524
|
+
}
|
|
525
|
+
case 3: {
|
|
526
|
+
const proofInput = new PrivateKernelInit3CircuitPrivateInputs(
|
|
527
|
+
txRequest,
|
|
528
|
+
vkTreeRoot,
|
|
529
|
+
ProtocolContractsList,
|
|
530
|
+
apps[0],
|
|
531
|
+
apps[1],
|
|
532
|
+
apps[2],
|
|
533
|
+
isPrivateOnlyTx,
|
|
534
|
+
firstNullifierHint,
|
|
535
|
+
minRevertibleSideEffectCounter,
|
|
536
|
+
);
|
|
537
|
+
this.log.debug(
|
|
538
|
+
`Calling private kernel init_3 with isPrivateOnly ${isPrivateOnlyTx} and firstNullifierHint ${proofInput.firstNullifierHint}`,
|
|
539
|
+
);
|
|
540
|
+
pushTestData('private-kernel-inputs-init-3', proofInput);
|
|
541
|
+
output = generateWitnesses
|
|
542
|
+
? await this.proofCreator.generateInit3Output(proofInput)
|
|
543
|
+
: await this.proofCreator.simulateInit3(proofInput);
|
|
544
|
+
functionName = 'private_kernel_init_3';
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
default:
|
|
548
|
+
throw new Error(`Unsupported init kernel batch size: ${apps.length}`);
|
|
549
|
+
}
|
|
550
|
+
} else {
|
|
551
|
+
const vkData = await this.getVkData(previousOutput.verificationKey);
|
|
552
|
+
const previousKernelData = new PrivateKernelData(previousOutput.publicInputs, vkData);
|
|
553
|
+
switch (apps.length) {
|
|
554
|
+
case 1: {
|
|
555
|
+
const proofInput = new PrivateKernelInnerCircuitPrivateInputs(previousKernelData, apps[0]);
|
|
556
|
+
pushTestData('private-kernel-inputs-inner', proofInput);
|
|
557
|
+
output = generateWitnesses
|
|
558
|
+
? await this.proofCreator.generateInnerOutput(proofInput)
|
|
559
|
+
: await this.proofCreator.simulateInner(proofInput);
|
|
560
|
+
functionName = 'private_kernel_inner';
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
563
|
+
case 2: {
|
|
564
|
+
const proofInput = new PrivateKernelInner2CircuitPrivateInputs(previousKernelData, apps[0], apps[1]);
|
|
565
|
+
pushTestData('private-kernel-inputs-inner-2', proofInput);
|
|
566
|
+
output = generateWitnesses
|
|
567
|
+
? await this.proofCreator.generateInner2Output(proofInput)
|
|
568
|
+
: await this.proofCreator.simulateInner2(proofInput);
|
|
569
|
+
functionName = 'private_kernel_inner_2';
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
case 3: {
|
|
573
|
+
const proofInput = new PrivateKernelInner3CircuitPrivateInputs(previousKernelData, apps[0], apps[1], apps[2]);
|
|
574
|
+
pushTestData('private-kernel-inputs-inner-3', proofInput);
|
|
575
|
+
output = generateWitnesses
|
|
576
|
+
? await this.proofCreator.generateInner3Output(proofInput)
|
|
577
|
+
: await this.proofCreator.simulateInner3(proofInput);
|
|
578
|
+
functionName = 'private_kernel_inner_3';
|
|
579
|
+
break;
|
|
580
|
+
}
|
|
581
|
+
default:
|
|
582
|
+
throw new Error(`Unsupported inner kernel batch size: ${apps.length}`);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
executionSteps.push({
|
|
587
|
+
functionName,
|
|
588
|
+
bytecode: output.bytecode,
|
|
589
|
+
witness: output.outputWitness,
|
|
590
|
+
vk: output.verificationKey.keyAsBytes,
|
|
591
|
+
timings: {
|
|
592
|
+
witgen: witgenTimer.ms(),
|
|
593
|
+
},
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
return output;
|
|
597
|
+
}
|
|
440
598
|
}
|