Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions zeronet/2026-05-22-increase-max-gas-limit/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Required: Git commit hash for https://github.com/base/contracts
# This is the source of the SystemConfig implementation to patch and deploy.
BASE_CONTRACTS_COMMIT=1baa168c9db6a946ae47863ea07295bedb3599a6

# Patch to apply to the base-contracts SystemConfig to increase MAX_GAS_LIMIT
BASE_CONTRACTS_PATCH=patch/max-gas-limit.patch

# Re-exported for task simulation UI (signer-tool invokes forge directly and does not
# pick up variables coming from the Makefile's `-include ../.env`).
PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9
L1_PROXY_ADMIN=0x44f00318360258744a0daa957c2d15080a473469
SYSTEM_CONFIG=0xcc7c76564bea74a963a0bd75e0bc9bce3ff0ea80

# Enable state diff recording for validation
RECORD_STATE_DIFF=true
87 changes: 87 additions & 0 deletions zeronet/2026-05-22-increase-max-gas-limit/FACILITATOR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Facilitator Guide

Guide for facilitators managing this task.

## Deployment prerequisites

Before collecting signatures, complete the EOA-authorized phase:

```bash
cd contract-deployments
git pull
cd zeronet/2026-05-22-increase-max-gas-limit
make deps
make deploy
```

`make deploy` runs `DeploySystemConfigScript`:

- deploys a new `SystemConfig` implementation with `MAX_GAS_LIMIT = 2,000,000,000` and version `3.13.2+max-gas-limit-2000M`
- writes `systemConfig` to `addresses.json`

## Generate validation files

```bash
cd contract-deployments
git pull
cd zeronet/2026-05-22-increase-max-gas-limit
make deps
make gen-validation-cb
make gen-validation-sc
```

This produces:

- `validations/base-signer.json`
- `validations/security-council-signer.json`

## Execute the transaction

### 1. Update repo

```bash
cd contract-deployments
git pull
cd zeronet/2026-05-22-increase-max-gas-limit
make deps
```

### 2. Collect signatures for `CB_MULTISIG`

Concatenate all signatures and export as the `SIGNATURES` environment variable:

```bash
export SIGNATURES="[SIGNATURE1][SIGNATURE2]..."
```

Then run:

```bash
SIGNATURES=$SIGNATURES make approve-cb
```

### 3. Collect signatures for `BASE_SECURITY_COUNCIL`

Concatenate all signatures and export as the `SIGNATURES` environment variable:

```bash
export SIGNATURES="[SIGNATURE1][SIGNATURE2]..."
```

Then run:

```bash
SIGNATURES=$SIGNATURES make approve-sc
```

### 4. Execute upgrade

```bash
make execute
```

Post-checks enforced by script:

- `SystemConfig(impl).version()` equals `"3.13.2+max-gas-limit-2000M"`
- `SystemConfig(impl).maximumGasLimit()` equals `2,000,000,000`
- SystemConfig proxy implementation slot points to the new implementation
87 changes: 87 additions & 0 deletions zeronet/2026-05-22-increase-max-gas-limit/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
include ../../Makefile
include ../../Multisig.mk
include ../.env
include .env

SIGNER_TOOL_PATH = ../../signer-tool
RPC_URL = $(L1_RPC_URL)
export PROXY_ADMIN_OWNER
export L1_PROXY_ADMIN
export SYSTEM_CONFIG

UPGRADE_SCRIPT_NAME = script/UpgradeSystemConfig.s.sol:UpgradeSystemConfigScript
DEPLOY_SCRIPT_NAME = script/DeploySystemConfig.s.sol:DeploySystemConfigScript

CB_SENDER = $(shell cast call $(CB_MULTISIG) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1)
SC_SENDER = $(shell cast call $(BASE_SECURITY_COUNCIL) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1)

# Validate required configuration before execution
.PHONY: validate-config
validate-config:
@test -n "$(BASE_CONTRACTS_COMMIT)" -a "$(BASE_CONTRACTS_COMMIT)" != "TODO" || (echo "BASE_CONTRACTS_COMMIT required" && exit 1)
@test -n "$(BASE_CONTRACTS_PATCH)" || (echo "BASE_CONTRACTS_PATCH required" && exit 1)
@test -n "$(PROXY_ADMIN_OWNER)" || (echo "PROXY_ADMIN_OWNER required" && exit 1)
@test -n "$(L1_PROXY_ADMIN)" || (echo "L1_PROXY_ADMIN required" && exit 1)
@test -n "$(SYSTEM_CONFIG)" || (echo "SYSTEM_CONFIG required" && exit 1)
@echo "Configuration validated successfully"

# Override deps to also apply the patch to base-contracts after checkout
.PHONY: deps
deps: clean-lib forge-deps clone-oz-upgradeable checkout-base-contracts-commit apply-patch

.PHONY: apply-patch
apply-patch:
cd lib/contracts && git init -q && git add -A && git apply ../../$(BASE_CONTRACTS_PATCH)

##
# Deployment (EOA) — run by facilitator before collecting signatures
##
.PHONY: deploy
deploy:
forge script --rpc-url $(L1_RPC_URL) $(DEPLOY_SCRIPT_NAME) \
--ledger --hd-paths $(LEDGER_HD_PATH) --verify --broadcast

#
# ┌─────────────────────────────────────────────┐ ┌─────────────────────────────────────────────┐
# │ CB Multisig │ │ Base Security Council │
# │ 0x856611ed7e07d83243b15e93f6321f2df6865852 │ │ 0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA │
# └─────────────────────┬───────────────────────┘ └─────────────────────┬───────────────────────┘
# │ │
# └─────────────────┬───────────────────────────────────┘
# ▼
# ┌─────────────────────────────────────────────┐
# │ ProxyAdminOwner │
# │ 0x3d59999977e0896ee1f8783bb8251df16fb483e9 │
# └─────────────────────────────────────────────┘

##
# Validation file generation
##
.PHONY: gen-validation-cb
gen-validation-cb: validate-config deps-signer-tool
$(call GEN_VALIDATION,$(UPGRADE_SCRIPT_NAME),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) L1_PROXY_ADMIN=$(L1_PROXY_ADMIN) SYSTEM_CONFIG=$(SYSTEM_CONFIG))

.PHONY: gen-validation-sc
gen-validation-sc: validate-config deps-signer-tool
$(call GEN_VALIDATION,$(UPGRADE_SCRIPT_NAME),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) L1_PROXY_ADMIN=$(L1_PROXY_ADMIN) SYSTEM_CONFIG=$(SYSTEM_CONFIG))

##
# Approve
##
.PHONY: approve-cb
approve-cb: SCRIPT_NAME := $(UPGRADE_SCRIPT_NAME)
approve-cb:
$(call MULTISIG_APPROVE,$(CB_MULTISIG),$(SIGNATURES))

.PHONY: approve-sc
approve-sc: SCRIPT_NAME := $(UPGRADE_SCRIPT_NAME)
approve-sc:
$(call MULTISIG_APPROVE,$(BASE_SECURITY_COUNCIL),$(SIGNATURES))

##
# Execute
##
.PHONY: execute
execute: SCRIPT_NAME := $(UPGRADE_SCRIPT_NAME)
execute:
$(call MULTISIG_EXECUTE,0x)
49 changes: 49 additions & 0 deletions zeronet/2026-05-22-increase-max-gas-limit/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Upgrade SystemConfig to Increase Maximum Gas Limit

Status: [EXECUTED](https://hoodi.etherscan.io/tx/0xc4e9606618cb2ca302f2c7efa1adc6fd7e3ae708817774fcb0480d626b830a88)

[Deploy SystemConfig impl](https://hoodi.etherscan.io/tx/0xc619806dad6b6a7b1c88135ac82a4d4dd31c8bee00cf6abc8a4d38ca500ebe61) ([artifact](./records/DeploySystemConfig.s.sol/560048/run-1779471994.json))
[Execution](https://hoodi.etherscan.io/tx/0xc4e9606618cb2ca302f2c7efa1adc6fd7e3ae708817774fcb0480d626b830a88) ([artifact](./records/UpgradeSystemConfig.s.sol/560048/run-1779719150.json))

## Description

This task upgrades the SystemConfig implementation on Zeronet to increase `MAX_GAS_LIMIT` from 500,000,000 (500M) to 2,000,000,000 (2B).

The new max of 2B provides headroom for future gas limit increases.

This task contains two scripts:
1. `DeploySystemConfigScript` -- Deploys a new SystemConfig implementation with the patched `MAX_GAS_LIMIT`. This is run by the facilitator before signing.
2. `UpgradeSystemConfigScript` -- Upgrades the SystemConfig proxy to point to the new implementation via the ProxyAdmin owner Safe.

No storage changes occur since only the `MAX_GAS_LIMIT` constant and `version()` string are modified.

**NOTE:** Signers should not need to run the `DeploySystemConfigScript` script as it will be run beforehand by the facilitator. The rest of this document focuses on using the `UpgradeSystemConfigScript` script.

## Procedure

### Sign task

#### 1. Update repo

```bash
cd contract-deployments
git pull
```

#### 2. Run signing tool

```bash
cd contract-deployments
make sign-task
```

#### 3. Open the UI at [http://localhost:3000](http://localhost:3000)

- Select the correct signer role from the list of available users to sign.
- After completion, close the signer tool with `Ctrl + C`.

#### 4. Send signature to facilitator

Copy the signature output and send it to the designated facilitator via the agreed communication channel.

For facilitator instructions, see `FACILITATOR.md`.
3 changes: 3 additions & 0 deletions zeronet/2026-05-22-increase-max-gas-limit/addresses.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"systemConfig": "0x652c5049a877Ac02BB963546B3d5ea2004f3AbE2"
}
25 changes: 25 additions & 0 deletions zeronet/2026-05-22-increase-max-gas-limit/foundry.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[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"
evm_version = "shanghai"
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/contracts/',
'@solady/=lib/solady/src/',
'@lib-keccak/=lib/lib-keccak/contracts/lib/',
]

[lint]
lint_on_build = false

# See more config options https://github.com/foundry-rs/foundry/tree/master/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
diff --git a/src/L1/SystemConfig.sol b/src/L1/SystemConfig.sol
index 1234567..abcdefg 100644
--- a/src/L1/SystemConfig.sol
+++ b/src/L1/SystemConfig.sol
@@ -97,7 +97,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver, IOptimismPortalInterop {
/// @notice The maximum gas limit that can be set for L2 blocks. This limit is used to enforce that the blocks
/// on L2 are not too large to process and prove. Over time, this value can be increased as various
/// optimizations and improvements are made to the system at large.
- uint64 internal constant MAX_GAS_LIMIT = 500_000_000;
+ uint64 internal constant MAX_GAS_LIMIT = 2_000_000_000;

/// @notice Fixed L2 gas overhead. Used as part of the L2 fee calculation.
/// Deprecated since the Ecotone network upgrade
@@ -172,9 +172,9 @@ contract SystemConfig is OwnableUpgradeable, ISemver, IOptimismPortalInterop {
error SystemConfig_InvalidFeatureState();

/// @notice Semantic version.
- /// @custom:semver 3.13.2
+ /// @custom:semver 3.13.2+max-gas-limit-2000M
function version() public pure virtual returns (string memory) {
- return "3.13.2";
+ return "3.13.2+max-gas-limit-2000M";
}

/// @notice Constructs the SystemConfig contract.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"transactions": [
{
"hash": "0x935dcdf277424427d4b3b2ea42d7de602a21a2ed4eec38c736424020b3e91312",
"transactionType": "CALL",
"contractName": null,
"contractAddress": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba",
"function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)",
"arguments": [
"0x3d59999977e0896ee1f8783bB8251DF16fb483E9",
"0",
"0xd4d9bdcd15740867bc374df8c2c72a6435810c5a6d8d890118d35de63a4a1578feb2b32b",
"0",
"0",
"0",
"0",
"0x0000000000000000000000000000000000000000",
"0x0000000000000000000000000000000000000000",
"0x31da2648114a6957ee56dec23c974ab14c37af861f50ec84b5e7de3cdd367e2f35caee8cecb8548541aa332089f2de231af0e6c68fbde8ac3774b95b7313327c1b"
],
"transaction": {
"from": "0xe167153964d4ba0819e1ad56172f3329cd5a0263",
"to": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba",
"gas": "0x1b752",
"value": "0x0",
"input": "0x6a7612020000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000024d4d9bdcd15740867bc374df8c2c72a6435810c5a6d8d890118d35de63a4a1578feb2b32b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004131da2648114a6957ee56dec23c974ab14c37af861f50ec84b5e7de3cdd367e2f35caee8cecb8548541aa332089f2de231af0e6c68fbde8ac3774b95b7313327c1b00000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x3",
"chainId": "0x88bb0"
},
"additionalContracts": [],
"isFixedGasLimit": false
}
],
"receipts": [
{
"status": "0x1",
"cumulativeGasUsed": "0x3330ffb",
"logs": [
{
"address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9",
"topics": [
"0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c",
"0x15740867bc374df8c2c72a6435810c5a6d8d890118d35de63a4a1578feb2b32b",
"0x000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba"
],
"data": "0x",
"blockHash": "0x7eef18108047422c07854a000f653b0f37e360e05da44919a205776bca451420",
"blockNumber": "0x2c0aca",
"blockTimestamp": "0x6a145b5c",
"transactionHash": "0x935dcdf277424427d4b3b2ea42d7de602a21a2ed4eec38c736424020b3e91312",
"transactionIndex": "0x2c",
"logIndex": "0x1f",
"removed": false
},
{
"address": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba",
"topics": [
"0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e",
"0xb955d5c984611776917bf25b7caacdef2620ad77d30e90171ff3ece995295a72"
],
"data": "0x0000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x7eef18108047422c07854a000f653b0f37e360e05da44919a205776bca451420",
"blockNumber": "0x2c0aca",
"blockTimestamp": "0x6a145b5c",
"transactionHash": "0x935dcdf277424427d4b3b2ea42d7de602a21a2ed4eec38c736424020b3e91312",
"transactionIndex": "0x2c",
"logIndex": "0x20",
"removed": false
}
],
"logsBloom": "0x00000000400000000000000000000000000000000000000000000000040000000001000000000000000000000000000000040000000000100000000002000000010000000000000000000000000000000000000800000000000000001000000008000000400000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000004000000200000000080000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000020000000000",
"type": "0x2",
"transactionHash": "0x935dcdf277424427d4b3b2ea42d7de602a21a2ed4eec38c736424020b3e91312",
"transactionIndex": "0x2c",
"blockHash": "0x7eef18108047422c07854a000f653b0f37e360e05da44919a205776bca451420",
"blockNumber": "0x2c0aca",
"gasUsed": "0x13e10",
"effectiveGasPrice": "0x393f476d",
"from": "0xe167153964d4ba0819e1ad56172f3329cd5a0263",
"to": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba",
"contractAddress": null
}
],
"libraries": [],
"pending": [],
"returns": {},
"timestamp": 1779719011,
"chain": 560048,
"commit": "087ea90"
}
Loading
Loading