Overview
Every OP Stack chain has four fee vaults, each collecting a specific fee component:| Vault | Address | Collects | Introduced |
|---|---|---|---|
SequencerFeeVault | 0x4200000000000000000000000000000000000011 | Priority fees (tips) | Legacy |
BaseFeeVault | 0x4200000000000000000000000000000000000019 | Base fees (not burned on L2) | Bedrock |
L1FeeVault | 0x420000000000000000000000000000000000001A | L1 data fees | Bedrock |
OperatorFeeVault | 0x420000000000000000000000000000000000001B | Operator fees | Isthmus |
How fees flow into vaults
When a transaction is executed on an OP Stack chain, the total fee is split across vaults:- Base fee (
gasUsed × baseFee) goes to theBaseFeeVault - Priority fee (
gasUsed × priorityFee) goes to theSequencerFeeVault - L1 data fee goes to the
L1FeeVault - Operator fee (
operatorFeeScalar × gasUsed + operatorFeeConstant) goes to theOperatorFeeVault
Vault configuration
Each fee vault has three configurable parameters:| Parameter | Description |
|---|---|
| recipient | The address that receives withdrawn funds |
| minWithdrawalAmount | Minimum ETH balance required before a withdrawal can be triggered |
| withdrawalNetwork | Whether funds are withdrawn to an L1 or L2 address |
Withdrawal network
ThewithdrawalNetwork parameter determines how funds are routed when withdrawn:
- L1 (
0): Funds are sent to the recipient on L1 via theL2ToL1MessagePasser. This initiates a standard L2-to-L1 withdrawal that must be proven and finalized on L1. - L2 (
1): Funds are sent directly to the recipient on L2 via a simple ETH transfer.
Withdrawal mechanism
Fee vault withdrawals are permissionless — anyone can trigger a withdrawal by calling thewithdraw() function on any vault. This design ensures that collected fees can always be moved to the configured recipient without relying on a specific operator.
How withdrawals work
- The caller invokes
withdraw()on the vault contract. - The vault checks that its balance meets the
minWithdrawalAmountthreshold. - The entire vault balance is withdrawn (not a partial amount).
- The
totalProcessedcounter is incremented. - Funds are routed based on
withdrawalNetwork:- L2: Direct ETH transfer to the recipient.
- L1: A withdrawal is initiated through the
L2ToL1MessagePasserwith a 400,000 gas limit. The withdrawal must then be proven and finalized on L1.
Next steps
- Learn how to configure and withdraw from fee vaults as a chain operator.
- Understand transaction fee components in detail.
- Review the smart contracts reference for all predeploy addresses.