Shielded transactions
Last updated
Was this helpful?
Shielded transfers are encoded as native transactions with a special payload that targets the shielded pool contract.
Shielded transactions are represented as TypedNativeTransaction::Shielded.
The payload (data) contains the encoded shielded proof and bundle inputs.
The verifier enforces these constraints for shielded transactions:
The transaction must be unsigned.
The action must be Call to the shielded pool address.
value must be zero (transfers happen inside the pool).
gas_price must be zero (the proof includes a fee field).
The payload must not be empty.
The RPC call request builder also enforces recipient, value, and payload checks before building a shielded transaction.
Shielded transactions are unsigned. The node derives a synthetic sender address from the transaction hash (SignedTransaction::new_shielded).
Shielded transactions are stored in a dedicated shielded_pool map (no nonce ordering).
The packer selects shielded transactions after packing normal native and EVM transactions, respecting remaining gas and block size limits.
Last updated
Was this helpful?
Was this helpful?