@aztec/pxe 0.0.1-commit.7d4e6cd → 0.0.1-commit.8227e42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +11 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +72 -21
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +57 -35
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +198 -84
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +2 -2
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +17 -13
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +12 -10
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +67 -44
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +44 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +82 -25
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +66 -33
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +130 -111
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +43 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -17
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -7
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +22 -8
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +5 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -9
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +8 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +28 -30
- package/dest/notes/note_service.d.ts +10 -9
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +34 -38
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +3 -3
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +2 -2
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +140 -73
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +22 -14
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -24
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +94 -2
- package/dest/pxe.d.ts +75 -58
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +124 -132
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- package/dest/storage/contract_store/contract_store.d.ts +42 -16
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +157 -84
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +50 -51
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +284 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +15 -8
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -9
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +60 -0
- package/dest/tagging/index.d.ts +2 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +10 -10
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +7 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -2
- 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 +10 -5
- package/package.json +27 -18
- package/src/access_scopes.ts +9 -0
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +91 -33
- package/src/config/index.ts +14 -0
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +349 -148
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +2 -2
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +22 -12
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +79 -47
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +118 -104
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +197 -116
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +63 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +16 -15
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +4 -0
- package/src/entrypoints/server/utils.ts +22 -26
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +40 -34
- package/src/notes/note_service.ts +41 -45
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +2 -2
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +195 -136
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +26 -16
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +235 -209
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/contract_store/contract_store.ts +186 -96
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +326 -320
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
- package/src/tagging/get_all_logs_by_tags.ts +92 -0
- package/src/tagging/index.ts +1 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +20 -9
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +16 -4
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
package/dest/oracle_version.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
///
|
|
5
5
|
/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called
|
|
6
6
|
/// and if the oracle version is incompatible an error is thrown.
|
|
7
|
-
export const ORACLE_VERSION =
|
|
7
|
+
export const ORACLE_VERSION = 12;
|
|
8
8
|
/// This hash is computed as by hashing the Oracle interface and it is used to detect when the Oracle interface changes,
|
|
9
|
-
/// which in turn implies that you need to update the ORACLE_VERSION constant
|
|
10
|
-
|
|
9
|
+
/// which in turn implies that you need to update the ORACLE_VERSION constant in this file and in
|
|
10
|
+
/// `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
|
|
11
|
+
export const ORACLE_INTERFACE_HASH = '666a8a7fc697f72b29dbf0ae7464db269cf5afa019acac8861f814543147dbb4';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PrivateKernelCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
2
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
3
|
+
export declare function computeTxExpirationTimestamp(previousKernel: PrivateKernelCircuitPublicInputs, txLifetime?: number): UInt64;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZV90eF9leHBpcmF0aW9uX3RpbWVzdGFtcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ByaXZhdGVfa2VybmVsL2hpbnRzL2NvbXB1dGVfdHhfZXhwaXJhdGlvbl90aW1lc3RhbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQXFCbEQsd0JBQWdCLDRCQUE0QixDQUMxQyxjQUFjLEVBQUUsZ0NBQWdDLEVBQ2hELFVBQVUsU0FBa0IsR0FDM0IsTUFBTSxDQStCUiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute_tx_expiration_timestamp.d.ts","sourceRoot":"","sources":["../../../src/private_kernel/hints/compute_tx_expiration_timestamp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAqBlD,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,gCAAgC,EAChD,UAAU,SAAkB,GAC3B,MAAM,CA+BR"}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MAX_TX_LIFETIME } from '@aztec/constants';
|
|
2
2
|
const ROUNDED_DURATIONS = [
|
|
3
3
|
3600,
|
|
4
4
|
1800,
|
|
5
5
|
1
|
|
6
6
|
];
|
|
7
|
-
function roundTimestamp(blockTimestamp,
|
|
7
|
+
function roundTimestamp(blockTimestamp, expirationTimestamp) {
|
|
8
8
|
return ROUNDED_DURATIONS.reduce((timestamp, duration)=>{
|
|
9
9
|
if (timestamp <= blockTimestamp) {
|
|
10
10
|
// The timestamp must be greater than the block timestamp.
|
|
11
11
|
// If it is too small, round it down again using a smaller duration.
|
|
12
|
-
const totalDuration =
|
|
12
|
+
const totalDuration = expirationTimestamp - blockTimestamp;
|
|
13
13
|
const roundedDuration = totalDuration - totalDuration % BigInt(duration);
|
|
14
14
|
return blockTimestamp + roundedDuration;
|
|
15
15
|
}
|
|
16
16
|
return timestamp;
|
|
17
17
|
}, 0n);
|
|
18
18
|
}
|
|
19
|
-
export function
|
|
20
|
-
if (
|
|
21
|
-
throw new Error(`Custom
|
|
19
|
+
export function computeTxExpirationTimestamp(previousKernel, txLifetime = MAX_TX_LIFETIME) {
|
|
20
|
+
if (txLifetime > MAX_TX_LIFETIME) {
|
|
21
|
+
throw new Error(`Custom tx lifetime cannot be greater than the max allowed. Max allowed: ${MAX_TX_LIFETIME}. Custom value: ${txLifetime}.`);
|
|
22
22
|
}
|
|
23
23
|
const anchorBlockTimestamp = previousKernel.constants.anchorBlockHeader.globalVariables.timestamp;
|
|
24
|
-
const maxTimestamp = anchorBlockTimestamp + BigInt(
|
|
25
|
-
const
|
|
26
|
-
// If the
|
|
24
|
+
const maxTimestamp = anchorBlockTimestamp + BigInt(txLifetime);
|
|
25
|
+
const expirationTimestamp = previousKernel.expirationTimestamp;
|
|
26
|
+
// If the expirationTimestamp set during the tx execution is greater than or equal to the max allowed duration,
|
|
27
27
|
// use the maximum allowed timestamp.
|
|
28
28
|
// Note: It shouldn't be larger than the max allowed duration, but we check for it anyway.
|
|
29
|
-
if (
|
|
29
|
+
if (expirationTimestamp >= maxTimestamp) {
|
|
30
30
|
return maxTimestamp;
|
|
31
31
|
}
|
|
32
32
|
// Round it down to the nearest hour/min/second to reduce precision and avoid revealing the exact value.
|
|
33
33
|
// This makes it harder for others to infer what function calls may have been used to produce a specific timestamp.
|
|
34
|
-
const roundedTimestamp = roundTimestamp(anchorBlockTimestamp,
|
|
34
|
+
const roundedTimestamp = roundTimestamp(anchorBlockTimestamp, expirationTimestamp);
|
|
35
35
|
// The tx can't be published if the timestamp is the same or less than the anchor block's timestamp.
|
|
36
36
|
// Future blocks will have a greater timestamp, so the tx would never be included.
|
|
37
37
|
if (roundedTimestamp <= anchorBlockTimestamp) {
|
|
38
|
-
throw new Error(`Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${
|
|
38
|
+
throw new Error(`Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${expirationTimestamp}.`);
|
|
39
39
|
}
|
|
40
40
|
return roundedTimestamp;
|
|
41
41
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './private_kernel_reset_private_inputs_builder.js';
|
|
2
|
+
export * from './compute_tx_expiration_timestamp.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcml2YXRlX2tlcm5lbC9oaW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsc0NBQXNDLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/private_kernel/hints/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/private_kernel/hints/index.ts"],"names":[],"mappings":"AAAA,cAAc,kDAAkD,CAAC;AACjE,cAAc,sCAAsC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
1
|
+
export * from './private_kernel_reset_private_inputs_builder.js';
|
|
2
|
+
export * from './compute_tx_expiration_timestamp.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type PrivateKernelCircuitPublicInputs, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetDimensions, type PrivateKernelSimulateOutput } from '@aztec/stdlib/kernel';
|
|
2
|
+
import { type PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
3
|
+
import type { PrivateKernelOracle } from '../private_kernel_oracle.js';
|
|
4
|
+
export declare class PrivateKernelResetPrivateInputsBuilder {
|
|
5
|
+
private previousKernelOutput;
|
|
6
|
+
private executionStack;
|
|
7
|
+
private noteHashNullifierCounterMap;
|
|
8
|
+
private splitCounter;
|
|
9
|
+
private previousKernel;
|
|
10
|
+
private nextIteration?;
|
|
11
|
+
private noteHashResetActions;
|
|
12
|
+
private nullifierResetActions;
|
|
13
|
+
private numTransientData?;
|
|
14
|
+
private transientDataSquashingHints;
|
|
15
|
+
private requestedDimensions;
|
|
16
|
+
constructor(previousKernelOutput: PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>, executionStack: PrivateCallExecutionResult[], noteHashNullifierCounterMap: Map<number, number>, splitCounter: number);
|
|
17
|
+
getRequestedDimensions(): PrivateKernelResetDimensions;
|
|
18
|
+
needsReset(): boolean;
|
|
19
|
+
build(oracle: PrivateKernelOracle): Promise<PrivateKernelResetCircuitPrivateInputs>;
|
|
20
|
+
private reduceReadRequestActions;
|
|
21
|
+
private needsResetNoteHashReadRequests;
|
|
22
|
+
private needsResetNullifierReadRequests;
|
|
23
|
+
private needsResetKeyValidationRequests;
|
|
24
|
+
private needsResetTransientData;
|
|
25
|
+
private needsSiloNoteHashes;
|
|
26
|
+
private needsSiloNullifiers;
|
|
27
|
+
private needsSiloPrivateLogs;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9rZXJuZWxfcmVzZXRfcHJpdmF0ZV9pbnB1dHNfYnVpbGRlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ByaXZhdGVfa2VybmVsL2hpbnRzL3ByaXZhdGVfa2VybmVsX3Jlc2V0X3ByaXZhdGVfaW5wdXRzX2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxFQUtMLEtBQUssZ0NBQWdDLEVBRXJDLHNDQUFzQyxFQUN0Qyw0QkFBNEIsRUFFNUIsS0FBSywyQkFBMkIsRUFhakMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSywwQkFBMEIsRUFBaUIsTUFBTSxrQkFBa0IsQ0FBQztBQUdsRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBbUN2RSxxQkFBYSxzQ0FBc0M7SUFlL0MsT0FBTyxDQUFDLG9CQUFvQjtJQUM1QixPQUFPLENBQUMsY0FBYztJQUN0QixPQUFPLENBQUMsMkJBQTJCO0lBQ25DLE9BQU8sQ0FBQyxZQUFZO0lBakJ0QixPQUFPLENBQUMsY0FBYyxDQUFtQztJQUV6RCxPQUFPLENBQUMsYUFBYSxDQUFDLENBQTZCO0lBRW5ELE9BQU8sQ0FBQyxvQkFBb0IsQ0FBcUU7SUFDakcsT0FBTyxDQUFDLHFCQUFxQixDQUFxRTtJQUNsRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBUztJQUNsQyxPQUFPLENBQUMsMkJBQTJCLENBR2pDO0lBQ0YsT0FBTyxDQUFDLG1CQUFtQixDQUF3QztJQUVuRSxZQUNVLG9CQUFvQixFQUFFLDJCQUEyQixDQUFDLGdDQUFnQyxDQUFDLEVBQ25GLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxFQUM1QywyQkFBMkIsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUNoRCxZQUFZLEVBQUUsTUFBTSxFQUk3QjtJQUVELHNCQUFzQixJQUFJLDRCQUE0QixDQUVyRDtJQUVELFVBQVUsSUFBSSxPQUFPLENBc0JwQjtJQUVLLEtBQUssQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLG1EQThFdEM7SUFFRCxPQUFPLENBQUMsd0JBQXdCO0lBMkJoQyxPQUFPLENBQUMsOEJBQThCO0lBMEV0QyxPQUFPLENBQUMsK0JBQStCO0lBeUV2QyxPQUFPLENBQUMsK0JBQStCO0lBYXZDLE9BQU8sQ0FBQyx1QkFBdUI7SUEwRi9CLE9BQU8sQ0FBQyxtQkFBbUI7SUFpQjNCLE9BQU8sQ0FBQyxtQkFBbUI7SUFpQjNCLE9BQU8sQ0FBQyxvQkFBb0I7Q0FxQjdCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private_kernel_reset_private_inputs_builder.d.ts","sourceRoot":"","sources":["../../../src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts"],"names":[],"mappings":"AAeA,OAAO,EAKL,KAAK,gCAAgC,EAErC,sCAAsC,EACtC,4BAA4B,EAE5B,KAAK,2BAA2B,EAajC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,0BAA0B,EAAiB,MAAM,kBAAkB,CAAC;AAGlF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAmCvE,qBAAa,sCAAsC;IAe/C,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,2BAA2B;IACnC,OAAO,CAAC,YAAY;IAjBtB,OAAO,CAAC,cAAc,CAAmC;IAEzD,OAAO,CAAC,aAAa,CAAC,CAA6B;IAEnD,OAAO,CAAC,oBAAoB,CAAqE;IACjG,OAAO,CAAC,qBAAqB,CAAqE;IAClG,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,2BAA2B,CAGjC;IACF,OAAO,CAAC,mBAAmB,CAAwC;IAEnE,YACU,oBAAoB,EAAE,2BAA2B,CAAC,gCAAgC,CAAC,EACnF,cAAc,EAAE,0BAA0B,EAAE,EAC5C,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChD,YAAY,EAAE,MAAM,EAI7B;IAED,sBAAsB,IAAI,4BAA4B,CAErD;IAED,UAAU,IAAI,OAAO,CAsBpB;IAEK,KAAK,CAAC,MAAM,EAAE,mBAAmB,mDA8EtC;IAED,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,8BAA8B;IA0EtC,OAAO,CAAC,+BAA+B;IAyEvC,OAAO,CAAC,+BAA+B;IAavC,OAAO,CAAC,uBAAuB;IA0F/B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,oBAAoB;CAqB7B"}
|
|
@@ -4,14 +4,9 @@ import { padArrayEnd } from '@aztec/foundation/collection';
|
|
|
4
4
|
import { assertLength } from '@aztec/foundation/serialize';
|
|
5
5
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
6
6
|
import { privateKernelResetDimensionsConfig } from '@aztec/noir-protocol-circuits-types/client';
|
|
7
|
-
import { KeyValidationHint, PaddedSideEffects, PrivateKernelData, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetDimensions, PrivateKernelResetHints, ReadRequestActionEnum, ReadRequestResetActions,
|
|
7
|
+
import { KeyValidationHint, PaddedSideEffects, PrivateKernelData, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetDimensions, PrivateKernelResetHints, ReadRequestActionEnum, ReadRequestResetActions, TransientDataSquashingHint, buildNoteHashReadRequestHintsFromResetActions, buildNullifierReadRequestHintsFromResetActions, buildTransientDataHints, countSquashedLogs, findPrivateKernelResetDimensions, getNoteHashReadRequestResetActions, getNullifierReadRequestResetActions, privateKernelResetDimensionNames } from '@aztec/stdlib/kernel';
|
|
8
8
|
import { collectNested } from '@aztec/stdlib/tx';
|
|
9
9
|
import { VkData } from '@aztec/stdlib/vks';
|
|
10
|
-
function collectNestedReadRequests(executionStack, extractReadRequests) {
|
|
11
|
-
return collectNested(executionStack, (executionResult)=>{
|
|
12
|
-
return extractReadRequests(executionResult).getActiveItems();
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
10
|
function getNullifierMembershipWitnessResolver(oracle) {
|
|
16
11
|
return async (nullifier)=>{
|
|
17
12
|
const res = await oracle.getNullifierMembershipWitness(nullifier);
|
|
@@ -25,7 +20,7 @@ function getNullifierMembershipWitnessResolver(oracle) {
|
|
|
25
20
|
};
|
|
26
21
|
};
|
|
27
22
|
}
|
|
28
|
-
async function
|
|
23
|
+
async function getMasterSecretKeysAndKeyTypeDomainSeparators(keyValidationRequests, numRequestsToVerify, oracle) {
|
|
29
24
|
const numRequestsToProcess = Math.min(keyValidationRequests.claimedLength, numRequestsToVerify);
|
|
30
25
|
const keysHints = await Promise.all(keyValidationRequests.array.slice(0, numRequestsToProcess).map(async ({ request })=>{
|
|
31
26
|
const secretKeys = await oracle.getMasterSecretKey(request.request.pkM);
|
|
@@ -51,18 +46,21 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
51
46
|
this.executionStack = executionStack;
|
|
52
47
|
this.noteHashNullifierCounterMap = noteHashNullifierCounterMap;
|
|
53
48
|
this.splitCounter = splitCounter;
|
|
54
|
-
this.previousKernel = previousKernelOutput.publicInputs;
|
|
55
|
-
this.requestedDimensions = PrivateKernelResetDimensions.empty();
|
|
56
49
|
this.noteHashResetActions = ReadRequestResetActions.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
57
50
|
this.nullifierResetActions = ReadRequestResetActions.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
58
51
|
this.transientDataSquashingHints = makeTuple(MAX_NULLIFIERS_PER_TX, ()=>new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX));
|
|
52
|
+
this.requestedDimensions = PrivateKernelResetDimensions.empty();
|
|
53
|
+
this.previousKernel = previousKernelOutput.publicInputs;
|
|
59
54
|
this.nextIteration = executionStack[this.executionStack.length - 1]?.publicInputs;
|
|
60
55
|
}
|
|
56
|
+
getRequestedDimensions() {
|
|
57
|
+
return this.requestedDimensions;
|
|
58
|
+
}
|
|
61
59
|
needsReset() {
|
|
62
60
|
const fns = [
|
|
63
61
|
()=>this.needsResetNoteHashReadRequests(),
|
|
64
62
|
()=>this.needsResetNullifierReadRequests(),
|
|
65
|
-
()=>this.
|
|
63
|
+
()=>this.needsResetKeyValidationRequests(),
|
|
66
64
|
()=>this.needsResetTransientData()
|
|
67
65
|
];
|
|
68
66
|
if (this.nextIteration) {
|
|
@@ -87,21 +85,26 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
87
85
|
throw new Error('Reset is not required.');
|
|
88
86
|
}
|
|
89
87
|
const isInner = !!this.nextIteration;
|
|
90
|
-
// "final" reset must be done
|
|
91
|
-
// Because the code that silo note hashes can't be run repeatedly.
|
|
88
|
+
// "final" reset must be done exactly once, because siloing can't be run repeatedly.
|
|
92
89
|
// The dimensions found must be big enough to reset all values, i.e. empty remainder.
|
|
93
90
|
const allowRemainder = isInner;
|
|
94
91
|
const dimensions = findPrivateKernelResetDimensions(this.requestedDimensions, privateKernelResetDimensionsConfig, isInner, allowRemainder);
|
|
95
|
-
const previousVkMembershipWitness = await oracle.getVkMembershipWitness(this.previousKernelOutput.verificationKey.keyAsFields);
|
|
96
|
-
const vkData = new VkData(this.previousKernelOutput.verificationKey, Number(previousVkMembershipWitness.leafIndex), previousVkMembershipWitness.siblingPath);
|
|
97
|
-
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
98
92
|
this.reduceReadRequestActions(this.noteHashResetActions, dimensions.NOTE_HASH_PENDING_READ, dimensions.NOTE_HASH_SETTLED_READ);
|
|
99
93
|
this.reduceReadRequestActions(this.nullifierResetActions, dimensions.NULLIFIER_PENDING_READ, dimensions.NULLIFIER_SETTLED_READ);
|
|
94
|
+
// Execute all the expensive node querying operations in parallel.
|
|
95
|
+
const [previousVkMembershipWitness, noteHashReadRequestHints, nullifierReadRequestHints, keyValidationHints] = await Promise.all([
|
|
96
|
+
oracle.getVkMembershipWitness(this.previousKernelOutput.verificationKey.keyAsFields),
|
|
97
|
+
buildNoteHashReadRequestHintsFromResetActions(oracle, this.previousKernel.validationRequests.noteHashReadRequests, this.previousKernel.end.noteHashes, this.noteHashResetActions),
|
|
98
|
+
buildNullifierReadRequestHintsFromResetActions({
|
|
99
|
+
getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle)
|
|
100
|
+
}, this.previousKernel.validationRequests.nullifierReadRequests, this.nullifierResetActions),
|
|
101
|
+
getMasterSecretKeysAndKeyTypeDomainSeparators(this.previousKernel.validationRequests.scopedKeyValidationRequestsAndSeparators, dimensions.KEY_VALIDATION, oracle)
|
|
102
|
+
]);
|
|
103
|
+
const vkData = new VkData(this.previousKernelOutput.verificationKey, Number(previousVkMembershipWitness.leafIndex), previousVkMembershipWitness.siblingPath);
|
|
104
|
+
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
100
105
|
// TODO: Enable padding when we have a better idea what are the final amounts we should pad to.
|
|
101
106
|
const paddedSideEffects = PaddedSideEffects.empty();
|
|
102
|
-
return new PrivateKernelResetCircuitPrivateInputs(previousKernelData, paddedSideEffects, new PrivateKernelResetHints(
|
|
103
|
-
getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle)
|
|
104
|
-
}, this.previousKernel.validationRequests.nullifierReadRequests, this.nullifierResetActions), await getMasterSecretKeysAndAppKeyGenerators(this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators, dimensions.KEY_VALIDATION, oracle), this.transientDataSquashingHints), dimensions);
|
|
107
|
+
return new PrivateKernelResetCircuitPrivateInputs(previousKernelData, paddedSideEffects, new PrivateKernelResetHints(noteHashReadRequestHints, nullifierReadRequestHints, keyValidationHints, this.transientDataSquashingHints), dimensions);
|
|
105
108
|
}
|
|
106
109
|
reduceReadRequestActions(resetActions, maxPending, maxSettled) {
|
|
107
110
|
let numPending = 0;
|
|
@@ -124,69 +127,112 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
124
127
|
}
|
|
125
128
|
resetActions.pendingReadHints = resetActions.pendingReadHints.slice(0, maxPending);
|
|
126
129
|
}
|
|
127
|
-
needsResetNoteHashReadRequests(
|
|
130
|
+
needsResetNoteHashReadRequests(forceReset = false) {
|
|
128
131
|
const numCurr = this.previousKernel.validationRequests.noteHashReadRequests.claimedLength;
|
|
129
132
|
const numNext = this.nextIteration ? this.nextIteration.noteHashReadRequests.claimedLength : 0;
|
|
130
|
-
const maxAmountToKeep = !this.nextIteration ||
|
|
133
|
+
const maxAmountToKeep = !this.nextIteration || forceReset ? 0 : MAX_NOTE_HASH_READ_REQUESTS_PER_TX;
|
|
131
134
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
132
135
|
return false;
|
|
133
136
|
}
|
|
134
|
-
const
|
|
135
|
-
return executionResult.publicInputs.noteHashes.getActiveItems().map((noteHash)=>new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress));
|
|
136
|
-
});
|
|
137
|
-
const resetActions = getNoteHashReadRequestResetActions(this.previousKernel.validationRequests.noteHashReadRequests, this.previousKernel.end.noteHashes, futureNoteHashes);
|
|
137
|
+
const resetActions = getNoteHashReadRequestResetActions(this.previousKernel.validationRequests.noteHashReadRequests, this.previousKernel.end.noteHashes);
|
|
138
138
|
const numPendingReads = resetActions.pendingReadHints.length;
|
|
139
139
|
const numSettledReads = resetActions.actions.reduce((accum, action)=>accum + (action === ReadRequestActionEnum.READ_AS_SETTLED ? 1 : 0), 0);
|
|
140
|
+
const totalReadsToReset = numPendingReads + numSettledReads;
|
|
141
|
+
const minResetNeeded = numCurr + numNext - maxAmountToKeep;
|
|
142
|
+
if (totalReadsToReset < minResetNeeded) {
|
|
143
|
+
if (!this.nextIteration) {
|
|
144
|
+
// In the final reset, all note hashes have been emitted. So if we can't reset all requests, at least one
|
|
145
|
+
// pending read request doesn't match any of them.
|
|
146
|
+
throw new Error('No matching note hash found for note hash read request.');
|
|
147
|
+
} else if (!forceReset) {
|
|
148
|
+
// A pending read request can only be reset if its note hash has already been included (e.g. a parent call might
|
|
149
|
+
// be reading a note hash emitted by a child call. The read request of the parent call is included before the note
|
|
150
|
+
// hash of the child call).
|
|
151
|
+
// If we can't clear enough read requests to make room for the next iteration's reads, we're stuck.
|
|
152
|
+
throw new Error('Number of note hash read requests exceeds the limit.');
|
|
153
|
+
} else if (totalReadsToReset == 0) {
|
|
154
|
+
// It's transient data squashing asking for the read requests to be reset first (forceReset == true), and
|
|
155
|
+
// there's nothing to reset, returns false and let needsResetTransientData throw a more descriptive error.
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
// Otherwise, forceReset is true, we should proceed to reset as many as we can.
|
|
159
|
+
}
|
|
140
160
|
if (!this.nextIteration) {
|
|
161
|
+
// If there's no next iteration, we need to reset all the read requests.
|
|
141
162
|
this.noteHashResetActions = resetActions;
|
|
142
163
|
this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
|
|
143
164
|
this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
|
|
144
165
|
} else {
|
|
145
|
-
//
|
|
166
|
+
// If there's a next iteration, only one dimension can be reset at a time.
|
|
167
|
+
// So we pick the dimension that has more read requests to reset.
|
|
146
168
|
if (numPendingReads > numSettledReads) {
|
|
169
|
+
// Reset the pending read requests.
|
|
170
|
+
const pendingOnlyActions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP), MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
171
|
+
this.noteHashResetActions = new ReadRequestResetActions(pendingOnlyActions, resetActions.pendingReadHints);
|
|
147
172
|
this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
|
|
148
|
-
this.noteHashResetActions.actions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP), MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
149
|
-
this.noteHashResetActions.pendingReadHints = resetActions.pendingReadHints;
|
|
150
173
|
} else {
|
|
174
|
+
// Reset the settled read requests.
|
|
175
|
+
const settledOnlyActions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP), MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
176
|
+
this.noteHashResetActions = new ReadRequestResetActions(settledOnlyActions, []);
|
|
151
177
|
this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
|
|
152
|
-
this.noteHashResetActions.actions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP), MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
153
178
|
}
|
|
154
179
|
}
|
|
155
180
|
return true;
|
|
156
181
|
}
|
|
157
|
-
needsResetNullifierReadRequests(
|
|
182
|
+
needsResetNullifierReadRequests(forceReset = false) {
|
|
158
183
|
const numCurr = this.previousKernel.validationRequests.nullifierReadRequests.claimedLength;
|
|
159
184
|
const numNext = this.nextIteration ? this.nextIteration.nullifierReadRequests.claimedLength : 0;
|
|
160
|
-
const maxAmountToKeep = !this.nextIteration ||
|
|
185
|
+
const maxAmountToKeep = !this.nextIteration || forceReset ? 0 : MAX_NULLIFIER_READ_REQUESTS_PER_TX;
|
|
161
186
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
162
187
|
return false;
|
|
163
188
|
}
|
|
164
|
-
const
|
|
165
|
-
return executionResult.publicInputs.nullifiers.getActiveItems().map((nullifier)=>new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress));
|
|
166
|
-
});
|
|
167
|
-
const resetActions = getNullifierReadRequestResetActions(this.previousKernel.validationRequests.nullifierReadRequests, this.previousKernel.end.nullifiers, futureNullifiers);
|
|
189
|
+
const resetActions = getNullifierReadRequestResetActions(this.previousKernel.validationRequests.nullifierReadRequests, this.previousKernel.end.nullifiers);
|
|
168
190
|
const numPendingReads = resetActions.pendingReadHints.length;
|
|
169
191
|
const numSettledReads = resetActions.actions.reduce((accum, action)=>accum + (action === ReadRequestActionEnum.READ_AS_SETTLED ? 1 : 0), 0);
|
|
192
|
+
const totalReadsToReset = numPendingReads + numSettledReads;
|
|
193
|
+
const minResetNeeded = numCurr + numNext - maxAmountToKeep;
|
|
194
|
+
if (totalReadsToReset < minResetNeeded) {
|
|
195
|
+
if (!this.nextIteration) {
|
|
196
|
+
// In the final reset, all nullifiers have been emitted. So if we can't reset all requests, at least one pending
|
|
197
|
+
// read request doesn't match any of them.
|
|
198
|
+
throw new Error('No matching nullifier found for nullifier read request.');
|
|
199
|
+
} else if (!forceReset) {
|
|
200
|
+
// A pending read request can only be reset if its nullifier has already been included (e.g. a parent call might
|
|
201
|
+
// be reading a nullifier emitted by a child call. The read request of the parent call is included before the
|
|
202
|
+
// nullifier of the child call).
|
|
203
|
+
// If we can't clear enough read requests to make room for the next iteration's reads, we're stuck.
|
|
204
|
+
throw new Error('Number of nullifier read requests exceeds the limit.');
|
|
205
|
+
} else if (totalReadsToReset == 0) {
|
|
206
|
+
// It's transient data squashing asking for the read requests to be reset first (forceReset == true), and
|
|
207
|
+
// there's nothing to reset, returns false and let needsResetTransientData throw a more descriptive error.
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
// Otherwise, forceReset is true, we should proceed to reset as many as we can.
|
|
211
|
+
}
|
|
170
212
|
if (!this.nextIteration) {
|
|
213
|
+
// If there's no next iteration, we need to reset all the read requests.
|
|
171
214
|
this.nullifierResetActions = resetActions;
|
|
172
215
|
this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
|
|
173
216
|
this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
|
|
174
217
|
} else {
|
|
175
|
-
//
|
|
218
|
+
// If there's a next iteration, we can only reset one dimension at a time.
|
|
176
219
|
if (numPendingReads > numSettledReads) {
|
|
220
|
+
// Reset the pending read requests.
|
|
221
|
+
const pendingOnlyActions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP), MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
222
|
+
this.nullifierResetActions = new ReadRequestResetActions(pendingOnlyActions, resetActions.pendingReadHints);
|
|
177
223
|
this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
|
|
178
|
-
this.nullifierResetActions.actions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP), MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
179
|
-
this.nullifierResetActions.pendingReadHints = resetActions.pendingReadHints;
|
|
180
224
|
} else {
|
|
225
|
+
// Reset the settled read requests.
|
|
226
|
+
const settledOnlyActions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP), MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
227
|
+
this.nullifierResetActions = new ReadRequestResetActions(settledOnlyActions, []);
|
|
181
228
|
this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
|
|
182
|
-
this.nullifierResetActions.actions = assertLength(resetActions.actions.map((action)=>action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP), MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
183
229
|
}
|
|
184
230
|
}
|
|
185
231
|
return true;
|
|
186
232
|
}
|
|
187
|
-
|
|
188
|
-
const numCurr = this.previousKernel.validationRequests.
|
|
189
|
-
const numNext = this.nextIteration ? this.nextIteration.
|
|
233
|
+
needsResetKeyValidationRequests() {
|
|
234
|
+
const numCurr = this.previousKernel.validationRequests.scopedKeyValidationRequestsAndSeparators.claimedLength;
|
|
235
|
+
const numNext = this.nextIteration ? this.nextIteration.keyValidationRequestsAndSeparators.claimedLength : 0;
|
|
190
236
|
const maxAmountToKeep = !this.nextIteration ? 0 : MAX_KEY_VALIDATION_REQUESTS_PER_TX;
|
|
191
237
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
192
238
|
return false;
|
|
@@ -195,8 +241,6 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
195
241
|
return true;
|
|
196
242
|
}
|
|
197
243
|
needsResetTransientData() {
|
|
198
|
-
// Initialize this to 0 so that needsSilo can be run.
|
|
199
|
-
this.numTransientData = 0;
|
|
200
244
|
const nextAccumNoteHashes = this.previousKernel.end.noteHashes.claimedLength + (this.nextIteration?.noteHashes.claimedLength ?? 0);
|
|
201
245
|
const noteHashWillOverflow = nextAccumNoteHashes > MAX_NOTE_HASHES_PER_TX;
|
|
202
246
|
const nextAccumNullifiers = this.previousKernel.end.nullifiers.claimedLength + (this.nextIteration?.nullifiers.claimedLength ?? 0);
|
|
@@ -206,27 +250,45 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
206
250
|
if (this.nextIteration && !noteHashWillOverflow && !nullifierWillOverflow && !logsWillOverflow) {
|
|
207
251
|
return false;
|
|
208
252
|
}
|
|
209
|
-
const futureNoteHashReads =
|
|
210
|
-
const futureNullifierReads =
|
|
211
|
-
|
|
212
|
-
// (i.e. none of the future logs are linked to the to-be-squashed note hashes).
|
|
253
|
+
const futureNoteHashReads = collectNested(this.executionStack, (executionResult)=>executionResult.publicInputs.noteHashReadRequests.getActiveItems());
|
|
254
|
+
const futureNullifierReads = collectNested(this.executionStack, (executionResult)=>executionResult.publicInputs.nullifierReadRequests.getActiveItems());
|
|
255
|
+
const futureLogs = collectNested(this.executionStack, (executionResult)=>executionResult.publicInputs.privateLogs.getActiveItems());
|
|
213
256
|
if (this.nextIteration) {
|
|
214
|
-
// If it's not the final reset, only one dimension will be reset at a time.
|
|
215
|
-
//
|
|
257
|
+
// If it's not the final reset, only one dimension will be reset at a time. Since we are resetting the transient
|
|
258
|
+
// data, the note hash and nullifier read requests in the previous kernel won't be squashed and need to be
|
|
259
|
+
// included in the future read requests.
|
|
216
260
|
futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.getActiveItems());
|
|
217
261
|
futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.getActiveItems());
|
|
218
262
|
}
|
|
219
|
-
const { numTransientData, hints: transientDataSquashingHints } = buildTransientDataHints(this.previousKernel.end.noteHashes, this.previousKernel.end.nullifiers, futureNoteHashReads, futureNullifierReads, this.noteHashNullifierCounterMap, this.splitCounter);
|
|
220
|
-
if (this.nextIteration
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
263
|
+
const { numTransientData, hints: transientDataSquashingHints } = buildTransientDataHints(this.previousKernel.end.noteHashes, this.previousKernel.end.nullifiers, futureNoteHashReads, futureNullifierReads, futureLogs, this.noteHashNullifierCounterMap, this.splitCounter);
|
|
264
|
+
if (this.nextIteration) {
|
|
265
|
+
const noteHashOverflowBy = noteHashWillOverflow ? nextAccumNoteHashes - MAX_NOTE_HASHES_PER_TX - numTransientData : 0;
|
|
266
|
+
const nullifierOverflowBy = nullifierWillOverflow ? nextAccumNullifiers - MAX_NULLIFIERS_PER_TX - numTransientData : 0;
|
|
267
|
+
const numSquashedLogs = logsWillOverflow ? countSquashedLogs(this.previousKernel.end.noteHashes, this.previousKernel.end.privateLogs, transientDataSquashingHints.slice(0, numTransientData)) : 0;
|
|
268
|
+
const logsOverflowBy = logsWillOverflow ? nextAccumLogs - MAX_PRIVATE_LOGS_PER_TX - numSquashedLogs : 0;
|
|
269
|
+
if (noteHashOverflowBy > 0 || nullifierOverflowBy > 0 || logsOverflowBy > 0) {
|
|
270
|
+
// There's not enough transient data to squash to clear space for the overflow. It may be because some data is
|
|
271
|
+
// still required for read requests. Force a reset of the read requests first, and return to transient data
|
|
272
|
+
// squashing in the next round of reset.
|
|
273
|
+
// Note that clearing the read requests might not be enough to clear more space for the overflow. In this case,
|
|
274
|
+
// running the next reset will fail at the following check.
|
|
275
|
+
// Only one dimension can be reset at a time for an inner reset, so we try the note hash read requests first
|
|
276
|
+
// (which also helps with log overflow), then fall back to nullifier read requests.
|
|
277
|
+
const forceReset = true;
|
|
278
|
+
if ((noteHashOverflowBy > 0 || logsOverflowBy > 0) && this.needsResetNoteHashReadRequests(forceReset)) {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
if (nullifierOverflowBy > 0 && this.needsResetNullifierReadRequests(forceReset)) {
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
if (noteHashWillOverflow) {
|
|
285
|
+
throw new Error('Number of note hashes exceeds the limit.');
|
|
286
|
+
}
|
|
287
|
+
if (nullifierWillOverflow) {
|
|
288
|
+
throw new Error('Number of nullifiers exceeds the limit.');
|
|
289
|
+
}
|
|
290
|
+
throw new Error('Number of private logs exceeds the limit.');
|
|
226
291
|
}
|
|
227
|
-
// Clearing the read requests might not be enough to squash the overflown data.
|
|
228
|
-
// In this case, the next iteration will fail at the above check.
|
|
229
|
-
return true;
|
|
230
292
|
}
|
|
231
293
|
this.numTransientData = numTransientData;
|
|
232
294
|
this.transientDataSquashingHints = transientDataSquashingHints;
|
|
@@ -237,8 +299,12 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
237
299
|
if (this.numTransientData === undefined) {
|
|
238
300
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNoteHashes`.');
|
|
239
301
|
}
|
|
240
|
-
const
|
|
241
|
-
|
|
302
|
+
const noteHashes = this.previousKernel.end.noteHashes;
|
|
303
|
+
if (noteHashes.claimedLength > 0 && noteHashes.array[0].contractAddress.isZero()) {
|
|
304
|
+
// Already siloed.
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
const numToSilo = noteHashes.claimedLength - this.numTransientData;
|
|
242
308
|
this.requestedDimensions.NOTE_HASH_SILOING = numToSilo;
|
|
243
309
|
return numToSilo > 0;
|
|
244
310
|
}
|
|
@@ -246,13 +312,13 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
246
312
|
if (this.numTransientData === undefined) {
|
|
247
313
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNullifiers`.');
|
|
248
314
|
}
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
const
|
|
255
|
-
this.requestedDimensions.NULLIFIER_SILOING =
|
|
315
|
+
const nullifiers = this.previousKernel.end.nullifiers;
|
|
316
|
+
if (nullifiers.claimedLength > 0 && nullifiers.array[0].contractAddress.isZero()) {
|
|
317
|
+
// Already siloed.
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
const numToSilo = nullifiers.claimedLength - this.numTransientData;
|
|
321
|
+
this.requestedDimensions.NULLIFIER_SILOING = numToSilo;
|
|
256
322
|
return numToSilo > 0;
|
|
257
323
|
}
|
|
258
324
|
needsSiloPrivateLogs() {
|
|
@@ -260,11 +326,12 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
260
326
|
throw new Error('`needsResetTransientData` must be run before `needsSiloPrivateLogs`.');
|
|
261
327
|
}
|
|
262
328
|
const privateLogs = this.previousKernel.end.privateLogs;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
const
|
|
329
|
+
if (privateLogs.claimedLength > 0 && privateLogs.array[0].contractAddress.isZero()) {
|
|
330
|
+
// Already siloed.
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
const numSquashedLogs = countSquashedLogs(this.previousKernel.end.noteHashes, privateLogs, this.transientDataSquashingHints.slice(0, this.numTransientData));
|
|
334
|
+
const numToSilo = privateLogs.claimedLength - numSquashedLogs;
|
|
268
335
|
this.requestedDimensions.PRIVATE_LOG_SILOING = numToSilo;
|
|
269
336
|
return numToSilo > 0;
|
|
270
337
|
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
+
import { PrivateCircuitPublicInputs, PrivateKernelCircuitPublicInputs, type PrivateKernelSimulateOutput } from '@aztec/stdlib/kernel';
|
|
4
|
+
import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
5
|
+
/** Builder for PrivateKernelCircuitPublicInputs with fluent API for adding side effects. */
|
|
6
|
+
export declare class PrivateKernelCircuitPublicInputsBuilder {
|
|
7
|
+
private contractAddress;
|
|
8
|
+
private noteHashes;
|
|
9
|
+
private nullifiers;
|
|
10
|
+
private noteHashReadRequests;
|
|
11
|
+
private nullifierReadRequests;
|
|
12
|
+
private keyValidationRequests;
|
|
13
|
+
private privateLogs;
|
|
14
|
+
private nextCounter;
|
|
15
|
+
constructor(contractAddress?: AztecAddress, startCounter?: number);
|
|
16
|
+
private getCounter;
|
|
17
|
+
/** Adds a note hash to the accumulated data. Defaults are generated randomly. */
|
|
18
|
+
addNoteHash(opts?: {
|
|
19
|
+
value?: Fr;
|
|
20
|
+
counter?: number;
|
|
21
|
+
contractAddress?: AztecAddress;
|
|
22
|
+
}): this;
|
|
23
|
+
/** Adds a nullifier to the accumulated data. Defaults are generated randomly. */
|
|
24
|
+
addNullifier(opts?: {
|
|
25
|
+
value?: Fr;
|
|
26
|
+
noteHash?: Fr;
|
|
27
|
+
counter?: number;
|
|
28
|
+
contractAddress?: AztecAddress;
|
|
29
|
+
}): this;
|
|
30
|
+
/** Adds a pending note hash read request (non-empty contract address, can match a pending note hash). */
|
|
31
|
+
addPendingNoteHashReadRequest(opts?: {
|
|
32
|
+
value?: Fr;
|
|
33
|
+
counter?: number;
|
|
34
|
+
contractAddress?: AztecAddress;
|
|
35
|
+
}): this;
|
|
36
|
+
/** Adds a settled note hash read request (empty contract address, resolved against the note hash tree). */
|
|
37
|
+
addSettledNoteHashReadRequest(opts?: {
|
|
38
|
+
value?: Fr;
|
|
39
|
+
counter?: number;
|
|
40
|
+
}): this;
|
|
41
|
+
/** Adds a pending nullifier read request (non-empty contract address, can match a pending nullifier). */
|
|
42
|
+
addPendingNullifierReadRequest(opts?: {
|
|
43
|
+
value?: Fr;
|
|
44
|
+
counter?: number;
|
|
45
|
+
contractAddress?: AztecAddress;
|
|
46
|
+
}): this;
|
|
47
|
+
/** Adds a settled nullifier read request (empty contract address, resolved against the nullifier tree). */
|
|
48
|
+
addSettledNullifierReadRequest(opts?: {
|
|
49
|
+
value?: Fr;
|
|
50
|
+
counter?: number;
|
|
51
|
+
}): this;
|
|
52
|
+
/** Adds a key validation request to validation requests. */
|
|
53
|
+
addKeyValidationRequest(opts?: {
|
|
54
|
+
contractAddress?: AztecAddress;
|
|
55
|
+
}): this;
|
|
56
|
+
/** Adds a private log to the accumulated data. Defaults are generated randomly. */
|
|
57
|
+
addPrivateLog(opts?: {
|
|
58
|
+
noteHashCounter?: number;
|
|
59
|
+
counter?: number;
|
|
60
|
+
contractAddress?: AztecAddress;
|
|
61
|
+
}): this;
|
|
62
|
+
/** Builds the PrivateKernelCircuitPublicInputs with all added side effects. */
|
|
63
|
+
build(): PrivateKernelCircuitPublicInputs;
|
|
64
|
+
}
|
|
65
|
+
/** Builder for PrivateCircuitPublicInputs (call-level) with fluent API for adding side effects. */
|
|
66
|
+
export declare class PrivateCircuitPublicInputsBuilder {
|
|
67
|
+
private contractAddress;
|
|
68
|
+
private noteHashes;
|
|
69
|
+
private nullifiers;
|
|
70
|
+
private noteHashReadRequests;
|
|
71
|
+
private nullifierReadRequests;
|
|
72
|
+
private keyValidationRequests;
|
|
73
|
+
private privateLogs;
|
|
74
|
+
private nextCounter;
|
|
75
|
+
constructor(contractAddress?: AztecAddress, startCounter?: number);
|
|
76
|
+
private getCounter;
|
|
77
|
+
/** Adds a note hash. Defaults are generated randomly. */
|
|
78
|
+
addNoteHash(opts?: {
|
|
79
|
+
value?: Fr;
|
|
80
|
+
counter?: number;
|
|
81
|
+
}): this;
|
|
82
|
+
/** Adds a nullifier. Defaults are generated randomly. */
|
|
83
|
+
addNullifier(opts?: {
|
|
84
|
+
value?: Fr;
|
|
85
|
+
noteHash?: Fr;
|
|
86
|
+
counter?: number;
|
|
87
|
+
}): this;
|
|
88
|
+
/** Adds a pending note hash read request (non-empty contract address, can match a pending note hash). */
|
|
89
|
+
addPendingNoteHashReadRequest(opts?: {
|
|
90
|
+
value?: Fr;
|
|
91
|
+
counter?: number;
|
|
92
|
+
}): this;
|
|
93
|
+
/** Adds a settled note hash read request (empty contract address, resolved against the note hash tree). */
|
|
94
|
+
addSettledNoteHashReadRequest(opts?: {
|
|
95
|
+
value?: Fr;
|
|
96
|
+
counter?: number;
|
|
97
|
+
}): this;
|
|
98
|
+
/** Adds a pending nullifier read request (non-empty contract address, can match a pending nullifier). */
|
|
99
|
+
addPendingNullifierReadRequest(opts?: {
|
|
100
|
+
value?: Fr;
|
|
101
|
+
counter?: number;
|
|
102
|
+
}): this;
|
|
103
|
+
/** Adds a settled nullifier read request (empty contract address, resolved against the nullifier tree). */
|
|
104
|
+
addSettledNullifierReadRequest(opts?: {
|
|
105
|
+
value?: Fr;
|
|
106
|
+
counter?: number;
|
|
107
|
+
}): this;
|
|
108
|
+
/** Adds a key validation request. */
|
|
109
|
+
addKeyValidationRequest(): this;
|
|
110
|
+
/** Adds a private log. Defaults are generated randomly. */
|
|
111
|
+
addPrivateLog(opts?: {
|
|
112
|
+
noteHashCounter?: number;
|
|
113
|
+
counter?: number;
|
|
114
|
+
}): this;
|
|
115
|
+
/** Builds the PrivateCircuitPublicInputs with all added side effects. */
|
|
116
|
+
build(): PrivateCircuitPublicInputs;
|
|
117
|
+
}
|
|
118
|
+
/** Wraps a PrivateKernelCircuitPublicInputs in a PrivateKernelSimulateOutput. */
|
|
119
|
+
export declare function makeKernelOutput(publicInputs?: PrivateKernelCircuitPublicInputs): PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>;
|
|
120
|
+
/** Wraps a PrivateCircuitPublicInputs in a PrivateCallExecutionResult. */
|
|
121
|
+
export declare function makeExecutionResult(publicInputs?: PrivateCircuitPublicInputs): PrivateCallExecutionResult;
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ByaXZhdGVfa2VybmVsL2hpbnRzL3Rlc3RfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBTUwsMEJBQTBCLEVBQzFCLGdDQUFnQyxFQUNoQyxLQUFLLDJCQUEyQixFQU1qQyxNQUFNLHNCQUFzQixDQUFDO0FBRzlCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBYTlELDRGQUE0RjtBQUM1RixxQkFBYSx1Q0FBdUM7SUFVaEQsT0FBTyxDQUFDLGVBQWU7SUFUekIsT0FBTyxDQUFDLFVBQVUsQ0FBd0I7SUFDMUMsT0FBTyxDQUFDLFVBQVUsQ0FBeUI7SUFDM0MsT0FBTyxDQUFDLG9CQUFvQixDQUEyQjtJQUN2RCxPQUFPLENBQUMscUJBQXFCLENBQTJCO0lBQ3hELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBZ0Q7SUFDN0UsT0FBTyxDQUFDLFdBQVcsQ0FBOEI7SUFDakQsT0FBTyxDQUFDLFdBQVcsQ0FBUztJQUU1QixZQUNVLGVBQWUsR0FBRSxZQUF1QyxFQUNoRSxZQUFZLFNBQUksRUFHakI7SUFFRCxPQUFPLENBQUMsVUFBVTtJQVFsQixpRkFBaUY7SUFDakYsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQUMsZUFBZSxDQUFDLEVBQUUsWUFBWSxDQUFBO0tBQUUsR0FBRyxJQUFJLENBTXpGO0lBRUQsaUZBQWlGO0lBQ2pGLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQU96RztJQUVELHlHQUF5RztJQUN6Ryw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQU0zRztJQUVELDJHQUEyRztJQUMzRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUszRTtJQUVELHlHQUF5RztJQUN6Ryw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQU01RztJQUVELDJHQUEyRztJQUMzRyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUs1RTtJQUVELDREQUE0RDtJQUM1RCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQVl2RTtJQUVELG1GQUFtRjtJQUNuRixhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxlQUFlLENBQUMsRUFBRSxZQUFZLENBQUE7S0FBRSxHQUFHLElBQUksQ0FRekc7SUFFRCwrRUFBK0U7SUFDL0UsS0FBSyxJQUFJLGdDQUFnQyxDQXFCeEM7Q0FDRjtBQUVELG1HQUFtRztBQUNuRyxxQkFBYSxpQ0FBaUM7SUFVMUMsT0FBTyxDQUFDLGVBQWU7SUFUekIsT0FBTyxDQUFDLFVBQVUsQ0FBa0I7SUFDcEMsT0FBTyxDQUFDLFVBQVUsQ0FBbUI7SUFDckMsT0FBTyxDQUFDLG9CQUFvQixDQUEyQjtJQUN2RCxPQUFPLENBQUMscUJBQXFCLENBQTJCO0lBQ3hELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBMEM7SUFDdkUsT0FBTyxDQUFDLFdBQVcsQ0FBd0I7SUFDM0MsT0FBTyxDQUFDLFdBQVcsQ0FBUztJQUU1QixZQUNVLGVBQWUsR0FBRSxZQUF1QyxFQUNoRSxZQUFZLFNBQUksRUFHakI7SUFFRCxPQUFPLENBQUMsVUFBVTtJQVFsQix5REFBeUQ7SUFDekQsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRyxJQUFJLENBS3pEO0lBRUQseURBQXlEO0lBQ3pELFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQU16RTtJQUVELHlHQUF5RztJQUN6Ryw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUszRTtJQUVELDJHQUEyRztJQUMzRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUszRTtJQUVELHlHQUF5RztJQUN6Ryw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUs1RTtJQUVELDJHQUEyRztJQUMzRyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUs1RTtJQUVELHFDQUFxQztJQUNyQyx1QkFBdUIsSUFBSSxJQUFJLENBUTlCO0lBRUQsMkRBQTJEO0lBQzNELGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsSUFBSSxDQUt6RTtJQUVELHlFQUF5RTtJQUN6RSxLQUFLLElBQUksMEJBQTBCLENBc0JsQztDQUNGO0FBRUQsaUZBQWlGO0FBQ2pGLHdCQUFnQixnQkFBZ0IsQ0FDOUIsWUFBWSxDQUFDLEVBQUUsZ0NBQWdDLEdBQzlDLDJCQUEyQixDQUFDLGdDQUFnQyxDQUFDLENBTy9EO0FBRUQsMEVBQTBFO0FBQzFFLHdCQUFnQixtQkFBbUIsQ0FBQyxZQUFZLENBQUMsRUFBRSwwQkFBMEIsR0FBRywwQkFBMEIsQ0FjekcifQ==
|