5

Optimism's gas oracle is deployed at 0x420000000000000000000000000000000000000F. Optimism's docs say: "Optimism updates the gas price parameters on chain whenever those parameters change." Does the word "Optimism" here refer to a centralized organization or is this an action performed through decentralized consensus?

I noticed that according to the contract's code on Etherscan, only the owner of 0x420000000000000000000000000000000000000F can update the L1 base fee. This owner account currently is 0x7107142636C85c549690b1Aca12Bdb8052d26Ae6. Is this a regular EOA controlled by a single centralized organization?

This EOA can also call setScalar() with an arbitrary argument. If it was called with a large argument, gas fees on optimism would become too expensive for anyone to afford. What's more is that if it was called with a very large argument (e.g. max uint256), getL1Fee() would revert in line uint256 unscaled = l1Fee * scalar;.

Is getL1Fee() required for Optimism to function?

2 Answers 2

1

I don't know why you picked apart this particular instance of centralization problem when there are bigger ones (example: the contracts on L1 can be upgraded by the devs). You can find the up-to-date centralization risks on this website: https://l2beat.com/scaling/projects/optimism.

To the specifics of the question.

Optimism's gas oracle is deployed at 0x420000000000000000000000000000000000000F. Optimism's docs say: "Optimism updates the gas price parameters on chain whenever those parameters change." Does the word "Optimism" here refer to a centralized organization or is this an action performed through decentralized consensus?

The service is run by the devs. It looks like the code for the service is here. Also these docs explain that this is a "permissioned contract" run by "offchain actor", and after the Bedrock upgrade it won't be used anymore.

I noticed that according to the contract's code on Etherscan, only the owner of 0x420000000000000000000000000000000000000F can update the L1 base fee. This owner account currently is 0x7107142636C85c549690b1Aca12Bdb8052d26Ae6. Is this a regular EOA controlled by a single centralized organization?

Yes, it's an EOA. So someone has the private key.

This EOA can also call setScalar() with an arbitrary argument. If it was called with a large argument, gas fees on optimism would become too expensive for anyone to afford. What's more is that if it was called with a very large argument (e.g. max uint256), getL1Fee() would revert in line uint256 unscaled = l1Fee * scalar;.

Is getL1Fee() required for Optimism to function?

I think it's used to compute something similar to a "base fee" for L2 transactions, so if this function fail I would expect the sequencer to fail as well.

1

The optimism is a Layer-2 scaling solution for Ethereum, that is designed to increase the throughput of the network by increasing more transactions to be processed off-chain. While there are aspects of Optimism that are decentralized, such as its use of smart contracts to execute transactions, there are also some elements that are centralized.

The gas oracle contract at address 0x420000000000000000000000000000000000000F is owned and controlled by a single entity, the address 0x7107142636C85c549690b1Aca12Bdb8052d26Ae6. This means that this entity has the power to update the L1 base fee, which can impact gas fees for transactions on Optimism network.

While this does indicate some level of centralization, but it's worth noting that the owner of the gas oracle contract is not necessarily the same entity that controls the rest of the Optimism network. Optimism's gas oracle is just one component of the overall system, there are some others as well.

Its correct regarding the setScalar() function, that it is also controlled by the same owner account. If that function is called with a large argument, it could result in excessively high gas fees on the Optimism network. However, it's important to note that this is not a flaw specific to Optimism, any system that relies on gas fees to process transactions is susceptible to this kind of attack.

getL1Fee() function, is used to determine the current gas price for transactions on the Optimism network. While it is an important part of the system, but it doesn't define the Optimism functionality.

2
  • 1
    Most of your answer was already in the question. Stills remains to answer who controls 0x7107142636C85c549690b1Aca12Bdb8052d26Ae6, and how is it controlled.
    – Ismael
    Commented Apr 25, 2023 at 19:49
  • @Ismael Thank you. Furthermore: I'm quite confused about the last paragraph. What would happen if getL1Fee() started to revert because setScalar() was called with max uint256?
    – UTF-8
    Commented Apr 26, 2023 at 11:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.