<aside> ❗

This RFC follows an older schema and will be updated when time allows.

</aside>

✏️ Authors: @Thomas Lavaur

🚧→[📘 | ⚰️] Approvals (research): 📘**@Marcin Pawlowski**

📘→[✅ | ⚰️] Approvals (engineering):@Daniel Sanchez Quiros @Youngjoon Lee


Motivation

In [1.2.0] Mantle, the Ledger Transaction is modeled as a special, mandatory component of every Mantle Transaction. Each Mantle Transaction must include exactly one Ledger Transaction, which is validated and executed separately from the rest of the transaction:

# v1.2
class MantleTx:
    ledger_tx: LedgerTx
    ops: list[Op]
    permanent_storage_gas_price: TokenValue
    execution_gas_price: TokenValue

class SignedMantleTx:
    tx: MantleTx
    op_proofs: list[OpProof | None]
    ledger_tx_proof: ZkSignature  # separate from op proofs

This structure introduces unnecessary complexity by treating the Ledger Transaction asymmetrically: it is validated and executed in a dedicated step, outside the normal Operation pipeline. It also prevents multiple users from issuing independent transfers within a single atomic Mantle Transaction.

This RFC proposes removing that constraint. Instead, the Ledger Transaction becomes a regular transfer Operation, subject to the same validation and execution rules as any other Operation.

Proposal

We introduce a TRANSFER Operation (opcode 0x00) that is semantically equivalent to the former LedgerTx. The Mantle Transaction structure is simplified to a flat list of Operations:

# v1.3 — proposed
class MantleTx:
    ops: list[Op]
    permanent_storage_gas_price: TokenValue
    execution_gas_price: TokenValue

class SignedMantleTx:
    tx: MantleTx
    op_proofs: list[OpProof | None]  # Transfer proof now included here

A transfer that previously lived in ledger_tx is now represented as a TRANSFER Operation inside ops. A Mantle Transaction becomes a homogeneous bundle of Operations that are either all valid or all invalid together.

Justification

Simplicity and consistency

The distinction between LedgerTx and Op was an artificial split. Treating transfers as first-class Operations removes a special case from every layer of the stack (validation, execution, encoding, gas).

Multiple transfers per transaction

Several actors can issue independent transfers within one atomic Mantle Transaction, with no off-chain compensation required.

Atomic cross-zone deposits