@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
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
SlotNumber,
|
|
6
6
|
} from '@aztec/foundation/branded-types';
|
|
7
7
|
import { type BaseBuffer32, Buffer32 } from '@aztec/foundation/buffer';
|
|
8
|
-
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
9
|
-
import { tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
10
8
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
11
9
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
12
10
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
13
11
|
import { BufferReader, serializeSignedBigInt, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
14
12
|
|
|
13
|
+
import type { TypedDataDefinition } from 'viem';
|
|
14
|
+
|
|
15
15
|
import type { L2BlockInfo } from '../block/l2_block_info.js';
|
|
16
16
|
import { MAX_TXS_PER_BLOCK } from '../deserialization/index.js';
|
|
17
17
|
import { DutyType, type SigningContext } from '../ha-signing/index.js';
|
|
@@ -20,11 +20,18 @@ import { BlockHeader } from '../tx/block_header.js';
|
|
|
20
20
|
import { TxHash } from '../tx/index.js';
|
|
21
21
|
import type { Tx } from '../tx/tx.js';
|
|
22
22
|
import { BlockProposal } from './block_proposal.js';
|
|
23
|
+
import { ConsensusPayload } from './consensus_payload.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';
|
|
@@ -69,10 +76,12 @@ export type CheckpointLastBlock = Omit<CheckpointLastBlockData, 'txs'> & {
|
|
|
69
76
|
* It includes the aggregated checkpoint header that validators will attest to, plus optionally
|
|
70
77
|
* the last block's info for nodes to re-execute. This marks the completion of a slot's worth of blocks.
|
|
71
78
|
*/
|
|
72
|
-
export class CheckpointProposal extends Gossipable {
|
|
79
|
+
export class CheckpointProposal extends Gossipable implements Signable {
|
|
73
80
|
static override p2pTopic = TopicType.checkpoint_proposal;
|
|
74
81
|
|
|
75
|
-
|
|
82
|
+
readonly primaryType: CoordinationSignatureType = 'CheckpointProposal';
|
|
83
|
+
|
|
84
|
+
private cachedSender: EthAddress | undefined | null = undefined;
|
|
76
85
|
|
|
77
86
|
constructor(
|
|
78
87
|
/** The aggregated checkpoint header for consensus */
|
|
@@ -87,14 +96,36 @@ export class CheckpointProposal extends Gossipable {
|
|
|
87
96
|
/** The proposer's signature over the checkpoint payload (checkpointHeader + archive + feeAssetPriceModifier) */
|
|
88
97
|
public readonly signature: Signature,
|
|
89
98
|
|
|
99
|
+
/** The signing domain (chainId + rollupAddress) the signature is bound to */
|
|
100
|
+
public readonly signatureContext: CoordinationSignatureContext,
|
|
101
|
+
|
|
90
102
|
/** Optional last block info, including its own signature for BlockProposal extraction */
|
|
91
|
-
public readonly lastBlock?: CheckpointLastBlock,
|
|
103
|
+
public readonly lastBlock?: CheckpointLastBlock | BlockProposal,
|
|
92
104
|
) {
|
|
93
105
|
super();
|
|
106
|
+
|
|
107
|
+
// Check that last block properties match those of the checkpoint.
|
|
108
|
+
if (lastBlock && 'inHash' in lastBlock && !lastBlock.inHash.equals(checkpointHeader.inHash)) {
|
|
109
|
+
throw new Error(
|
|
110
|
+
`CheckpointProposal lastBlock inHash ${lastBlock.inHash} does not match checkpoint inHash ${checkpointHeader.inHash}`,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
if (lastBlock && 'archiveRoot' in lastBlock && !lastBlock.archiveRoot.equals(archive)) {
|
|
114
|
+
throw new Error(
|
|
115
|
+
`CheckpointProposal lastBlock archive ${lastBlock.archiveRoot} does not match checkpoint archive ${archive}`,
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
if (
|
|
119
|
+
lastBlock &&
|
|
120
|
+
'signatureContext' in lastBlock &&
|
|
121
|
+
!coordinationSignatureContextEquals(lastBlock.signatureContext, signatureContext)
|
|
122
|
+
) {
|
|
123
|
+
throw new Error(`CheckpointProposal lastBlock signatureContext does not match checkpoint signatureContext`);
|
|
124
|
+
}
|
|
94
125
|
}
|
|
95
126
|
|
|
96
127
|
override generateP2PMessageIdentifier(): Promise<BaseBuffer32> {
|
|
97
|
-
return Promise.resolve(
|
|
128
|
+
return Promise.resolve(new Buffer32(this.toConsensusPayload().getPayloadHash()));
|
|
98
129
|
}
|
|
99
130
|
|
|
100
131
|
get slotNumber(): SlotNumber {
|
|
@@ -117,6 +148,7 @@ export class CheckpointProposal extends Gossipable {
|
|
|
117
148
|
this.archive,
|
|
118
149
|
this.lastBlock.txHashes,
|
|
119
150
|
this.lastBlock.signature,
|
|
151
|
+
this.signatureContext,
|
|
120
152
|
this.lastBlock.signedTxs,
|
|
121
153
|
);
|
|
122
154
|
}
|
|
@@ -148,13 +180,26 @@ export class CheckpointProposal extends Gossipable {
|
|
|
148
180
|
* Get the payload to sign for this checkpoint proposal.
|
|
149
181
|
* The signature is over the checkpoint header + archive root + feeAssetPriceModifier (for consensus).
|
|
150
182
|
*/
|
|
151
|
-
getPayloadToSign(
|
|
152
|
-
return serializeToBuffer([
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
183
|
+
getPayloadToSign(): Buffer {
|
|
184
|
+
return serializeToBuffer([this.checkpointHeader, this.archive, serializeSignedBigInt(this.feeAssetPriceModifier)]);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Returns a content-addressed keccak256 hash of the consensus payload
|
|
189
|
+
* (header + archive + feeAssetPriceModifier + signatureContext).
|
|
190
|
+
*
|
|
191
|
+
* Used by the attestation pool to dedup distinct signed payloads at the same slot
|
|
192
|
+
* regardless of archive/header collisions on `feeAssetPriceModifier` variants.
|
|
193
|
+
* The hash deliberately excludes the signature so non-deterministic ECDSA
|
|
194
|
+
* re-signs of the same payload do not look like equivocation.
|
|
195
|
+
*/
|
|
196
|
+
getPayloadHash(): CheckpointProposalHash {
|
|
197
|
+
return CheckpointProposalHash.fromBuffer(this.toConsensusPayload().getPayloadHash());
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Returns the ConsensusPayload that an attester would sign for this proposal. */
|
|
201
|
+
toConsensusPayload(): ConsensusPayload {
|
|
202
|
+
return new ConsensusPayload(this.checkpointHeader, this.archive, this.feeAssetPriceModifier, this.signatureContext);
|
|
158
203
|
}
|
|
159
204
|
|
|
160
205
|
static async createProposalFromSigner(
|
|
@@ -163,7 +208,8 @@ export class CheckpointProposal extends Gossipable {
|
|
|
163
208
|
checkpointNumber: CheckpointNumber,
|
|
164
209
|
feeAssetPriceModifier: bigint,
|
|
165
210
|
lastBlockProposal: BlockProposal | undefined,
|
|
166
|
-
|
|
211
|
+
signatureContext: CoordinationSignatureContext,
|
|
212
|
+
payloadSigner: (typedData: TypedDataDefinition, context: SigningContext) => Promise<Signature>,
|
|
167
213
|
): Promise<CheckpointProposal> {
|
|
168
214
|
// Sign the checkpoint payload with CHECKPOINT_PROPOSAL duty type
|
|
169
215
|
const tempProposal = new CheckpointProposal(
|
|
@@ -171,22 +217,23 @@ export class CheckpointProposal extends Gossipable {
|
|
|
171
217
|
archiveRoot,
|
|
172
218
|
feeAssetPriceModifier,
|
|
173
219
|
Signature.empty(),
|
|
220
|
+
signatureContext,
|
|
174
221
|
);
|
|
175
|
-
const checkpointHash = getHashedSignaturePayload(tempProposal, SignatureDomainSeparator.checkpointProposal);
|
|
176
|
-
|
|
177
222
|
const checkpointContext: SigningContext = {
|
|
178
223
|
slot: checkpointHeader.slotNumber,
|
|
179
224
|
checkpointNumber,
|
|
180
225
|
dutyType: DutyType.CHECKPOINT_PROPOSAL,
|
|
181
226
|
};
|
|
182
227
|
|
|
183
|
-
const
|
|
228
|
+
const typedData = getCoordinationSignatureTypedData(tempProposal);
|
|
229
|
+
const checkpointSignature = await payloadSigner(typedData, checkpointContext);
|
|
184
230
|
|
|
185
231
|
return new CheckpointProposal(
|
|
186
232
|
checkpointHeader,
|
|
187
233
|
archiveRoot,
|
|
188
234
|
feeAssetPriceModifier,
|
|
189
235
|
checkpointSignature,
|
|
236
|
+
signatureContext,
|
|
190
237
|
lastBlockProposal,
|
|
191
238
|
);
|
|
192
239
|
}
|
|
@@ -197,28 +244,26 @@ export class CheckpointProposal extends Gossipable {
|
|
|
197
244
|
* @returns The sender address, or undefined if signature recovery fails or senders don't match
|
|
198
245
|
*/
|
|
199
246
|
getSender(): EthAddress | undefined {
|
|
200
|
-
if (
|
|
201
|
-
const
|
|
202
|
-
const checkpointSender = tryRecoverAddress(hashed, this.signature);
|
|
247
|
+
if (this.cachedSender === undefined) {
|
|
248
|
+
const checkpointSender = recoverCoordinationSigner(this, this.signature);
|
|
203
249
|
|
|
204
|
-
// If there's a lastBlock, verify the block proposal sender matches
|
|
205
250
|
if (checkpointSender && this.lastBlock) {
|
|
206
251
|
const blockProposal = this.getBlockProposal();
|
|
207
252
|
const blockSender = blockProposal?.getSender();
|
|
208
253
|
if (!blockSender || !blockSender.equals(checkpointSender)) {
|
|
209
|
-
|
|
254
|
+
this.cachedSender = null;
|
|
255
|
+
return undefined;
|
|
210
256
|
}
|
|
211
257
|
}
|
|
212
258
|
|
|
213
|
-
|
|
214
|
-
this.sender = checkpointSender;
|
|
259
|
+
this.cachedSender = checkpointSender ?? null;
|
|
215
260
|
}
|
|
216
261
|
|
|
217
|
-
return this.
|
|
262
|
+
return this.cachedSender ?? undefined;
|
|
218
263
|
}
|
|
219
264
|
|
|
220
265
|
getPayload() {
|
|
221
|
-
return this.getPayloadToSign(
|
|
266
|
+
return this.getPayloadToSign();
|
|
222
267
|
}
|
|
223
268
|
|
|
224
269
|
toBuffer(): Buffer {
|
|
@@ -227,6 +272,7 @@ export class CheckpointProposal extends Gossipable {
|
|
|
227
272
|
this.archive,
|
|
228
273
|
serializeSignedBigInt(this.feeAssetPriceModifier),
|
|
229
274
|
this.signature,
|
|
275
|
+
serializeCoordinationSignatureContext(this.signatureContext),
|
|
230
276
|
];
|
|
231
277
|
|
|
232
278
|
if (this.lastBlock) {
|
|
@@ -256,6 +302,7 @@ export class CheckpointProposal extends Gossipable {
|
|
|
256
302
|
const archive = reader.readObject(Fr);
|
|
257
303
|
const feeAssetPriceModifier = reader.readInt256();
|
|
258
304
|
const signature = reader.readObject(Signature);
|
|
305
|
+
const signatureContext = readCoordinationSignatureContext(reader);
|
|
259
306
|
|
|
260
307
|
const hasLastBlock = reader.readNumber();
|
|
261
308
|
|
|
@@ -277,7 +324,7 @@ export class CheckpointProposal extends Gossipable {
|
|
|
277
324
|
}
|
|
278
325
|
}
|
|
279
326
|
|
|
280
|
-
return new CheckpointProposal(checkpointHeader, archive, feeAssetPriceModifier, signature, {
|
|
327
|
+
return new CheckpointProposal(checkpointHeader, archive, feeAssetPriceModifier, signature, signatureContext, {
|
|
281
328
|
blockHeader,
|
|
282
329
|
indexWithinCheckpoint,
|
|
283
330
|
txHashes,
|
|
@@ -286,7 +333,7 @@ export class CheckpointProposal extends Gossipable {
|
|
|
286
333
|
});
|
|
287
334
|
}
|
|
288
335
|
|
|
289
|
-
return new CheckpointProposal(checkpointHeader, archive, feeAssetPriceModifier, signature);
|
|
336
|
+
return new CheckpointProposal(checkpointHeader, archive, feeAssetPriceModifier, signature, signatureContext);
|
|
290
337
|
}
|
|
291
338
|
|
|
292
339
|
getSize(): number {
|
|
@@ -295,6 +342,8 @@ export class CheckpointProposal extends Gossipable {
|
|
|
295
342
|
this.archive.size +
|
|
296
343
|
this.signature.getSize() +
|
|
297
344
|
8 /* feeAssetPriceModifier */ +
|
|
345
|
+
4 /* chainId */ +
|
|
346
|
+
20 /* rollupAddress */ +
|
|
298
347
|
4; /* hasLastBlock flag */
|
|
299
348
|
|
|
300
349
|
if (this.lastBlock) {
|
|
@@ -312,16 +361,29 @@ export class CheckpointProposal extends Gossipable {
|
|
|
312
361
|
}
|
|
313
362
|
|
|
314
363
|
static empty(): CheckpointProposal {
|
|
315
|
-
return new CheckpointProposal(
|
|
364
|
+
return new CheckpointProposal(
|
|
365
|
+
CheckpointHeader.empty(),
|
|
366
|
+
Fr.ZERO,
|
|
367
|
+
0n,
|
|
368
|
+
Signature.empty(),
|
|
369
|
+
EMPTY_COORDINATION_SIGNATURE_CONTEXT,
|
|
370
|
+
);
|
|
316
371
|
}
|
|
317
372
|
|
|
318
373
|
static random(): CheckpointProposal {
|
|
319
|
-
return new CheckpointProposal(
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
374
|
+
return new CheckpointProposal(
|
|
375
|
+
CheckpointHeader.random(),
|
|
376
|
+
Fr.random(),
|
|
377
|
+
0n,
|
|
378
|
+
Signature.random(),
|
|
379
|
+
EMPTY_COORDINATION_SIGNATURE_CONTEXT,
|
|
380
|
+
{
|
|
381
|
+
blockHeader: BlockHeader.random(),
|
|
382
|
+
indexWithinCheckpoint: IndexWithinCheckpoint(Math.floor(Math.random() * 5)),
|
|
383
|
+
txHashes: [TxHash.random(), TxHash.random()],
|
|
384
|
+
signature: Signature.random(),
|
|
385
|
+
},
|
|
386
|
+
);
|
|
325
387
|
}
|
|
326
388
|
|
|
327
389
|
toInspect() {
|
|
@@ -330,6 +392,8 @@ export class CheckpointProposal extends Gossipable {
|
|
|
330
392
|
archive: this.archive.toString(),
|
|
331
393
|
signature: this.signature.toString(),
|
|
332
394
|
feeAssetPriceModifier: this.feeAssetPriceModifier.toString(),
|
|
395
|
+
chainId: this.signatureContext.chainId,
|
|
396
|
+
rollupAddress: this.signatureContext.rollupAddress.toString(),
|
|
333
397
|
lastBlock: this.lastBlock
|
|
334
398
|
? {
|
|
335
399
|
blockHeader: this.lastBlock.blockHeader.toInspect(),
|
|
@@ -346,7 +410,13 @@ export class CheckpointProposal extends Gossipable {
|
|
|
346
410
|
* Used when the lastBlock has been extracted and stored separately.
|
|
347
411
|
*/
|
|
348
412
|
toCore(): CheckpointProposalCore {
|
|
349
|
-
return new CheckpointProposal(
|
|
413
|
+
return new CheckpointProposal(
|
|
414
|
+
this.checkpointHeader,
|
|
415
|
+
this.archive,
|
|
416
|
+
this.feeAssetPriceModifier,
|
|
417
|
+
this.signature,
|
|
418
|
+
this.signatureContext,
|
|
419
|
+
);
|
|
350
420
|
}
|
|
351
421
|
}
|
|
352
422
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
1
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { schemas } from '@aztec/foundation/schemas';
|
|
3
4
|
import { BufferReader, serializeSignedBigInt, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
@@ -10,10 +11,21 @@ import { z } from 'zod';
|
|
|
10
11
|
import type { Checkpoint } from '../checkpoint/checkpoint.js';
|
|
11
12
|
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
12
13
|
import type { CheckpointProposal, CheckpointProposalCore } from './checkpoint_proposal.js';
|
|
13
|
-
import
|
|
14
|
+
import {
|
|
15
|
+
type CoordinationSignatureContext,
|
|
16
|
+
type CoordinationSignatureType,
|
|
17
|
+
EMPTY_COORDINATION_SIGNATURE_CONTEXT,
|
|
18
|
+
type Signable,
|
|
19
|
+
coordinationSignatureContextEquals,
|
|
20
|
+
coordinationSignatureContextSchema,
|
|
21
|
+
readCoordinationSignatureContext,
|
|
22
|
+
serializeCoordinationSignatureContext,
|
|
23
|
+
} from './signature_utils.js';
|
|
14
24
|
|
|
15
25
|
/** Checkpoint consensus payload as signed by validators and verified on L1. */
|
|
16
26
|
export class ConsensusPayload implements Signable {
|
|
27
|
+
readonly primaryType: CoordinationSignatureType = 'CheckpointAttestation';
|
|
28
|
+
|
|
17
29
|
private size: number | undefined;
|
|
18
30
|
|
|
19
31
|
constructor(
|
|
@@ -22,7 +34,9 @@ export class ConsensusPayload implements Signable {
|
|
|
22
34
|
/** The archive root after the block is added */
|
|
23
35
|
public readonly archive: Fr,
|
|
24
36
|
/** The fee asset price modifier in basis points (from oracle) */
|
|
25
|
-
public readonly feeAssetPriceModifier: bigint
|
|
37
|
+
public readonly feeAssetPriceModifier: bigint,
|
|
38
|
+
/** The signing domain (chainId + rollupAddress) the signature is bound to */
|
|
39
|
+
public readonly signatureContext: CoordinationSignatureContext,
|
|
26
40
|
) {}
|
|
27
41
|
|
|
28
42
|
static get schema() {
|
|
@@ -31,36 +45,46 @@ export class ConsensusPayload implements Signable {
|
|
|
31
45
|
header: CheckpointHeader.schema,
|
|
32
46
|
archive: schemas.Fr,
|
|
33
47
|
feeAssetPriceModifier: schemas.BigInt,
|
|
48
|
+
signatureContext: coordinationSignatureContextSchema,
|
|
34
49
|
})
|
|
35
|
-
.transform(obj => new ConsensusPayload(obj.header, obj.archive, obj.feeAssetPriceModifier));
|
|
50
|
+
.transform(obj => new ConsensusPayload(obj.header, obj.archive, obj.feeAssetPriceModifier, obj.signatureContext));
|
|
36
51
|
}
|
|
37
52
|
|
|
38
|
-
static getFields(fields: FieldsOf<ConsensusPayload>) {
|
|
39
|
-
return [fields.header, fields.archive, fields.feeAssetPriceModifier] as const;
|
|
53
|
+
static getFields(fields: Omit<FieldsOf<ConsensusPayload>, 'primaryType'>) {
|
|
54
|
+
return [fields.header, fields.archive, fields.feeAssetPriceModifier, fields.signatureContext] as const;
|
|
40
55
|
}
|
|
41
56
|
|
|
42
|
-
getPayloadToSign(
|
|
57
|
+
getPayloadToSign(): Buffer {
|
|
58
|
+
// Matches the L1 ProposePayload struct in ProposeLib.sol.
|
|
43
59
|
const abi = parseAbiParameters(
|
|
44
|
-
'
|
|
45
|
-
'(' +
|
|
60
|
+
'(' +
|
|
46
61
|
'bytes32, ' + // archive
|
|
47
62
|
'(int256), ' + // oracleInput
|
|
48
63
|
'bytes32' + // headerHash
|
|
49
64
|
')',
|
|
50
65
|
);
|
|
51
66
|
const archiveRoot = this.archive.toString();
|
|
52
|
-
|
|
53
67
|
const headerHash = this.header.hash().toString();
|
|
54
|
-
const encodedData = encodeAbiParameters(abi, [
|
|
55
|
-
domainSeparator,
|
|
56
|
-
[archiveRoot, [this.feeAssetPriceModifier], headerHash],
|
|
57
|
-
] as const);
|
|
68
|
+
const encodedData = encodeAbiParameters(abi, [[archiveRoot, [this.feeAssetPriceModifier], headerHash]] as const);
|
|
58
69
|
|
|
59
70
|
return hexToBuffer(encodedData);
|
|
60
71
|
}
|
|
61
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Returns a keccak256 hash of the signed payload (header + archive + feeAssetPriceModifier).
|
|
75
|
+
* Used by the attestation pool to dedup distinct signed payloads.
|
|
76
|
+
*/
|
|
77
|
+
getPayloadHash(): Buffer {
|
|
78
|
+
return keccak256(this.getPayloadToSign());
|
|
79
|
+
}
|
|
80
|
+
|
|
62
81
|
toBuffer(): Buffer {
|
|
63
|
-
return serializeToBuffer([
|
|
82
|
+
return serializeToBuffer([
|
|
83
|
+
this.header,
|
|
84
|
+
this.archive,
|
|
85
|
+
serializeSignedBigInt(this.feeAssetPriceModifier),
|
|
86
|
+
serializeCoordinationSignatureContext(this.signatureContext),
|
|
87
|
+
]);
|
|
64
88
|
}
|
|
65
89
|
|
|
66
90
|
public equals(other: ConsensusPayload | CheckpointProposal | CheckpointProposalCore): boolean {
|
|
@@ -69,34 +93,39 @@ export class ConsensusPayload implements Signable {
|
|
|
69
93
|
return (
|
|
70
94
|
this.header.equals(otherHeader) &&
|
|
71
95
|
this.archive.equals(other.archive) &&
|
|
72
|
-
this.feeAssetPriceModifier === otherModifier
|
|
96
|
+
this.feeAssetPriceModifier === otherModifier &&
|
|
97
|
+
coordinationSignatureContextEquals(this.signatureContext, other.signatureContext)
|
|
73
98
|
);
|
|
74
99
|
}
|
|
75
100
|
|
|
76
101
|
static fromBuffer(buf: Buffer | BufferReader): ConsensusPayload {
|
|
77
102
|
const reader = BufferReader.asReader(buf);
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
);
|
|
83
|
-
return payload;
|
|
103
|
+
const header = reader.readObject(CheckpointHeader);
|
|
104
|
+
const archive = reader.readObject(Fr);
|
|
105
|
+
const feeAssetPriceModifier = reader.readInt256();
|
|
106
|
+
const signatureContext = readCoordinationSignatureContext(reader);
|
|
107
|
+
return new ConsensusPayload(header, archive, feeAssetPriceModifier, signatureContext);
|
|
84
108
|
}
|
|
85
109
|
|
|
86
|
-
static fromFields(fields: FieldsOf<ConsensusPayload>): ConsensusPayload {
|
|
87
|
-
return new ConsensusPayload(fields.header, fields.archive, fields.feeAssetPriceModifier);
|
|
110
|
+
static fromFields(fields: Omit<FieldsOf<ConsensusPayload>, 'primaryType'>): ConsensusPayload {
|
|
111
|
+
return new ConsensusPayload(fields.header, fields.archive, fields.feeAssetPriceModifier, fields.signatureContext);
|
|
88
112
|
}
|
|
89
113
|
|
|
90
|
-
static fromCheckpoint(checkpoint: Checkpoint): ConsensusPayload {
|
|
91
|
-
return new ConsensusPayload(
|
|
114
|
+
static fromCheckpoint(checkpoint: Checkpoint, signatureContext: CoordinationSignatureContext): ConsensusPayload {
|
|
115
|
+
return new ConsensusPayload(
|
|
116
|
+
checkpoint.header,
|
|
117
|
+
checkpoint.archive.root,
|
|
118
|
+
checkpoint.feeAssetPriceModifier,
|
|
119
|
+
signatureContext,
|
|
120
|
+
);
|
|
92
121
|
}
|
|
93
122
|
|
|
94
123
|
static empty(): ConsensusPayload {
|
|
95
|
-
return new ConsensusPayload(CheckpointHeader.empty(), Fr.ZERO, 0n);
|
|
124
|
+
return new ConsensusPayload(CheckpointHeader.empty(), Fr.ZERO, 0n, EMPTY_COORDINATION_SIGNATURE_CONTEXT);
|
|
96
125
|
}
|
|
97
126
|
|
|
98
127
|
static random(): ConsensusPayload {
|
|
99
|
-
return new ConsensusPayload(CheckpointHeader.random(), Fr.random(), 0n);
|
|
128
|
+
return new ConsensusPayload(CheckpointHeader.random(), Fr.random(), 0n, EMPTY_COORDINATION_SIGNATURE_CONTEXT);
|
|
100
129
|
}
|
|
101
130
|
|
|
102
131
|
/**
|
|
@@ -117,10 +146,12 @@ export class ConsensusPayload implements Signable {
|
|
|
117
146
|
header: this.header.toInspect(),
|
|
118
147
|
archive: this.archive.toString(),
|
|
119
148
|
feeAssetPriceModifier: this.feeAssetPriceModifier.toString(),
|
|
149
|
+
chainId: this.signatureContext.chainId,
|
|
150
|
+
rollupAddress: this.signatureContext.rollupAddress.toString(),
|
|
120
151
|
};
|
|
121
152
|
}
|
|
122
153
|
|
|
123
154
|
toString() {
|
|
124
|
-
return `header: ${this.header.toString()}, archive: ${this.archive.toString()}, feeAssetPriceModifier: ${this.feeAssetPriceModifier}}`;
|
|
155
|
+
return `header: ${this.header.toString()}, archive: ${this.archive.toString()}, feeAssetPriceModifier: ${this.feeAssetPriceModifier}, chainId: ${this.signatureContext.chainId}, rollupAddress: ${this.signatureContext.rollupAddress.toString()}`;
|
|
125
156
|
}
|
|
126
157
|
}
|
|
@@ -1,37 +1,122 @@
|
|
|
1
1
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
2
|
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
3
|
-
import {
|
|
3
|
+
import { tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
4
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
6
|
+
import { type BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
4
7
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
import { type TypedDataDefinition, hashTypedData } from 'viem';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
|
|
11
|
+
import type { ZodFor } from '../schemas/index.js';
|
|
12
|
+
|
|
13
|
+
export type CoordinationSignatureType =
|
|
14
|
+
| 'BlockProposal'
|
|
15
|
+
| 'CheckpointProposal'
|
|
16
|
+
| 'CheckpointAttestation'
|
|
17
|
+
| 'AttestationsAndSigners'
|
|
18
|
+
| 'SignedTxs';
|
|
19
|
+
|
|
20
|
+
export type CoordinationSignatureContext = {
|
|
21
|
+
chainId: number;
|
|
22
|
+
rollupAddress: EthAddress;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const EMPTY_COORDINATION_SIGNATURE_CONTEXT: CoordinationSignatureContext = {
|
|
26
|
+
chainId: 0,
|
|
27
|
+
rollupAddress: EthAddress.ZERO,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const coordinationSignatureContextSchema: ZodFor<CoordinationSignatureContext> = z.object({
|
|
31
|
+
chainId: z.number(),
|
|
32
|
+
rollupAddress: EthAddress.schema,
|
|
33
|
+
});
|
|
12
34
|
|
|
13
35
|
export interface Signable {
|
|
14
|
-
|
|
36
|
+
readonly primaryType: CoordinationSignatureType;
|
|
37
|
+
readonly signatureContext: CoordinationSignatureContext;
|
|
38
|
+
getPayloadToSign(): Buffer;
|
|
15
39
|
}
|
|
16
40
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
41
|
+
export function coordinationSignatureContextEquals(
|
|
42
|
+
a: CoordinationSignatureContext,
|
|
43
|
+
b: CoordinationSignatureContext,
|
|
44
|
+
): boolean {
|
|
45
|
+
return a.chainId === b.chainId && a.rollupAddress.equals(b.rollupAddress);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function serializeCoordinationSignatureContext(ctx: CoordinationSignatureContext): Buffer {
|
|
49
|
+
return serializeToBuffer([ctx.chainId, ctx.rollupAddress]);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function readCoordinationSignatureContext(reader: BufferReader): CoordinationSignatureContext {
|
|
53
|
+
const chainId = reader.readNumber();
|
|
54
|
+
const rollupAddress = reader.readObject(EthAddress);
|
|
55
|
+
return { chainId, rollupAddress };
|
|
24
56
|
}
|
|
25
57
|
|
|
26
58
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
59
|
+
* Returns true if the signable carries a context matching the node's expected context.
|
|
60
|
+
* Use this at the P2P ingress boundary to reject foreign-chain messages cheaply before
|
|
61
|
+
* performing any signature recovery.
|
|
30
62
|
*/
|
|
31
|
-
export function
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
63
|
+
export function hasValidSignatureContext(signable: Signable, expected: CoordinationSignatureContext): boolean {
|
|
64
|
+
return coordinationSignatureContextEquals(signable.signatureContext, expected);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const COORDINATION_SIGNATURE_NAME = 'Aztec Rollup';
|
|
68
|
+
const COORDINATION_SIGNATURE_VERSION = '1';
|
|
69
|
+
|
|
70
|
+
const EIP712_DOMAIN_FIELDS = [
|
|
71
|
+
{ name: 'name', type: 'string' },
|
|
72
|
+
{ name: 'version', type: 'string' },
|
|
73
|
+
{ name: 'chainId', type: 'uint256' },
|
|
74
|
+
{ name: 'verifyingContract', type: 'address' },
|
|
75
|
+
] as const;
|
|
76
|
+
|
|
77
|
+
const COORDINATION_SIGNATURE_TYPES = {
|
|
78
|
+
EIP712Domain: EIP712_DOMAIN_FIELDS,
|
|
79
|
+
BlockProposal: [{ name: 'payloadHash', type: 'bytes32' }],
|
|
80
|
+
CheckpointProposal: [{ name: 'payloadHash', type: 'bytes32' }],
|
|
81
|
+
CheckpointAttestation: [{ name: 'payloadHash', type: 'bytes32' }],
|
|
82
|
+
AttestationsAndSigners: [{ name: 'payloadHash', type: 'bytes32' }],
|
|
83
|
+
SignedTxs: [{ name: 'payloadHash', type: 'bytes32' }],
|
|
84
|
+
} as const;
|
|
85
|
+
|
|
86
|
+
export function getCoordinationSignatureTypedDataForPayloadHash(
|
|
87
|
+
payloadHash: Buffer32,
|
|
88
|
+
type: CoordinationSignatureType,
|
|
89
|
+
context: CoordinationSignatureContext,
|
|
90
|
+
): TypedDataDefinition {
|
|
91
|
+
return {
|
|
92
|
+
domain: {
|
|
93
|
+
name: COORDINATION_SIGNATURE_NAME,
|
|
94
|
+
version: COORDINATION_SIGNATURE_VERSION,
|
|
95
|
+
chainId: context.chainId,
|
|
96
|
+
verifyingContract: context.rollupAddress.toString() as `0x${string}`,
|
|
97
|
+
},
|
|
98
|
+
types: COORDINATION_SIGNATURE_TYPES,
|
|
99
|
+
primaryType: type,
|
|
100
|
+
message: {
|
|
101
|
+
payloadHash: payloadHash.toString() as `0x${string}`,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function getCoordinationSignatureTypedData(signable: Signable): TypedDataDefinition {
|
|
107
|
+
const payloadHash = getHashedSignaturePayload(signable);
|
|
108
|
+
return getCoordinationSignatureTypedDataForPayloadHash(payloadHash, signable.primaryType, signable.signatureContext);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function getHashedSignaturePayloadTypedData(signable: Signable): Buffer32 {
|
|
112
|
+
return Buffer32.fromString(hashTypedData(getCoordinationSignatureTypedData(signable)));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function recoverCoordinationSigner(signable: Signable, signature: Signature): EthAddress | undefined {
|
|
116
|
+
const digest = getHashedSignaturePayloadTypedData(signable);
|
|
117
|
+
return tryRecoverAddress(digest, signature, { allowYParityAsV: true });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function getHashedSignaturePayload(s: Signable): Buffer32 {
|
|
121
|
+
return Buffer32.fromBuffer(keccak256(s.getPayloadToSign()));
|
|
37
122
|
}
|