@aztec/stdlib 0.0.1-commit.b2a5d0dd1 → 0.0.1-commit.b3d3157a
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/abi/abi.d.ts +121 -1197
- package/dest/abi/abi.d.ts.map +1 -1
- package/dest/abi/abi.js +31 -16
- package/dest/abi/authorization_selector.d.ts +2 -2
- package/dest/abi/authorization_selector.d.ts.map +1 -1
- package/dest/abi/contract_artifact.d.ts +1 -1
- package/dest/abi/contract_artifact.d.ts.map +1 -1
- package/dest/abi/contract_artifact.js +14 -7
- package/dest/abi/event_selector.d.ts +2 -2
- package/dest/abi/event_selector.d.ts.map +1 -1
- package/dest/abi/function_call.d.ts +7 -25
- package/dest/abi/function_call.d.ts.map +1 -1
- package/dest/abi/note_selector.d.ts +2 -2
- package/dest/abi/note_selector.d.ts.map +1 -1
- package/dest/abi/utils.d.ts +1 -1
- package/dest/abi/utils.d.ts.map +1 -1
- package/dest/abi/utils.js +1 -1
- package/dest/auth_witness/auth_witness.d.ts +2 -2
- package/dest/auth_witness/auth_witness.d.ts.map +1 -1
- package/dest/avm/avm.d.ts +1756 -10463
- package/dest/avm/avm.d.ts.map +1 -1
- package/dest/avm/avm.js +6 -3
- package/dest/avm/avm_accumulated_data.d.ts +22 -86
- package/dest/avm/avm_accumulated_data.d.ts.map +1 -1
- package/dest/avm/avm_circuit_public_inputs.d.ts +180 -932
- package/dest/avm/avm_circuit_public_inputs.d.ts.map +1 -1
- package/dest/avm/avm_proving_request.d.ts +653 -5446
- package/dest/avm/avm_proving_request.d.ts.map +1 -1
- package/dest/avm/message_pack.js +12 -3
- package/dest/avm/public_data_write.d.ts +6 -12
- package/dest/avm/public_data_write.d.ts.map +1 -1
- package/dest/avm/revert_code.d.ts +1 -7
- package/dest/avm/revert_code.d.ts.map +1 -1
- package/dest/avm/revert_code.js +0 -3
- package/dest/aztec-address/index.d.ts +6 -3
- package/dest/aztec-address/index.d.ts.map +1 -1
- package/dest/aztec-address/index.js +7 -2
- package/dest/block/attestation_info.d.ts +3 -2
- package/dest/block/attestation_info.d.ts.map +1 -1
- package/dest/block/attestation_info.js +7 -5
- package/dest/block/block_data.d.ts +9 -34
- package/dest/block/block_data.d.ts.map +1 -1
- package/dest/block/block_parameter.d.ts +37 -4
- package/dest/block/block_parameter.d.ts.map +1 -1
- package/dest/block/block_parameter.js +53 -2
- package/dest/block/in_block.d.ts +5 -24
- package/dest/block/in_block.d.ts.map +1 -1
- package/dest/block/index.d.ts +1 -2
- package/dest/block/index.d.ts.map +1 -1
- package/dest/block/index.js +0 -1
- package/dest/block/l2_block.d.ts +13 -41
- package/dest/block/l2_block.d.ts.map +1 -1
- package/dest/block/l2_block_info.d.ts +7 -27
- package/dest/block/l2_block_info.d.ts.map +1 -1
- package/dest/block/l2_block_source.d.ts +199 -425
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_source.js +66 -1
- package/dest/block/l2_block_stream/l2_block_stream.d.ts +2 -2
- package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_block_stream.js +44 -17
- package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts +3 -1
- package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_tips_memory_store.js +3 -0
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +4 -1
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_tips_store_base.js +26 -7
- package/dest/block/proposal/attestations_and_signers.d.ts +19 -30
- package/dest/block/proposal/attestations_and_signers.d.ts.map +1 -1
- package/dest/block/proposal/attestations_and_signers.js +26 -18
- package/dest/block/proposal/committee_attestation.d.ts +6 -12
- package/dest/block/proposal/committee_attestation.d.ts.map +1 -1
- package/dest/block/test/l2_tips_store_test_suite.js +1 -1
- package/dest/checkpoint/checkpoint.d.ts +24 -96
- package/dest/checkpoint/checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_data.d.ts +40 -129
- package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_data.js +2 -0
- package/dest/checkpoint/checkpoint_info.d.ts +7 -23
- package/dest/checkpoint/checkpoint_info.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_reexecution_tracker.d.ts +60 -0
- package/dest/checkpoint/checkpoint_reexecution_tracker.d.ts.map +1 -0
- package/dest/checkpoint/checkpoint_reexecution_tracker.js +108 -0
- package/dest/checkpoint/digest.d.ts +18 -0
- package/dest/checkpoint/digest.d.ts.map +1 -0
- package/dest/checkpoint/digest.js +12 -0
- package/dest/checkpoint/index.d.ts +4 -1
- package/dest/checkpoint/index.d.ts.map +1 -1
- package/dest/checkpoint/index.js +3 -0
- package/dest/checkpoint/previous_checkpoint_out_hashes.d.ts +33 -0
- package/dest/checkpoint/previous_checkpoint_out_hashes.d.ts.map +1 -0
- package/dest/checkpoint/previous_checkpoint_out_hashes.js +45 -0
- package/dest/checkpoint/published_checkpoint.d.ts +42 -194
- package/dest/checkpoint/published_checkpoint.d.ts.map +1 -1
- package/dest/config/chain-config.d.ts +4 -9
- package/dest/config/chain-config.d.ts.map +1 -1
- package/dest/config/chain-config.js +6 -11
- package/dest/config/index.d.ts +1 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +0 -1
- package/dest/config/sequencer-config.d.ts +5 -3
- package/dest/config/sequencer-config.d.ts.map +1 -1
- package/dest/config/sequencer-config.js +13 -6
- package/dest/contract/complete_address.d.ts +3 -2
- package/dest/contract/complete_address.d.ts.map +1 -1
- package/dest/contract/complete_address.js +6 -2
- package/dest/contract/contract_address.d.ts +5 -5
- package/dest/contract/contract_address.d.ts.map +1 -1
- package/dest/contract/contract_address.js +5 -4
- package/dest/contract/contract_deployment_data.d.ts +15 -61
- package/dest/contract/contract_deployment_data.d.ts.map +1 -1
- package/dest/contract/contract_instance.d.ts +4 -2
- package/dest/contract/contract_instance.d.ts.map +1 -1
- package/dest/contract/contract_instance.js +10 -3
- package/dest/contract/interfaces/contract_class.d.ts +15 -86
- package/dest/contract/interfaces/contract_class.d.ts.map +1 -1
- package/dest/contract/interfaces/contract_instance.d.ts +41 -95
- package/dest/contract/interfaces/contract_instance.d.ts.map +1 -1
- package/dest/contract/interfaces/contract_instance.js +4 -2
- package/dest/contract/interfaces/contract_instance_update.d.ts +6 -26
- package/dest/contract/interfaces/contract_instance_update.d.ts.map +1 -1
- package/dest/contract/interfaces/protocol_contract_addresses.d.ts +2 -12
- package/dest/contract/interfaces/protocol_contract_addresses.d.ts.map +1 -1
- package/dest/database-version/database_version.d.ts +5 -11
- package/dest/database-version/database_version.d.ts.map +1 -1
- package/dest/database-version/version_manager.d.ts +6 -2
- package/dest/database-version/version_manager.d.ts.map +1 -1
- package/dest/database-version/version_manager.js +12 -1
- package/dest/epoch-helpers/index.d.ts +4 -22
- package/dest/epoch-helpers/index.d.ts.map +1 -1
- package/dest/gas/gas.d.ts +9 -14
- package/dest/gas/gas.d.ts.map +1 -1
- package/dest/gas/gas.js +6 -3
- package/dest/gas/gas_fees.d.ts +9 -14
- package/dest/gas/gas_fees.d.ts.map +1 -1
- package/dest/gas/gas_fees.js +7 -3
- package/dest/gas/gas_settings.d.ts +27 -84
- package/dest/gas/gas_settings.d.ts.map +1 -1
- package/dest/gas/gas_settings.js +6 -3
- package/dest/ha-signing/config.d.ts +9 -73
- package/dest/ha-signing/config.d.ts.map +1 -1
- package/dest/ha-signing/config.js +5 -15
- package/dest/ha-signing/local_config.d.ts +3 -34
- package/dest/ha-signing/local_config.d.ts.map +1 -1
- package/dest/ha-signing/local_config.js +2 -2
- package/dest/hash/hash.d.ts +1 -1
- package/dest/hash/hash.d.ts.map +1 -1
- package/dest/hash/hash.js +2 -2
- package/dest/interfaces/allowed_element.d.ts +4 -28
- package/dest/interfaces/allowed_element.d.ts.map +1 -1
- package/dest/interfaces/api_limit.d.ts +1 -1
- package/dest/interfaces/api_limit.js +1 -1
- package/dest/interfaces/archiver.d.ts +16 -36
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +211 -71
- package/dest/interfaces/aztec-node-admin.d.ts +62 -292
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node-admin.js +57 -14
- package/dest/interfaces/aztec-node-debug.js +4 -1
- package/dest/interfaces/aztec-node.d.ts +100 -106
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +308 -70
- package/dest/interfaces/block-builder.d.ts +3 -1
- package/dest/interfaces/block-builder.d.ts.map +1 -1
- package/dest/interfaces/block_response.d.ts +90 -0
- package/dest/interfaces/block_response.d.ts.map +1 -0
- package/dest/interfaces/block_response.js +30 -0
- package/dest/interfaces/chain_tips.d.ts +50 -0
- package/dest/interfaces/chain_tips.d.ts.map +1 -0
- package/dest/interfaces/chain_tips.js +11 -0
- package/dest/interfaces/checkpoint_parameter.d.ts +14 -0
- package/dest/interfaces/checkpoint_parameter.d.ts.map +1 -0
- package/dest/interfaces/checkpoint_parameter.js +18 -0
- package/dest/interfaces/checkpoint_response.d.ts +122 -0
- package/dest/interfaces/checkpoint_response.d.ts.map +1 -0
- package/dest/interfaces/checkpoint_response.js +26 -0
- package/dest/interfaces/client.d.ts +7 -2
- package/dest/interfaces/client.d.ts.map +1 -1
- package/dest/interfaces/client.js +6 -1
- package/dest/interfaces/configs.d.ts +41 -130
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +9 -1
- package/dest/interfaces/l1_publish_info.d.ts +29 -0
- package/dest/interfaces/l1_publish_info.d.ts.map +1 -0
- package/dest/interfaces/l1_publish_info.js +26 -0
- package/dest/interfaces/l2_logs_source.d.ts +14 -36
- package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
- package/dest/interfaces/l2_logs_source.js +5 -0
- package/dest/interfaces/merkle_tree_operations.d.ts +9 -3
- package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
- package/dest/interfaces/p2p-bootstrap.js +8 -2
- package/dest/interfaces/p2p.d.ts +15 -5
- package/dest/interfaces/p2p.d.ts.map +1 -1
- package/dest/interfaces/p2p.js +28 -5
- package/dest/interfaces/private_kernel_prover.d.ts +62 -2
- package/dest/interfaces/private_kernel_prover.d.ts.map +1 -1
- package/dest/interfaces/prover-agent.d.ts +5 -23
- package/dest/interfaces/prover-agent.d.ts.map +1 -1
- package/dest/interfaces/prover-agent.js +4 -1
- package/dest/interfaces/prover-client.d.ts +6 -27
- package/dest/interfaces/prover-client.d.ts.map +1 -1
- package/dest/interfaces/prover-node.js +22 -8
- package/dest/interfaces/proving-job-source.js +24 -4
- package/dest/interfaces/proving-job.d.ts +725 -5776
- package/dest/interfaces/proving-job.d.ts.map +1 -1
- package/dest/interfaces/proving-job.js +1 -1
- package/dest/interfaces/public_storage_override.d.ts +22 -0
- package/dest/interfaces/public_storage_override.d.ts.map +1 -0
- package/dest/interfaces/public_storage_override.js +7 -0
- package/dest/interfaces/server.d.ts +6 -1
- package/dest/interfaces/server.d.ts.map +1 -1
- package/dest/interfaces/server.js +5 -0
- package/dest/interfaces/slasher.d.ts +25 -56
- package/dest/interfaces/slasher.d.ts.map +1 -1
- package/dest/interfaces/slasher.js +8 -2
- package/dest/interfaces/tx_provider.d.ts +6 -1
- package/dest/interfaces/tx_provider.d.ts.map +1 -1
- package/dest/interfaces/validator.d.ts +40 -229
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/interfaces/validator.js +5 -0
- package/dest/interfaces/world_state.d.ts +2 -2
- package/dest/interfaces/world_state.d.ts.map +1 -1
- package/dest/kernel/hints/key_validation_request.d.ts +12 -8
- package/dest/kernel/hints/key_validation_request.d.ts.map +1 -1
- package/dest/kernel/hints/key_validation_request.js +20 -18
- package/dest/kernel/index.d.ts +5 -1
- package/dest/kernel/index.d.ts.map +1 -1
- package/dest/kernel/index.js +4 -0
- package/dest/kernel/log_hash.d.ts +6 -2
- package/dest/kernel/log_hash.d.ts.map +1 -1
- package/dest/kernel/log_hash.js +21 -9
- package/dest/kernel/private_circuit_public_inputs.d.ts +2 -2
- package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +2 -2
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts +23 -0
- package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts.map +1 -0
- package/dest/kernel/private_kernel_init_2_circuit_private_inputs.js +35 -0
- package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts +24 -0
- package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts.map +1 -0
- package/dest/kernel/private_kernel_init_3_circuit_private_inputs.js +37 -0
- package/dest/kernel/private_kernel_inner_2_circuit_private_inputs.d.ts +16 -0
- package/dest/kernel/private_kernel_inner_2_circuit_private_inputs.d.ts.map +1 -0
- package/dest/kernel/private_kernel_inner_2_circuit_private_inputs.js +23 -0
- package/dest/kernel/private_kernel_inner_3_circuit_private_inputs.d.ts +17 -0
- package/dest/kernel/private_kernel_inner_3_circuit_private_inputs.d.ts.map +1 -0
- package/dest/kernel/private_kernel_inner_3_circuit_private_inputs.js +25 -0
- package/dest/kernel/private_kernel_prover_output.d.ts +3 -29
- package/dest/kernel/private_kernel_prover_output.d.ts.map +1 -1
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +9 -6
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +22 -7
- package/dest/kernel/private_to_avm_accumulated_data.d.ts +25 -69
- package/dest/kernel/private_to_avm_accumulated_data.d.ts.map +1 -1
- package/dest/kernel/private_to_avm_accumulated_data.js +11 -5
- package/dest/kernel/private_to_public_accumulated_data.d.ts +4 -3
- package/dest/kernel/private_to_public_accumulated_data.d.ts.map +1 -1
- package/dest/kernel/private_to_public_accumulated_data.js +6 -3
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts +5 -4
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.js +7 -3
- package/dest/kernel/private_to_rollup_accumulated_data.d.ts +5 -4
- package/dest/kernel/private_to_rollup_accumulated_data.d.ts.map +1 -1
- package/dest/kernel/private_to_rollup_accumulated_data.js +6 -3
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts +5 -4
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.js +7 -3
- package/dest/kernel/public_call_request.d.ts +15 -30
- package/dest/kernel/public_call_request.d.ts.map +1 -1
- package/dest/kernel/public_call_request.js +16 -7
- package/dest/keys/derivation.d.ts +6 -2
- package/dest/keys/derivation.d.ts.map +1 -1
- package/dest/keys/derivation.js +16 -6
- package/dest/keys/public_key.d.ts +22 -3
- package/dest/keys/public_key.d.ts.map +1 -1
- package/dest/keys/public_key.js +20 -1
- package/dest/keys/public_keys.d.ts +55 -82
- package/dest/keys/public_keys.d.ts.map +1 -1
- package/dest/keys/public_keys.js +102 -74
- package/dest/kv-store/config.d.ts +3 -6
- package/dest/kv-store/config.d.ts.map +1 -1
- package/dest/kv-store/config.js +2 -7
- package/dest/logs/app_tagging_secret.d.ts +46 -0
- package/dest/logs/app_tagging_secret.d.ts.map +1 -0
- package/dest/logs/{extended_directional_app_tagging_secret.js → app_tagging_secret.js} +51 -21
- package/dest/logs/app_tagging_secret_kind.d.ts +7 -0
- package/dest/logs/app_tagging_secret_kind.d.ts.map +1 -0
- package/dest/logs/app_tagging_secret_kind.js +17 -0
- package/dest/logs/contract_class_log.d.ts +16 -34
- package/dest/logs/contract_class_log.d.ts.map +1 -1
- package/dest/logs/contract_class_log.js +11 -9
- package/dest/logs/index.d.ts +7 -7
- package/dest/logs/index.d.ts.map +1 -1
- package/dest/logs/index.js +6 -6
- package/dest/logs/log_cursor.d.ts +51 -0
- package/dest/logs/log_cursor.d.ts.map +1 -0
- package/dest/logs/log_cursor.js +82 -0
- package/dest/logs/log_result.d.ts +54 -0
- package/dest/logs/log_result.d.ts.map +1 -0
- package/dest/logs/log_result.js +56 -0
- package/dest/logs/logs_query.d.ts +82 -0
- package/dest/logs/logs_query.d.ts.map +1 -0
- package/dest/logs/logs_query.js +50 -0
- package/dest/logs/message_context.d.ts +3 -2
- package/dest/logs/message_context.d.ts.map +1 -1
- package/dest/logs/message_context.js +4 -0
- package/dest/logs/pre_tag.d.ts +11 -24
- package/dest/logs/pre_tag.d.ts.map +1 -1
- package/dest/logs/pre_tag.js +2 -2
- package/dest/logs/private_log.d.ts +7 -12
- package/dest/logs/private_log.d.ts.map +1 -1
- package/dest/logs/private_log.js +6 -3
- package/dest/logs/query_all_logs_by_tags.d.ts +24 -0
- package/dest/logs/query_all_logs_by_tags.d.ts.map +1 -0
- package/dest/logs/query_all_logs_by_tags.js +64 -0
- package/dest/logs/siloed_tag.d.ts +1 -1
- package/dest/logs/siloed_tag.d.ts.map +1 -1
- package/dest/logs/siloed_tag.js +3 -1
- package/dest/logs/tagging_index_range.d.ts +13 -31
- package/dest/logs/tagging_index_range.d.ts.map +1 -1
- package/dest/logs/tagging_index_range.js +2 -2
- package/dest/messaging/append_l1_to_l2_messages.d.ts +9 -0
- package/dest/messaging/append_l1_to_l2_messages.d.ts.map +1 -0
- package/dest/messaging/append_l1_to_l2_messages.js +12 -0
- package/dest/messaging/index.d.ts +2 -1
- package/dest/messaging/index.d.ts.map +1 -1
- package/dest/messaging/index.js +1 -0
- package/dest/messaging/l2_to_l1_membership.d.ts +43 -6
- package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_membership.js +72 -12
- package/dest/messaging/l2_to_l1_message.d.ts +38 -112
- package/dest/messaging/l2_to_l1_message.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_message.js +21 -12
- package/dest/noir/index.d.ts +3 -1
- package/dest/noir/index.d.ts.map +1 -1
- package/dest/note/note.d.ts +2 -2
- package/dest/note/note.d.ts.map +1 -1
- package/dest/p2p/block_proposal.d.ts +29 -10
- package/dest/p2p/block_proposal.d.ts.map +1 -1
- package/dest/p2p/block_proposal.js +56 -33
- package/dest/p2p/checkpoint_attestation.d.ts +14 -6
- package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
- package/dest/p2p/checkpoint_attestation.js +24 -20
- package/dest/p2p/checkpoint_proposal.d.ts +31 -10
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +58 -31
- package/dest/p2p/consensus_payload.d.ts +26 -20
- package/dest/p2p/consensus_payload.d.ts.map +1 -1
- package/dest/p2p/consensus_payload.js +38 -19
- package/dest/p2p/signature_utils.d.ts +28 -19
- package/dest/p2p/signature_utils.d.ts.map +1 -1
- package/dest/p2p/signature_utils.js +118 -21
- package/dest/p2p/signed_txs.d.ts +15 -13
- package/dest/p2p/signed_txs.d.ts.map +1 -1
- package/dest/p2p/signed_txs.js +26 -24
- package/dest/parity/parity_base_private_inputs.d.ts +8 -4
- package/dest/parity/parity_base_private_inputs.d.ts.map +1 -1
- package/dest/parity/parity_base_private_inputs.js +7 -5
- package/dest/parity/parity_public_inputs.d.ts +8 -4
- package/dest/parity/parity_public_inputs.d.ts.map +1 -1
- package/dest/parity/parity_public_inputs.js +6 -3
- package/dest/parity/parity_root_private_inputs.d.ts +2 -2
- package/dest/parity/parity_root_private_inputs.d.ts.map +1 -1
- package/dest/proofs/chonk_proof.d.ts +17 -11
- package/dest/proofs/chonk_proof.d.ts.map +1 -1
- package/dest/proofs/chonk_proof.js +44 -22
- package/dest/proofs/recursive_proof.d.ts +2 -2
- package/dest/proofs/recursive_proof.d.ts.map +1 -1
- package/dest/rollup/block_merge_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/block_merge_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/block_rollup_public_inputs.d.ts +12 -2
- package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/block_rollup_public_inputs.js +12 -0
- package/dest/rollup/block_root_rollup_private_inputs.d.ts +6 -6
- package/dest/rollup/block_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_merge_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/checkpoint_merge_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +9 -2
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.js +9 -0
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +5 -5
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/private_tx_base_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/private_tx_base_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/public_chonk_verifier_private_inputs.d.ts +2 -2
- package/dest/rollup/public_chonk_verifier_private_inputs.d.ts.map +1 -1
- package/dest/rollup/public_chonk_verifier_public_inputs.d.ts +2 -2
- package/dest/rollup/public_chonk_verifier_public_inputs.d.ts.map +1 -1
- package/dest/rollup/public_tx_base_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/public_tx_base_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.d.ts +2 -2
- package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/tx_merge_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/tx_merge_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/tx_rollup_public_inputs.d.ts +2 -2
- package/dest/rollup/tx_rollup_public_inputs.d.ts.map +1 -1
- package/dest/schemas/schemas.d.ts +32 -78
- package/dest/schemas/schemas.d.ts.map +1 -1
- package/dest/schemas/schemas.js +2 -2
- package/dest/slashing/helpers.d.ts +2 -2
- package/dest/slashing/helpers.d.ts.map +1 -1
- package/dest/slashing/helpers.js +10 -7
- package/dest/slashing/types.d.ts +15 -23
- package/dest/slashing/types.d.ts.map +1 -1
- package/dest/slashing/types.js +16 -10
- package/dest/snapshots/types.d.ts +15 -78
- package/dest/snapshots/types.d.ts.map +1 -1
- package/dest/stats/stats.d.ts +2 -2
- package/dest/stats/stats.d.ts.map +1 -1
- package/dest/tests/factories.d.ts +23 -23
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +70 -47
- package/dest/tests/mocks.d.ts +8 -5
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +31 -38
- package/dest/timetable/index.d.ts +7 -10
- package/dest/timetable/index.d.ts.map +1 -1
- package/dest/timetable/index.js +60 -80
- package/dest/trees/append_only_tree_snapshot.d.ts +9 -14
- package/dest/trees/append_only_tree_snapshot.d.ts.map +1 -1
- package/dest/trees/append_only_tree_snapshot.js +6 -3
- package/dest/trees/nullifier_leaf.d.ts +18 -42
- package/dest/trees/nullifier_leaf.d.ts.map +1 -1
- package/dest/trees/nullifier_membership_witness.d.ts +16 -59
- package/dest/trees/nullifier_membership_witness.d.ts.map +1 -1
- package/dest/trees/nullifier_membership_witness.js +2 -14
- package/dest/trees/public_data_leaf.d.ts +21 -53
- package/dest/trees/public_data_leaf.d.ts.map +1 -1
- package/dest/trees/public_data_witness.d.ts +16 -58
- package/dest/trees/public_data_witness.d.ts.map +1 -1
- package/dest/tx/block_header.d.ts +4 -3
- package/dest/tx/block_header.d.ts.map +1 -1
- package/dest/tx/block_header.js +6 -3
- package/dest/tx/call_context.d.ts +4 -14
- package/dest/tx/call_context.d.ts.map +1 -1
- package/dest/tx/capsule.d.ts +2 -2
- package/dest/tx/capsule.d.ts.map +1 -1
- package/dest/tx/function_data.d.ts +4 -10
- package/dest/tx/function_data.d.ts.map +1 -1
- package/dest/tx/global_variables.d.ts +16 -49
- package/dest/tx/global_variables.d.ts.map +1 -1
- package/dest/tx/global_variables.js +8 -12
- package/dest/tx/hashed_values.d.ts +4 -3
- package/dest/tx/hashed_values.d.ts.map +1 -1
- package/dest/tx/hashed_values.js +6 -3
- package/dest/tx/in_tx.d.ts +5 -17
- package/dest/tx/in_tx.d.ts.map +1 -1
- package/dest/tx/indexed_tx_effect.d.ts +8 -19
- package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
- package/dest/tx/indexed_tx_effect.js +8 -4
- package/dest/tx/partial_state_reference.d.ts +22 -65
- package/dest/tx/partial_state_reference.d.ts.map +1 -1
- package/dest/tx/partial_state_reference.js +6 -3
- package/dest/tx/private_execution_result.d.ts +6 -16
- package/dest/tx/private_execution_result.d.ts.map +1 -1
- package/dest/tx/profiling.d.ts +54 -352
- package/dest/tx/profiling.d.ts.map +1 -1
- package/dest/tx/profiling.js +4 -4
- package/dest/tx/protocol_contracts.d.ts +5 -9
- package/dest/tx/protocol_contracts.d.ts.map +1 -1
- package/dest/tx/proven_tx.d.ts +30 -74
- package/dest/tx/proven_tx.d.ts.map +1 -1
- package/dest/tx/proven_tx.js +6 -0
- package/dest/tx/public_call_request_with_calldata.d.ts +4 -3
- package/dest/tx/public_call_request_with_calldata.d.ts.map +1 -1
- package/dest/tx/public_call_request_with_calldata.js +6 -3
- package/dest/tx/simulated_tx.d.ts +62 -1249
- package/dest/tx/simulated_tx.d.ts.map +1 -1
- package/dest/tx/simulated_tx.js +12 -10
- package/dest/tx/state_reference.d.ts +30 -117
- package/dest/tx/state_reference.d.ts.map +1 -1
- package/dest/tx/state_reference.js +6 -4
- package/dest/tx/tree_snapshots.d.ts +27 -84
- package/dest/tx/tree_snapshots.d.ts.map +1 -1
- package/dest/tx/tree_snapshots.js +6 -4
- package/dest/tx/tx.d.ts +12 -11
- package/dest/tx/tx.d.ts.map +1 -1
- package/dest/tx/tx.js +30 -23
- package/dest/tx/tx_constant_data.d.ts +4 -3
- package/dest/tx/tx_constant_data.d.ts.map +1 -1
- package/dest/tx/tx_constant_data.js +6 -3
- package/dest/tx/tx_context.d.ts +32 -131
- package/dest/tx/tx_context.d.ts.map +1 -1
- package/dest/tx/tx_context.js +6 -6
- package/dest/tx/tx_hash.d.ts +6 -4
- package/dest/tx/tx_hash.d.ts.map +1 -1
- package/dest/tx/tx_hash.js +13 -5
- package/dest/tx/tx_receipt.d.ts +144 -67
- package/dest/tx/tx_receipt.d.ts.map +1 -1
- package/dest/tx/tx_receipt.js +141 -51
- package/dest/tx/validator/tx_validator.d.ts +5 -27
- package/dest/tx/validator/tx_validator.d.ts.map +1 -1
- package/dest/tx/validator/tx_validator.js +0 -4
- package/dest/types/shared.d.ts +4 -3
- package/dest/types/shared.d.ts.map +1 -1
- package/dest/types/shared.js +6 -3
- package/dest/update-checker/dev_version.d.ts +3 -0
- package/dest/update-checker/dev_version.d.ts.map +1 -0
- package/dest/update-checker/dev_version.js +1 -0
- package/dest/update-checker/index.d.ts +2 -1
- package/dest/update-checker/index.d.ts.map +1 -1
- package/dest/update-checker/index.js +1 -0
- package/dest/update-checker/package_version.d.ts +6 -3
- package/dest/update-checker/package_version.d.ts.map +1 -1
- package/dest/update-checker/package_version.js +8 -19
- package/dest/validators/schemas.d.ts +147 -614
- package/dest/validators/schemas.d.ts.map +1 -1
- package/dest/validators/schemas.js +6 -4
- package/dest/validators/types.d.ts +20 -3
- package/dest/validators/types.d.ts.map +1 -1
- package/dest/versioning/versioning.js +1 -1
- package/dest/vks/verification_key.d.ts +3 -3
- package/dest/vks/verification_key.d.ts.map +1 -1
- package/dest/world-state/genesis_data.d.ts +3 -1
- package/dest/world-state/genesis_data.d.ts.map +1 -1
- package/dest/world-state/genesis_data.js +3 -0
- package/dest/world-state/world_state_revision.d.ts +4 -39
- package/dest/world-state/world_state_revision.d.ts.map +1 -1
- package/dest/world-state/world_state_revision.js +0 -20
- package/package.json +12 -11
- package/src/abi/abi.ts +53 -19
- package/src/abi/contract_artifact.ts +11 -6
- package/src/abi/utils.ts +6 -4
- package/src/avm/avm.ts +5 -0
- package/src/avm/message_pack.ts +12 -3
- package/src/avm/revert_code.ts +0 -6
- package/src/aztec-address/index.ts +12 -3
- package/src/block/attestation_info.ts +11 -11
- package/src/block/block_parameter.ts +72 -4
- package/src/block/index.ts +0 -1
- package/src/block/l2_block_source.ts +201 -149
- package/src/block/l2_block_stream/l2_block_stream.ts +39 -28
- package/src/block/l2_block_stream/l2_tips_memory_store.ts +5 -0
- package/src/block/l2_block_stream/l2_tips_store_base.ts +29 -7
- package/src/block/proposal/attestations_and_signers.ts +32 -17
- package/src/block/test/l2_tips_store_test_suite.ts +1 -1
- package/src/checkpoint/checkpoint_data.ts +4 -0
- package/src/checkpoint/checkpoint_reexecution_tracker.ts +167 -0
- package/src/checkpoint/digest.ts +28 -0
- package/src/checkpoint/index.ts +3 -0
- package/src/checkpoint/previous_checkpoint_out_hashes.ts +61 -0
- package/src/config/chain-config.ts +6 -15
- package/src/config/index.ts +0 -1
- package/src/config/sequencer-config.ts +25 -7
- package/src/contract/complete_address.ts +7 -3
- package/src/contract/contract_address.ts +6 -6
- package/src/contract/contract_instance.ts +11 -2
- package/src/contract/interfaces/contract_instance.ts +6 -2
- package/src/database-version/version_manager.ts +17 -0
- package/src/gas/gas.ts +8 -3
- package/src/gas/gas_fees.ts +9 -9
- package/src/gas/gas_settings.ts +8 -3
- package/src/ha-signing/config.ts +9 -16
- package/src/ha-signing/local_config.ts +2 -2
- package/src/hash/hash.ts +2 -2
- package/src/interfaces/api_limit.ts +1 -1
- package/src/interfaces/archiver.ts +80 -94
- package/src/interfaces/aztec-node-admin.ts +32 -15
- package/src/interfaces/aztec-node-debug.ts +1 -1
- package/src/interfaces/aztec-node.ts +296 -262
- package/src/interfaces/block-builder.ts +2 -0
- package/src/interfaces/block_response.ts +92 -0
- package/src/interfaces/chain_tips.ts +24 -0
- package/src/interfaces/checkpoint_parameter.ts +20 -0
- package/src/interfaces/checkpoint_response.ts +84 -0
- package/src/interfaces/client.ts +6 -1
- package/src/interfaces/configs.ts +40 -1
- package/src/interfaces/l1_publish_info.ts +40 -0
- package/src/interfaces/l2_logs_source.ts +13 -42
- package/src/interfaces/merkle_tree_operations.ts +9 -2
- package/src/interfaces/p2p-bootstrap.ts +2 -2
- package/src/interfaces/p2p.ts +35 -15
- package/src/interfaces/private_kernel_prover.ts +88 -0
- package/src/interfaces/prover-agent.ts +1 -1
- package/src/interfaces/prover-node.ts +7 -7
- package/src/interfaces/proving-job-source.ts +4 -4
- package/src/interfaces/proving-job.ts +3 -3
- package/src/interfaces/public_storage_override.ts +26 -0
- package/src/interfaces/server.ts +5 -0
- package/src/interfaces/slasher.ts +17 -4
- package/src/interfaces/tx_provider.ts +6 -0
- package/src/interfaces/validator.ts +18 -2
- package/src/interfaces/world_state.ts +1 -1
- package/src/kernel/hints/key_validation_request.ts +18 -16
- package/src/kernel/index.ts +4 -0
- package/src/kernel/log_hash.ts +29 -9
- package/src/kernel/private_kernel_init_2_circuit_private_inputs.ts +49 -0
- package/src/kernel/private_kernel_init_3_circuit_private_inputs.ts +52 -0
- package/src/kernel/private_kernel_inner_2_circuit_private_inputs.ts +29 -0
- package/src/kernel/private_kernel_inner_3_circuit_private_inputs.ts +31 -0
- package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +29 -14
- package/src/kernel/private_to_avm_accumulated_data.ts +16 -5
- package/src/kernel/private_to_public_accumulated_data.ts +9 -3
- package/src/kernel/private_to_public_kernel_circuit_public_inputs.ts +10 -4
- package/src/kernel/private_to_rollup_accumulated_data.ts +8 -3
- package/src/kernel/private_to_rollup_kernel_circuit_public_inputs.ts +9 -9
- package/src/kernel/public_call_request.ts +22 -7
- package/src/keys/derivation.ts +21 -9
- package/src/keys/public_key.ts +26 -2
- package/src/keys/public_keys.ts +124 -110
- package/src/kv-store/config.ts +3 -10
- package/src/logs/{extended_directional_app_tagging_secret.ts → app_tagging_secret.ts} +62 -23
- package/src/logs/app_tagging_secret_kind.ts +21 -0
- package/src/logs/contract_class_log.ts +15 -5
- package/src/logs/index.ts +6 -6
- package/src/logs/log_cursor.ts +110 -0
- package/src/logs/log_result.ts +104 -0
- package/src/logs/logs_query.ts +138 -0
- package/src/logs/message_context.ts +5 -1
- package/src/logs/pre_tag.ts +3 -6
- package/src/logs/private_log.ts +9 -3
- package/src/logs/query_all_logs_by_tags.ts +98 -0
- package/src/logs/siloed_tag.ts +6 -1
- package/src/logs/tagging_index_range.ts +4 -10
- package/src/messaging/append_l1_to_l2_messages.ts +21 -0
- package/src/messaging/index.ts +1 -0
- package/src/messaging/l2_to_l1_membership.ts +108 -19
- package/src/messaging/l2_to_l1_message.ts +29 -9
- package/src/noir/index.ts +2 -0
- package/src/p2p/block_proposal.ts +99 -28
- package/src/p2p/checkpoint_attestation.ts +26 -26
- package/src/p2p/checkpoint_proposal.ts +109 -39
- package/src/p2p/consensus_payload.ts +59 -28
- package/src/p2p/signature_utils.ts +110 -25
- package/src/p2p/signed_txs.ts +46 -28
- package/src/parity/parity_base_private_inputs.ts +10 -4
- package/src/parity/parity_public_inputs.ts +9 -2
- package/src/proofs/chonk_proof.ts +49 -15
- package/src/rollup/block_rollup_public_inputs.ts +13 -0
- package/src/rollup/checkpoint_rollup_public_inputs.ts +10 -0
- package/src/schemas/schemas.ts +6 -1
- package/src/slashing/helpers.ts +13 -9
- package/src/slashing/types.ts +21 -14
- package/src/stats/stats.ts +4 -0
- package/src/tests/factories.ts +97 -68
- package/src/tests/mocks.ts +49 -57
- package/src/timetable/index.ts +63 -105
- package/src/trees/append_only_tree_snapshot.ts +8 -3
- package/src/trees/nullifier_membership_witness.ts +2 -12
- package/src/tx/block_header.ts +8 -3
- package/src/tx/global_variables.ts +10 -18
- package/src/tx/hashed_values.ts +8 -3
- package/src/tx/indexed_tx_effect.ts +17 -4
- package/src/tx/partial_state_reference.ts +8 -3
- package/src/tx/profiling.ts +4 -4
- package/src/tx/proven_tx.ts +6 -0
- package/src/tx/public_call_request_with_calldata.ts +8 -3
- package/src/tx/simulated_tx.ts +18 -21
- package/src/tx/state_reference.ts +9 -4
- package/src/tx/tree_snapshots.ts +9 -4
- package/src/tx/tx.ts +41 -22
- package/src/tx/tx_constant_data.ts +8 -3
- package/src/tx/tx_context.ts +8 -3
- package/src/tx/tx_hash.ts +20 -5
- package/src/tx/tx_receipt.ts +263 -80
- package/src/tx/validator/tx_validator.ts +1 -5
- package/src/types/shared.ts +8 -3
- package/src/update-checker/dev_version.ts +2 -0
- package/src/update-checker/index.ts +1 -0
- package/src/update-checker/package_version.ts +10 -23
- package/src/validators/schemas.ts +6 -4
- package/src/validators/types.ts +21 -2
- package/src/versioning/versioning.ts +1 -1
- package/src/world-state/genesis_data.ts +12 -0
- package/src/world-state/world_state_revision.ts +0 -33
- package/dest/block/checkpointed_l2_block.d.ts +0 -150
- package/dest/block/checkpointed_l2_block.d.ts.map +0 -1
- package/dest/block/checkpointed_l2_block.js +0 -46
- package/dest/config/pipelining-config.d.ts +0 -19
- package/dest/config/pipelining-config.d.ts.map +0 -1
- package/dest/config/pipelining-config.js +0 -18
- package/dest/interfaces/get_logs_response.d.ts +0 -97
- package/dest/interfaces/get_logs_response.d.ts.map +0 -1
- package/dest/interfaces/get_logs_response.js +0 -12
- package/dest/logs/extended_contract_class_log.d.ts +0 -51
- package/dest/logs/extended_contract_class_log.d.ts.map +0 -1
- package/dest/logs/extended_contract_class_log.js +0 -67
- package/dest/logs/extended_directional_app_tagging_secret.d.ts +0 -47
- package/dest/logs/extended_directional_app_tagging_secret.d.ts.map +0 -1
- package/dest/logs/extended_public_log.d.ts +0 -106
- package/dest/logs/extended_public_log.d.ts.map +0 -1
- package/dest/logs/extended_public_log.js +0 -73
- package/dest/logs/log_filter.d.ts +0 -25
- package/dest/logs/log_filter.d.ts.map +0 -1
- package/dest/logs/log_filter.js +0 -12
- package/dest/logs/log_id.d.ts +0 -85
- package/dest/logs/log_id.d.ts.map +0 -1
- package/dest/logs/log_id.js +0 -93
- package/dest/logs/tx_scoped_l2_log.d.ts +0 -51
- package/dest/logs/tx_scoped_l2_log.d.ts.map +0 -1
- package/dest/logs/tx_scoped_l2_log.js +0 -77
- package/src/block/checkpointed_l2_block.ts +0 -70
- package/src/config/pipelining-config.ts +0 -31
- package/src/interfaces/get_logs_response.ts +0 -35
- package/src/logs/extended_contract_class_log.ts +0 -87
- package/src/logs/extended_public_log.ts +0 -94
- package/src/logs/log_filter.ts +0 -36
- package/src/logs/log_id.ts +0 -124
- package/src/logs/tx_scoped_l2_log.ts +0 -114
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
import { OUT_HASH_TREE_LEAF_COUNT } from '@aztec/constants';
|
|
2
|
-
import type
|
|
1
|
+
import { MAX_CHECKPOINTS_PER_EPOCH, OUT_HASH_TREE_LEAF_COUNT } from '@aztec/constants';
|
|
2
|
+
import { type EpochNumber, EpochNumberSchema } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { SiblingPath, UnbalancedMerkleTreeCalculator, computeUnbalancedShaRoot } from '@aztec/foundation/trees';
|
|
5
5
|
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
|
|
6
8
|
import type { AztecNode } from '../interfaces/aztec-node.js';
|
|
9
|
+
import { schemas } from '../schemas/schemas.js';
|
|
7
10
|
import { TxHash } from '../tx/tx_hash.js';
|
|
11
|
+
import type { TxReceipt } from '../tx/tx_receipt.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Provides access to the L1 Outbox's per-epoch roots so the witness helper can pick the smallest
|
|
15
|
+
* partial-proof root that covers a tx's checkpoint. Implemented by `OutboxContract` in the
|
|
16
|
+
* ethereum package.
|
|
17
|
+
*/
|
|
18
|
+
export interface OutboxRootsReader {
|
|
19
|
+
/**
|
|
20
|
+
* Returns the array of roots stored for `epoch`. Slot `i` holds the root inserted for
|
|
21
|
+
* `numCheckpointsInEpoch = i + 1`, or `Fr.ZERO` if no proof of that depth has landed yet. The
|
|
22
|
+
* returned array length is `MAX_CHECKPOINTS_PER_EPOCH`.
|
|
23
|
+
*/
|
|
24
|
+
getRoots(epoch: EpochNumber): Promise<Fr[]>;
|
|
25
|
+
}
|
|
8
26
|
|
|
9
27
|
/**
|
|
10
28
|
* # L2-to-L1 Message Tree Structure and Leaf IDs
|
|
@@ -96,44 +114,73 @@ export function getL2ToL1MessageLeafId(
|
|
|
96
114
|
}
|
|
97
115
|
|
|
98
116
|
export type L2ToL1MembershipWitness = {
|
|
117
|
+
epochNumber: EpochNumber;
|
|
118
|
+
/**
|
|
119
|
+
* The number of checkpoints covered by the partial-proof root this witness was built against
|
|
120
|
+
* (1-indexed; equal to `roots-array-index + 1` on the Outbox). Pass this through to
|
|
121
|
+
* `Outbox.consume` so the contract reads the matching root slot.
|
|
122
|
+
*/
|
|
123
|
+
numCheckpointsInEpoch: number;
|
|
99
124
|
root: Fr;
|
|
100
125
|
leafIndex: bigint;
|
|
101
126
|
siblingPath: SiblingPath<number>;
|
|
102
|
-
epochNumber: EpochNumber;
|
|
103
127
|
};
|
|
104
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Zod schema for {@link L2ToL1MembershipWitness}. The sibling-path length varies with the shape of
|
|
131
|
+
* the per-epoch tree, so we use the unsized `SiblingPath.schema` here rather than a fixed-height
|
|
132
|
+
* `schemaFor`.
|
|
133
|
+
*/
|
|
134
|
+
export const L2ToL1MembershipWitnessSchema = z.object({
|
|
135
|
+
epochNumber: EpochNumberSchema,
|
|
136
|
+
numCheckpointsInEpoch: schemas.Integer,
|
|
137
|
+
root: schemas.Fr,
|
|
138
|
+
leafIndex: schemas.BigInt,
|
|
139
|
+
siblingPath: SiblingPath.schema,
|
|
140
|
+
}) as unknown as z.ZodType<L2ToL1MembershipWitness>;
|
|
141
|
+
|
|
105
142
|
/**
|
|
106
143
|
* Computes the L2 to L1 membership witness for a given message in a transaction.
|
|
107
144
|
*
|
|
145
|
+
* Queries the L1 Outbox to find the smallest partial-proof root that covers the tx's checkpoint,
|
|
146
|
+
* then builds the witness against that root by including only the first `numCheckpointsInEpoch`
|
|
147
|
+
* checkpoints of the epoch in the tree (the remaining slots are zero-padded, matching the shape
|
|
148
|
+
* the rollup proved). Returns `undefined` if the tx is not yet in a block/epoch or if the Outbox
|
|
149
|
+
* holds no root yet that covers the tx's checkpoint.
|
|
150
|
+
*
|
|
108
151
|
* @param node - The Aztec node to query for block/tx/epoch data.
|
|
152
|
+
* @param outboxOrRoots - Either an `OutboxRootsReader` (the helper will fetch the per-epoch roots),
|
|
153
|
+
* or an already-resolved roots array of length `MAX_CHECKPOINTS_PER_EPOCH`. Pass the array when
|
|
154
|
+
* you already read the outbox (e.g. inside a tight loop that resolves witnesses for many
|
|
155
|
+
* messages in the same epoch) to avoid redundant L1 reads.
|
|
109
156
|
* @param message - The L2 to L1 message hash to prove membership of.
|
|
110
|
-
* @param
|
|
157
|
+
* @param txHashOrReceipt - Either the tx hash, or the already-fetched `TxReceipt`. Passing the
|
|
158
|
+
* receipt skips an internal `getTxReceipt` call.
|
|
111
159
|
* @param messageIndexInTx - Optional index of the message within the transaction's L2-to-L1 messages.
|
|
112
160
|
* If not provided, the message is found by scanning the tx's messages (throws if duplicates exist).
|
|
113
|
-
* @returns The membership witness and epoch number, or undefined if the tx is not yet in a block/epoch.
|
|
114
161
|
*/
|
|
115
162
|
export async function computeL2ToL1MembershipWitness(
|
|
116
|
-
node: Pick<
|
|
117
|
-
|
|
118
|
-
'getL2ToL1Messages' | 'getTxReceipt' | 'getTxEffect' | 'getBlock' | 'getCheckpointsDataForEpoch'
|
|
119
|
-
>,
|
|
163
|
+
node: Pick<AztecNode, 'getL2ToL1Messages' | 'getTxReceipt' | 'getBlock' | 'getCheckpointsData'>,
|
|
164
|
+
outboxOrRoots: OutboxRootsReader | Fr[],
|
|
120
165
|
message: Fr,
|
|
121
|
-
|
|
166
|
+
txHashOrReceipt: TxHash | Pick<TxReceipt, 'txHash' | 'epochNumber' | 'blockNumber' | 'txIndexInBlock'>,
|
|
122
167
|
messageIndexInTx?: number,
|
|
123
168
|
): Promise<L2ToL1MembershipWitness | undefined> {
|
|
124
|
-
const
|
|
125
|
-
|
|
169
|
+
const receipt =
|
|
170
|
+
'txHash' in txHashOrReceipt ? txHashOrReceipt : await node.getTxReceipt(txHashOrReceipt, { includeTxEffect: true });
|
|
171
|
+
|
|
172
|
+
const { epochNumber, blockNumber, txIndexInBlock } = receipt;
|
|
173
|
+
if (epochNumber === undefined || blockNumber === undefined || txIndexInBlock === undefined) {
|
|
126
174
|
return undefined;
|
|
127
175
|
}
|
|
128
176
|
|
|
129
|
-
const [messagesInEpoch, block,
|
|
177
|
+
const [messagesInEpoch, block, checkpointsData] = await Promise.all([
|
|
130
178
|
node.getL2ToL1Messages(epochNumber),
|
|
131
179
|
node.getBlock(blockNumber),
|
|
132
|
-
node.
|
|
133
|
-
node.getCheckpointsDataForEpoch(epochNumber),
|
|
180
|
+
node.getCheckpointsData({ epoch: epochNumber }),
|
|
134
181
|
]);
|
|
135
182
|
|
|
136
|
-
if (messagesInEpoch.length === 0 || !block
|
|
183
|
+
if (messagesInEpoch.length === 0 || !block) {
|
|
137
184
|
return undefined;
|
|
138
185
|
}
|
|
139
186
|
|
|
@@ -143,17 +190,59 @@ export async function computeL2ToL1MembershipWitness(
|
|
|
143
190
|
}
|
|
144
191
|
|
|
145
192
|
const blockIndex = block.indexWithinCheckpoint;
|
|
146
|
-
const txIndex =
|
|
193
|
+
const txIndex = txIndexInBlock;
|
|
194
|
+
|
|
195
|
+
// Pick the smallest partial-proof root on the Outbox that covers checkpointIndex. The Outbox
|
|
196
|
+
// stores roots keyed by `numCheckpointsInEpoch - 1`, so to cover a tx in checkpoint at index
|
|
197
|
+
// `checkpointIndex` we need a non-zero entry at array index >= checkpointIndex.
|
|
198
|
+
const roots = Array.isArray(outboxOrRoots)
|
|
199
|
+
? (outboxOrRoots as Fr[])
|
|
200
|
+
: await (outboxOrRoots as OutboxRootsReader).getRoots(epochNumber);
|
|
201
|
+
const numCheckpointsInEpoch = findSmallestCoveringRootCount(roots, checkpointIndex);
|
|
202
|
+
if (numCheckpointsInEpoch === undefined) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Build the witness against the first `numCheckpointsInEpoch` checkpoints. The inner builder
|
|
207
|
+
// pads to OUT_HASH_TREE_LEAF_COUNT internally, so slicing the outer array narrows the real-leaf
|
|
208
|
+
// prefix and grows the zero suffix — exactly the shape the rollup proved against.
|
|
209
|
+
const messagesInPartialEpoch = messagesInEpoch.slice(0, numCheckpointsInEpoch);
|
|
147
210
|
|
|
148
211
|
const { root, leafIndex, siblingPath } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(
|
|
149
|
-
|
|
212
|
+
messagesInPartialEpoch,
|
|
150
213
|
message,
|
|
151
214
|
checkpointIndex,
|
|
152
215
|
blockIndex,
|
|
153
216
|
txIndex,
|
|
154
217
|
messageIndexInTx,
|
|
155
218
|
);
|
|
156
|
-
|
|
219
|
+
|
|
220
|
+
// Cross-check: the recomputed root must equal the root the Outbox is holding for this depth.
|
|
221
|
+
// A mismatch means the node and L1 disagree about the epoch's contents; fail loud rather than
|
|
222
|
+
// return a witness that will revert on chain.
|
|
223
|
+
const expected = roots[numCheckpointsInEpoch - 1];
|
|
224
|
+
if (!root.equals(expected)) {
|
|
225
|
+
throw new Error(
|
|
226
|
+
`Local epoch out-hash does not match Outbox at epoch ${epochNumber} numCheckpointsInEpoch ` +
|
|
227
|
+
`${numCheckpointsInEpoch}: local=${root.toString()} outbox=${expected.toString()}`,
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return { epochNumber, numCheckpointsInEpoch, root, leafIndex, siblingPath };
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Returns the smallest `numCheckpointsInEpoch` (1-indexed) for which the Outbox holds a root that
|
|
236
|
+
* covers the message at `checkpointIndex` (0-indexed). Returns `undefined` if no covering root has
|
|
237
|
+
* been inserted yet.
|
|
238
|
+
*/
|
|
239
|
+
function findSmallestCoveringRootCount(roots: Fr[], checkpointIndex: number): number | undefined {
|
|
240
|
+
for (let i = checkpointIndex; i < Math.min(roots.length, MAX_CHECKPOINTS_PER_EPOCH); i++) {
|
|
241
|
+
if (!roots[i].isZero()) {
|
|
242
|
+
return i + 1;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return undefined;
|
|
157
246
|
}
|
|
158
247
|
|
|
159
248
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import { schemas } from '@aztec/foundation/schemas';
|
|
4
|
-
import { BufferReader,
|
|
4
|
+
import { BufferReader, BufferSink, FieldReader, serializeToFields, serializeToSink } from '@aztec/foundation/serialize';
|
|
5
5
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
|
|
@@ -54,8 +54,13 @@ export class L2ToL1Message {
|
|
|
54
54
|
* Serialize this as a buffer.
|
|
55
55
|
* @returns The buffer.
|
|
56
56
|
*/
|
|
57
|
-
toBuffer(): Buffer
|
|
58
|
-
|
|
57
|
+
toBuffer(): Buffer;
|
|
58
|
+
toBuffer(sink: BufferSink): void;
|
|
59
|
+
toBuffer(sink?: BufferSink): Buffer | void {
|
|
60
|
+
if (!sink) {
|
|
61
|
+
return BufferSink.serialize(this);
|
|
62
|
+
}
|
|
63
|
+
serializeToSink(sink, this.recipient, this.content);
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
/**
|
|
@@ -127,8 +132,13 @@ export class CountedL2ToL1Message {
|
|
|
127
132
|
return new CountedL2ToL1Message(reader.readObject(L2ToL1Message), reader.readNumber());
|
|
128
133
|
}
|
|
129
134
|
|
|
130
|
-
toBuffer(): Buffer
|
|
131
|
-
|
|
135
|
+
toBuffer(): Buffer;
|
|
136
|
+
toBuffer(sink: BufferSink): void;
|
|
137
|
+
toBuffer(sink?: BufferSink): Buffer | void {
|
|
138
|
+
if (!sink) {
|
|
139
|
+
return BufferSink.serialize(this);
|
|
140
|
+
}
|
|
141
|
+
serializeToSink(sink, this.message, this.counter);
|
|
132
142
|
}
|
|
133
143
|
|
|
134
144
|
static fromFields(fields: Fr[] | FieldReader) {
|
|
@@ -187,8 +197,13 @@ export class ScopedL2ToL1Message {
|
|
|
187
197
|
return new ScopedL2ToL1Message(reader.readObject(L2ToL1Message), reader.readObject(AztecAddress));
|
|
188
198
|
}
|
|
189
199
|
|
|
190
|
-
toBuffer(): Buffer
|
|
191
|
-
|
|
200
|
+
toBuffer(): Buffer;
|
|
201
|
+
toBuffer(sink: BufferSink): void;
|
|
202
|
+
toBuffer(sink?: BufferSink): Buffer | void {
|
|
203
|
+
if (!sink) {
|
|
204
|
+
return BufferSink.serialize(this);
|
|
205
|
+
}
|
|
206
|
+
serializeToSink(sink, this.message, this.contractAddress);
|
|
192
207
|
}
|
|
193
208
|
|
|
194
209
|
static fromFields(fields: Fr[] | FieldReader) {
|
|
@@ -229,8 +244,13 @@ export class ScopedCountedL2ToL1Message {
|
|
|
229
244
|
return new ScopedCountedL2ToL1Message(reader.readObject(CountedL2ToL1Message), reader.readObject(AztecAddress));
|
|
230
245
|
}
|
|
231
246
|
|
|
232
|
-
toBuffer(): Buffer
|
|
233
|
-
|
|
247
|
+
toBuffer(): Buffer;
|
|
248
|
+
toBuffer(sink: BufferSink): void;
|
|
249
|
+
toBuffer(sink?: BufferSink): Buffer | void {
|
|
250
|
+
if (!sink) {
|
|
251
|
+
return BufferSink.serialize(this);
|
|
252
|
+
}
|
|
253
|
+
serializeToSink(sink, this.inner, this.contractAddress);
|
|
234
254
|
}
|
|
235
255
|
|
|
236
256
|
static fromFields(fields: Fr[] | FieldReader) {
|
package/src/noir/index.ts
CHANGED
|
@@ -64,6 +64,8 @@ interface NoirFunctionEntry {
|
|
|
64
64
|
export interface NoirCompiledContract {
|
|
65
65
|
/** The name of the contract. */
|
|
66
66
|
name: string;
|
|
67
|
+
/** The version of the Aztec stack that compiled this contract. */
|
|
68
|
+
aztec_version: string;
|
|
67
69
|
/** Is the contract's public bytecode transpiled? */
|
|
68
70
|
transpiled?: boolean;
|
|
69
71
|
/** The functions of the contract. */
|
|
@@ -7,12 +7,13 @@ import {
|
|
|
7
7
|
} from '@aztec/foundation/branded-types';
|
|
8
8
|
import { type BaseBuffer32, Buffer32 } from '@aztec/foundation/buffer';
|
|
9
9
|
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
10
|
-
import { tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
11
10
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
12
11
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
13
12
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
14
13
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
15
14
|
|
|
15
|
+
import type { TypedDataDefinition } from 'viem';
|
|
16
|
+
|
|
16
17
|
import type { L2Block } from '../block/l2_block.js';
|
|
17
18
|
import type { L2BlockInfo } from '../block/l2_block_info.js';
|
|
18
19
|
import { MAX_TXS_PER_BLOCK } from '../deserialization/index.js';
|
|
@@ -22,9 +23,15 @@ import { TxHash } from '../tx/index.js';
|
|
|
22
23
|
import type { Tx } from '../tx/tx.js';
|
|
23
24
|
import { Gossipable } from './gossipable.js';
|
|
24
25
|
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
type CoordinationSignatureContext,
|
|
27
|
+
type CoordinationSignatureType,
|
|
28
|
+
EMPTY_COORDINATION_SIGNATURE_CONTEXT,
|
|
29
|
+
type Signable,
|
|
30
|
+
coordinationSignatureContextEquals,
|
|
31
|
+
getCoordinationSignatureTypedData,
|
|
32
|
+
readCoordinationSignatureContext,
|
|
33
|
+
recoverCoordinationSigner,
|
|
34
|
+
serializeCoordinationSignatureContext,
|
|
28
35
|
} from './signature_utils.js';
|
|
29
36
|
import { SignedTxs } from './signed_txs.js';
|
|
30
37
|
import { TopicType } from './topic_type.js';
|
|
@@ -49,10 +56,12 @@ export type BlockProposalOptions = {
|
|
|
49
56
|
* to be included in a block within a checkpoint. This is used for non-last blocks in a slot.
|
|
50
57
|
* The last block is sent as part of a CheckpointProposal.
|
|
51
58
|
*/
|
|
52
|
-
export class BlockProposal extends Gossipable {
|
|
59
|
+
export class BlockProposal extends Gossipable implements Signable {
|
|
53
60
|
static override p2pTopic = TopicType.block_proposal;
|
|
54
61
|
|
|
55
|
-
|
|
62
|
+
readonly primaryType: CoordinationSignatureType = 'BlockProposal';
|
|
63
|
+
|
|
64
|
+
private cachedSender: EthAddress | undefined | null = undefined;
|
|
56
65
|
|
|
57
66
|
constructor(
|
|
58
67
|
/** The per-block header containing block state and global variables */
|
|
@@ -73,6 +82,9 @@ export class BlockProposal extends Gossipable {
|
|
|
73
82
|
/** The proposer's signature over the block data */
|
|
74
83
|
public readonly signature: Signature,
|
|
75
84
|
|
|
85
|
+
/** The signing domain (chainId + rollupAddress) the signature is bound to */
|
|
86
|
+
public readonly signatureContext: CoordinationSignatureContext,
|
|
87
|
+
|
|
76
88
|
/** The signed transactions in the block (optional, for DA guarantees) */
|
|
77
89
|
public readonly signedTxs?: SignedTxs,
|
|
78
90
|
) {
|
|
@@ -80,7 +92,7 @@ export class BlockProposal extends Gossipable {
|
|
|
80
92
|
}
|
|
81
93
|
|
|
82
94
|
override generateP2PMessageIdentifier(): Promise<BaseBuffer32> {
|
|
83
|
-
return Promise.resolve(
|
|
95
|
+
return Promise.resolve(new Buffer32(this.getPayloadHashBuffer()));
|
|
84
96
|
}
|
|
85
97
|
|
|
86
98
|
get archive(): Fr {
|
|
@@ -114,9 +126,8 @@ export class BlockProposal extends Gossipable {
|
|
|
114
126
|
* Get the payload to sign for this block proposal.
|
|
115
127
|
* The signature is over: blockHeader + indexWithinCheckpoint + inHash + archiveRoot + txHashes
|
|
116
128
|
*/
|
|
117
|
-
getPayloadToSign(
|
|
129
|
+
getPayloadToSign(): Buffer {
|
|
118
130
|
return serializeToBuffer([
|
|
119
|
-
domainSeparator,
|
|
120
131
|
this.blockHeader,
|
|
121
132
|
this.indexWithinCheckpoint,
|
|
122
133
|
this.inHash,
|
|
@@ -126,6 +137,21 @@ export class BlockProposal extends Gossipable {
|
|
|
126
137
|
]);
|
|
127
138
|
}
|
|
128
139
|
|
|
140
|
+
private getPayloadHashBuffer(): Buffer {
|
|
141
|
+
return keccak256(this.getPayloadToSign());
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Returns a keccak256 hash of the signed payload.
|
|
146
|
+
* Used by the attestation pool to dedup distinct signed payloads at the same
|
|
147
|
+
* (slot, indexWithinCheckpoint) regardless of archive collisions.
|
|
148
|
+
* The hash deliberately excludes the signature so non-deterministic ECDSA
|
|
149
|
+
* re-signs of the same payload do not look like equivocation.
|
|
150
|
+
*/
|
|
151
|
+
getPayloadHash(): BlockProposalHash {
|
|
152
|
+
return BlockProposalHash.fromBuffer(this.getPayloadHashBuffer());
|
|
153
|
+
}
|
|
154
|
+
|
|
129
155
|
static async createProposalFromSigner(
|
|
130
156
|
blockHeader: BlockHeader,
|
|
131
157
|
checkpointNumber: CheckpointNumber,
|
|
@@ -134,7 +160,9 @@ export class BlockProposal extends Gossipable {
|
|
|
134
160
|
archiveRoot: Fr,
|
|
135
161
|
txHashes: TxHash[],
|
|
136
162
|
txs: Tx[] | undefined,
|
|
137
|
-
|
|
163
|
+
signatureContext: CoordinationSignatureContext,
|
|
164
|
+
proposalSigner: (typedData: TypedDataDefinition, context: SigningContext) => Promise<Signature>,
|
|
165
|
+
txsSigner?: (typedData: TypedDataDefinition, context: SigningContext) => Promise<Signature>,
|
|
138
166
|
): Promise<BlockProposal> {
|
|
139
167
|
// Create a temporary proposal to get the payload to sign
|
|
140
168
|
const tempProposal = new BlockProposal(
|
|
@@ -144,6 +172,7 @@ export class BlockProposal extends Gossipable {
|
|
|
144
172
|
archiveRoot,
|
|
145
173
|
txHashes,
|
|
146
174
|
Signature.empty(),
|
|
175
|
+
signatureContext,
|
|
147
176
|
);
|
|
148
177
|
|
|
149
178
|
// Create the block signing context
|
|
@@ -155,47 +184,64 @@ export class BlockProposal extends Gossipable {
|
|
|
155
184
|
dutyType: DutyType.BLOCK_PROPOSAL,
|
|
156
185
|
};
|
|
157
186
|
|
|
158
|
-
const
|
|
159
|
-
const sig = await
|
|
187
|
+
const typedData = getCoordinationSignatureTypedData(tempProposal);
|
|
188
|
+
const sig = await proposalSigner(typedData, blockContext);
|
|
160
189
|
|
|
161
190
|
// If txs are provided, sign them as well
|
|
162
191
|
let signedTxs: SignedTxs | undefined;
|
|
163
192
|
if (txs) {
|
|
164
193
|
const txsSigningContext: SigningContext = { dutyType: DutyType.TXS };
|
|
165
|
-
|
|
166
|
-
|
|
194
|
+
if (!txsSigner) {
|
|
195
|
+
throw new Error('signed_txs requires a typed-data signer');
|
|
196
|
+
}
|
|
197
|
+
signedTxs = await SignedTxs.createFromSigner(txs, signatureContext, typedData =>
|
|
198
|
+
txsSigner(typedData, txsSigningContext),
|
|
199
|
+
);
|
|
167
200
|
}
|
|
168
201
|
|
|
169
|
-
return new BlockProposal(
|
|
202
|
+
return new BlockProposal(
|
|
203
|
+
blockHeader,
|
|
204
|
+
indexWithinCheckpoint,
|
|
205
|
+
inHash,
|
|
206
|
+
archiveRoot,
|
|
207
|
+
txHashes,
|
|
208
|
+
sig,
|
|
209
|
+
signatureContext,
|
|
210
|
+
signedTxs,
|
|
211
|
+
);
|
|
170
212
|
}
|
|
171
213
|
|
|
172
214
|
/**
|
|
173
215
|
* Lazily evaluate the sender of the proposal; result is cached.
|
|
174
|
-
* If there's signedTxs, also verifies
|
|
175
|
-
*
|
|
216
|
+
* If there's signedTxs, also verifies that its signing domain matches this proposal's and
|
|
217
|
+
* that the signedTxs sender matches the block proposal sender. This prevents a proposer
|
|
218
|
+
* from wrapping a foreign-chain SignedTxs bundle inside a local-chain proposal.
|
|
219
|
+
* @returns The sender address, or undefined if signature recovery fails or inner/outer mismatch
|
|
176
220
|
*/
|
|
177
221
|
getSender(): EthAddress | undefined {
|
|
178
|
-
if (
|
|
179
|
-
const
|
|
180
|
-
const blockSender = tryRecoverAddress(hashed, this.signature);
|
|
222
|
+
if (this.cachedSender === undefined) {
|
|
223
|
+
const blockSender = recoverCoordinationSigner(this, this.signature);
|
|
181
224
|
|
|
182
|
-
// If there's signedTxs, verify the sender matches
|
|
183
225
|
if (blockSender && this.signedTxs) {
|
|
226
|
+
if (!coordinationSignatureContextEquals(this.signedTxs.signatureContext, this.signatureContext)) {
|
|
227
|
+
this.cachedSender = null;
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
184
230
|
const txsSender = this.signedTxs.getSender();
|
|
185
231
|
if (!txsSender || !txsSender.equals(blockSender)) {
|
|
186
|
-
|
|
232
|
+
this.cachedSender = null;
|
|
233
|
+
return undefined;
|
|
187
234
|
}
|
|
188
235
|
}
|
|
189
236
|
|
|
190
|
-
|
|
191
|
-
this.sender = blockSender;
|
|
237
|
+
this.cachedSender = blockSender ?? null;
|
|
192
238
|
}
|
|
193
239
|
|
|
194
|
-
return this.
|
|
240
|
+
return this.cachedSender ?? undefined;
|
|
195
241
|
}
|
|
196
242
|
|
|
197
243
|
getPayload() {
|
|
198
|
-
return this.getPayloadToSign(
|
|
244
|
+
return this.getPayloadToSign();
|
|
199
245
|
}
|
|
200
246
|
|
|
201
247
|
toBuffer(): Buffer {
|
|
@@ -205,6 +251,7 @@ export class BlockProposal extends Gossipable {
|
|
|
205
251
|
this.inHash,
|
|
206
252
|
this.archiveRoot,
|
|
207
253
|
this.signature,
|
|
254
|
+
serializeCoordinationSignatureContext(this.signatureContext),
|
|
208
255
|
this.txHashes.length,
|
|
209
256
|
this.txHashes,
|
|
210
257
|
];
|
|
@@ -225,6 +272,7 @@ export class BlockProposal extends Gossipable {
|
|
|
225
272
|
const inHash = reader.readObject(Fr);
|
|
226
273
|
const archiveRoot = reader.readObject(Fr);
|
|
227
274
|
const signature = reader.readObject(Signature);
|
|
275
|
+
const signatureContext = readCoordinationSignatureContext(reader);
|
|
228
276
|
const txHashCount = reader.readNumber();
|
|
229
277
|
if (txHashCount > MAX_TXS_PER_BLOCK) {
|
|
230
278
|
throw new Error(`txHashes count ${txHashCount} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
|
|
@@ -242,12 +290,21 @@ export class BlockProposal extends Gossipable {
|
|
|
242
290
|
archiveRoot,
|
|
243
291
|
txHashes,
|
|
244
292
|
signature,
|
|
293
|
+
signatureContext,
|
|
245
294
|
signedTxs,
|
|
246
295
|
);
|
|
247
296
|
}
|
|
248
297
|
}
|
|
249
298
|
|
|
250
|
-
return new BlockProposal(
|
|
299
|
+
return new BlockProposal(
|
|
300
|
+
blockHeader,
|
|
301
|
+
indexWithinCheckpoint,
|
|
302
|
+
inHash,
|
|
303
|
+
archiveRoot,
|
|
304
|
+
txHashes,
|
|
305
|
+
signature,
|
|
306
|
+
signatureContext,
|
|
307
|
+
);
|
|
251
308
|
}
|
|
252
309
|
|
|
253
310
|
getSize(): number {
|
|
@@ -257,6 +314,8 @@ export class BlockProposal extends Gossipable {
|
|
|
257
314
|
this.inHash.size +
|
|
258
315
|
this.archiveRoot.size +
|
|
259
316
|
this.signature.getSize() +
|
|
317
|
+
4 /* chainId */ +
|
|
318
|
+
20 /* rollupAddress */ +
|
|
260
319
|
4 /* txHashes.length */ +
|
|
261
320
|
this.txHashes.length * TxHash.SIZE +
|
|
262
321
|
4 /* hasSignedTxs flag */ +
|
|
@@ -265,7 +324,15 @@ export class BlockProposal extends Gossipable {
|
|
|
265
324
|
}
|
|
266
325
|
|
|
267
326
|
static empty(): BlockProposal {
|
|
268
|
-
return new BlockProposal(
|
|
327
|
+
return new BlockProposal(
|
|
328
|
+
BlockHeader.empty(),
|
|
329
|
+
IndexWithinCheckpoint(0),
|
|
330
|
+
Fr.ZERO,
|
|
331
|
+
Fr.ZERO,
|
|
332
|
+
[],
|
|
333
|
+
Signature.empty(),
|
|
334
|
+
EMPTY_COORDINATION_SIGNATURE_CONTEXT,
|
|
335
|
+
);
|
|
269
336
|
}
|
|
270
337
|
|
|
271
338
|
static random(): BlockProposal {
|
|
@@ -276,6 +343,7 @@ export class BlockProposal extends Gossipable {
|
|
|
276
343
|
Fr.random(),
|
|
277
344
|
[TxHash.random(), TxHash.random()],
|
|
278
345
|
Signature.random(),
|
|
346
|
+
EMPTY_COORDINATION_SIGNATURE_CONTEXT,
|
|
279
347
|
);
|
|
280
348
|
}
|
|
281
349
|
|
|
@@ -287,6 +355,8 @@ export class BlockProposal extends Gossipable {
|
|
|
287
355
|
archiveRoot: this.archiveRoot.toString(),
|
|
288
356
|
signature: this.signature.toString(),
|
|
289
357
|
txHashes: this.txHashes.map(h => h.toString()),
|
|
358
|
+
chainId: this.signatureContext.chainId,
|
|
359
|
+
rollupAddress: this.signatureContext.rollupAddress.toString(),
|
|
290
360
|
};
|
|
291
361
|
}
|
|
292
362
|
|
|
@@ -312,6 +382,7 @@ export class BlockProposal extends Gossipable {
|
|
|
312
382
|
this.archiveRoot,
|
|
313
383
|
this.txHashes,
|
|
314
384
|
this.signature,
|
|
385
|
+
this.signatureContext,
|
|
315
386
|
);
|
|
316
387
|
}
|
|
317
388
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type
|
|
3
|
-
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
4
|
-
import { tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
1
|
+
import { CheckpointProposalHash, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { type BaseBuffer32, Buffer32 } from '@aztec/foundation/buffer';
|
|
5
3
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
5
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
@@ -13,11 +11,9 @@ import type { ZodFor } from '../schemas/index.js';
|
|
|
13
11
|
import { CheckpointProposal } from './checkpoint_proposal.js';
|
|
14
12
|
import { ConsensusPayload } from './consensus_payload.js';
|
|
15
13
|
import { Gossipable } from './gossipable.js';
|
|
16
|
-
import {
|
|
14
|
+
import { type CoordinationSignatureContext, recoverCoordinationSigner } from './signature_utils.js';
|
|
17
15
|
import { TopicType } from './topic_type.js';
|
|
18
16
|
|
|
19
|
-
export type { CheckpointAttestationHash } from '@aztec/foundation/branded-types';
|
|
20
|
-
|
|
21
17
|
/**
|
|
22
18
|
* CheckpointAttestation
|
|
23
19
|
*
|
|
@@ -27,8 +23,8 @@ export type { CheckpointAttestationHash } from '@aztec/foundation/branded-types'
|
|
|
27
23
|
export class CheckpointAttestation extends Gossipable {
|
|
28
24
|
static override p2pTopic = TopicType.checkpoint_attestation;
|
|
29
25
|
|
|
30
|
-
private
|
|
31
|
-
private
|
|
26
|
+
private cachedSender: EthAddress | undefined | null = undefined;
|
|
27
|
+
private cachedProposer: EthAddress | undefined | null = undefined;
|
|
32
28
|
|
|
33
29
|
constructor(
|
|
34
30
|
/** The payload of the message, and what the signature is over */
|
|
@@ -54,7 +50,7 @@ export class CheckpointAttestation extends Gossipable {
|
|
|
54
50
|
}
|
|
55
51
|
|
|
56
52
|
override generateP2PMessageIdentifier(): Promise<BaseBuffer32> {
|
|
57
|
-
return Promise.resolve(
|
|
53
|
+
return Promise.resolve(new Buffer32(this.payload.getPayloadHash()));
|
|
58
54
|
}
|
|
59
55
|
|
|
60
56
|
get archive(): Fr {
|
|
@@ -65,22 +61,19 @@ export class CheckpointAttestation extends Gossipable {
|
|
|
65
61
|
return this.payload.header.slotNumber;
|
|
66
62
|
}
|
|
67
63
|
|
|
64
|
+
get signatureContext(): CoordinationSignatureContext {
|
|
65
|
+
return this.payload.signatureContext;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
68
|
/**
|
|
69
69
|
* Lazily evaluate and cache the signer of the attestation
|
|
70
70
|
* @returns The signer of the attestation, or undefined if signature recovery fails
|
|
71
71
|
*/
|
|
72
72
|
getSender(): EthAddress | undefined {
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
const hashed = getHashedSignaturePayloadEthSignedMessage(
|
|
76
|
-
this.payload,
|
|
77
|
-
SignatureDomainSeparator.checkpointAttestation,
|
|
78
|
-
);
|
|
79
|
-
// Cache the sender for later use
|
|
80
|
-
this.sender = tryRecoverAddress(hashed, this.signature);
|
|
73
|
+
if (this.cachedSender === undefined) {
|
|
74
|
+
this.cachedSender = recoverCoordinationSigner(this.payload, this.signature) ?? null;
|
|
81
75
|
}
|
|
82
|
-
|
|
83
|
-
return this.sender;
|
|
76
|
+
return this.cachedSender ?? undefined;
|
|
84
77
|
}
|
|
85
78
|
|
|
86
79
|
/**
|
|
@@ -88,7 +81,7 @@ export class CheckpointAttestation extends Gossipable {
|
|
|
88
81
|
* @returns The proposer of the checkpoint
|
|
89
82
|
*/
|
|
90
83
|
getProposer(): EthAddress | undefined {
|
|
91
|
-
if (
|
|
84
|
+
if (this.cachedProposer === undefined) {
|
|
92
85
|
// Create a temporary CheckpointProposal to recover the proposer address.
|
|
93
86
|
// We need to use CheckpointProposal because it has a different getPayloadToSign()
|
|
94
87
|
// implementation than ConsensusPayload (uses serializeToBuffer vs ABI encoding).
|
|
@@ -97,16 +90,23 @@ export class CheckpointAttestation extends Gossipable {
|
|
|
97
90
|
this.payload.archive,
|
|
98
91
|
this.payload.feeAssetPriceModifier,
|
|
99
92
|
this.proposerSignature,
|
|
93
|
+
this.payload.signatureContext,
|
|
100
94
|
);
|
|
101
|
-
|
|
102
|
-
this.proposer = proposal.getSender();
|
|
95
|
+
this.cachedProposer = proposal.getSender() ?? null;
|
|
103
96
|
}
|
|
104
|
-
|
|
105
|
-
return this.proposer;
|
|
97
|
+
return this.cachedProposer ?? undefined;
|
|
106
98
|
}
|
|
107
99
|
|
|
108
100
|
getPayload(): Buffer {
|
|
109
|
-
return this.payload.getPayloadToSign(
|
|
101
|
+
return this.payload.getPayloadToSign();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Returns a keccak256 hash of the signed consensus payload.
|
|
106
|
+
* Used to dedup distinct signed payloads. Returns same hash than the corresponding proposal.
|
|
107
|
+
*/
|
|
108
|
+
getPayloadHash(): CheckpointProposalHash {
|
|
109
|
+
return CheckpointProposalHash.fromBuffer(this.payload.getPayloadHash());
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
toBuffer(): Buffer {
|