-
Notifications
You must be signed in to change notification settings - Fork 319
gas limit and elasticity increase 2025-10-28 #484
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
leopoldjoy
merged 5 commits into
base:main
from
leopoldjoy:2025-10-28-gas-limit-and-elasticity-increase
Oct 31, 2025
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
a3ee928
complete initial setup for the gas limit and elasticity increase on 2…
leopoldjoy e772663
remove unused lines in Makefile
leopoldjoy daf0b8f
make fixes from PR review
leopoldjoy 8ba890d
update executed status and add execution artifact
leopoldjoy fe2f125
add missing RPC_URL definition in Makefile
leopoldjoy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| OP_COMMIT=594bc933a38425f745b46399a3619bcdeb74965d | ||
| BASE_CONTRACTS_COMMIT=dcd8c98aa881e0ae4ebf872e0d91692a7bf94000 | ||
|
|
||
| SYSTEM_CONFIG=0x73a79Fab69143498Ed3712e519A88a918e1f4072 | ||
| OWNER_SAFE=0x14536667Cd30e52C0b458BaACcB9faDA7046E056 | ||
|
|
||
| FROM_GAS_LIMIT=150000000 | ||
| TO_GAS_LIMIT=200000000 | ||
|
|
||
| FROM_ELASTICITY=3 | ||
| TO_ELASTICITY=4 | ||
|
|
||
| SENDER=0x1841CB3C2ce6870D0417844C817849da64E6e937 | ||
|
|
||
| RECORD_STATE_DIFF=true |
26 changes: 26 additions & 0 deletions
26
mainnet/2025-10-28-increase-gas-and-elasticity-limit/FACILITATOR.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| # Facilitator Guide | ||
|
|
||
| Guide for facilitators after collecting signatures from signers. | ||
|
|
||
| ### 1. Update repo: | ||
|
|
||
| ```bash | ||
| cd contract-deployments | ||
| git pull | ||
| cd mainnet/2025-10-28-increase-gas-and-elasticity-limit | ||
| make deps | ||
| ``` | ||
|
|
||
| ### 2. Execute upgrade | ||
|
|
||
| ```bash | ||
| SIGNATURES=AAABBBCCC make execute | ||
| ``` | ||
|
|
||
| ### 3. (**ONLY** if needed) Execute upgrade rollback | ||
|
|
||
| > [!IMPORTANT] THIS SHOULD ONLY BE PERFORMED IN THE EVENT THAT WE NEED TO ROLLBACK | ||
|
|
||
| ```bash | ||
| SIGNATURES=AAABBBCCC make execute-rollback | ||
| ``` |
57 changes: 57 additions & 0 deletions
57
mainnet/2025-10-28-increase-gas-and-elasticity-limit/Makefile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| include ../../Makefile | ||
| include ../../Multisig.mk | ||
|
|
||
| include ../.env | ||
| include .env | ||
|
|
||
| ifndef LEDGER_ACCOUNT | ||
| override LEDGER_ACCOUNT = 0 | ||
| endif | ||
|
|
||
| ifndef ROLLBACK_NONCE_OFFSET | ||
| override ROLLBACK_NONCE_OFFSET = 1 | ||
| endif | ||
|
|
||
| SCRIPT_NAME = IncreaseEip1559ElasticityAndIncreaseGasLimitScript | ||
|
|
||
| RPC_URL = $(L1_RPC_URL) | ||
|
|
||
| .PHONY: gen-validation | ||
| gen-validation: checkout-signer-tool run-script | ||
|
|
||
| .PHONY: run-script | ||
| run-script: | ||
| cd $(SIGNER_TOOL_PATH); \ | ||
| npm ci; \ | ||
| bun run scripts/genValidationFile.ts --rpc-url $(L1_RPC_URL) \ | ||
| --workdir .. --forge-cmd 'forge script --rpc-url $(L1_RPC_URL) \ | ||
| $(SCRIPT_NAME) --sig "sign(address[])" [] --sender $(SENDER)' --out ../validations/base-signer.json; | ||
|
|
||
| .PHONY: execute | ||
| execute: | ||
| FROM_GAS_LIMIT=$(FROM_GAS_LIMIT) \ | ||
| TO_GAS_LIMIT=$(TO_GAS_LIMIT) \ | ||
| FROM_ELASTICITY=$(FROM_ELASTICITY) \ | ||
| TO_ELASTICITY=$(TO_ELASTICITY) \ | ||
| $(call MULTISIG_EXECUTE,$(SIGNATURES)) | ||
|
|
||
| .PHONY: sign-rollback | ||
| sign-rollback: | ||
| FROM_GAS_LIMIT=$(TO_GAS_LIMIT) \ | ||
| TO_GAS_LIMIT=$(FROM_GAS_LIMIT) \ | ||
| FROM_ELASTICITY=$(TO_ELASTICITY) \ | ||
| TO_ELASTICITY=$(FROM_ELASTICITY) \ | ||
| SAFE_NONCE=$(shell expr $$(cast call $(OWNER_SAFE) "nonce()" --rpc-url $(L1_RPC_URL) | cast to-dec) + $(ROLLBACK_NONCE_OFFSET)) \ | ||
| $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ | ||
| forge script --rpc-url $(L1_RPC_URL) $(SCRIPT_NAME) \ | ||
| --sig "sign(address[])" [] --sender $(SENDER) | ||
|
|
||
| .PHONY: execute-rollback | ||
| execute-rollback: | ||
| FROM_GAS_LIMIT=$(TO_GAS_LIMIT) \ | ||
| TO_GAS_LIMIT=$(FROM_GAS_LIMIT) \ | ||
| FROM_ELASTICITY=$(TO_ELASTICITY) \ | ||
| TO_ELASTICITY=$(FROM_ELASTICITY) \ | ||
| SAFE_NONCE=$(shell expr $$(cast call $(OWNER_SAFE) "nonce()" --rpc-url $(L1_RPC_URL) | cast to-dec) + $(ROLLBACK_NONCE_OFFSET)) \ | ||
| forge script --rpc-url $(L1_RPC_URL) $(SCRIPT_NAME) \ | ||
| --sig "run(bytes)" $(SIGNATURES) --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast |
179 changes: 179 additions & 0 deletions
179
mainnet/2025-10-28-increase-gas-and-elasticity-limit/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,179 @@ | ||
| # Update Gas Limit & Elasticity in L1 `SystemConfig` | ||
|
|
||
| Status: [EXECUTED](https://etherscan.io/tx/0x29b2b633ebc1da25d1a90f52b812e13b3469c12cc851b0609ab7a671b38a8cad) (See the [artifact here](./records/IncreaseEip1559ElasticityAndIncreaseGasLimit.s.sol/1/run-1761755774673.json)) | ||
|
|
||
| ## Description | ||
|
|
||
| We are updating the gas limit and elasticity to improve TPS and reduce gas fees. | ||
|
|
||
| This runbook invokes the following script which allows our signers to sign the same call with two different sets of parameters for our Incident Multisig, defined in the [base-org/contracts](https://github.com/base/contracts) repository: | ||
|
|
||
| `IncreaseEip1559ElasticityAndIncreaseGasLimitScript` -- This script will update the gas limit to our new limit of 200M gas and 4 elasticity if invoked as part of the "upgrade" process, or revert to the old limit of 150M gas and 3 elasticity if invoked as part of the "rollback" process. | ||
|
|
||
| The values we are sending are statically defined in the `.env` file. | ||
|
|
||
| > [!IMPORTANT] We have two transactions to sign. Please follow | ||
| > the flow for both "Approving the Update transaction" and | ||
| > "Approving the Rollback transaction". Hopefully we only need | ||
| > the former, but will have the latter available if needed. | ||
|
|
||
| ## Install dependencies | ||
|
|
||
| ### 1. Update foundry | ||
|
|
||
| ```bash | ||
| foundryup | ||
| ``` | ||
|
|
||
| ### 2. Install Node.js if needed | ||
|
|
||
| First, check if you have node installed | ||
|
|
||
| ```bash | ||
| node --version | ||
| ``` | ||
|
|
||
| If you see a version output from the above command, you can move on. Otherwise, install node | ||
|
|
||
| ```bash | ||
| brew install node | ||
| ``` | ||
|
|
||
| ## Approving the Update transaction | ||
|
|
||
| ### 1. Update repo: | ||
|
|
||
| ```bash | ||
| cd contract-deployments | ||
| git pull | ||
| ``` | ||
|
|
||
| ### 2. Run the signing tool (NOTE: do not enter the task directory. Run this command from the project's root). | ||
|
|
||
| ```bash | ||
| make sign-task | ||
| ``` | ||
|
|
||
| ### 3. Open the UI at [http://localhost:3000](http://localhost:3000) | ||
|
|
||
| Be sure to select the correct task user from the list of available users to sign (**not** the "rollback" user). | ||
|
|
||
| ### 4. Send signature to facilitator | ||
|
|
||
| ## Approving the Rollback transaction | ||
|
|
||
| Complete the above steps for `Approving the Update transaction` before continuing below. | ||
|
|
||
| ### 1. Simulate and validate the transaction | ||
|
|
||
| Make sure your ledger is still unlocked and run the following. | ||
|
|
||
| ```shell | ||
| cd mainnet/2025-10-28-increase-gas-and-elasticity-limit | ||
| make sign-rollback | ||
leopoldjoy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| ``` | ||
|
|
||
| Once you run the make sign command successfully, you will see a "Simulation link" from the output. Once again paste this URL in your browser and click "Simulate Transaction". | ||
|
|
||
| We will be performing 3 validations and then we'll extract the domain hash and | ||
| message hash to approve on your Ledger then verify completion: | ||
|
|
||
| 1. Validate integrity of the simulation and that it completed successfully. | ||
| 2. Validate correctness of the state diff. | ||
| 3. Validate and extract domain hash and message hash to approve. | ||
|
|
||
| #### 2. Validate integrity of the simulation and that it completed successfully. | ||
|
|
||
| Make sure you are on the "Overview" tab of the tenderly simulation, to | ||
| validate integrity of the simulation, we need to check the following: | ||
|
|
||
| 1. "Network": Check the network is Ethereum Mainnet. | ||
| 2. "Timestamp": Check the simulation is performed on a block with a | ||
| recent timestamp (i.e. close to when you run the script). | ||
| 3. "Sender": Check the address shown is your signer account or a valid signer address (from the Safe multi-sig). | ||
| 4. "Success" with a green check mark | ||
|
|
||
| #### 3. Validate correctness of the state diff. | ||
|
|
||
| Now click on the "State" tab. Verify that: | ||
|
|
||
| 1. Verify that the nonce is incremented for the Incident Multisig under the "GnosisSafeProxy" at address `0x14536667Cd30e52C0b458BaACcB9faDA7046E056`: | ||
|
|
||
| ``` | ||
| Key: 0x0000000000000000000000000000000000000000000000000000000000000005 | ||
| Before: 0x000000000000000000000000000000000000000000000000000000000000005d | ||
| After: 0x000000000000000000000000000000000000000000000000000000000000005e | ||
| ``` | ||
|
|
||
| 2. Verify that **NO** gas limit value or elasticity value is updated and thus no changes are shown for a "Proxy" address at `0x73a79fab69143498ed3712e519a88a918e1f4072`. This is because the values would change back to the exact same values that are currently set, therefore no state changes should be displayed for this. | ||
|
|
||
| #### 4. Validate and extract domain hash and message hash to approve. | ||
|
|
||
| Now that we have verified the transaction performs the right | ||
| operation, we need to extract the domain hash and the message hash to | ||
| approve. | ||
|
|
||
| Go back to the "Overview" tab, and find the | ||
| `GnosisSafe.checkSignatures` call. This call's `data` parameter | ||
| contains both the domain hash and the message hash that will show up | ||
| in your Ledger. | ||
|
|
||
| Here is an example screenshot. Note that the value will be | ||
| different for each signer: | ||
|
|
||
|  | ||
|
|
||
| It will be a concatenation of `0x1901`, the domain hash, and the | ||
| message hash: `0x1901[domain hash][message hash]`. | ||
|
|
||
| Note down this value. You will need to compare it with the ones | ||
| displayed on the Ledger screen at signing. Also, ensure that it matches the following: | ||
|
|
||
| ``` | ||
| Domain hash: 0xf3474c66ee08325b410c3f442c878d01ec97dd55a415a307e9d7d2ea24336289 | ||
| Message hash: 0x5d50efea16ce96c189a49bcb87e208506bb4c612a5ef66c81dd5790f01ef7089 | ||
| ``` | ||
|
|
||
| ### 5. Approve the signature on your ledger | ||
|
|
||
| Once the validations are done, it's time to actually sign the | ||
| transaction. Make sure your ledger is still unlocked and run the | ||
| following: | ||
|
|
||
| ```shell | ||
| make sign-rollback | ||
| ``` | ||
|
|
||
| > [!IMPORTANT] This is the most security critical part of the | ||
| > playbook: make sure the domain hash and message hash in the | ||
| > following two places match: | ||
|
|
||
| 1. On your Ledger screen. | ||
| 2. In the Tenderly simulation. You should use the same Tenderly | ||
| simulation as the one you used to verify the state diffs, instead | ||
| of opening the new one printed in the console. | ||
|
|
||
| There is no need to verify anything printed in the console. There is | ||
| no need to open the new Tenderly simulation link either. | ||
|
|
||
| After verification, sign the transaction. You will see the `Data`, | ||
| `Signer` and `Signature` printed in the console. Format should be | ||
| something like this: | ||
|
|
||
| ``` | ||
| Data: <DATA> | ||
| Signer: <ADDRESS> | ||
| Signature: <SIGNATURE> | ||
| ``` | ||
|
|
||
| Double check the signer address is the right one. | ||
|
|
||
| ### 6. Send the output to Facilitator(s) | ||
|
|
||
| Nothing has occurred onchain - these are offchain signatures which | ||
| will be collected by Facilitators for execution. Execution can occur | ||
| by anyone once a threshold of signatures are collected, so a | ||
| Facilitator will do the final execution for convenience. | ||
|
|
||
| Share the `Data`, `Signer` and `Signature` with the Facilitator, and | ||
| congrats, you are done! | ||
20 changes: 20 additions & 0 deletions
20
mainnet/2025-10-28-increase-gas-and-elasticity-limit/foundry.toml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| [profile.default] | ||
| src = 'src' | ||
| out = 'out' | ||
| libs = ['lib'] | ||
| broadcast = 'records' | ||
| fs_permissions = [ {access = "read-write", path = "./"} ] | ||
| optimizer = true | ||
| optimizer_runs = 999999 | ||
| solc_version = "0.8.15" | ||
| via-ir = false | ||
| remappings = [ | ||
| '@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/', | ||
| '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', | ||
| '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts', | ||
| '@rari-capital/solmate/=lib/solmate/', | ||
| '@base-contracts/=lib/base-contracts', | ||
| '@solady/=lib/solady/src/' | ||
| ] | ||
|
|
||
| # See more config options https://github.com/foundry-rs/foundry/tree/master/config |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.