Shielded transactions
Shielded transfers are encoded as native transactions with a special payload that targets the shielded pool contract.
Transaction type
Shielded transactions are represented as
TypedNativeTransaction::Shielded.The payload (
data) contains the encoded shielded proof and bundle inputs.
Validation rules
The verifier enforces these constraints for shielded transactions:
The transaction must be unsigned.
The action must be
Callto the shielded pool address.valuemust be zero (transfers happen inside the pool).gas_pricemust 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.
Sender derivation
Shielded transactions are unsigned. The node derives a synthetic sender address from the transaction hash (SignedTransaction::new_shielded).
Transaction pool behavior
Shielded transactions are stored in a dedicated
shielded_poolmap (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?