Authors: David Rusu [email protected]
| Version | Changes | Date |
|---|---|---|
| 1.0.0 | Initial revision. | 2026-12-01 |
| 1.1.0 | ‣ | 2026-03-25 |
| 1.2.0 | ‣ | 2026-04-02 |
| 1.3.0 | ‣ | 2026-04-24 |
| 1.4.0 | ‣ | 2026-05-06 |
| 1.4.1 | Removed mention of DA. Updated KeyCount from Byte to UINT16 to follow Mantle. |
2026-05-21 |
This document specifies the canonical encoding of Mantle transactions (see Mantle Transaction) and it’s sub-components. Transactions sent through the mempool and included in blocks use this encoding.
The transaction encoding is specified in ABNF form to remove any ambiguity and guarantee a canonical encoding. The high level encoding choices which were not immediately derivable from the Mantle specification are listed here:
SignedMantleTx = MantleTx OpsProofs
MantleTx = OpCount *Op
~~~~OpCount = Byte
Op = Opcode OpPayload
Opcode = Byte
OpPayload = Transfer /
ChannelInscribe /
ChannelConfig /
ChannelDeposit /
ChannelWithdraw /
SDPDeclare /
SDPWithdraw /
SDPActive /
LeaderClaim
ChannelInscribe = ChannelId Inscription Parent Signer
Inscription = UINT32 *BYTE
~~~~ChannelConfig = ChannelId KeyCount *Signer PostingTimeframe PostingTimeout ConfigThreshold WithdrawThreshold
KeyCount = UINT16
PostingTimeframe = UINT32
PostingTimeout = UINT32
ConfigThreshold = UINT16
WithdrawThreshold = UINT16
ChannelDeposit = ChannelId Inputs Metadata
Inputs = InputCount *NoteId
InputCount = Byte
~~~~Metadata = UINT32 *BYTE
~~~~ChannelWithdraw = ChannelId Outputs WithdrawNonce
Outputs = OutputCount *Note
OutputCount = Byte
WithdrawNonce = UINT32
ChannelId = Hash32
Parent = Hash32
Signer = Ed25519PublicKey