Expand description
Transaction logic module
This module implements the core logic for applying and validating all
transaction types in the Mina protocol. It is a direct port of the OCaml
implementation from src/lib/transaction_logic/mina_transaction_logic.ml
and maintains identical business logic.
§Transaction Types
The module handles three main categories of transactions:
§User Commands
- Signed Commands: Payments and stake delegations
- zkApp Commands: Complex multi-account zero-knowledge operations
§Protocol Transactions
- Fee Transfers: Distribution of transaction fees to block producers
- Coinbase: Block rewards for successful block production
§Two-Phase Application
Transaction application follows a two-phase model to enable efficient proof generation:
-
First Pass (
apply_transaction_first_pass): Validates preconditions and begins application. For zkApp commands, applies the fee payer and first phase of account updates. -
Second Pass (
apply_transaction_second_pass): Completes application. For zkApp commands, applies the second phase of account updates and finalizes state.
§Key Types
Transaction: Top-level enum for all transaction typesUserCommand: User-initiated transactions (signed or zkApp)TransactionStatus: Applied or failed with specific error codesTransactionFailure: 50+ specific failure reasonsFeeTransfer: Fee distribution transactionCoinbase: Block reward transaction
§Module Organization
local_state: Local state management during zkApp applicationprotocol_state: Protocol state views for transaction applicationsigned_command: Payment and stake delegation logictransaction_applied: Final transaction application resultstransaction_partially_applied: Two-phase transaction applicationtransaction_union_payload: Unified transaction representation for SNARK circuitstransaction_witness: Witness generation for transaction proofsvalid: Valid (but not yet verified) user commandsverifiable: Verifiable user commands ready for proof verificationzkapp_command: zkApp command processingzkapp_statement: zkApp statement types for proof generation
Re-exports§
pub use transaction_partially_applied::apply_transaction_first_pass;pub use transaction_partially_applied::apply_transaction_second_pass;pub use transaction_partially_applied::apply_transactions;pub use transaction_partially_applied::apply_user_command;pub use transaction_partially_applied::set_with_location;pub use transaction_partially_applied::AccountState;pub use transaction_union_payload::account_check_timing;pub use transaction_union_payload::add_amount;pub use transaction_union_payload::checked_cons_signed_command_payload;pub use transaction_union_payload::cons_signed_command_payload;pub use transaction_union_payload::cons_zkapp_command_commitment;pub use transaction_union_payload::get_with_location;pub use transaction_union_payload::sub_amount;pub use transaction_union_payload::timing_error_to_user_command_status;pub use transaction_union_payload::validate_nonces;pub use transaction_union_payload::validate_timing;pub use transaction_union_payload::Body;pub use transaction_union_payload::Common;pub use transaction_union_payload::ExistingOrNew;pub use transaction_union_payload::Tag;pub use transaction_union_payload::TimingValidation;pub use transaction_union_payload::TransactionUnion;pub use transaction_union_payload::TransactionUnionPayload;
Modules§
- for_
tests - local_
state - protocol_
state - signed_
command - transaction_
applied - transaction_
partially_ applied - Two-phase transaction application
- transaction_
union_ payload - Unified transaction representation for SNARK circuits
- transaction_
witness - valid
- verifiable
- zkapp_
command - zkapp_
statement
Structs§
- Coinbase
- OCaml reference: src/lib/mina_base/coinbase.ml L:17-21 Commit: 5da42ccd72e791f164d4d200cf1ce300262873b3 Last verified: 2025-10-10
- Coinbase
FeeTransfer - FeeTransfer
- OCaml reference: src/lib/mina_base/fee_transfer.ml L:68-69 Commit: 5da42ccd72e791f164d4d200cf1ce300262873b3 Last verified: 2025-10-10
- Memo
- 0th byte is a tag to distinguish digests from other data 1st byte is length, always 32 for digests bytes 2 to 33 are data, 0-right-padded if length is less than 32
- Single
FeeTransfer - OCaml reference: src/lib/mina_base/fee_transfer.ml L:76-80 Commit: 5da42ccd72e791f164d4d200cf1ce300262873b3 Last verified: 2025-10-10
- With
Status - OCaml reference: src/lib/mina_base/with_status.ml L:6-10 Commit: 5da42ccd72e791f164d4d200cf1ce300262873b3 Last verified: 2025-10-08
Enums§
- Binary
Transaction 🔒Status - Transaction
- Top-level transaction type representing all possible transactions in the Mina protocol.
- Transaction
Failure - OCaml reference: src/lib/mina_base/transaction_status.ml L:9-51 Commit: 5da42ccd72e791f164d4d200cf1ce300262873b3 Last verified: 2025-10-08
- Transaction
Status - OCaml reference: src/lib/mina_base/transaction_status.ml L:452-454 Commit: 5da42ccd72e791f164d4d200cf1ce300262873b3 Last verified: 2025-10-08
- User
Command - Well
Formedness Error