@aztec/stdlib 0.0.1-commit.1142ef1 → 0.0.1-commit.1bea0213
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/function_call.d.ts +9 -1
- package/dest/abi/function_call.d.ts.map +1 -1
- package/dest/abi/utils.d.ts +7 -1
- package/dest/abi/utils.d.ts.map +1 -1
- package/dest/abi/utils.js +7 -0
- package/dest/auth_witness/auth_witness.d.ts +2 -1
- package/dest/auth_witness/auth_witness.d.ts.map +1 -1
- package/dest/avm/avm.d.ts +62 -62
- package/dest/avm/avm_accumulated_data.d.ts +30 -3
- package/dest/avm/avm_accumulated_data.d.ts.map +1 -1
- package/dest/avm/avm_circuit_public_inputs.d.ts +9 -9
- package/dest/avm/avm_proving_request.d.ts +299 -299
- package/dest/avm/contract_storage_read.d.ts +13 -1
- package/dest/avm/contract_storage_read.d.ts.map +1 -1
- package/dest/avm/contract_storage_update_request.d.ts +13 -1
- package/dest/avm/contract_storage_update_request.d.ts.map +1 -1
- package/dest/avm/public_call_stack_item_compressed.d.ts +3 -1
- package/dest/avm/public_call_stack_item_compressed.d.ts.map +1 -1
- package/dest/avm/public_data_read.d.ts +10 -1
- package/dest/avm/public_data_read.d.ts.map +1 -1
- package/dest/avm/public_data_update_request.d.ts +10 -1
- package/dest/avm/public_data_update_request.d.ts.map +1 -1
- package/dest/avm/public_data_write.d.ts +7 -1
- package/dest/avm/public_data_write.d.ts.map +1 -1
- package/dest/avm/public_inner_call_request.d.ts +4 -1
- package/dest/avm/public_inner_call_request.d.ts.map +1 -1
- package/dest/avm/revert_code.d.ts +4 -4
- package/dest/avm/revert_code.d.ts.map +1 -1
- package/dest/block/block_hash.d.ts +16 -9
- package/dest/block/block_hash.d.ts.map +1 -1
- package/dest/block/block_hash.js +23 -8
- package/dest/block/block_parameter.d.ts +4 -3
- package/dest/block/block_parameter.d.ts.map +1 -1
- package/dest/block/block_parameter.js +2 -0
- package/dest/block/body.d.ts +1 -1
- package/dest/block/body.d.ts.map +1 -1
- package/dest/block/body.js +2 -1
- package/dest/block/checkpointed_l2_block.d.ts +20 -137
- package/dest/block/checkpointed_l2_block.d.ts.map +1 -1
- package/dest/block/checkpointed_l2_block.js +7 -45
- package/dest/block/in_block.d.ts +8 -8
- package/dest/block/in_block.d.ts.map +1 -1
- package/dest/block/in_block.js +4 -4
- package/dest/block/index.d.ts +1 -3
- package/dest/block/index.d.ts.map +1 -1
- package/dest/block/index.js +0 -2
- package/dest/block/l2_block.d.ts +55 -59
- package/dest/block/l2_block.d.ts.map +1 -1
- package/dest/block/l2_block.js +64 -109
- package/dest/block/l2_block_source.d.ts +63 -38
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_source.js +2 -1
- package/dest/block/l2_block_stream/interfaces.d.ts +9 -6
- package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_block_stream.d.ts +6 -3
- package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_block_stream.js +37 -34
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +3 -3
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
- package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
- package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
- package/dest/block/test/l2_tips_store_test_suite.js +2 -7
- package/dest/block/validate_block_result.d.ts +1 -1
- package/dest/block/validate_block_result.d.ts.map +1 -1
- package/dest/block/validate_block_result.js +5 -4
- package/dest/checkpoint/checkpoint.d.ts +30 -20
- package/dest/checkpoint/checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint.js +18 -6
- package/dest/checkpoint/published_checkpoint.d.ts +17 -15
- package/dest/checkpoint/published_checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/published_checkpoint.js +4 -3
- package/dest/config/node-rpc-config.js +1 -1
- package/dest/contract/complete_address.d.ts +4 -1
- package/dest/contract/complete_address.d.ts.map +1 -1
- package/dest/contract/contract_deployment_data.d.ts +5 -5
- package/dest/contract/index.d.ts +1 -3
- package/dest/contract/index.d.ts.map +1 -1
- package/dest/contract/index.js +0 -2
- package/dest/contract/interfaces/contract_instance.d.ts +16 -16
- package/dest/contract/private_function.d.ts +1 -1
- package/dest/contract/private_function.d.ts.map +1 -1
- package/dest/contract/private_function.js +1 -2
- package/dest/database-version/version_manager.d.ts +4 -2
- package/dest/database-version/version_manager.d.ts.map +1 -1
- package/dest/delayed_public_mutable/delayed_public_mutable_values.d.ts +2 -2
- package/dest/delayed_public_mutable/delayed_public_mutable_values.d.ts.map +1 -1
- package/dest/delayed_public_mutable/delayed_public_mutable_values.js +7 -10
- package/dest/deserialization/index.d.ts +11 -0
- package/dest/deserialization/index.d.ts.map +1 -0
- package/dest/deserialization/index.js +10 -0
- package/dest/epoch-helpers/index.js +1 -1
- package/dest/errors/proving_error.d.ts +2 -2
- package/dest/errors/proving_error.d.ts.map +1 -1
- package/dest/interfaces/api_limit.d.ts +2 -1
- package/dest/interfaces/api_limit.d.ts.map +1 -1
- package/dest/interfaces/api_limit.js +1 -0
- package/dest/interfaces/archiver.d.ts +1 -1
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +16 -14
- package/dest/interfaces/aztec-node-admin.d.ts +56 -26
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.d.ts +61 -43
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +7 -9
- package/dest/interfaces/block-builder.d.ts +16 -14
- package/dest/interfaces/block-builder.d.ts.map +1 -1
- package/dest/interfaces/configs.d.ts +8 -8
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/get_logs_response.d.ts +3 -3
- package/dest/interfaces/l2_logs_source.d.ts +14 -5
- package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
- package/dest/interfaces/prover-client.d.ts +10 -1
- package/dest/interfaces/prover-client.d.ts.map +1 -1
- package/dest/interfaces/prover-client.js +7 -1
- package/dest/interfaces/proving-job.d.ts +14 -14
- package/dest/interfaces/tx_provider.d.ts +3 -3
- package/dest/interfaces/tx_provider.d.ts.map +1 -1
- package/dest/interfaces/validator.d.ts +69 -13
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/interfaces/validator.js +2 -2
- package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts +1 -1
- package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts.map +1 -1
- package/dest/kernel/hints/build_note_hash_read_request_hints.js +16 -6
- package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts +3 -3
- package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts.map +1 -1
- package/dest/kernel/hints/build_nullifier_read_request_hints.js +16 -8
- package/dest/kernel/hints/key_validation_hint.d.ts +2 -1
- package/dest/kernel/hints/key_validation_hint.d.ts.map +1 -1
- package/dest/kernel/hints/key_validation_request.d.ts +2 -1
- package/dest/kernel/hints/key_validation_request.d.ts.map +1 -1
- package/dest/kernel/hints/key_validation_request_and_generator.d.ts +6 -1
- package/dest/kernel/hints/key_validation_request_and_generator.d.ts.map +1 -1
- package/dest/kernel/hints/private_kernel_reset_hints.d.ts +13 -1
- package/dest/kernel/hints/private_kernel_reset_hints.d.ts.map +1 -1
- package/dest/kernel/hints/read_request.d.ts +7 -1
- package/dest/kernel/hints/read_request.d.ts.map +1 -1
- package/dest/kernel/hints/read_request_hints.d.ts +7 -1
- package/dest/kernel/hints/read_request_hints.d.ts.map +1 -1
- package/dest/kernel/private_accumulated_data.d.ts +23 -1
- package/dest/kernel/private_accumulated_data.d.ts.map +1 -1
- package/dest/kernel/private_call_data.d.ts +25 -1
- package/dest/kernel/private_call_data.d.ts.map +1 -1
- package/dest/kernel/private_call_request.d.ts +16 -1
- package/dest/kernel/private_call_request.d.ts.map +1 -1
- package/dest/kernel/private_circuit_public_inputs.d.ts +74 -1
- package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +31 -1
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_data.d.ts +7 -1
- package/dest/kernel/private_kernel_data.d.ts.map +1 -1
- package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts +22 -1
- package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_inner_circuit_private_inputs.d.ts +7 -1
- package/dest/kernel/private_kernel_inner_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_reset_circuit_private_inputs.d.ts +4 -1
- package/dest/kernel/private_kernel_reset_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +10 -1
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +23 -1
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_to_avm_accumulated_data.d.ts +2 -2
- package/dest/kernel/private_to_rollup_accumulated_data.d.ts +17 -1
- package/dest/kernel/private_to_rollup_accumulated_data.d.ts.map +1 -1
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts +16 -1
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_validation_requests.d.ts +10 -1
- package/dest/kernel/private_validation_requests.d.ts.map +1 -1
- package/dest/kernel/public_call_request.d.ts +22 -1
- package/dest/kernel/public_call_request.d.ts.map +1 -1
- package/dest/kernel/utils/optional_number.d.ts +7 -1
- package/dest/kernel/utils/optional_number.d.ts.map +1 -1
- package/dest/keys/public_keys.d.ts +5 -1
- package/dest/keys/public_keys.d.ts.map +1 -1
- package/dest/logs/extended_contract_class_log.d.ts +3 -1
- package/dest/logs/extended_contract_class_log.d.ts.map +1 -1
- package/dest/logs/extended_public_log.d.ts +7 -5
- package/dest/logs/extended_public_log.d.ts.map +1 -1
- package/dest/logs/log_id.d.ts +10 -6
- package/dest/logs/log_id.d.ts.map +1 -1
- package/dest/logs/log_id.js +5 -5
- package/dest/messaging/inbox_leaf.d.ts +3 -1
- package/dest/messaging/inbox_leaf.d.ts.map +1 -1
- package/dest/messaging/l1_actor.d.ts +7 -1
- package/dest/messaging/l1_actor.d.ts.map +1 -1
- package/dest/messaging/l1_to_l2_message.d.ts +6 -1
- package/dest/messaging/l1_to_l2_message.d.ts.map +1 -1
- package/dest/messaging/l2_actor.d.ts +7 -1
- package/dest/messaging/l2_actor.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_membership.d.ts +1 -1
- package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_membership.js +5 -3
- package/dest/messaging/out_hash.d.ts +41 -4
- package/dest/messaging/out_hash.d.ts.map +1 -1
- package/dest/messaging/out_hash.js +52 -26
- package/dest/note/note_dao.d.ts +36 -5
- package/dest/note/note_dao.d.ts.map +1 -1
- package/dest/note/note_dao.js +15 -12
- package/dest/p2p/block_proposal.d.ts +14 -6
- package/dest/p2p/block_proposal.d.ts.map +1 -1
- package/dest/p2p/block_proposal.js +25 -7
- package/dest/p2p/checkpoint_attestation.d.ts +5 -1
- package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.d.ts +11 -5
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +17 -5
- package/dest/p2p/consensus_payload.d.ts +4 -3
- package/dest/p2p/consensus_payload.d.ts.map +1 -1
- package/dest/p2p/consensus_payload.js +0 -3
- package/dest/p2p/constants.d.ts +3 -0
- package/dest/p2p/constants.d.ts.map +1 -0
- package/dest/p2p/constants.js +2 -0
- package/dest/p2p/index.d.ts +2 -1
- package/dest/p2p/index.d.ts.map +1 -1
- package/dest/p2p/index.js +1 -0
- package/dest/p2p/message_validator.d.ts +18 -3
- package/dest/p2p/message_validator.d.ts.map +1 -1
- package/dest/p2p/message_validator.js +2 -1
- package/dest/p2p/signed_txs.d.ts +3 -1
- package/dest/p2p/signed_txs.d.ts.map +1 -1
- package/dest/p2p/signed_txs.js +6 -1
- package/dest/p2p/topic_type.js +2 -1
- package/dest/parity/parity_base_private_inputs.d.ts +3 -1
- package/dest/parity/parity_base_private_inputs.d.ts.map +1 -1
- package/dest/parity/parity_public_inputs.d.ts +4 -1
- package/dest/parity/parity_public_inputs.d.ts.map +1 -1
- package/dest/parity/parity_root_private_inputs.d.ts +2 -1
- package/dest/parity/parity_root_private_inputs.d.ts.map +1 -1
- package/dest/proofs/chonk_proof.d.ts +1 -1
- package/dest/proofs/chonk_proof.d.ts.map +1 -1
- package/dest/proofs/chonk_proof.js +9 -4
- package/dest/proofs/proof.d.ts +4 -1
- package/dest/proofs/proof.d.ts.map +1 -1
- package/dest/proofs/recursive_proof.d.ts +10 -1
- package/dest/proofs/recursive_proof.d.ts.map +1 -1
- package/dest/rollup/base_rollup_hints.d.ts +34 -1
- package/dest/rollup/base_rollup_hints.d.ts.map +1 -1
- package/dest/rollup/block_constant_data.d.ts +12 -1
- package/dest/rollup/block_constant_data.d.ts.map +1 -1
- package/dest/rollup/block_headers_hash.js +1 -1
- package/dest/rollup/block_merge_rollup_private_inputs.d.ts +4 -1
- package/dest/rollup/block_merge_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/block_rollup_public_inputs.d.ts +44 -3
- package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/block_rollup_public_inputs.js +2 -2
- package/dest/rollup/block_root_rollup_private_inputs.d.ts +64 -1
- package/dest/rollup/block_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_constant_data.d.ts +10 -1
- package/dest/rollup/checkpoint_constant_data.d.ts.map +1 -1
- package/dest/rollup/checkpoint_header.d.ts +29 -2
- package/dest/rollup/checkpoint_header.d.ts.map +1 -1
- package/dest/rollup/checkpoint_header.js +21 -5
- package/dest/rollup/checkpoint_merge_rollup_private_inputs.d.ts +4 -1
- package/dest/rollup/checkpoint_merge_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +41 -6
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.js +10 -6
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +44 -3
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_root_rollup_private_inputs.js +13 -2
- package/dest/rollup/epoch_constant_data.d.ts +16 -1
- package/dest/rollup/epoch_constant_data.d.ts.map +1 -1
- package/dest/rollup/root_rollup_private_inputs.d.ts +6 -1
- package/dest/rollup/root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.d.ts +12 -2
- package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.js +4 -1
- package/dest/rollup/tree_snapshot_diff_hints.d.ts +24 -1
- package/dest/rollup/tree_snapshot_diff_hints.d.ts.map +1 -1
- package/dest/rollup/tx_merge_rollup_private_inputs.d.ts +4 -1
- package/dest/rollup/tx_merge_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/tx_rollup_public_inputs.d.ts +29 -1
- package/dest/rollup/tx_rollup_public_inputs.d.ts.map +1 -1
- package/dest/schemas/schemas.d.ts +1 -1
- package/dest/tests/factories.d.ts +2 -4
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +6 -15
- package/dest/tests/jest.js +1 -1
- package/dest/tests/mocks.d.ts +15 -13
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +41 -24
- package/dest/trees/append_only_tree_snapshot.d.ts +13 -1
- package/dest/trees/append_only_tree_snapshot.d.ts.map +1 -1
- package/dest/trees/nullifier_leaf.d.ts +13 -1
- package/dest/trees/nullifier_leaf.d.ts.map +1 -1
- package/dest/trees/nullifier_membership_witness.d.ts +10 -1
- package/dest/trees/nullifier_membership_witness.d.ts.map +1 -1
- package/dest/trees/public_data_leaf.d.ts +16 -1
- package/dest/trees/public_data_leaf.d.ts.map +1 -1
- package/dest/trees/public_data_witness.d.ts +11 -1
- package/dest/trees/public_data_witness.d.ts.map +1 -1
- package/dest/tx/block_header.d.ts +14 -2
- package/dest/tx/block_header.d.ts.map +1 -1
- package/dest/tx/block_header.js +5 -1
- package/dest/tx/call_context.d.ts +13 -1
- package/dest/tx/call_context.d.ts.map +1 -1
- package/dest/tx/capsule.d.ts +4 -1
- package/dest/tx/capsule.d.ts.map +1 -1
- package/dest/tx/execution_payload.d.ts +9 -1
- package/dest/tx/execution_payload.d.ts.map +1 -1
- package/dest/tx/function_data.d.ts +4 -2
- package/dest/tx/function_data.d.ts.map +1 -1
- package/dest/tx/global_variables.d.ts +9 -1
- package/dest/tx/global_variables.d.ts.map +1 -1
- package/dest/tx/hashed_values.d.ts +7 -1
- package/dest/tx/hashed_values.d.ts.map +1 -1
- package/dest/tx/in_tx.d.ts +3 -3
- package/dest/tx/indexed_tx_effect.d.ts +4 -4
- package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
- package/dest/tx/indexed_tx_effect.js +2 -2
- package/dest/tx/partial_state_reference.d.ts +4 -1
- package/dest/tx/partial_state_reference.d.ts.map +1 -1
- package/dest/tx/private_execution_result.d.ts +23 -2
- package/dest/tx/private_execution_result.d.ts.map +1 -1
- package/dest/tx/private_execution_result.js +1 -1
- package/dest/tx/private_tx_constant_data.d.ts +16 -1
- package/dest/tx/private_tx_constant_data.d.ts.map +1 -1
- package/dest/tx/profiling.d.ts +149 -26
- package/dest/tx/profiling.d.ts.map +1 -1
- package/dest/tx/profiling.js +44 -7
- package/dest/tx/protocol_contracts.d.ts +1 -1
- package/dest/tx/public_call_request_with_calldata.d.ts +7 -1
- package/dest/tx/public_call_request_with_calldata.d.ts.map +1 -1
- package/dest/tx/state_reference.d.ts +3 -1
- package/dest/tx/state_reference.d.ts.map +1 -1
- package/dest/tx/tx.d.ts +24 -1
- package/dest/tx/tx.d.ts.map +1 -1
- package/dest/tx/tx.js +6 -3
- package/dest/tx/tx_context.d.ts +2 -1
- package/dest/tx/tx_context.d.ts.map +1 -1
- package/dest/tx/tx_effect.d.ts +32 -6
- package/dest/tx/tx_effect.d.ts.map +1 -1
- package/dest/tx/tx_effect.js +0 -7
- package/dest/tx/tx_execution_request.d.ts +30 -1
- package/dest/tx/tx_execution_request.d.ts.map +1 -1
- package/dest/tx/tx_hash.d.ts +2 -1
- package/dest/tx/tx_hash.d.ts.map +1 -1
- package/dest/tx/tx_receipt.d.ts +47 -13
- package/dest/tx/tx_receipt.d.ts.map +1 -1
- package/dest/tx/tx_receipt.js +46 -15
- package/dest/tx/tx_request.d.ts +6 -1
- package/dest/tx/tx_request.d.ts.map +1 -1
- package/dest/tx/validator/error_texts.d.ts +2 -1
- package/dest/tx/validator/error_texts.d.ts.map +1 -1
- package/dest/tx/validator/error_texts.js +2 -0
- package/dest/types/shared.d.ts +4 -1
- package/dest/types/shared.d.ts.map +1 -1
- package/dest/validators/schemas.d.ts +8 -8
- package/dest/vks/verification_key.d.ts +22 -1
- package/dest/vks/verification_key.d.ts.map +1 -1
- package/dest/vks/vk_data.d.ts +7 -1
- package/dest/vks/vk_data.d.ts.map +1 -1
- package/dest/zkpassport/index.d.ts +3 -4
- package/dest/zkpassport/index.d.ts.map +1 -1
- package/dest/zkpassport/index.js +9 -9
- package/package.json +12 -10
- package/src/abi/utils.ts +17 -0
- package/src/block/block_hash.ts +36 -10
- package/src/block/block_parameter.ts +4 -2
- package/src/block/body.ts +2 -1
- package/src/block/checkpointed_l2_block.ts +8 -58
- package/src/block/in_block.ts +5 -5
- package/src/block/index.ts +0 -2
- package/src/block/l2_block.ts +101 -149
- package/src/block/l2_block_source.ts +69 -41
- package/src/block/l2_block_stream/interfaces.ts +8 -5
- package/src/block/l2_block_stream/l2_block_stream.ts +45 -37
- package/src/block/l2_block_stream/l2_tips_store_base.ts +2 -2
- package/src/block/test/l2_tips_store_test_suite.ts +4 -9
- package/src/block/validate_block_result.ts +5 -4
- package/src/checkpoint/checkpoint.ts +33 -11
- package/src/checkpoint/published_checkpoint.ts +4 -3
- package/src/config/node-rpc-config.ts +1 -1
- package/src/contract/index.ts +0 -2
- package/src/contract/private_function.ts +1 -2
- package/src/delayed_public_mutable/delayed_public_mutable_values.ts +9 -10
- package/src/deserialization/index.ts +21 -0
- package/src/epoch-helpers/index.ts +1 -1
- package/src/interfaces/api_limit.ts +1 -0
- package/src/interfaces/archiver.ts +16 -23
- package/src/interfaces/aztec-node.ts +76 -74
- package/src/interfaces/block-builder.ts +31 -24
- package/src/interfaces/configs.ts +1 -3
- package/src/interfaces/l2_logs_source.ts +17 -4
- package/src/interfaces/prover-client.ts +15 -0
- package/src/interfaces/tx_provider.ts +2 -2
- package/src/interfaces/validator.ts +8 -9
- package/src/kernel/hints/build_note_hash_read_request_hints.ts +17 -6
- package/src/kernel/hints/build_nullifier_read_request_hints.ts +17 -14
- package/src/logs/log_id.ts +6 -6
- package/src/messaging/l2_to_l1_membership.ts +5 -3
- package/src/messaging/out_hash.ts +60 -29
- package/src/note/note_dao.ts +18 -13
- package/src/p2p/block_proposal.ts +27 -11
- package/src/p2p/checkpoint_proposal.ts +20 -9
- package/src/p2p/consensus_payload.ts +0 -5
- package/src/p2p/constants.ts +3 -0
- package/src/p2p/index.ts +1 -0
- package/src/p2p/message_validator.ts +14 -2
- package/src/p2p/signed_txs.ts +6 -1
- package/src/p2p/topic_type.ts +1 -1
- package/src/proofs/chonk_proof.ts +9 -5
- package/src/rollup/block_headers_hash.ts +1 -1
- package/src/rollup/block_rollup_public_inputs.ts +2 -2
- package/src/rollup/checkpoint_header.ts +20 -0
- package/src/rollup/checkpoint_rollup_public_inputs.ts +12 -6
- package/src/rollup/checkpoint_root_rollup_private_inputs.ts +14 -1
- package/src/rollup/root_rollup_public_inputs.ts +4 -1
- package/src/tests/factories.ts +6 -26
- package/src/tests/jest.ts +1 -1
- package/src/tests/mocks.ts +56 -38
- package/src/tx/block_header.ts +11 -3
- package/src/tx/indexed_tx_effect.ts +2 -2
- package/src/tx/private_execution_result.ts +1 -1
- package/src/tx/profiling.ts +46 -4
- package/src/tx/tx.ts +8 -9
- package/src/tx/tx_effect.ts +0 -9
- package/src/tx/tx_receipt.ts +75 -18
- package/src/tx/validator/error_texts.ts +3 -0
- package/src/zkpassport/index.ts +11 -12
- package/dest/block/l2_block_code_to_purge.d.ts +0 -11
- package/dest/block/l2_block_code_to_purge.d.ts.map +0 -1
- package/dest/block/l2_block_code_to_purge.js +0 -55
- package/dest/block/l2_block_header.d.ts +0 -94
- package/dest/block/l2_block_header.d.ts.map +0 -1
- package/dest/block/l2_block_header.js +0 -160
- package/dest/block/l2_block_new.d.ts +0 -134
- package/dest/block/l2_block_new.d.ts.map +0 -1
- package/dest/block/l2_block_new.js +0 -155
- package/dest/contract/contract_class_metadata.d.ts +0 -8
- package/dest/contract/contract_class_metadata.d.ts.map +0 -1
- package/dest/contract/contract_class_metadata.js +0 -1
- package/dest/contract/contract_metadata.d.ts +0 -7
- package/dest/contract/contract_metadata.d.ts.map +0 -1
- package/dest/contract/contract_metadata.js +0 -1
- package/src/block/l2_block_code_to_purge.ts +0 -80
- package/src/block/l2_block_header.ts +0 -255
- package/src/block/l2_block_new.ts +0 -211
- package/src/contract/contract_class_metadata.ts +0 -8
- package/src/contract/contract_metadata.ts +0 -7
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
7
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
8
8
|
|
|
9
|
-
import { siloNullifier } from '../../hash/hash.js';
|
|
10
9
|
import type { NullifierLeafPreimage } from '../../trees/nullifier_leaf.js';
|
|
11
10
|
import type { ClaimedLengthArray } from '../claimed_length_array.js';
|
|
12
11
|
import type { ScopedNullifier } from '../nullifier.js';
|
|
@@ -74,7 +73,6 @@ export async function buildNullifierReadRequestHintsFromResetActions<PENDING ext
|
|
|
74
73
|
resetActions: ReadRequestResetActions<typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>,
|
|
75
74
|
maxPending: PENDING = MAX_NULLIFIER_READ_REQUESTS_PER_TX as PENDING,
|
|
76
75
|
maxSettled: SETTLED = MAX_NULLIFIER_READ_REQUESTS_PER_TX as SETTLED,
|
|
77
|
-
siloed = false,
|
|
78
76
|
) {
|
|
79
77
|
const builder = new NullifierReadRequestHintsBuilder(maxPending, maxSettled);
|
|
80
78
|
|
|
@@ -82,21 +80,28 @@ export async function buildNullifierReadRequestHintsFromResetActions<PENDING ext
|
|
|
82
80
|
builder.addPendingReadRequest(hint.readRequestIndex, hint.pendingValueIndex);
|
|
83
81
|
});
|
|
84
82
|
|
|
83
|
+
// Collect all settled read requests
|
|
84
|
+
const settledRequests: { index: number; readRequest: ScopedReadRequest }[] = [];
|
|
85
85
|
for (let i = 0; i < resetActions.actions.length; i++) {
|
|
86
86
|
if (resetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
87
|
-
|
|
88
|
-
const siloedValue = siloed
|
|
89
|
-
? readRequest.value
|
|
90
|
-
: await siloNullifier(readRequest.contractAddress, readRequest.value);
|
|
91
|
-
const membershipWitnessWithPreimage = await oracle.getNullifierMembershipWitness(siloedValue);
|
|
92
|
-
builder.addSettledReadRequest(
|
|
93
|
-
i,
|
|
94
|
-
membershipWitnessWithPreimage.membershipWitness,
|
|
95
|
-
membershipWitnessWithPreimage.leafPreimage,
|
|
96
|
-
);
|
|
87
|
+
settledRequests.push({ index: i, readRequest: nullifierReadRequests.array[i] });
|
|
97
88
|
}
|
|
98
89
|
}
|
|
99
90
|
|
|
91
|
+
const siloedValues = settledRequests.map(({ readRequest }) => readRequest.value);
|
|
92
|
+
|
|
93
|
+
// Fetch all membership witnesses in parallel
|
|
94
|
+
const membershipWitnesses = await Promise.all(siloedValues.map(value => oracle.getNullifierMembershipWitness(value)));
|
|
95
|
+
|
|
96
|
+
// Add settled read requests to builder
|
|
97
|
+
for (let i = 0; i < settledRequests.length; i++) {
|
|
98
|
+
builder.addSettledReadRequest(
|
|
99
|
+
settledRequests[i].index,
|
|
100
|
+
membershipWitnesses[i].membershipWitness,
|
|
101
|
+
membershipWitnesses[i].leafPreimage,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
100
105
|
return builder.toHints();
|
|
101
106
|
}
|
|
102
107
|
|
|
@@ -109,7 +114,6 @@ export async function buildNullifierReadRequestHints<PENDING extends number, SET
|
|
|
109
114
|
futureNullifiers: ScopedNullifier[],
|
|
110
115
|
maxPending: PENDING = MAX_NULLIFIER_READ_REQUESTS_PER_TX as PENDING,
|
|
111
116
|
maxSettled: SETTLED = MAX_NULLIFIER_READ_REQUESTS_PER_TX as SETTLED,
|
|
112
|
-
siloed = false,
|
|
113
117
|
) {
|
|
114
118
|
const resetActions = getNullifierReadRequestResetActions(nullifierReadRequests, nullifiers, futureNullifiers);
|
|
115
119
|
return await buildNullifierReadRequestHintsFromResetActions(
|
|
@@ -118,6 +122,5 @@ export async function buildNullifierReadRequestHints<PENDING extends number, SET
|
|
|
118
122
|
resetActions,
|
|
119
123
|
maxPending,
|
|
120
124
|
maxSettled,
|
|
121
|
-
siloed,
|
|
122
125
|
);
|
|
123
126
|
}
|
package/src/logs/log_id.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { BufferReader } from '@aztec/foundation/serialize';
|
|
|
5
5
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { BlockHash } from '../block/block_hash.js';
|
|
9
9
|
import { schemas } from '../schemas/index.js';
|
|
10
10
|
|
|
11
11
|
/** A globally unique log id. */
|
|
@@ -20,7 +20,7 @@ export class LogId {
|
|
|
20
20
|
/** The block number the log was emitted in. */
|
|
21
21
|
public readonly blockNumber: BlockNumber,
|
|
22
22
|
/** The hash of the block the log was emitted in. */
|
|
23
|
-
public readonly blockHash:
|
|
23
|
+
public readonly blockHash: BlockHash,
|
|
24
24
|
/** The index of a tx in a block the log was emitted in. */
|
|
25
25
|
public readonly txIndex: number,
|
|
26
26
|
/** The index of a log the tx was emitted in. */
|
|
@@ -40,7 +40,7 @@ export class LogId {
|
|
|
40
40
|
static random() {
|
|
41
41
|
return new LogId(
|
|
42
42
|
BlockNumber(Math.floor(Math.random() * 1000) + 1),
|
|
43
|
-
|
|
43
|
+
BlockHash.random(),
|
|
44
44
|
Math.floor(Math.random() * 1000),
|
|
45
45
|
Math.floor(Math.random() * 100),
|
|
46
46
|
);
|
|
@@ -50,7 +50,7 @@ export class LogId {
|
|
|
50
50
|
return z
|
|
51
51
|
.object({
|
|
52
52
|
blockNumber: BlockNumberSchema,
|
|
53
|
-
blockHash:
|
|
53
|
+
blockHash: BlockHash.schema,
|
|
54
54
|
txIndex: schemas.Integer,
|
|
55
55
|
logIndex: schemas.Integer,
|
|
56
56
|
})
|
|
@@ -81,7 +81,7 @@ export class LogId {
|
|
|
81
81
|
const reader = BufferReader.asReader(buffer);
|
|
82
82
|
|
|
83
83
|
const blockNumber = BlockNumber(reader.readNumber());
|
|
84
|
-
const blockHash = reader.readObject(
|
|
84
|
+
const blockHash = reader.readObject(BlockHash);
|
|
85
85
|
const txIndex = reader.readNumber();
|
|
86
86
|
const logIndex = reader.readNumber();
|
|
87
87
|
|
|
@@ -104,7 +104,7 @@ export class LogId {
|
|
|
104
104
|
static fromString(data: string): LogId {
|
|
105
105
|
const [rawBlockNumber, rawTxIndex, rawLogIndex, rawBlockHash] = data.split('-');
|
|
106
106
|
const blockNumber = BlockNumber(Number(rawBlockNumber));
|
|
107
|
-
const blockHash =
|
|
107
|
+
const blockHash = BlockHash.fromString(rawBlockHash);
|
|
108
108
|
const txIndex = Number(rawTxIndex);
|
|
109
109
|
const logIndex = Number(rawLogIndex);
|
|
110
110
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OUT_HASH_TREE_LEAF_COUNT } from '@aztec/constants';
|
|
2
2
|
import type { EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { SiblingPath, UnbalancedMerkleTreeCalculator, computeUnbalancedShaRoot } from '@aztec/foundation/trees';
|
|
@@ -165,10 +165,12 @@ export function computeL2ToL1MembershipWitnessFromMessagesInEpoch(
|
|
|
165
165
|
});
|
|
166
166
|
// Pad to AZTEC_MAX_EPOCH_DURATION with zeros.
|
|
167
167
|
checkpointOutHashes = checkpointOutHashes.concat(
|
|
168
|
-
Array.from({ length:
|
|
168
|
+
Array.from({ length: OUT_HASH_TREE_LEAF_COUNT - messagesInEpoch.length }, () => Buffer.alloc(32)),
|
|
169
169
|
);
|
|
170
170
|
|
|
171
|
-
// Build the epoch tree with all the checkpoint out hashes, including the padded zeros
|
|
171
|
+
// Build the epoch tree with all the checkpoint out hashes, including the padded zeros.
|
|
172
|
+
// Note: The epoch tree is actually a balanced tree, but we use an unbalanced tree calculator here to avoid turning
|
|
173
|
+
// this function into async.
|
|
172
174
|
const epochTree = UnbalancedMerkleTreeCalculator.create(checkpointOutHashes);
|
|
173
175
|
// Get the sibling path of the checkpoint out hash in the epoch tree.
|
|
174
176
|
const pathToCheckpointOutHashInEpochTree = epochTree.getSiblingPathByLeafIndex(checkpointIndex);
|
|
@@ -1,46 +1,77 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OUT_HASH_TREE_LEAF_COUNT } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import {
|
|
4
|
+
import { computeBalancedShaRoot, computeUnbalancedShaRoot, computeWonkyShaRoot } from '@aztec/foundation/trees';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Computes the out hash of a tx. It's the root of the unbalanced tree of all the L2-to-L1 messages emitted by the tx.
|
|
8
|
+
* @param messages - The L2-to-L1 messages emitted by the tx.
|
|
9
|
+
* @returns The out hash of the tx.
|
|
10
|
+
*/
|
|
6
11
|
export function computeTxOutHash(messages: Fr[]): Fr {
|
|
12
|
+
// Must match the implementation in `tx_base_public_inputs_composer.nr > compute_kernel_out_hash()`
|
|
7
13
|
if (!messages.length) {
|
|
8
14
|
return Fr.ZERO;
|
|
9
15
|
}
|
|
10
|
-
//
|
|
11
|
-
// Zero hashes (which should not happen) are not compressed.
|
|
16
|
+
// It's an unbalanced tree because zero hashes (which should not happen) will be included.
|
|
12
17
|
return Fr.fromBuffer(computeUnbalancedShaRoot(messages.map(msg => msg.toBuffer())));
|
|
13
18
|
}
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Computes the out hash of a block. It's the root of the wonky tree of all the tx out hashes.
|
|
22
|
+
* @param messagesPerTx - The L2-to-L1 messages emitted by the txs in the block. This is an array of message arrays.
|
|
23
|
+
* The array at index 0 contains the messages emitted by the first tx, the array at index 1 contains the messages
|
|
24
|
+
* emitted by the second tx, and so on.
|
|
25
|
+
* @returns The out hash of the block.
|
|
26
|
+
*/
|
|
27
|
+
export function computeBlockOutHash(messagesPerTx: Fr[][]): Fr {
|
|
28
|
+
// See how the tx out hashes are aggregated into a block out hash in `merge_tx_rollups.nr > accumulate_out_hash()`.
|
|
29
|
+
const txOutHashes = messagesPerTx.map(messages => computeTxOutHash(messages));
|
|
30
|
+
return Fr.fromBuffer(computeWonkyShaRoot(txOutHashes.map(hash => hash.toBuffer())));
|
|
18
31
|
}
|
|
19
32
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Computes the out hash of a checkpoint. It's the root of the wonky tree of all the block out hashes.
|
|
35
|
+
* @param messagesPerBlock - The L2-to-L1 messages emitted by the txs in the blocks in the checkpoint. This is an array
|
|
36
|
+
* of arrays of messages. The array at index 0 contains the arrays of messages emitted by the first block, the array at
|
|
37
|
+
* index 1 contains the arrays of messages emitted by the second block, and so on.
|
|
38
|
+
* @returns The out hash of the checkpoint.
|
|
39
|
+
*/
|
|
40
|
+
export function computeCheckpointOutHash(messagesPerBlock: Fr[][][]): Fr {
|
|
41
|
+
// See how the block out hashes are aggregated into a checkpoint out hash in `merge_block_rollups.nr > accumulate_out_hash()`.
|
|
42
|
+
const blockOutHashes = messagesPerBlock.map(block => computeBlockOutHash(block));
|
|
43
|
+
return Fr.fromBuffer(computeWonkyShaRoot(blockOutHashes.map(hash => hash.toBuffer())));
|
|
23
44
|
}
|
|
24
45
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const paddedOutHashes = padArrayEnd(
|
|
35
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Computes the accumulated (epoch) out hash of a checkpoint. It's the root of the balanced tree of all the out hashes
|
|
48
|
+
* from the first checkpoint in an epoch to the current checkpoint.
|
|
49
|
+
* It's this value that's set to the checkpoint header and validated on L1 instead of the checkpoint out hash.
|
|
50
|
+
* @param checkpointOutHashes - The out hashes of all checkpoints in the epoch.
|
|
51
|
+
* @returns The accumulated (epoch) out hash.
|
|
52
|
+
*/
|
|
53
|
+
export function accumulateCheckpointOutHashes(checkpointOutHashes: Fr[]): Fr {
|
|
54
|
+
// See how the checkpoint out hashes are accumulated in `checkpoint_rollup_public_inputs_composer.nr > accumulate_checkpoint_out_hash()`.
|
|
55
|
+
const paddedOutHashes = padArrayEnd(
|
|
56
|
+
checkpointOutHashes.map(hash => hash.toBuffer()),
|
|
57
|
+
Buffer.alloc(32),
|
|
58
|
+
OUT_HASH_TREE_LEAF_COUNT,
|
|
59
|
+
);
|
|
60
|
+
return Fr.fromBuffer(computeBalancedShaRoot(paddedOutHashes));
|
|
36
61
|
}
|
|
37
62
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Computes the epoch out hash. It's the root of the balanced tree of all the checkpoint out hashes.
|
|
65
|
+
* It should match the **accumulated** out hash of the last checkpoint in the epoch.
|
|
66
|
+
* This value will be inserted into the Outbox on L1.
|
|
67
|
+
* @param messagesPerCheckpoint - The L2-to-L1 messages emitted by the txs in the blocks in the checkpoints in the epoch.
|
|
68
|
+
* This is an array of arrays of arrays of messages. The array at index 0 contains the arrays of arrays of messages
|
|
69
|
+
* emitted by the first checkpoint, the array at index 1 contains the arrays of arrays of messages emitted by the second
|
|
70
|
+
* checkpoint, and so on.
|
|
71
|
+
* @returns The epoch out hash.
|
|
72
|
+
*/
|
|
73
|
+
export function computeEpochOutHash(messagesPerCheckpoint: Fr[][][][]): Fr {
|
|
74
|
+
// See how the accumulated out hash is assigned to the root rollup's public inputs in `root_rollup.nr`.
|
|
75
|
+
const checkpointOutHashes = messagesPerCheckpoint.map(checkpoint => computeCheckpointOutHash(checkpoint));
|
|
76
|
+
return accumulateCheckpointOutHashes(checkpointOutHashes);
|
|
46
77
|
}
|
package/src/note/note_dao.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { toBigIntBE } from '@aztec/foundation/bigint-buffer';
|
|
2
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
3
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
@@ -56,8 +55,10 @@ export class NoteDao {
|
|
|
56
55
|
/** The L2 block hash in which the tx with this note was included. Used for note management while processing
|
|
57
56
|
* reorgs.*/
|
|
58
57
|
public l2BlockHash: string,
|
|
59
|
-
/** The index of the
|
|
60
|
-
public
|
|
58
|
+
/** The index of the tx within the block, used for ordering notes. */
|
|
59
|
+
public txIndexInBlock: number,
|
|
60
|
+
/** The index of the note within the tx (based on note hash position), used for ordering notes. */
|
|
61
|
+
public noteIndexInTx: number,
|
|
61
62
|
) {}
|
|
62
63
|
|
|
63
64
|
toBuffer(): Buffer {
|
|
@@ -73,7 +74,8 @@ export class NoteDao {
|
|
|
73
74
|
this.txHash,
|
|
74
75
|
this.l2BlockNumber,
|
|
75
76
|
Fr.fromHexString(this.l2BlockHash),
|
|
76
|
-
this.
|
|
77
|
+
this.txIndexInBlock,
|
|
78
|
+
this.noteIndexInTx,
|
|
77
79
|
]);
|
|
78
80
|
}
|
|
79
81
|
|
|
@@ -91,7 +93,8 @@ export class NoteDao {
|
|
|
91
93
|
const txHash = reader.readObject(TxHash);
|
|
92
94
|
const l2BlockNumber = BlockNumber(reader.readNumber());
|
|
93
95
|
const l2BlockHash = Fr.fromBuffer(reader).toString();
|
|
94
|
-
const
|
|
96
|
+
const txIndexInBlock = reader.readNumber();
|
|
97
|
+
const noteIndexInTx = reader.readNumber();
|
|
95
98
|
|
|
96
99
|
return new NoteDao(
|
|
97
100
|
note,
|
|
@@ -105,7 +108,8 @@ export class NoteDao {
|
|
|
105
108
|
txHash,
|
|
106
109
|
l2BlockNumber,
|
|
107
110
|
l2BlockHash,
|
|
108
|
-
|
|
111
|
+
txIndexInBlock,
|
|
112
|
+
noteIndexInTx,
|
|
109
113
|
);
|
|
110
114
|
}
|
|
111
115
|
|
|
@@ -134,7 +138,8 @@ export class NoteDao {
|
|
|
134
138
|
this.txHash.equals(other.txHash) &&
|
|
135
139
|
this.l2BlockNumber === other.l2BlockNumber &&
|
|
136
140
|
this.l2BlockHash === other.l2BlockHash &&
|
|
137
|
-
this.
|
|
141
|
+
this.txIndexInBlock === other.txIndexInBlock &&
|
|
142
|
+
this.noteIndexInTx === other.noteIndexInTx
|
|
138
143
|
);
|
|
139
144
|
}
|
|
140
145
|
|
|
@@ -143,11 +148,9 @@ export class NoteDao {
|
|
|
143
148
|
* @returns - Its size in bytes.
|
|
144
149
|
*/
|
|
145
150
|
public getSize() {
|
|
146
|
-
const indexSize = Math.ceil(Math.log2(Number(this.index)));
|
|
147
151
|
const noteSize = 4 + this.note.items.length * Fr.SIZE_IN_BYTES;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
);
|
|
152
|
+
// 2 numbers for txIndexInBlock and noteIndexInTx (4 bytes each)
|
|
153
|
+
return noteSize + AztecAddress.SIZE_IN_BYTES * 2 + Fr.SIZE_IN_BYTES * 4 + TxHash.SIZE + Point.SIZE_IN_BYTES + 8;
|
|
151
154
|
}
|
|
152
155
|
|
|
153
156
|
static async random({
|
|
@@ -162,7 +165,8 @@ export class NoteDao {
|
|
|
162
165
|
txHash = TxHash.random(),
|
|
163
166
|
l2BlockNumber = BlockNumber(Math.floor(Math.random() * 1000)),
|
|
164
167
|
l2BlockHash = Fr.random().toString(),
|
|
165
|
-
|
|
168
|
+
txIndexInBlock = Math.floor(Math.random() * 100),
|
|
169
|
+
noteIndexInTx = Math.floor(Math.random() * 100),
|
|
166
170
|
}: Partial<NoteDao> = {}) {
|
|
167
171
|
return new NoteDao(
|
|
168
172
|
note,
|
|
@@ -176,7 +180,8 @@ export class NoteDao {
|
|
|
176
180
|
txHash,
|
|
177
181
|
l2BlockNumber,
|
|
178
182
|
l2BlockHash,
|
|
179
|
-
|
|
183
|
+
txIndexInBlock,
|
|
184
|
+
noteIndexInTx,
|
|
180
185
|
);
|
|
181
186
|
}
|
|
182
187
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
|
+
import { BlockNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
3
3
|
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
4
4
|
import { tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
@@ -6,9 +6,11 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
6
6
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
8
8
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
9
|
+
import { DutyType, type SigningContext } from '@aztec/validator-ha-signer/types';
|
|
9
10
|
|
|
10
11
|
import type { L2Block } from '../block/l2_block.js';
|
|
11
12
|
import type { L2BlockInfo } from '../block/l2_block_info.js';
|
|
13
|
+
import { MAX_TXS_PER_BLOCK } from '../deserialization/index.js';
|
|
12
14
|
import { BlockHeader } from '../tx/block_header.js';
|
|
13
15
|
import { TxHash } from '../tx/index.js';
|
|
14
16
|
import type { Tx } from '../tx/tx.js';
|
|
@@ -50,7 +52,7 @@ export class BlockProposal extends Gossipable {
|
|
|
50
52
|
// TODO(palla/mbps): Is this really needed? Can we just derive it from the indexWithinCheckpoint of the parent block and the slot number?
|
|
51
53
|
// See the block-proposal-handler, we have a lot of extra validations to check this is correct, so maybe we can avoid storing it here.
|
|
52
54
|
/** Index of this block within the checkpoint (0-indexed) */
|
|
53
|
-
public readonly indexWithinCheckpoint:
|
|
55
|
+
public readonly indexWithinCheckpoint: IndexWithinCheckpoint,
|
|
54
56
|
|
|
55
57
|
/** Hash of L1 to L2 messages for this checkpoint (constant across all blocks in checkpoint) */
|
|
56
58
|
public readonly inHash: Fr,
|
|
@@ -119,12 +121,12 @@ export class BlockProposal extends Gossipable {
|
|
|
119
121
|
|
|
120
122
|
static async createProposalFromSigner(
|
|
121
123
|
blockHeader: BlockHeader,
|
|
122
|
-
indexWithinCheckpoint:
|
|
124
|
+
indexWithinCheckpoint: IndexWithinCheckpoint,
|
|
123
125
|
inHash: Fr,
|
|
124
126
|
archiveRoot: Fr,
|
|
125
127
|
txHashes: TxHash[],
|
|
126
128
|
txs: Tx[] | undefined,
|
|
127
|
-
payloadSigner: (payload: Buffer32) => Promise<Signature>,
|
|
129
|
+
payloadSigner: (payload: Buffer32, context: SigningContext) => Promise<Signature>,
|
|
128
130
|
): Promise<BlockProposal> {
|
|
129
131
|
// Create a temporary proposal to get the payload to sign
|
|
130
132
|
const tempProposal = new BlockProposal(
|
|
@@ -136,13 +138,23 @@ export class BlockProposal extends Gossipable {
|
|
|
136
138
|
Signature.empty(),
|
|
137
139
|
);
|
|
138
140
|
|
|
141
|
+
// Create the block signing context
|
|
142
|
+
const blockContext: SigningContext = {
|
|
143
|
+
slot: blockHeader.globalVariables.slotNumber,
|
|
144
|
+
blockNumber: blockHeader.globalVariables.blockNumber,
|
|
145
|
+
blockIndexWithinCheckpoint: indexWithinCheckpoint,
|
|
146
|
+
dutyType: DutyType.BLOCK_PROPOSAL,
|
|
147
|
+
};
|
|
148
|
+
|
|
139
149
|
const hashed = getHashedSignaturePayload(tempProposal, SignatureDomainSeparator.blockProposal);
|
|
140
|
-
const sig = await payloadSigner(hashed);
|
|
150
|
+
const sig = await payloadSigner(hashed, blockContext);
|
|
141
151
|
|
|
142
152
|
// If txs are provided, sign them as well
|
|
143
153
|
let signedTxs: SignedTxs | undefined;
|
|
144
154
|
if (txs) {
|
|
145
|
-
|
|
155
|
+
const txsSigningContext: SigningContext = { dutyType: DutyType.TXS };
|
|
156
|
+
const txsSigner = (payload: Buffer32) => payloadSigner(payload, txsSigningContext);
|
|
157
|
+
signedTxs = await SignedTxs.createFromSigner(txs, txsSigner);
|
|
146
158
|
}
|
|
147
159
|
|
|
148
160
|
return new BlockProposal(blockHeader, indexWithinCheckpoint, inHash, archiveRoot, txHashes, sig, signedTxs);
|
|
@@ -200,11 +212,15 @@ export class BlockProposal extends Gossipable {
|
|
|
200
212
|
const reader = BufferReader.asReader(buf);
|
|
201
213
|
|
|
202
214
|
const blockHeader = reader.readObject(BlockHeader);
|
|
203
|
-
const indexWithinCheckpoint = reader.readNumber();
|
|
215
|
+
const indexWithinCheckpoint = IndexWithinCheckpoint(reader.readNumber());
|
|
204
216
|
const inHash = reader.readObject(Fr);
|
|
205
217
|
const archiveRoot = reader.readObject(Fr);
|
|
206
218
|
const signature = reader.readObject(Signature);
|
|
207
|
-
const
|
|
219
|
+
const txHashCount = reader.readNumber();
|
|
220
|
+
if (txHashCount > MAX_TXS_PER_BLOCK) {
|
|
221
|
+
throw new Error(`txHashes count ${txHashCount} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
|
|
222
|
+
}
|
|
223
|
+
const txHashes = reader.readArray(txHashCount, TxHash);
|
|
208
224
|
|
|
209
225
|
if (!reader.isEmpty()) {
|
|
210
226
|
const hasSignedTxs = reader.readNumber();
|
|
@@ -240,13 +256,13 @@ export class BlockProposal extends Gossipable {
|
|
|
240
256
|
}
|
|
241
257
|
|
|
242
258
|
static empty(): BlockProposal {
|
|
243
|
-
return new BlockProposal(BlockHeader.empty(), 0, Fr.ZERO, Fr.ZERO, [], Signature.empty());
|
|
259
|
+
return new BlockProposal(BlockHeader.empty(), IndexWithinCheckpoint(0), Fr.ZERO, Fr.ZERO, [], Signature.empty());
|
|
244
260
|
}
|
|
245
261
|
|
|
246
262
|
static random(): BlockProposal {
|
|
247
263
|
return new BlockProposal(
|
|
248
264
|
BlockHeader.random(),
|
|
249
|
-
Math.floor(Math.random() * 5),
|
|
265
|
+
IndexWithinCheckpoint(Math.floor(Math.random() * 5)),
|
|
250
266
|
Fr.random(),
|
|
251
267
|
Fr.random(),
|
|
252
268
|
[TxHash.random(), TxHash.random()],
|
|
@@ -272,7 +288,7 @@ export class BlockProposal extends Gossipable {
|
|
|
272
288
|
* @returns True if the proposal matches the block
|
|
273
289
|
*/
|
|
274
290
|
matchesBlock(block: L2Block): boolean {
|
|
275
|
-
return this.archiveRoot.equals(block.archive.root) && this.blockHeader.equals(block.
|
|
291
|
+
return this.archiveRoot.equals(block.archive.root) && this.blockHeader.equals(block.header);
|
|
276
292
|
}
|
|
277
293
|
|
|
278
294
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
|
+
import { BlockNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
3
3
|
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
4
4
|
import { tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
@@ -6,8 +6,10 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
6
6
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
8
8
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
9
|
+
import { DutyType, type SigningContext } from '@aztec/validator-ha-signer/types';
|
|
9
10
|
|
|
10
11
|
import type { L2BlockInfo } from '../block/l2_block_info.js';
|
|
12
|
+
import { MAX_TXS_PER_BLOCK } from '../deserialization/index.js';
|
|
11
13
|
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
12
14
|
import { BlockHeader } from '../tx/block_header.js';
|
|
13
15
|
import { TxHash } from '../tx/index.js';
|
|
@@ -40,7 +42,7 @@ export type CheckpointLastBlockData = {
|
|
|
40
42
|
/** The per-block header for the last block in the checkpoint */
|
|
41
43
|
blockHeader: BlockHeader;
|
|
42
44
|
/** Index of this block within the checkpoint (should be the last index, e.g., numBlocks - 1) */
|
|
43
|
-
indexWithinCheckpoint:
|
|
45
|
+
indexWithinCheckpoint: IndexWithinCheckpoint;
|
|
44
46
|
/** The sequence of transactions in the last block */
|
|
45
47
|
txHashes: TxHash[];
|
|
46
48
|
/** The tx in the last block (optional, for DA guarantees) */
|
|
@@ -151,13 +153,18 @@ export class CheckpointProposal extends Gossipable {
|
|
|
151
153
|
checkpointHeader: CheckpointHeader,
|
|
152
154
|
archiveRoot: Fr,
|
|
153
155
|
lastBlockInfo: CheckpointLastBlockData | undefined,
|
|
154
|
-
payloadSigner: (payload: Buffer32) => Promise<Signature>,
|
|
156
|
+
payloadSigner: (payload: Buffer32, context: SigningContext) => Promise<Signature>,
|
|
155
157
|
): Promise<CheckpointProposal> {
|
|
156
|
-
// Sign the checkpoint payload
|
|
158
|
+
// Sign the checkpoint payload with CHECKPOINT_PROPOSAL duty type
|
|
157
159
|
const tempProposal = new CheckpointProposal(checkpointHeader, archiveRoot, Signature.empty(), undefined);
|
|
158
|
-
|
|
159
160
|
const checkpointHash = getHashedSignaturePayload(tempProposal, SignatureDomainSeparator.checkpointProposal);
|
|
160
|
-
|
|
161
|
+
|
|
162
|
+
const checkpointContext: SigningContext = {
|
|
163
|
+
slot: checkpointHeader.slotNumber,
|
|
164
|
+
blockNumber: lastBlockInfo?.blockHeader?.globalVariables.blockNumber ?? BlockNumber(0),
|
|
165
|
+
dutyType: DutyType.CHECKPOINT_PROPOSAL,
|
|
166
|
+
};
|
|
167
|
+
const checkpointSignature = await payloadSigner(checkpointHash, checkpointContext);
|
|
161
168
|
|
|
162
169
|
if (!lastBlockInfo) {
|
|
163
170
|
return new CheckpointProposal(checkpointHeader, archiveRoot, checkpointSignature);
|
|
@@ -246,9 +253,13 @@ export class CheckpointProposal extends Gossipable {
|
|
|
246
253
|
|
|
247
254
|
if (hasLastBlock) {
|
|
248
255
|
const blockHeader = reader.readObject(BlockHeader);
|
|
249
|
-
const indexWithinCheckpoint = reader.readNumber();
|
|
256
|
+
const indexWithinCheckpoint = IndexWithinCheckpoint(reader.readNumber());
|
|
250
257
|
const blockSignature = reader.readObject(Signature);
|
|
251
|
-
const
|
|
258
|
+
const txHashCount = reader.readNumber();
|
|
259
|
+
if (txHashCount > MAX_TXS_PER_BLOCK) {
|
|
260
|
+
throw new Error(`txHashes count ${txHashCount} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
|
|
261
|
+
}
|
|
262
|
+
const txHashes = reader.readArray(txHashCount, TxHash);
|
|
252
263
|
|
|
253
264
|
let signedTxs: SignedTxs | undefined;
|
|
254
265
|
if (!reader.isEmpty()) {
|
|
@@ -298,7 +309,7 @@ export class CheckpointProposal extends Gossipable {
|
|
|
298
309
|
static random(): CheckpointProposal {
|
|
299
310
|
return new CheckpointProposal(CheckpointHeader.random(), Fr.random(), Signature.random(), {
|
|
300
311
|
blockHeader: BlockHeader.random(),
|
|
301
|
-
indexWithinCheckpoint: Math.floor(Math.random() * 5),
|
|
312
|
+
indexWithinCheckpoint: IndexWithinCheckpoint(Math.floor(Math.random() * 5)),
|
|
302
313
|
txHashes: [TxHash.random(), TxHash.random()],
|
|
303
314
|
signature: Signature.random(),
|
|
304
315
|
});
|
|
@@ -7,7 +7,6 @@ import type { FieldsOf } from '@aztec/foundation/types';
|
|
|
7
7
|
import { encodeAbiParameters, parseAbiParameters } from 'viem';
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
|
|
10
|
-
import type { L2Block } from '../block/l2_block.js';
|
|
11
10
|
import type { Checkpoint } from '../checkpoint/checkpoint.js';
|
|
12
11
|
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
13
12
|
import type { CheckpointProposal, CheckpointProposalCore } from './checkpoint_proposal.js';
|
|
@@ -76,10 +75,6 @@ export class ConsensusPayload implements Signable {
|
|
|
76
75
|
return new ConsensusPayload(fields.header, fields.archive);
|
|
77
76
|
}
|
|
78
77
|
|
|
79
|
-
static fromBlock(block: L2Block): ConsensusPayload {
|
|
80
|
-
return new ConsensusPayload(block.header.toCheckpointHeader(), block.archive.root);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
78
|
static fromCheckpoint(checkpoint: Checkpoint): ConsensusPayload {
|
|
84
79
|
return new ConsensusPayload(checkpoint.header, checkpoint.archive.root);
|
|
85
80
|
}
|
package/src/p2p/index.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import type { PeerErrorSeverity } from './peer_error.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Result of validating a P2P message.
|
|
5
|
+
* - 'accept': Message is valid and should be accepted and processed
|
|
6
|
+
* - 'ignore': Message should be ignored (not propagated or processed, but sender not penalized)
|
|
7
|
+
* - 'reject': Message is invalid (rejected and sender penalized)
|
|
8
|
+
*/
|
|
9
|
+
export type ValidationResult =
|
|
10
|
+
| { result: 'accept' }
|
|
11
|
+
| { result: 'ignore' }
|
|
12
|
+
| { result: 'reject'; severity: PeerErrorSeverity };
|
|
13
|
+
|
|
3
14
|
/**
|
|
4
15
|
* P2PValidator
|
|
5
16
|
*
|
|
6
|
-
* A validator for P2P messages, which returns a
|
|
17
|
+
* A validator for P2P messages, which returns a ValidationResult indicating
|
|
18
|
+
* whether to accept, ignore, or reject the message
|
|
7
19
|
*/
|
|
8
20
|
export interface P2PValidator<T> {
|
|
9
|
-
validate(message: T): Promise<
|
|
21
|
+
validate(message: T): Promise<ValidationResult>;
|
|
10
22
|
}
|
package/src/p2p/signed_txs.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
6
|
|
|
7
|
+
import { MAX_TXS_PER_BLOCK } from '../deserialization/index.js';
|
|
7
8
|
import { Tx } from '../tx/tx.js';
|
|
8
9
|
import {
|
|
9
10
|
SignatureDomainSeparator,
|
|
@@ -64,7 +65,11 @@ export class SignedTxs {
|
|
|
64
65
|
|
|
65
66
|
static fromBuffer(buf: Buffer | BufferReader): SignedTxs {
|
|
66
67
|
const reader = BufferReader.asReader(buf);
|
|
67
|
-
const
|
|
68
|
+
const txCount = reader.readNumber();
|
|
69
|
+
if (txCount > MAX_TXS_PER_BLOCK) {
|
|
70
|
+
throw new Error(`txs count ${txCount} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
|
|
71
|
+
}
|
|
72
|
+
const txs = reader.readArray(txCount, Tx);
|
|
68
73
|
const signature = reader.readObject(Signature);
|
|
69
74
|
return new SignedTxs(txs, signature);
|
|
70
75
|
}
|
package/src/p2p/topic_type.ts
CHANGED
|
@@ -31,7 +31,7 @@ export function getTopicTypeForClientType(clientType: P2PClientType) {
|
|
|
31
31
|
if (clientType === P2PClientType.Full) {
|
|
32
32
|
return [TopicType.tx, TopicType.block_proposal, TopicType.checkpoint_proposal, TopicType.checkpoint_attestation];
|
|
33
33
|
} else if (clientType === P2PClientType.Prover) {
|
|
34
|
-
return [TopicType.tx, TopicType.block_proposal];
|
|
34
|
+
return [TopicType.tx, TopicType.block_proposal, TopicType.checkpoint_proposal];
|
|
35
35
|
} else {
|
|
36
36
|
const _: never = clientType;
|
|
37
37
|
return [TopicType.tx];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CHONK_PROOF_LENGTH } from '@aztec/constants';
|
|
2
|
+
import { times } from '@aztec/foundation/collection';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { bufferSchemaFor } from '@aztec/foundation/schemas';
|
|
@@ -31,12 +32,15 @@ export class ChonkProof {
|
|
|
31
32
|
|
|
32
33
|
static random() {
|
|
33
34
|
// NB: Not using Fr.random here because it slows down some tests that require a large number of txs significantly.
|
|
35
|
+
// NB2: generate one fewer random bytes to not have to deal with buffers representing numbers greater than the field modulus
|
|
36
|
+
// NB3: a chonk proof can be compressed. Simulate this by filling 1/4 of the proof with zero data
|
|
34
37
|
const reducedFrSize = Fr.SIZE_IN_BYTES - 1;
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
(
|
|
39
|
-
|
|
38
|
+
const nonZeroFields = Math.floor((3 * CHONK_PROOF_LENGTH) / 4);
|
|
39
|
+
const randomFields = randomBytes(nonZeroFields * Fr.SIZE_IN_BYTES);
|
|
40
|
+
const proof = [
|
|
41
|
+
...times(nonZeroFields, i => new Fr(randomFields.subarray(i * reducedFrSize, (i + 1) * reducedFrSize))),
|
|
42
|
+
...times(CHONK_PROOF_LENGTH - nonZeroFields, () => Fr.ZERO),
|
|
43
|
+
];
|
|
40
44
|
return new ChonkProof(proof);
|
|
41
45
|
}
|
|
42
46
|
|
|
@@ -5,7 +5,7 @@ import type { BlockHeader } from '../tx/block_header.js';
|
|
|
5
5
|
|
|
6
6
|
export async function computeBlockHeadersHash(blockHeaders: BlockHeader[]): Promise<Fr> {
|
|
7
7
|
const blockHeaderHashes = await Promise.all(blockHeaders.map(header => header.hash()));
|
|
8
|
-
// Must match the implementation in merge_block_rollups.nr, with the **
|
|
8
|
+
// Must match the implementation in merge_block_rollups.nr, with the **unbalanced** rollup structure
|
|
9
9
|
// (see validate_consecutive_block_rollups.nr > assert_rollups_filled_greedily.nr).
|
|
10
10
|
const blockHeadersHash = await computeUnbalancedPoseidonRoot(blockHeaderHashes.map(hash => hash.toBuffer()));
|
|
11
11
|
return Fr.fromBuffer(blockHeadersHash);
|