@aztec/pxe 0.0.1-commit.b9865e97 → 0.0.1-commit.be03c316
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.js +8 -23
- package/dest/bin/index.d.ts +2 -2
- package/dest/bin/index.d.ts.map +1 -1
- package/dest/bin/index.js +1 -1
- package/dest/bin/oracle_version_helpers.d.ts +16 -8
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -1
- package/dest/bin/oracle_version_helpers.js +22 -69
- package/dest/block_synchronizer/block_stream_source.d.ts +5 -5
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -1
- package/dest/block_synchronizer/block_stream_source.js +4 -29
- package/dest/block_synchronizer/block_synchronizer.d.ts +18 -14
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +54 -18
- package/dest/config/index.d.ts +2 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -0
- package/dest/contract/contract_class_service.d.ts +31 -0
- package/dest/contract/contract_class_service.d.ts.map +1 -0
- package/dest/contract/contract_class_service.js +68 -0
- package/dest/contract/contract_sync_service.d.ts +48 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/{contract_sync → contract}/contract_sync_service.js +26 -45
- package/dest/contract/helpers.d.ts +7 -0
- package/dest/contract/helpers.d.ts.map +1 -0
- package/dest/contract/helpers.js +20 -0
- package/dest/contract/skip_sync_contracts.d.ts +11 -0
- package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
- package/dest/contract/skip_sync_contracts.js +18 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +19 -18
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +63 -32
- package/dest/contract_function_simulator/execution_note_cache.d.ts +3 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +8 -28
- package/dest/contract_function_simulator/index.d.ts +19 -10
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +6 -9
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +8 -27
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +8 -23
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
- package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +11 -12
- 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 +6 -49
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +10 -8
- 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 +1 -60
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
- package/dest/contract_function_simulator/noir-structs/option.d.ts +9 -11
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/option.js +18 -13
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +6 -9
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -24
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
- package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
- package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/index.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +2 -3
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +43 -31
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle_registry.js +259 -29
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +180 -45
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1024 -341
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +2 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +21 -8
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +132 -22
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +77 -34
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +247 -106
- package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
- package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/transient_array_service.js +62 -0
- package/dest/debug/pxe_debug_utils.d.ts +2 -2
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.d.ts +2 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +1 -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 +17 -6
- package/dest/entrypoints/client/lazy/index.d.ts +2 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +1 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +17 -6
- package/dest/entrypoints/client/store.d.ts +14 -0
- package/dest/entrypoints/client/store.d.ts.map +1 -0
- package/dest/entrypoints/client/store.js +42 -0
- package/dest/entrypoints/pxe_creation_options.d.ts +9 -3
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +6 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -2
- package/dest/entrypoints/server/store.d.ts +18 -0
- package/dest/entrypoints/server/store.d.ts.map +1 -0
- package/dest/entrypoints/server/store.js +28 -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 +16 -4
- package/dest/error_enriching.d.ts +5 -3
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +13 -11
- package/dest/hooks/execution_hooks.d.ts +31 -11
- package/dest/hooks/execution_hooks.d.ts.map +1 -1
- package/dest/hooks/execution_hooks.js +3 -3
- package/dest/hooks/index.d.ts +4 -3
- package/dest/hooks/index.d.ts.map +1 -1
- package/dest/hooks/index.js +1 -0
- package/dest/hooks/resolve_custom_request.d.ts +23 -0
- package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
- package/dest/hooks/resolve_custom_request.js +3 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
- package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
- package/dest/logs/log_service.d.ts +8 -6
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +88 -28
- package/dest/messages/tx_resolver_service.d.ts +17 -0
- package/dest/messages/tx_resolver_service.d.ts.map +1 -0
- package/dest/messages/{message_context_service.js → tx_resolver_service.js} +13 -8
- package/dest/notes/note_service.d.ts +1 -1
- package/dest/notes/note_service.js +1 -1
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.js +5 -5
- package/dest/private_kernel/batch_planner.d.ts +1 -1
- package/dest/private_kernel/batch_planner.d.ts.map +1 -1
- package/dest/private_kernel/batch_planner.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +6 -2
- package/dest/private_kernel/hints/test_utils.js +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +61 -40
- package/dest/private_kernel/private_kernel_oracle.d.ts +4 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +17 -5
- package/dest/pxe.d.ts +114 -48
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +225 -139
- package/dest/storage/allowed_scopes.d.ts +6 -0
- package/dest/storage/allowed_scopes.d.ts.map +1 -0
- package/dest/storage/allowed_scopes.js +7 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
- 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 -6
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +1 -1
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -1
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +129 -49
- package/dest/storage/capsule_store/capsule_service.d.ts +1 -1
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_service.js +6 -9
- package/dest/storage/contract_store/contract_store.d.ts +27 -24
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +64 -75
- package/dest/storage/fact_store/fact_service.d.ts +22 -0
- package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_service.js +45 -0
- package/dest/storage/fact_store/fact_store.d.ts +95 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +408 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store_keys.js +50 -0
- package/dest/storage/fact_store/index.d.ts +6 -0
- package/dest/storage/fact_store/index.d.ts.map +1 -0
- package/dest/storage/fact_store/index.js +4 -0
- package/dest/storage/fact_store/origin_state.d.ts +59 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +60 -0
- package/dest/storage/fact_store/stored_fact.d.ts +32 -0
- package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
- package/dest/storage/fact_store/stored_fact.js +64 -0
- package/dest/storage/index.d.ts +3 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -1
- package/dest/storage/metadata.d.ts +2 -2
- package/dest/storage/metadata.d.ts.map +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +42 -33
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +197 -168
- package/dest/storage/note_store/stored_note.d.ts +3 -8
- package/dest/storage/note_store/stored_note.d.ts.map +1 -1
- package/dest/storage/note_store/stored_note.js +4 -20
- package/dest/storage/open_pxe_stores.d.ts +5 -3
- package/dest/storage/open_pxe_stores.d.ts.map +1 -1
- package/dest/storage/open_pxe_stores.js +5 -3
- package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +40 -43
- package/dest/storage/store_identity.d.ts +35 -0
- package/dest/storage/store_identity.d.ts.map +1 -0
- package/dest/storage/store_identity.js +44 -0
- package/dest/storage/tagging_store/index.d.ts +2 -2
- package/dest/storage/tagging_store/index.d.ts.map +1 -1
- package/dest/storage/tagging_store/index.js +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -3
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +48 -11
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
- package/dest/tagging/constants.d.ts +3 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +28 -10
- package/dest/tagging/index.d.ts +2 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +26 -8
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +95 -20
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +1 -1
- 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 +6 -2
- package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
- package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
- package/dest/tagging/testing/tag_query_test_utils.js +10 -0
- package/package.json +17 -17
- package/src/bin/check_oracle_version.ts +8 -24
- package/src/bin/index.ts +1 -1
- package/src/bin/oracle_version_helpers.ts +23 -90
- package/src/block_synchronizer/block_stream_source.ts +6 -45
- package/src/block_synchronizer/block_synchronizer.ts +70 -29
- package/src/config/index.ts +1 -0
- package/src/contract/contract_class_service.ts +83 -0
- package/src/{contract_sync → contract}/contract_sync_service.ts +37 -50
- package/src/contract/helpers.ts +35 -0
- package/src/contract/skip_sync_contracts.ts +23 -0
- package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
- package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +96 -42
- package/src/contract_function_simulator/execution_note_cache.ts +7 -28
- package/src/contract_function_simulator/index.ts +48 -13
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +12 -24
- package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
- package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
- package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +20 -46
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +13 -60
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
- package/src/contract_function_simulator/noir-structs/option.ts +17 -11
- package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
- package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +4 -26
- package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
- package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
- package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
- package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
- package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
- package/src/contract_function_simulator/oracle/index.ts +1 -15
- package/src/contract_function_simulator/oracle/interfaces.ts +1 -2
- package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
- package/src/contract_function_simulator/oracle/oracle_registry.ts +172 -47
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +814 -315
- package/src/contract_function_simulator/oracle/private_execution.ts +2 -3
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +167 -30
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +399 -135
- package/src/contract_function_simulator/transient_array_service.ts +91 -0
- package/src/debug/pxe_debug_utils.ts +1 -1
- package/src/entrypoints/client/bundle/index.ts +1 -0
- package/src/entrypoints/client/bundle/utils.ts +24 -5
- package/src/entrypoints/client/lazy/index.ts +1 -0
- package/src/entrypoints/client/lazy/utils.ts +24 -5
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +8 -2
- package/src/entrypoints/server/index.ts +6 -2
- package/src/entrypoints/server/store.ts +47 -0
- package/src/entrypoints/server/utils.ts +31 -9
- package/src/error_enriching.ts +27 -11
- package/src/hooks/execution_hooks.ts +32 -12
- package/src/hooks/index.ts +8 -2
- package/src/hooks/resolve_custom_request.ts +24 -0
- package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
- package/src/logs/log_service.ts +100 -37
- package/src/messages/{message_context_service.ts → tx_resolver_service.ts} +16 -9
- package/src/notes/note_service.ts +1 -1
- package/src/oracle_version.ts +5 -5
- package/src/private_kernel/batch_planner.ts +0 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +11 -1
- package/src/private_kernel/hints/test_utils.ts +1 -1
- package/src/private_kernel/private_kernel_execution_prover.ts +112 -56
- package/src/private_kernel/private_kernel_oracle.ts +23 -4
- package/src/pxe.ts +328 -159
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -6
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +6 -6
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +1 -1
- package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +12 -12
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +9 -15
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +24 -4
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +11 -3
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +12 -4
- package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +29 -9
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +141 -50
- package/src/storage/capsule_store/capsule_service.ts +8 -13
- package/src/storage/contract_store/contract_store.ts +86 -93
- package/src/storage/fact_store/fact_service.ts +69 -0
- package/src/storage/fact_store/fact_store.ts +487 -0
- package/src/storage/fact_store/fact_store_keys.ts +75 -0
- package/src/storage/fact_store/index.ts +15 -0
- package/src/storage/fact_store/origin_state.ts +84 -0
- package/src/storage/fact_store/stored_fact.ts +80 -0
- package/src/storage/index.ts +2 -1
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +226 -187
- package/src/storage/note_store/stored_note.ts +5 -27
- package/src/storage/open_pxe_stores.ts +6 -3
- package/src/storage/private_event_store/private_event_store.ts +49 -55
- package/src/storage/store_identity.ts +72 -0
- package/src/storage/tagging_store/index.ts +1 -1
- package/src/storage/tagging_store/sender_tagging_store.ts +62 -15
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +30 -10
- package/src/tagging/index.ts +1 -1
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +148 -30
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +1 -1
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +6 -2
- package/src/tagging/testing/tag_query_test_utils.ts +11 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -89
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/oracle.js +0 -552
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -51
- package/dest/contract_sync/contract_sync_service.d.ts +0 -42
- package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
- package/dest/contract_sync/helpers.d.ts +0 -27
- package/dest/contract_sync/helpers.d.ts.map +0 -1
- package/dest/contract_sync/helpers.js +0 -53
- package/dest/messages/message_context_service.d.ts +0 -17
- package/dest/messages/message_context_service.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
- package/src/contract_function_simulator/oracle/oracle.ts +0 -711
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -60
- package/src/contract_sync/helpers.ts +0 -86
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +0 -16
- package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH, L1_TO_L2_MSG_TREE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NULLIFIER_TREE_HEIGHT, PRIVATE_LOG_CIPHERTEXT_LEN, PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
+
import { FieldReader } from '@aztec/foundation/serialize';
|
|
7
7
|
import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
8
|
-
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
9
8
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
9
|
import { BlockHash } from '@aztec/stdlib/block';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { Tag, appTaggingSecretKindFromDeliveryMode } from '@aztec/stdlib/logs';
|
|
11
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
12
|
+
import { originBlockStateFromNumber } from '../../storage/fact_store/index.js';
|
|
14
13
|
import { BoundedVec } from '../noir-structs/bounded_vec.js';
|
|
15
14
|
import { EphemeralArray } from '../noir-structs/ephemeral_array.js';
|
|
16
15
|
import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
|
|
17
|
-
import {
|
|
16
|
+
import { logSourceFromField } from '../noir-structs/log_retrieval_request.js';
|
|
18
17
|
import { NoteValidationRequest } from '../noir-structs/note_validation_request.js';
|
|
19
18
|
import { Option } from '../noir-structs/option.js';
|
|
20
|
-
import {
|
|
19
|
+
import { resolvedTaggingStrategyFromFields, resolvedTaggingStrategyToFields } from '../noir-structs/resolved_tagging_strategy.js';
|
|
21
20
|
import { packAsHintedNote } from './note_packing_utils.js';
|
|
22
21
|
/**
|
|
23
22
|
* Asserts that every reader was fully consumed by a deserialization, throwing on leftover fields.
|
|
@@ -29,92 +28,123 @@ import { packAsHintedNote } from './note_packing_utils.js';
|
|
|
29
28
|
});
|
|
30
29
|
}
|
|
31
30
|
// ─── Scalar Type Mappings ────────────────────────────────────────────────────
|
|
32
|
-
|
|
31
|
+
/**
|
|
32
|
+
* A leaf mapping whose {@link TypeMapping.label} is just its bare {@link TypeMapping.kind}. Its wire shape is arbitrary
|
|
33
|
+
* (several fields, or a variable-width run); a single-field scalar uses the shorter {@link SCALAR} instead.
|
|
34
|
+
*/ export function LEAF(mapping) {
|
|
35
|
+
return {
|
|
36
|
+
...mapping,
|
|
37
|
+
label: mapping.kind
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** A {@link LEAF} occupying a single `'scalar'` wire slot, so callers omit the shape. */ export function SCALAR(mapping) {
|
|
41
|
+
return LEAF({
|
|
42
|
+
...mapping,
|
|
43
|
+
shape: [
|
|
44
|
+
'scalar'
|
|
45
|
+
]
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export const FIELD = SCALAR({
|
|
49
|
+
kind: 'field',
|
|
33
50
|
serialization: {
|
|
34
51
|
fn: (v)=>[
|
|
35
52
|
v
|
|
36
53
|
]
|
|
37
54
|
},
|
|
38
55
|
deserialization: {
|
|
39
|
-
fn: ([reader])=>reader.readField()
|
|
40
|
-
slots: 1
|
|
56
|
+
fn: ([reader])=>reader.readField()
|
|
41
57
|
}
|
|
42
|
-
};
|
|
43
|
-
export const BOOL = {
|
|
58
|
+
});
|
|
59
|
+
export const BOOL = SCALAR({
|
|
60
|
+
kind: 'bool',
|
|
44
61
|
serialization: {
|
|
45
62
|
fn: (v)=>[
|
|
46
63
|
new Fr(v ? 1n : 0n)
|
|
47
64
|
]
|
|
48
65
|
},
|
|
49
66
|
deserialization: {
|
|
50
|
-
fn: ([reader])=>!reader.readField().isZero()
|
|
51
|
-
slots: 1
|
|
67
|
+
fn: ([reader])=>!reader.readField().isZero()
|
|
52
68
|
}
|
|
53
|
-
};
|
|
54
|
-
export const U32 = {
|
|
69
|
+
});
|
|
70
|
+
export const U32 = SCALAR({
|
|
71
|
+
kind: 'u32',
|
|
55
72
|
serialization: {
|
|
56
73
|
fn: (v)=>[
|
|
57
74
|
new Fr(v)
|
|
58
75
|
]
|
|
59
76
|
},
|
|
60
77
|
deserialization: {
|
|
61
|
-
fn: ([reader])=>
|
|
62
|
-
const value = reader.readField().toBigInt();
|
|
63
|
-
if (value > 0xffffffffn) {
|
|
64
|
-
throw new Error(`U32 overflow: value ${value} exceeds u32 max (${0xffffffffn})`);
|
|
65
|
-
}
|
|
66
|
-
return Number(value);
|
|
67
|
-
},
|
|
68
|
-
slots: 1
|
|
78
|
+
fn: ([reader])=>Number(uintFromField(reader.readField(), 32))
|
|
69
79
|
}
|
|
70
|
-
};
|
|
71
|
-
export const BLOCK_NUMBER = {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
deserialization: {
|
|
78
|
-
fn: ([reader])=>BlockNumber(reader.readField().toNumber()),
|
|
79
|
-
slots: 1
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
/** A u8 byte: serializes to a single Fr; deserializes from a single Fr to a number in [0, 255]. */ export const BYTE = {
|
|
80
|
+
});
|
|
81
|
+
export const BLOCK_NUMBER = ALIAS(U32, {
|
|
82
|
+
wrap: (v)=>BlockNumber(v),
|
|
83
|
+
unwrap: (v)=>v
|
|
84
|
+
});
|
|
85
|
+
export const U8 = SCALAR({
|
|
86
|
+
kind: 'u8',
|
|
83
87
|
serialization: {
|
|
84
88
|
fn: (byte)=>[
|
|
85
89
|
new Fr(byte)
|
|
86
90
|
]
|
|
87
91
|
},
|
|
88
92
|
deserialization: {
|
|
89
|
-
fn: ([reader])=>
|
|
90
|
-
const value = reader.readField().toBigInt();
|
|
91
|
-
if (value > 0xffn) {
|
|
92
|
-
throw new Error(`BYTE overflow: value ${value} exceeds u8 max (255)`);
|
|
93
|
-
}
|
|
94
|
-
return Number(value);
|
|
95
|
-
},
|
|
96
|
-
slots: 1
|
|
93
|
+
fn: ([reader])=>Number(uintFromField(reader.readField(), 8))
|
|
97
94
|
}
|
|
98
|
-
};
|
|
95
|
+
});
|
|
99
96
|
// Noir passes `MessageDelivery` onchain variants here.
|
|
100
|
-
export const DELIVERY_MODE = {
|
|
97
|
+
export const DELIVERY_MODE = SCALAR({
|
|
98
|
+
kind: 'onchain-delivery-mode',
|
|
101
99
|
deserialization: {
|
|
102
|
-
fn: (readers)=>appTaggingSecretKindFromDeliveryMode(
|
|
103
|
-
slots: BYTE.deserialization.slots
|
|
100
|
+
fn: (readers)=>appTaggingSecretKindFromDeliveryMode(U8.deserialization.fn(readers))
|
|
104
101
|
}
|
|
105
|
-
};
|
|
106
|
-
export const
|
|
102
|
+
});
|
|
103
|
+
export const RESOLVED_TAGGING_STRATEGY = LEAF({
|
|
104
|
+
kind: 'resolved-tagging-strategy',
|
|
105
|
+
serialization: {
|
|
106
|
+
fn: (resolved)=>resolvedTaggingStrategyToFields(resolved)
|
|
107
|
+
},
|
|
108
|
+
deserialization: {
|
|
109
|
+
fn: ([kindReader, secretReader])=>resolvedTaggingStrategyFromFields(kindReader.readField().toNumber(), secretReader.readField())
|
|
110
|
+
},
|
|
111
|
+
shape: [
|
|
112
|
+
'scalar',
|
|
113
|
+
'scalar'
|
|
114
|
+
]
|
|
115
|
+
});
|
|
116
|
+
export const BIGINT = ALIAS(FIELD, {
|
|
117
|
+
wrap: (f)=>f.toBigInt(),
|
|
118
|
+
unwrap: (v)=>new Fr(v)
|
|
119
|
+
});
|
|
120
|
+
export const U64 = SCALAR({
|
|
121
|
+
kind: 'u64',
|
|
107
122
|
serialization: {
|
|
108
123
|
fn: (v)=>[
|
|
109
124
|
new Fr(v)
|
|
110
125
|
]
|
|
111
126
|
},
|
|
112
127
|
deserialization: {
|
|
113
|
-
fn: ([reader])=>reader.readField()
|
|
114
|
-
slots: 1
|
|
128
|
+
fn: ([reader])=>uintFromField(reader.readField(), 64)
|
|
115
129
|
}
|
|
116
|
-
};
|
|
117
|
-
|
|
130
|
+
});
|
|
131
|
+
export const U128 = SCALAR({
|
|
132
|
+
kind: 'u128',
|
|
133
|
+
serialization: {
|
|
134
|
+
fn: (v)=>[
|
|
135
|
+
new Fr(v)
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
deserialization: {
|
|
139
|
+
fn: ([reader])=>uintFromField(reader.readField(), 128)
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
export const LEAF_INDEX = ALIAS(FIELD, {
|
|
143
|
+
wrap: (f)=>f.toNumber(),
|
|
144
|
+
unwrap: (v)=>new Fr(v)
|
|
145
|
+
});
|
|
146
|
+
/** Reads every field in the slot as a UTF-8 character code. */ export const STR = LEAF({
|
|
147
|
+
kind: 'str',
|
|
118
148
|
serialization: {
|
|
119
149
|
fn: (str)=>[
|
|
120
150
|
Array.from(Buffer.from(str, 'utf-8')).map((b)=>new Fr(b))
|
|
@@ -127,203 +157,471 @@ export const BIGINT = {
|
|
|
127
157
|
chars.push(String.fromCharCode(reader.readField().toNumber()));
|
|
128
158
|
}
|
|
129
159
|
return chars.join('');
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
shape: [
|
|
163
|
+
'variable'
|
|
164
|
+
]
|
|
165
|
+
});
|
|
166
|
+
export const AZTEC_ADDRESS = SCALAR({
|
|
167
|
+
kind: 'aztec-address',
|
|
135
168
|
serialization: {
|
|
136
169
|
fn: (v)=>[
|
|
137
170
|
v.toField()
|
|
138
171
|
]
|
|
139
172
|
},
|
|
140
173
|
deserialization: {
|
|
141
|
-
fn: ([reader])=>AztecAddress.
|
|
142
|
-
slots: 1
|
|
174
|
+
fn: ([reader])=>AztecAddress.fromFieldUnsafe(reader.readField())
|
|
143
175
|
}
|
|
144
|
-
};
|
|
145
|
-
export const BLOCK_HASH = {
|
|
176
|
+
});
|
|
177
|
+
export const BLOCK_HASH = ALIAS(FIELD, {
|
|
178
|
+
wrap: (f)=>new BlockHash(f),
|
|
179
|
+
unwrap: (v)=>new Fr(v.toBuffer())
|
|
180
|
+
});
|
|
181
|
+
export const FUNCTION_SELECTOR = SCALAR({
|
|
182
|
+
kind: 'function-selector',
|
|
146
183
|
serialization: {
|
|
147
184
|
fn: (v)=>[
|
|
148
|
-
|
|
185
|
+
v.toField()
|
|
149
186
|
]
|
|
150
187
|
},
|
|
151
188
|
deserialization: {
|
|
152
|
-
fn: ([reader])=>
|
|
153
|
-
|
|
189
|
+
fn: ([reader])=>FunctionSelector.fromField(reader.readField())
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
export const NOTE_SELECTOR = ALIAS(FIELD, {
|
|
193
|
+
wrap: (f)=>NoteSelector.fromField(f),
|
|
194
|
+
unwrap: (v)=>v.toField()
|
|
195
|
+
});
|
|
196
|
+
export const TX_HASH = ALIAS(FIELD, {
|
|
197
|
+
wrap: (f)=>TxHash.fromField(f),
|
|
198
|
+
unwrap: (v)=>v.hash
|
|
199
|
+
});
|
|
200
|
+
const TAG = ALIAS(FIELD, {
|
|
201
|
+
wrap: (f)=>new Tag(f),
|
|
202
|
+
unwrap: (v)=>v.value
|
|
203
|
+
});
|
|
204
|
+
export const POINT = STRUCT([
|
|
205
|
+
{
|
|
206
|
+
name: 'x',
|
|
207
|
+
type: FIELD
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'y',
|
|
211
|
+
type: FIELD
|
|
154
212
|
}
|
|
155
|
-
|
|
156
|
-
|
|
213
|
+
]);
|
|
214
|
+
const LOG_SOURCE = SCALAR({
|
|
215
|
+
kind: 'log-source',
|
|
157
216
|
serialization: {
|
|
158
217
|
fn: (v)=>[
|
|
159
|
-
v
|
|
218
|
+
new Fr(v)
|
|
160
219
|
]
|
|
161
220
|
},
|
|
162
221
|
deserialization: {
|
|
163
|
-
fn: ([reader])=>
|
|
164
|
-
slots: 1
|
|
222
|
+
fn: ([reader])=>logSourceFromField(reader.readField())
|
|
165
223
|
}
|
|
166
|
-
};
|
|
167
|
-
export const
|
|
224
|
+
});
|
|
225
|
+
export const ETH_ADDRESS = SCALAR({
|
|
226
|
+
kind: 'eth-address',
|
|
168
227
|
serialization: {
|
|
169
228
|
fn: (v)=>[
|
|
170
229
|
v.toField()
|
|
171
230
|
]
|
|
172
231
|
},
|
|
173
232
|
deserialization: {
|
|
174
|
-
fn: ([reader])=>
|
|
175
|
-
slots: 1
|
|
233
|
+
fn: ([reader])=>EthAddress.fromField(reader.readField())
|
|
176
234
|
}
|
|
177
|
-
};
|
|
178
|
-
export const
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
235
|
+
});
|
|
236
|
+
export const SLOT_NUMBER = ALIAS(FIELD, {
|
|
237
|
+
unwrap: (v)=>new Fr(v)
|
|
238
|
+
});
|
|
239
|
+
const APPEND_ONLY_TREE_SNAPSHOT = STRUCT([
|
|
240
|
+
{
|
|
241
|
+
name: 'root',
|
|
242
|
+
type: FIELD
|
|
183
243
|
},
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
244
|
+
{
|
|
245
|
+
name: 'nextAvailableLeafIndex',
|
|
246
|
+
type: LEAF_INDEX
|
|
187
247
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
]
|
|
248
|
+
]);
|
|
249
|
+
const PARTIAL_STATE_REFERENCE = STRUCT([
|
|
250
|
+
{
|
|
251
|
+
name: 'noteHashTree',
|
|
252
|
+
type: APPEND_ONLY_TREE_SNAPSHOT
|
|
194
253
|
},
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
254
|
+
{
|
|
255
|
+
name: 'nullifierTree',
|
|
256
|
+
type: APPEND_ONLY_TREE_SNAPSHOT
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: 'publicDataTree',
|
|
260
|
+
type: APPEND_ONLY_TREE_SNAPSHOT
|
|
198
261
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
]
|
|
262
|
+
]);
|
|
263
|
+
const STATE_REFERENCE = STRUCT([
|
|
264
|
+
{
|
|
265
|
+
name: 'l1ToL2MessageTree',
|
|
266
|
+
type: APPEND_ONLY_TREE_SNAPSHOT
|
|
205
267
|
},
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
export const BLOCK_HEADER = {
|
|
216
|
-
serialization: {
|
|
217
|
-
fn: (v)=>v.toFields()
|
|
268
|
+
{
|
|
269
|
+
name: 'partial',
|
|
270
|
+
type: PARTIAL_STATE_REFERENCE
|
|
271
|
+
}
|
|
272
|
+
]);
|
|
273
|
+
const GAS_FEES = STRUCT([
|
|
274
|
+
{
|
|
275
|
+
name: 'feePerDaGas',
|
|
276
|
+
type: U128
|
|
218
277
|
},
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
278
|
+
{
|
|
279
|
+
name: 'feePerL2Gas',
|
|
280
|
+
type: U128
|
|
222
281
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
282
|
+
]);
|
|
283
|
+
const GLOBAL_VARIABLES = STRUCT([
|
|
284
|
+
{
|
|
285
|
+
name: 'chainId',
|
|
286
|
+
type: FIELD
|
|
227
287
|
},
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
288
|
+
{
|
|
289
|
+
name: 'version',
|
|
290
|
+
type: FIELD
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
name: 'blockNumber',
|
|
294
|
+
type: BLOCK_NUMBER
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
name: 'slotNumber',
|
|
298
|
+
type: SLOT_NUMBER
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
name: 'timestamp',
|
|
302
|
+
type: U64
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
name: 'coinbase',
|
|
306
|
+
type: ETH_ADDRESS
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: 'feeRecipient',
|
|
310
|
+
type: AZTEC_ADDRESS
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: 'gasFees',
|
|
314
|
+
type: GAS_FEES
|
|
231
315
|
}
|
|
232
|
-
|
|
233
|
-
export const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
316
|
+
]);
|
|
317
|
+
export const BLOCK_HEADER = STRUCT([
|
|
318
|
+
{
|
|
319
|
+
name: 'lastArchive',
|
|
320
|
+
type: APPEND_ONLY_TREE_SNAPSHOT
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'state',
|
|
324
|
+
type: STATE_REFERENCE
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: 'spongeBlobHash',
|
|
328
|
+
type: FIELD
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
name: 'globalVariables',
|
|
332
|
+
type: GLOBAL_VARIABLES
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
name: 'totalFees',
|
|
336
|
+
type: FIELD
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
name: 'totalManaUsed',
|
|
340
|
+
type: FIELD
|
|
243
341
|
}
|
|
244
|
-
|
|
245
|
-
export const
|
|
246
|
-
|
|
247
|
-
|
|
342
|
+
]);
|
|
343
|
+
export const KEY_VALIDATION_REQUEST = STRUCT([
|
|
344
|
+
{
|
|
345
|
+
name: 'pkMHash',
|
|
346
|
+
type: FIELD
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
name: 'skApp',
|
|
350
|
+
type: FIELD
|
|
248
351
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
352
|
+
]);
|
|
353
|
+
const PUBLIC_KEYS = STRUCT([
|
|
354
|
+
{
|
|
355
|
+
name: 'npkMHash',
|
|
356
|
+
type: FIELD
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
name: 'ivpkM',
|
|
360
|
+
type: POINT
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
name: 'ovpkMHash',
|
|
364
|
+
type: FIELD
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: 'tpkMHash',
|
|
368
|
+
type: FIELD
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
name: 'mspkMHash',
|
|
372
|
+
type: FIELD
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
name: 'fbpkMHash',
|
|
376
|
+
type: FIELD
|
|
253
377
|
}
|
|
254
|
-
|
|
255
|
-
export const
|
|
256
|
-
|
|
257
|
-
|
|
378
|
+
]);
|
|
379
|
+
export const CONTRACT_INSTANCE = STRUCT([
|
|
380
|
+
{
|
|
381
|
+
name: 'salt',
|
|
382
|
+
type: FIELD
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
name: 'deployer',
|
|
386
|
+
type: AZTEC_ADDRESS
|
|
387
|
+
},
|
|
388
|
+
// Note that the nr side of this struct does not contain the current class, only original
|
|
389
|
+
{
|
|
390
|
+
name: 'originalContractClassId',
|
|
391
|
+
type: FIELD
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
name: 'initializationHash',
|
|
395
|
+
type: FIELD
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
name: 'immutablesHash',
|
|
399
|
+
type: FIELD
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
name: 'publicKeys',
|
|
403
|
+
type: PUBLIC_KEYS
|
|
258
404
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
ctx.contractAddress.toField()
|
|
265
|
-
]
|
|
405
|
+
]);
|
|
406
|
+
const NULLIFIER_LEAF = STRUCT([
|
|
407
|
+
{
|
|
408
|
+
name: 'nullifier',
|
|
409
|
+
type: FIELD
|
|
266
410
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
411
|
+
]);
|
|
412
|
+
const NULLIFIER_LEAF_PREIMAGE = STRUCT([
|
|
413
|
+
{
|
|
414
|
+
name: 'leaf',
|
|
415
|
+
type: NULLIFIER_LEAF
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
name: 'nextKey',
|
|
419
|
+
type: FIELD
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
name: 'nextIndex',
|
|
423
|
+
type: BIGINT
|
|
276
424
|
}
|
|
277
|
-
|
|
278
|
-
export const
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
425
|
+
]);
|
|
426
|
+
export const NULLIFIER_MEMBERSHIP_WITNESS = STRUCT([
|
|
427
|
+
{
|
|
428
|
+
name: 'leafPreimage',
|
|
429
|
+
type: NULLIFIER_LEAF_PREIMAGE
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
name: 'index',
|
|
433
|
+
type: BIGINT
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
name: 'siblingPath',
|
|
437
|
+
type: SIBLING_PATH(NULLIFIER_TREE_HEIGHT)
|
|
286
438
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return new ContractClassLog(addr, fields, length);
|
|
297
|
-
},
|
|
298
|
-
// ContractClassLog input occupies 3 ACVM slots: [contractAddress], [message fields...], [length].
|
|
299
|
-
slots: 3
|
|
439
|
+
]);
|
|
440
|
+
const PUBLIC_DATA_LEAF = STRUCT([
|
|
441
|
+
{
|
|
442
|
+
name: 'slot',
|
|
443
|
+
type: FIELD
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
name: 'value',
|
|
447
|
+
type: FIELD
|
|
300
448
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
449
|
+
]);
|
|
450
|
+
const PUBLIC_DATA_LEAF_PREIMAGE = STRUCT([
|
|
451
|
+
{
|
|
452
|
+
name: 'leaf',
|
|
453
|
+
type: PUBLIC_DATA_LEAF
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
name: 'nextKey',
|
|
457
|
+
type: FIELD
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
name: 'nextIndex',
|
|
461
|
+
type: BIGINT
|
|
462
|
+
}
|
|
463
|
+
]);
|
|
464
|
+
export const PUBLIC_DATA_WITNESS = STRUCT([
|
|
465
|
+
{
|
|
466
|
+
name: 'index',
|
|
467
|
+
type: BIGINT
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
name: 'leafPreimage',
|
|
471
|
+
type: PUBLIC_DATA_LEAF_PREIMAGE
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
name: 'siblingPath',
|
|
475
|
+
type: SIBLING_PATH(PUBLIC_DATA_TREE_HEIGHT)
|
|
476
|
+
}
|
|
477
|
+
]);
|
|
478
|
+
export const MESSAGE_LOAD_ORACLE_INPUTS = STRUCT([
|
|
479
|
+
{
|
|
480
|
+
name: 'index',
|
|
481
|
+
type: BIGINT
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'siblingPath',
|
|
485
|
+
type: SIBLING_PATH(L1_TO_L2_MSG_TREE_HEIGHT)
|
|
486
|
+
}
|
|
487
|
+
]);
|
|
488
|
+
export const UTILITY_CONTEXT = STRUCT([
|
|
489
|
+
{
|
|
490
|
+
name: 'blockHeader',
|
|
491
|
+
type: BLOCK_HEADER
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
name: 'contractAddress',
|
|
495
|
+
type: AZTEC_ADDRESS
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
name: 'msgSender',
|
|
499
|
+
type: AZTEC_ADDRESS
|
|
500
|
+
}
|
|
501
|
+
]);
|
|
502
|
+
export const CALL_PRIVATE_RESULT = STRUCT([
|
|
503
|
+
{
|
|
504
|
+
name: 'endSideEffectCounter',
|
|
505
|
+
type: FIELD
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
name: 'returnsHash',
|
|
509
|
+
type: FIELD
|
|
510
|
+
}
|
|
511
|
+
]);
|
|
512
|
+
export const PUBLIC_KEYS_AND_PARTIAL_ADDRESS = STRUCT([
|
|
513
|
+
{
|
|
514
|
+
name: 'publicKeys',
|
|
515
|
+
type: PUBLIC_KEYS
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
name: 'partialAddress',
|
|
519
|
+
type: FIELD
|
|
520
|
+
}
|
|
521
|
+
]);
|
|
522
|
+
export const CONTRACT_CLASS_LOG = STRUCT([
|
|
523
|
+
{
|
|
524
|
+
name: 'contractAddress',
|
|
525
|
+
type: AZTEC_ADDRESS
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
name: 'fields',
|
|
529
|
+
type: FIXED_ARRAY(FIELD, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS)
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
name: 'emittedLength',
|
|
533
|
+
type: U32
|
|
534
|
+
}
|
|
535
|
+
]);
|
|
536
|
+
const PUBLIC_DATA_WRITE = STRUCT([
|
|
537
|
+
{
|
|
538
|
+
name: 'leafSlot',
|
|
539
|
+
type: FIELD
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
name: 'value',
|
|
543
|
+
type: FIELD
|
|
324
544
|
}
|
|
325
|
-
|
|
326
|
-
|
|
545
|
+
]);
|
|
546
|
+
const PRIVATE_LOG = STRUCT([
|
|
547
|
+
{
|
|
548
|
+
name: 'fields',
|
|
549
|
+
type: FIXED_ARRAY(FIELD, PRIVATE_LOG_SIZE_IN_FIELDS)
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
name: 'emittedLength',
|
|
553
|
+
type: U32
|
|
554
|
+
}
|
|
555
|
+
]);
|
|
556
|
+
const FLAT_PUBLIC_LOGS = STRUCT([
|
|
557
|
+
{
|
|
558
|
+
name: 'length',
|
|
559
|
+
type: U32
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
name: 'payload',
|
|
563
|
+
type: FIXED_ARRAY(FIELD, FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH)
|
|
564
|
+
}
|
|
565
|
+
]);
|
|
566
|
+
const CONTRACT_CLASS_LOG_ENTRY = STRUCT([
|
|
567
|
+
{
|
|
568
|
+
name: 'fields',
|
|
569
|
+
type: FIXED_ARRAY(FIELD, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS)
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
name: 'emittedLength',
|
|
573
|
+
type: U32
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
name: 'contractAddress',
|
|
577
|
+
type: AZTEC_ADDRESS
|
|
578
|
+
}
|
|
579
|
+
]);
|
|
580
|
+
const CONTRACT_CLASS_LOGS = FIXED_ARRAY(CONTRACT_CLASS_LOG_ENTRY, MAX_CONTRACT_CLASS_LOGS_PER_TX);
|
|
581
|
+
export const TX_EFFECT = STRUCT([
|
|
582
|
+
{
|
|
583
|
+
name: 'revertCode',
|
|
584
|
+
type: U8
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
name: 'txHash',
|
|
588
|
+
type: TX_HASH
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
name: 'transactionFee',
|
|
592
|
+
type: FIELD
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: 'noteHashes',
|
|
596
|
+
type: FIXED_ARRAY(FIELD, MAX_NOTE_HASHES_PER_TX)
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
name: 'nullifiers',
|
|
600
|
+
type: FIXED_ARRAY(FIELD, MAX_NULLIFIERS_PER_TX)
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
name: 'l2ToL1Msgs',
|
|
604
|
+
type: FIXED_ARRAY(FIELD, MAX_L2_TO_L1_MSGS_PER_TX)
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
name: 'publicDataWrites',
|
|
608
|
+
type: FIXED_ARRAY(PUBLIC_DATA_WRITE, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX)
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
name: 'privateLogs',
|
|
612
|
+
type: FIXED_ARRAY(PRIVATE_LOG, MAX_PRIVATE_LOGS_PER_TX)
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
name: 'publicLogs',
|
|
616
|
+
type: FLAT_PUBLIC_LOGS
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
name: 'contractClassLogs',
|
|
620
|
+
type: CONTRACT_CLASS_LOGS
|
|
621
|
+
}
|
|
622
|
+
]);
|
|
623
|
+
export const NOTE = LEAF({
|
|
624
|
+
kind: 'note',
|
|
327
625
|
serialization: {
|
|
328
626
|
fn: (noteData)=>packAsHintedNote({
|
|
329
627
|
contractAddress: noteData.contractAddress,
|
|
@@ -334,90 +632,288 @@ export const NOTE = {
|
|
|
334
632
|
isPending: noteData.isPending,
|
|
335
633
|
note: noteData.note
|
|
336
634
|
})
|
|
635
|
+
},
|
|
636
|
+
// A packed note is the note's (variable-count) field items followed by 6 metadata scalars, emitted as one field
|
|
637
|
+
// output per element. Its length depends on the note, so it is described as a single variable-width run.
|
|
638
|
+
shape: [
|
|
639
|
+
'variable'
|
|
640
|
+
]
|
|
641
|
+
});
|
|
642
|
+
export const NOTE_VALIDATION_REQUEST = LEAF({
|
|
643
|
+
kind: 'note-validation-request',
|
|
644
|
+
deserialization: {
|
|
645
|
+
fn: ([reader])=>NoteValidationRequest.fromFields(reader)
|
|
646
|
+
},
|
|
647
|
+
shape: [
|
|
648
|
+
'variable'
|
|
649
|
+
]
|
|
650
|
+
});
|
|
651
|
+
export const EVENT_VALIDATION_REQUEST = LEAF({
|
|
652
|
+
kind: 'event-validation-request',
|
|
653
|
+
deserialization: {
|
|
654
|
+
fn: ([reader])=>EventValidationRequest.fromFields(reader)
|
|
655
|
+
},
|
|
656
|
+
shape: [
|
|
657
|
+
'variable'
|
|
658
|
+
]
|
|
659
|
+
});
|
|
660
|
+
export const LOG_RETRIEVAL_REQUEST = STRUCT([
|
|
661
|
+
{
|
|
662
|
+
name: 'contractAddress',
|
|
663
|
+
type: AZTEC_ADDRESS
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
name: 'tag',
|
|
667
|
+
type: TAG
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
name: 'source',
|
|
671
|
+
type: LOG_SOURCE
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
name: 'fromBlock',
|
|
675
|
+
type: OPTION(BLOCK_NUMBER)
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
name: 'toBlock',
|
|
679
|
+
type: OPTION(BLOCK_NUMBER)
|
|
337
680
|
}
|
|
338
|
-
|
|
339
|
-
export const
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
681
|
+
]);
|
|
682
|
+
export const LOG_RETRIEVAL_RESPONSE = STRUCT([
|
|
683
|
+
{
|
|
684
|
+
name: 'logPayload',
|
|
685
|
+
type: FIXED_BOUNDED_VEC(FIELD, PRIVATE_LOG_CIPHERTEXT_LEN)
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
name: 'txHash',
|
|
689
|
+
type: TX_HASH
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
name: 'uniqueNoteHashesInTx',
|
|
693
|
+
type: FIXED_BOUNDED_VEC(FIELD, MAX_NOTE_HASHES_PER_TX)
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
name: 'firstNullifierInTx',
|
|
697
|
+
type: FIELD
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
name: 'blockNumber',
|
|
701
|
+
type: BLOCK_NUMBER
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
name: 'blockTimestamp',
|
|
705
|
+
type: U64
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
name: 'blockHash',
|
|
709
|
+
type: BLOCK_HASH
|
|
344
710
|
}
|
|
345
|
-
|
|
346
|
-
export const
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
711
|
+
]);
|
|
712
|
+
export const RESOLVED_TX = STRUCT([
|
|
713
|
+
{
|
|
714
|
+
name: 'txHash',
|
|
715
|
+
type: TX_HASH
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
name: 'uniqueNoteHashesInTx',
|
|
719
|
+
type: FIXED_BOUNDED_VEC(FIELD, MAX_NOTE_HASHES_PER_TX)
|
|
720
|
+
},
|
|
721
|
+
{
|
|
722
|
+
name: 'firstNullifierInTx',
|
|
723
|
+
type: FIELD
|
|
724
|
+
},
|
|
725
|
+
{
|
|
726
|
+
name: 'blockNumber',
|
|
727
|
+
type: U32
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
name: 'blockHash',
|
|
731
|
+
type: FIELD
|
|
350
732
|
}
|
|
351
|
-
|
|
352
|
-
export const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
733
|
+
]);
|
|
734
|
+
export const PENDING_TAGGED_LOG = STRUCT([
|
|
735
|
+
{
|
|
736
|
+
name: 'log',
|
|
737
|
+
type: FIXED_BOUNDED_VEC(FIELD, PRIVATE_LOG_SIZE_IN_FIELDS)
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
name: 'context',
|
|
741
|
+
type: RESOLVED_TX
|
|
356
742
|
}
|
|
357
|
-
|
|
358
|
-
export const
|
|
743
|
+
]);
|
|
744
|
+
export const ORIGIN_BLOCK = STRUCT([
|
|
745
|
+
{
|
|
746
|
+
name: 'blockNumber',
|
|
747
|
+
type: U32
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
name: 'blockHash',
|
|
751
|
+
type: FIELD
|
|
752
|
+
}
|
|
753
|
+
]);
|
|
754
|
+
const ORIGIN_BLOCK_STATE = SCALAR({
|
|
755
|
+
kind: 'origin-block-state',
|
|
359
756
|
serialization: {
|
|
360
|
-
fn: (
|
|
361
|
-
|
|
757
|
+
fn: (v)=>[
|
|
758
|
+
new Fr(v)
|
|
362
759
|
]
|
|
363
760
|
},
|
|
364
761
|
deserialization: {
|
|
365
|
-
fn: ([reader])=>
|
|
366
|
-
slots: 1
|
|
762
|
+
fn: ([reader])=>originBlockStateFromNumber(reader.readField().toNumber())
|
|
367
763
|
}
|
|
368
|
-
};
|
|
369
|
-
export const
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
764
|
+
});
|
|
765
|
+
/** Read-side origin of a retractable fact, carrying the chain state of its origin block. */ export const RETRACTABLE_FACT_ORIGIN = STRUCT([
|
|
766
|
+
{
|
|
767
|
+
name: 'blockNumber',
|
|
768
|
+
type: U32
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
name: 'blockHash',
|
|
772
|
+
type: FIELD
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
name: 'blockState',
|
|
776
|
+
type: ORIGIN_BLOCK_STATE
|
|
374
777
|
}
|
|
375
|
-
|
|
376
|
-
export const
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
778
|
+
]);
|
|
779
|
+
export const FACT = STRUCT([
|
|
780
|
+
{
|
|
781
|
+
name: 'factTypeId',
|
|
782
|
+
type: FIELD
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
name: 'payload',
|
|
786
|
+
type: EPHEMERAL_ARRAY(FIELD)
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
name: 'originBlock',
|
|
790
|
+
type: OPTION(RETRACTABLE_FACT_ORIGIN)
|
|
381
791
|
}
|
|
382
|
-
|
|
383
|
-
export const
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
792
|
+
]);
|
|
793
|
+
export const FACT_COLLECTION = STRUCT([
|
|
794
|
+
{
|
|
795
|
+
name: 'contractAddress',
|
|
796
|
+
type: AZTEC_ADDRESS
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
name: 'scope',
|
|
800
|
+
type: AZTEC_ADDRESS
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
name: 'factCollectionTypeId',
|
|
804
|
+
type: FIELD
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
name: 'factCollectionId',
|
|
808
|
+
type: FIELD
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
name: 'facts',
|
|
812
|
+
type: EPHEMERAL_ARRAY(FACT)
|
|
813
|
+
}
|
|
814
|
+
]);
|
|
815
|
+
export const PROVIDED_SECRET = STRUCT([
|
|
816
|
+
{
|
|
817
|
+
name: 'secret',
|
|
818
|
+
type: FIELD
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
name: 'mode',
|
|
822
|
+
type: DELIVERY_MODE
|
|
387
823
|
}
|
|
388
|
-
|
|
824
|
+
]);
|
|
389
825
|
// ─── Combinator Type Mappings ────────────────────────────────────────────────
|
|
390
|
-
/**
|
|
826
|
+
/**
|
|
827
|
+
* A TS-side alias of `base`: the same Noir type on the wire (it inherits `base`'s `kind`, `label`, and `shape`) but a
|
|
828
|
+
* richer TS value. `wrap` maps a base value to the alias, `unwrap` back; a serialize-only alias passes only `unwrap`.
|
|
829
|
+
*/ export function ALIAS(base, conversions) {
|
|
830
|
+
const { wrap, unwrap } = conversions;
|
|
391
831
|
return {
|
|
832
|
+
kind: base.kind,
|
|
833
|
+
label: base.label,
|
|
834
|
+
serialization: base.serialization && unwrap ? {
|
|
835
|
+
fn: (value)=>base.serialization.fn(unwrap(value))
|
|
836
|
+
} : undefined,
|
|
837
|
+
deserialization: base.deserialization && wrap ? {
|
|
838
|
+
fn: (readers)=>wrap(base.deserialization.fn(readers))
|
|
839
|
+
} : undefined,
|
|
840
|
+
shape: base.shape
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
function SIBLING_PATH(height) {
|
|
844
|
+
return LEAF({
|
|
845
|
+
// On the wire (and in Noir) a sibling path is a plain `[Field; height]`, so it shares the fixed-array kind.
|
|
846
|
+
kind: `array(field,${height})`,
|
|
392
847
|
serialization: {
|
|
393
|
-
fn: (
|
|
394
|
-
|
|
395
|
-
[
|
|
396
|
-
...witness.siblingPath
|
|
397
|
-
]
|
|
848
|
+
fn: (sp)=>[
|
|
849
|
+
sp.toFields()
|
|
398
850
|
]
|
|
851
|
+
},
|
|
852
|
+
shape: [
|
|
853
|
+
{
|
|
854
|
+
len: height
|
|
855
|
+
}
|
|
856
|
+
]
|
|
857
|
+
});
|
|
858
|
+
}
|
|
859
|
+
export function MEMBERSHIP_WITNESS(height) {
|
|
860
|
+
return STRUCT([
|
|
861
|
+
{
|
|
862
|
+
name: 'leafIndex',
|
|
863
|
+
type: BIGINT
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
name: 'siblingPath',
|
|
867
|
+
type: FIXED_ARRAY(FIELD, height)
|
|
399
868
|
}
|
|
869
|
+
]);
|
|
870
|
+
}
|
|
871
|
+
export function ARRAY(inner) {
|
|
872
|
+
return {
|
|
873
|
+
kind: 'array',
|
|
874
|
+
label: `array(${inner.label})`,
|
|
875
|
+
inner,
|
|
876
|
+
serialization: inner.serialization ? {
|
|
877
|
+
fn: (values)=>[
|
|
878
|
+
packElements(inner, values)
|
|
879
|
+
]
|
|
880
|
+
} : undefined,
|
|
881
|
+
deserialization: inner.deserialization ? {
|
|
882
|
+
// The whole slot is the array, so read as many elements as its fields hold.
|
|
883
|
+
fn: ([reader])=>unpackElements(inner, reader, reader.remainingFields() / fieldWidth(inner.shape))
|
|
884
|
+
} : undefined,
|
|
885
|
+
// One slot of variable length (all elements flattened into it).
|
|
886
|
+
shape: [
|
|
887
|
+
{
|
|
888
|
+
lenFrom: (size)=>size.length * fieldWidth(inner.shape)
|
|
889
|
+
}
|
|
890
|
+
]
|
|
400
891
|
};
|
|
401
892
|
}
|
|
402
|
-
|
|
893
|
+
/**
|
|
894
|
+
* Noir's fixed-length array `[T; length]` in one slot: serializes `values` (each flattened via `element`)
|
|
895
|
+
* zero-padded to exactly `length * elementWidth` fields, and deserializes all `length` elements back. An absent
|
|
896
|
+
* element is the zero encoding, so the padding is derived from the shape.
|
|
897
|
+
*/ export function FIXED_ARRAY(element, length) {
|
|
898
|
+
const elementWidth = fieldWidth(element.shape);
|
|
403
899
|
return {
|
|
900
|
+
kind: 'fixed-array',
|
|
901
|
+
label: `array(${element.label},${length})`,
|
|
902
|
+
inner: element,
|
|
903
|
+
length,
|
|
404
904
|
serialization: element.serialization ? {
|
|
405
905
|
fn: (values)=>[
|
|
406
|
-
|
|
906
|
+
padArrayEnd(packElements(element, values), Fr.ZERO, length * elementWidth)
|
|
407
907
|
]
|
|
408
908
|
} : undefined,
|
|
409
909
|
deserialization: element.deserialization ? {
|
|
410
|
-
fn: ([reader])=>
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
return result;
|
|
418
|
-
},
|
|
419
|
-
slots: 1
|
|
420
|
-
} : undefined
|
|
910
|
+
fn: ([reader])=>unpackElements(element, reader, length)
|
|
911
|
+
} : undefined,
|
|
912
|
+
shape: [
|
|
913
|
+
{
|
|
914
|
+
len: length * elementWidth
|
|
915
|
+
}
|
|
916
|
+
]
|
|
421
917
|
};
|
|
422
918
|
}
|
|
423
919
|
/**
|
|
@@ -427,134 +923,321 @@ export function ARRAY(element) {
|
|
|
427
923
|
*
|
|
428
924
|
* Both directions are derived from `element`: bidirectional iff `element` has both serialization and deserialization.
|
|
429
925
|
*
|
|
430
|
-
* @example Serializing `BoundedVec.from({ data: [0x41, 0x42], maxLength: 4 })` with `BOUNDED_VEC(
|
|
926
|
+
* @example Serializing `BoundedVec.from({ data: [0x41, 0x42], maxLength: 4 })` with `BOUNDED_VEC(U8)`:
|
|
431
927
|
* ```
|
|
432
928
|
* slot 0: [Fr(0x41), Fr(0x42), Fr(0), Fr(0)] // data padded to maxLength
|
|
433
929
|
* slot 1: Fr(2) // actual length
|
|
434
930
|
* ```
|
|
435
|
-
*/ export function BOUNDED_VEC(
|
|
931
|
+
*/ export function BOUNDED_VEC(inner) {
|
|
436
932
|
return {
|
|
437
|
-
|
|
933
|
+
kind: 'bounded-vec',
|
|
934
|
+
label: `bounded-vec(${inner.label})`,
|
|
935
|
+
inner,
|
|
936
|
+
serialization: inner.serialization ? {
|
|
438
937
|
fn: (bv)=>{
|
|
439
938
|
if (bv.data.length > bv.maxLength) {
|
|
440
939
|
throw new Error(`Got ${bv.data.length} items, but maxLength is ${bv.maxLength}`);
|
|
441
940
|
}
|
|
442
|
-
|
|
941
|
+
// Fixed-width elements take their width from the shape (consistent with deserialization); only a
|
|
942
|
+
// variable-width element (e.g. a packed note) falls back to the runtime `elementSize` the value carries.
|
|
943
|
+
const elementWidth = tryFieldWidth(inner.shape) ?? bv.elementSize;
|
|
944
|
+
const flat = padArrayEnd(packElements(inner, bv.data), Fr.ZERO, bv.maxLength * elementWidth);
|
|
443
945
|
return [
|
|
444
|
-
|
|
946
|
+
flat,
|
|
445
947
|
new Fr(bv.data.length)
|
|
446
948
|
];
|
|
447
949
|
}
|
|
448
950
|
} : undefined,
|
|
449
|
-
deserialization:
|
|
951
|
+
deserialization: inner.deserialization ? {
|
|
450
952
|
fn: ([storageReader, lengthReader])=>{
|
|
451
|
-
|
|
953
|
+
// slot 0 is the padded storage, slot 1 the actual length. Parse only the first `length` elements out of
|
|
954
|
+
// storage, then drain the trailing zero-padding so the storage reader is fully consumed.
|
|
955
|
+
const maxLength = storageReader.remainingFields() / fieldWidth(inner.shape);
|
|
452
956
|
const length = lengthReader.readField().toNumber();
|
|
453
|
-
const elements =
|
|
454
|
-
for(let i = 0; i < length; i++){
|
|
455
|
-
elements.push(element.deserialization.fn([
|
|
456
|
-
storageReader
|
|
457
|
-
]));
|
|
458
|
-
}
|
|
459
|
-
// Drain the trailing zero-padding (maxLength - length unused element slots) so the storage reader is
|
|
460
|
-
// fully consumed.
|
|
957
|
+
const elements = unpackElements(inner, storageReader, length);
|
|
461
958
|
storageReader.skip(storageReader.remainingFields());
|
|
462
959
|
return BoundedVec.from({
|
|
463
960
|
data: elements,
|
|
464
961
|
maxLength
|
|
465
962
|
});
|
|
963
|
+
}
|
|
964
|
+
} : undefined,
|
|
965
|
+
// slot 0: variable-length storage; slot 1: the length scalar.
|
|
966
|
+
shape: [
|
|
967
|
+
{
|
|
968
|
+
lenFrom: (size)=>size.maxLength * fieldWidth(inner.shape)
|
|
466
969
|
},
|
|
467
|
-
|
|
468
|
-
|
|
970
|
+
'scalar'
|
|
971
|
+
]
|
|
972
|
+
};
|
|
973
|
+
}
|
|
974
|
+
/**
|
|
975
|
+
* Noir's `BoundedVec<T, MaxLen>` in its padded form (one fixed-width slot): `maxLength * elementWidth` storage fields
|
|
976
|
+
* (zero-padded) followed by the actual length, with no length prefix, so the width is statically known. Serialize-only.
|
|
977
|
+
* Throws if the input exceeds `maxLength`.
|
|
978
|
+
*/ export function FIXED_BOUNDED_VEC(element, maxLength) {
|
|
979
|
+
const width = fieldWidth(element.shape);
|
|
980
|
+
return {
|
|
981
|
+
kind: 'fixed-bounded-vec',
|
|
982
|
+
label: `bounded-vec(${element.label},${maxLength})`,
|
|
983
|
+
inner: element,
|
|
984
|
+
maxLength,
|
|
985
|
+
serialization: element.serialization ? {
|
|
986
|
+
fn: (values)=>{
|
|
987
|
+
if (values.length > maxLength) {
|
|
988
|
+
throw new Error(`Got ${values.length} items, but maxLength is ${maxLength}`);
|
|
989
|
+
}
|
|
990
|
+
const flat = padArrayEnd(packElements(element, values), Fr.ZERO, maxLength * width);
|
|
991
|
+
return [
|
|
992
|
+
[
|
|
993
|
+
...flat,
|
|
994
|
+
new Fr(values.length)
|
|
995
|
+
]
|
|
996
|
+
];
|
|
997
|
+
}
|
|
998
|
+
} : undefined,
|
|
999
|
+
shape: [
|
|
1000
|
+
{
|
|
1001
|
+
len: maxLength * width + 1
|
|
1002
|
+
}
|
|
1003
|
+
]
|
|
469
1004
|
};
|
|
470
1005
|
}
|
|
471
1006
|
/**
|
|
472
|
-
* Wraps an inner TypeMapping in Noir-style `Option<T
|
|
473
|
-
* `Option.none(shape)` template to produce a correctly-sized zero-filled output for the None case.
|
|
1007
|
+
* Wraps an inner TypeMapping in Noir-style `Option<T>`, adding a leading discriminant slot.
|
|
474
1008
|
*
|
|
475
|
-
*
|
|
1009
|
+
* For the `None` case, the inner's slots must still be present on the wire as zero-padding (so `Some` and `None` have
|
|
1010
|
+
* identical size). That padding is derived entirely from `inner.shape`.
|
|
1011
|
+
*
|
|
1012
|
+
* @example Serializing `Option.some(AztecAddress.fromFieldUnsafe(Fr(42)))` with `OPTION(AZTEC_ADDRESS)`:
|
|
476
1013
|
* ```
|
|
477
1014
|
* slot 0: Fr(1) // discriminant: Some
|
|
478
1015
|
* slot 1: Fr(42) // inner value
|
|
479
1016
|
* ```
|
|
480
1017
|
*
|
|
481
|
-
* @example Serializing `Option.
|
|
1018
|
+
* @example Serializing `Option.none()` with `OPTION(AZTEC_ADDRESS)`:
|
|
482
1019
|
* ```
|
|
483
1020
|
* slot 0: Fr(0) // discriminant: None
|
|
484
|
-
* slot 1: Fr(0) // zero-filled
|
|
1021
|
+
* slot 1: Fr(0) // zero-filled from AZTEC_ADDRESS.shape
|
|
485
1022
|
* ```
|
|
486
1023
|
*/ export function OPTION(inner) {
|
|
487
1024
|
return {
|
|
1025
|
+
kind: 'option',
|
|
1026
|
+
label: `option(${inner.label})`,
|
|
1027
|
+
inner,
|
|
488
1028
|
serialization: inner.serialization ? {
|
|
489
|
-
fn: (opt)=>
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
...inner.serialization.fn(opt.value)
|
|
494
|
-
];
|
|
495
|
-
}
|
|
496
|
-
if (opt.template === undefined) {
|
|
497
|
-
throw new Error('Cannot serialize Option.empty() without an emptyTemplate — provide one via Option.empty(emptyTemplate)');
|
|
498
|
-
}
|
|
499
|
-
const zeroSlots = inner.serialization.fn(opt.template).map((s)=>Array.isArray(s) ? Array(s.length).fill(Fr.ZERO) : Fr.ZERO);
|
|
500
|
-
return [
|
|
1029
|
+
fn: (opt)=>opt.isSome() ? [
|
|
1030
|
+
Fr.ONE,
|
|
1031
|
+
...inner.serialization.fn(opt.value)
|
|
1032
|
+
] : [
|
|
501
1033
|
Fr.ZERO,
|
|
502
|
-
...
|
|
503
|
-
]
|
|
504
|
-
}
|
|
1034
|
+
...zeroSlotsFromShape(inner.shape, opt.size)
|
|
1035
|
+
]
|
|
505
1036
|
} : undefined,
|
|
506
1037
|
deserialization: inner.deserialization ? {
|
|
507
1038
|
fn: ([discriminant, ...innerReaders])=>{
|
|
508
1039
|
if (discriminant.readField().isZero()) {
|
|
509
|
-
// None still carries zero-
|
|
510
|
-
//
|
|
1040
|
+
// None still carries the inner's zero-padded slots; consume them without parsing, since an inner that
|
|
1041
|
+
// validates its fields would reject the zeros.
|
|
511
1042
|
innerReaders.forEach((reader)=>reader.skip(reader.remainingFields()));
|
|
512
|
-
return Option.none(
|
|
1043
|
+
return Option.none();
|
|
513
1044
|
}
|
|
514
1045
|
return Option.some(inner.deserialization.fn(innerReaders));
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
serialization: {
|
|
523
|
-
fn: (buf)=>[
|
|
524
|
-
Array.from(buf).map((b)=>new Fr(b))
|
|
525
|
-
]
|
|
526
|
-
},
|
|
527
|
-
deserialization: {
|
|
528
|
-
fn: ([reader])=>{
|
|
529
|
-
const fields = reader.readFieldArray(reader.remainingFields()).map((f)=>f.toString());
|
|
530
|
-
return fromUintArray(fields, bitSize);
|
|
531
|
-
},
|
|
532
|
-
slots: 1
|
|
533
|
-
}
|
|
1046
|
+
}
|
|
1047
|
+
} : undefined,
|
|
1048
|
+
// A leading discriminant slot followed by the inner's slots.
|
|
1049
|
+
shape: [
|
|
1050
|
+
'scalar',
|
|
1051
|
+
...inner.shape
|
|
1052
|
+
]
|
|
534
1053
|
};
|
|
535
1054
|
}
|
|
536
1055
|
export function EPHEMERAL_ARRAY(element) {
|
|
537
|
-
//
|
|
538
|
-
//
|
|
1056
|
+
// EphemeralArray.readAll hands each row's flat fields in as a single reader; reconstruct the element's per-slot
|
|
1057
|
+
// readers from its shape, deserialize, and assert the row was fully consumed so a row with trailing fields is
|
|
1058
|
+
// rejected.
|
|
539
1059
|
const rowElement = element.deserialization ? {
|
|
1060
|
+
kind: element.kind,
|
|
1061
|
+
label: element.label,
|
|
540
1062
|
deserialization: {
|
|
541
|
-
fn: (
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
1063
|
+
fn: ([rowReader])=>deserializeElement(element, rowReader.readFieldArray(rowReader.remainingFields()))
|
|
1064
|
+
},
|
|
1065
|
+
// `fn` reads the whole row from one reader, so this is one variable-width slot, not the element's multi-slot
|
|
1066
|
+
// shape.
|
|
1067
|
+
shape: [
|
|
1068
|
+
'variable'
|
|
1069
|
+
]
|
|
548
1070
|
} : undefined;
|
|
549
1071
|
return {
|
|
1072
|
+
kind: 'ephemeral-array',
|
|
1073
|
+
label: `ephemeral-array(${element.label})`,
|
|
1074
|
+
inner: element,
|
|
550
1075
|
serialization: element.serialization ? {
|
|
551
1076
|
fn: (ea)=>[
|
|
552
|
-
ea.materializeSlot((v)=>element
|
|
1077
|
+
ea.materializeSlot((v)=>serializeElement(element, v))
|
|
553
1078
|
]
|
|
554
1079
|
} : undefined,
|
|
555
1080
|
deserialization: rowElement ? {
|
|
556
|
-
fn: ([reader])=>EphemeralArray.fromSlot(reader.readField(), rowElement)
|
|
557
|
-
|
|
558
|
-
|
|
1081
|
+
fn: ([reader])=>EphemeralArray.fromSlot(reader.readField(), rowElement)
|
|
1082
|
+
} : undefined,
|
|
1083
|
+
// A single slot carrying the array's service-slot id.
|
|
1084
|
+
shape: [
|
|
1085
|
+
'scalar'
|
|
1086
|
+
]
|
|
1087
|
+
};
|
|
1088
|
+
}
|
|
1089
|
+
/**
|
|
1090
|
+
* A Noir struct: its `shape` and (de)serialization are the concatenation of its fields', so callers never hand-write a
|
|
1091
|
+
* `shape`. `T` is the struct's TS value type and must match the field layout — serialization reads each field by name
|
|
1092
|
+
* off the value, deserialization returns the decoded bag as `T`; convert in the handler, not here, when `T` differs.
|
|
1093
|
+
*/ export function STRUCT(fields) {
|
|
1094
|
+
return {
|
|
1095
|
+
kind: 'struct',
|
|
1096
|
+
label: `{${structFieldLabels(fields)}}`,
|
|
1097
|
+
fields,
|
|
1098
|
+
serialization: fields.every((f)=>f.type.serialization) ? {
|
|
1099
|
+
fn: (value)=>{
|
|
1100
|
+
const props = value;
|
|
1101
|
+
return fields.flatMap((f)=>f.type.serialization.fn(props[f.name]));
|
|
1102
|
+
}
|
|
1103
|
+
} : undefined,
|
|
1104
|
+
deserialization: fields.every((f)=>f.type.deserialization) ? {
|
|
1105
|
+
fn: (readers)=>{
|
|
1106
|
+
const props = {};
|
|
1107
|
+
let slot = 0;
|
|
1108
|
+
for (const f of fields){
|
|
1109
|
+
const slotCount = f.type.shape.length;
|
|
1110
|
+
props[f.name] = f.type.deserialization.fn(readers.slice(slot, slot + slotCount));
|
|
1111
|
+
slot += slotCount;
|
|
1112
|
+
}
|
|
1113
|
+
return props;
|
|
1114
|
+
}
|
|
1115
|
+
} : undefined,
|
|
1116
|
+
shape: fields.flatMap((f)=>f.type.shape)
|
|
559
1117
|
};
|
|
560
1118
|
}
|
|
1119
|
+
export function isArrayMapping(type) {
|
|
1120
|
+
return type.kind === 'array';
|
|
1121
|
+
}
|
|
1122
|
+
export function isBoundedVecMapping(type) {
|
|
1123
|
+
return type.kind === 'bounded-vec';
|
|
1124
|
+
}
|
|
1125
|
+
export function isOptionMapping(type) {
|
|
1126
|
+
return type.kind === 'option';
|
|
1127
|
+
}
|
|
1128
|
+
export function isStructMapping(type) {
|
|
1129
|
+
return type.kind === 'struct';
|
|
1130
|
+
}
|
|
1131
|
+
export function isFixedArrayMapping(type) {
|
|
1132
|
+
return type.kind === 'fixed-array';
|
|
1133
|
+
}
|
|
1134
|
+
export function isFixedBoundedVecMapping(type) {
|
|
1135
|
+
return type.kind === 'fixed-bounded-vec';
|
|
1136
|
+
}
|
|
1137
|
+
export function isEphemeralArrayMapping(type) {
|
|
1138
|
+
return type.kind === 'ephemeral-array';
|
|
1139
|
+
}
|
|
1140
|
+
/**
|
|
1141
|
+
* The comma-joined labels of a struct's fields, with nested struct labels spliced into the parent: nesting affects
|
|
1142
|
+
* neither the wire (struct slots concatenate) nor the interface, so the label treats nested and flat declarations as
|
|
1143
|
+
* the same type.
|
|
1144
|
+
*/ function structFieldLabels(fields) {
|
|
1145
|
+
return fields.map((f)=>isStructMapping(f.type) ? structFieldLabels(f.type.fields) : f.type.label).join(',');
|
|
1146
|
+
}
|
|
1147
|
+
/** The field's value as a bigint, asserted to fit a `bits`-wide uint. */ function uintFromField(field, bits) {
|
|
1148
|
+
const max = 2n ** BigInt(bits) - 1n;
|
|
1149
|
+
const value = field.toBigInt();
|
|
1150
|
+
if (value > max) {
|
|
1151
|
+
throw new Error(`u${bits} overflow: value ${value} exceeds max (${max})`);
|
|
1152
|
+
}
|
|
1153
|
+
return value;
|
|
1154
|
+
}
|
|
1155
|
+
/** Number of InputSlots a deserializable type spans, derived from its {@link TypeMapping.shape}. */ export function slotsOf(mapping) {
|
|
1156
|
+
return mapping.shape.length;
|
|
1157
|
+
}
|
|
1158
|
+
/** Number of fields a fully-static shape occupies, or `undefined` if any slot is variable-width. */ export function tryFieldWidth(shape) {
|
|
1159
|
+
let total = 0;
|
|
1160
|
+
for (const slot of shape){
|
|
1161
|
+
if (slot === 'scalar') {
|
|
1162
|
+
total += 1;
|
|
1163
|
+
} else if (typeof slot === 'object' && 'len' in slot) {
|
|
1164
|
+
total += slot.len;
|
|
1165
|
+
} else {
|
|
1166
|
+
return undefined;
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
return total;
|
|
1170
|
+
}
|
|
1171
|
+
/** Number of fields a fully-static shape occupies. Throws on a variable-width shape, whose field count isn't known. */ function fieldWidth(shape) {
|
|
1172
|
+
const width = tryFieldWidth(shape);
|
|
1173
|
+
if (width === undefined) {
|
|
1174
|
+
throw new Error('Cannot compute a fixed field width for a variable-width shape');
|
|
1175
|
+
}
|
|
1176
|
+
return width;
|
|
1177
|
+
}
|
|
1178
|
+
/** Reconstructs a value's per-slot readers from a flat run of fields, using its shape (inverse of slot-flattening). */ function splitByShape(fields, shape) {
|
|
1179
|
+
const readers = [];
|
|
1180
|
+
let cursor = 0;
|
|
1181
|
+
shape.forEach((slot, i)=>{
|
|
1182
|
+
if (slot === 'scalar' || typeof slot === 'object' && 'len' in slot) {
|
|
1183
|
+
const width = slot === 'scalar' ? 1 : slot.len;
|
|
1184
|
+
if (cursor + width > fields.length) {
|
|
1185
|
+
throw new Error(`Not enough fields to reconstruct shape: needed ${width}, had ${fields.length - cursor}`);
|
|
1186
|
+
}
|
|
1187
|
+
readers.push(new FieldReader(fields.slice(cursor, cursor + width)));
|
|
1188
|
+
cursor += width;
|
|
1189
|
+
} else {
|
|
1190
|
+
// A variable slot (sized or not) takes whatever remains, so it must be last.
|
|
1191
|
+
if (i !== shape.length - 1) {
|
|
1192
|
+
throw new Error('A variable-width slot must be last to be reconstructed from a flat field array');
|
|
1193
|
+
}
|
|
1194
|
+
readers.push(new FieldReader(fields.slice(cursor)));
|
|
1195
|
+
cursor = fields.length;
|
|
1196
|
+
}
|
|
1197
|
+
});
|
|
1198
|
+
if (cursor !== fields.length) {
|
|
1199
|
+
throw new Error(`Malformed flattened value: ${fields.length - cursor} unexpected trailing field(s)`);
|
|
1200
|
+
}
|
|
1201
|
+
return readers;
|
|
1202
|
+
}
|
|
1203
|
+
/** Serializes one element to its flat fields. Element must be serializable. */ function serializeElement(element, value) {
|
|
1204
|
+
return element.serialization.fn(value).flat();
|
|
1205
|
+
}
|
|
1206
|
+
/**
|
|
1207
|
+
* Deserializes one element from its exact flat fields, reconstructing its per-slot readers from its shape and asserting
|
|
1208
|
+
* they are fully consumed (so trailing fields are rejected). Element must be deserializable.
|
|
1209
|
+
*/ function deserializeElement(element, fields) {
|
|
1210
|
+
const readers = splitByShape(fields, element.shape);
|
|
1211
|
+
const value = element.deserialization.fn(readers);
|
|
1212
|
+
assertReadersConsumed(readers);
|
|
1213
|
+
return value;
|
|
1214
|
+
}
|
|
1215
|
+
/** Flattens `values` into one contiguous run of fields by serializing each element. Element must be serializable. */ function packElements(element, values) {
|
|
1216
|
+
return values.flatMap((v)=>serializeElement(element, v));
|
|
1217
|
+
}
|
|
1218
|
+
/**
|
|
1219
|
+
* Reads `count` fixed-width elements out of a packed run (the inverse of {@link packElements}). Element must be
|
|
1220
|
+
* deserializable.
|
|
1221
|
+
*/ function unpackElements(element, reader, count) {
|
|
1222
|
+
const elementWidth = fieldWidth(element.shape);
|
|
1223
|
+
return Array.from({
|
|
1224
|
+
length: count
|
|
1225
|
+
}, ()=>deserializeElement(element, reader.readFieldArray(elementWidth)));
|
|
1226
|
+
}
|
|
1227
|
+
/** Builds the zero-filled slots for a `None`, matching a `Some`'s wire shape (variable slots sized from `size`). */ function zeroSlotsFromShape(shape, size) {
|
|
1228
|
+
return shape.map((slot)=>{
|
|
1229
|
+
if (slot === 'scalar') {
|
|
1230
|
+
return Fr.ZERO;
|
|
1231
|
+
}
|
|
1232
|
+
if (slot === 'variable') {
|
|
1233
|
+
throw new Error('Cannot zero-fill an unsized variable-width slot');
|
|
1234
|
+
}
|
|
1235
|
+
if ('len' in slot) {
|
|
1236
|
+
return Array(slot.len).fill(Fr.ZERO);
|
|
1237
|
+
}
|
|
1238
|
+
if (size === undefined) {
|
|
1239
|
+
throw new Error('Serializing Option.none() over a variable-size inner needs a size, e.g. Option.none({ length: n })');
|
|
1240
|
+
}
|
|
1241
|
+
return Array(slot.lenFrom(size)).fill(Fr.ZERO);
|
|
1242
|
+
});
|
|
1243
|
+
}
|