Skip to main content

Overview

ParameterDefaultRecommendedType
operatorFeeScalar0Chain-specificuint32 scalar (scaled by 1e6)
operatorFeeConstant0Chain-specificuint64 scalar (wei)
The Operator Fee was introduced in the Isthmus upgrade and modified in the Jovian upgrade.
It allows OP Stack chain operators to charge an additional fee on transactions, on top of the execution gas fee (base fee + priority fee) and the L1 data fee.
This mechanism gives operators two levers:
  • a gas-proportional component (operatorFeeScalar) that scales with gas used
  • a flat component (operatorFeeConstant)
The operator fee is only applied on chains that have enabled the Isthmus upgrade.
Deposit transactions do not get charged operator fees.
For all deposit transactions, regardless of the operator fee configuration, the operator fee is always zero.

Operator Fee Formula

The operator fee is calculated using the following formula, depending on the active fork. After Isthmus:
operatorFee = operatorFeeConstant + (operatorFeeScalar * gasUsed / 1e6)
After Jovian:
operatorFee = operatorFeeConstant + (operatorFeeScalar × gasUsed × 100)
Setting operator fee values too high can significantly increase transaction costs and reduce user adoption. The operator fee directly impacts UX and competitiveness and should be adjusted conservatively. The default value for standard chains is 0, any other value is considered non-standard.

How to Update the Operator Fee

To update the operator fee parameters, call the following method on the SystemConfig contract from the SystemConfigOwner: setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external onlyOwner; Example using cast:
cast
cast send  --rpc-url <RPC_URL> --private-key <PRIVATE_KEY> \
  <SYSTEM_CONFIG_PROXY_ADDRESS> \
  "setOperatorFeeScalars(uint32,uint64)" \
  500000 1000000000000
After the transaction confirms, verify the current configuration by calling the following: function operatorFeeScalar() view returns (uint32);
function operatorFeeConstant() view returns (uint64);
Example using cast:
cast
cast call --rpc-url <RPC_URL> <SYSTEM_CONFIG_PROXY_ADDRESS> "operatorFeeScalar()"
cast call --rpc-url <RPC_URL> <SYSTEM_CONFIG_PROXY_ADDRESS> "operatorFeeConstant()"

References