Skip to content
Merged
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
17 changes: 17 additions & 0 deletions mainnet/2025-12-04-set-jovian-parameters/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Base Contracts commit
BASE_CONTRACTS_COMMIT=51788f920e368e72c63cef24a5e1ea0f6562d9a5

# Optimism commit (op-contracts/v5.0.0)
OP_COMMIT=d09c836f818c73ae139f60b717654c4e53712743

# Contract addresses
SYSTEM_CONFIG=0x73a79Fab69143498Ed3712e519A88a918e1f4072
OWNER_SAFE=0x14536667Cd30e52C0b458BaACcB9faDA7046E056

# Jovian parameters
DA_FOOTPRINT_GAS_SCALAR=312
MIN_BASE_FEE=200000

SENDER=0x1841CB3C2ce6870D0417844C817849da64E6e937

RECORD_STATE_DIFF=true
44 changes: 44 additions & 0 deletions mainnet/2025-12-04-set-jovian-parameters/FACILITATORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#### Execute the transaction

### 1. Update repo:

```bash
cd contract-deployments
git pull
cd mainnet/2025-12-04-set-jovian-parameters
make deps
```

### 2. Execute

1. Collect outputs from all participating signers.
1. Concatenate all signatures and export it as the `SIGNATURES`
environment variable, i.e. `export
SIGNATURES="[SIGNATURE1][SIGNATURE2]..."`.
1. Run the `make execute` command as described below to execute the transaction.

For example, if the quorum is 3 and you get the following outputs:

```shell
Data: 0xDEADBEEF
Signer: 0xC0FFEE01
Signature: AAAA
```

```shell
Data: 0xDEADBEEF
Signer: 0xC0FFEE02
Signature: BBBB
```

```shell
Data: 0xDEADBEEF
Signer: 0xC0FFEE03
Signature: CCCC
```

Execute the transaction:

```bash
SIGNATURES=AAAABBBBCCCC make execute
```
27 changes: 27 additions & 0 deletions mainnet/2025-12-04-set-jovian-parameters/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
include ../../Makefile
include ../../Multisig.mk
include ../.env
include .env

ifndef LEDGER_ACCOUNT
override LEDGER_ACCOUNT = 0
endif

SCRIPT_NAME = SetJovianParametersScript

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 $(RPC_URL) \
--workdir .. --forge-cmd 'forge script --rpc-url $(RPC_URL) \
$(SCRIPT_NAME) --sig "sign(address[])" [] --sender $(SENDER)' --out ../validations/base-signer.json;

.PHONY: execute
execute:
$(call MULTISIG_EXECUTE,$(SIGNATURES))
58 changes: 58 additions & 0 deletions mainnet/2025-12-04-set-jovian-parameters/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Set Jovian Parameters on Base Mainnet

Status: READY TO SIGN

## Description

This task sets the Jovian hardfork parameters on Base Mainnet's SystemConfig contract. The parameters being set are:

- `setDAFootprintGasScalar(312)` - Sets the data availability footprint gas scalar
- `setMinBaseFee(200000)` - Sets the minimum base fee

These parameters activate with the Jovian hardfork and affect data availability fee calculations and base fee management on the L2.

## Procedure

## 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.
After completion, the signer tool can be closed by using Ctrl + c

### 4. Send signature to facilitator
20 changes: 20 additions & 0 deletions mainnet/2025-12-04-set-jovian-parameters/foundry.toml
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import {Vm} from "forge-std/Vm.sol";
import {console} from "forge-std/console.sol";
import {Simulation} from "@base-contracts/script/universal/Simulation.sol";
import {IMulticall3} from "forge-std/interfaces/IMulticall3.sol";

import {MultisigScript} from "@base-contracts/script/universal/MultisigScript.sol";

interface ISystemConfig {
function daFootprintGasScalar() external view returns (uint16);
function minBaseFee() external view returns (uint64);
function setDAFootprintGasScalar(uint16 _daFootprintGasScalar) external;
function setMinBaseFee(uint64 _minBaseFee) external;
}

contract SetJovianParametersScript is MultisigScript {
address internal immutable OWNER_SAFE;
address internal immutable SYSTEM_CONFIG;

uint16 internal immutable DA_FOOTPRINT_GAS_SCALAR;
uint64 internal immutable MIN_BASE_FEE;

constructor() {
OWNER_SAFE = vm.envAddress("OWNER_SAFE");
SYSTEM_CONFIG = vm.envAddress("SYSTEM_CONFIG");
DA_FOOTPRINT_GAS_SCALAR = uint16(vm.envUint("DA_FOOTPRINT_GAS_SCALAR"));
MIN_BASE_FEE = uint64(vm.envUint("MIN_BASE_FEE"));
}

function setUp() external view {
// Log current values for reference
console.log("Current DA Footprint Gas Scalar:", ISystemConfig(SYSTEM_CONFIG).daFootprintGasScalar());
console.log("Current Min Base Fee:", ISystemConfig(SYSTEM_CONFIG).minBaseFee());
console.log("New DA Footprint Gas Scalar:", DA_FOOTPRINT_GAS_SCALAR);
console.log("New Min Base Fee:", MIN_BASE_FEE);
}

function _postCheck(Vm.AccountAccess[] memory, Simulation.Payload memory) internal view override {
vm.assertEq(
ISystemConfig(SYSTEM_CONFIG).daFootprintGasScalar(),
DA_FOOTPRINT_GAS_SCALAR,
"DA Footprint Gas Scalar mismatch"
);
vm.assertEq(ISystemConfig(SYSTEM_CONFIG).minBaseFee(), MIN_BASE_FEE, "Min Base Fee mismatch");
}

function _buildCalls() internal view override returns (IMulticall3.Call3Value[] memory) {
IMulticall3.Call3Value[] memory calls = new IMulticall3.Call3Value[](2);

calls[0] = IMulticall3.Call3Value({
target: SYSTEM_CONFIG,
allowFailure: false,
callData: abi.encodeCall(ISystemConfig.setDAFootprintGasScalar, (DA_FOOTPRINT_GAS_SCALAR)),
value: 0
});

calls[1] = IMulticall3.Call3Value({
target: SYSTEM_CONFIG,
allowFailure: false,
callData: abi.encodeCall(ISystemConfig.setMinBaseFee, (MIN_BASE_FEE)),
value: 0
});

return calls;
}

function _ownerSafe() internal view override returns (address) {
return OWNER_SAFE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"cmd": "forge script --rpc-url https://eth-mainnet.public.blastapi.io SetJovianParametersScript --sig sign(address[]) [] --sender 0x1841CB3C2ce6870D0417844C817849da64E6e937",
"ledgerId": 0,
"rpcUrl": "https://eth-mainnet.public.blastapi.io",
"expectedDomainAndMessageHashes": {
"address": "0x14536667Cd30e52C0b458BaACcB9faDA7046E056",
"domainHash": "0xf3474c66ee08325b410c3f442c878d01ec97dd55a415a307e9d7d2ea24336289",
"messageHash": "0xabbc13082dc0c978a0d67092bf4da43670451de5604d69434dc7f7ab594785b5"
},
"stateOverrides": [
{
"name": "Incident Safe - Mainnet",
"address": "0x14536667cd30e52c0b458baaccb9fada7046e056",
"overrides": [
{
"key": "0x0000000000000000000000000000000000000000000000000000000000000004",
"value": "0x0000000000000000000000000000000000000000000000000000000000000001",
"description": "Override the threshold to 1 so the transaction simulation can occur.",
"allowDifference": false
},
{
"key": "0xc3011018e301845703e8f147902e20fa435a206bf02aa8a392467aa139cf4049",
"value": "0x0000000000000000000000000000000000000000000000000000000000000001",
"description": "Simulates an approval from msg.sender in order for the task simulation to succeed.",
"allowDifference": false
}
]
}
],
"stateChanges": [
{
"name": "Incident Safe - Mainnet",
"address": "0x14536667cd30e52c0b458baaccb9fada7046e056",
"changes": [
{
"key": "0x0000000000000000000000000000000000000000000000000000000000000005",
"before": "0x0000000000000000000000000000000000000000000000000000000000000061",
"after": "0x0000000000000000000000000000000000000000000000000000000000000062",
"description": "Increments the nonce",
"allowDifference": false
}
]
},
{
"name": "System Config - Mainnet",
"address": "0x73a79fab69143498ed3712e519a88a918e1f4072",
"changes": [
{
"key": "0x000000000000000000000000000000000000000000000000000000000000006a",
"before": "0x0000000000000000000000000000000000000000000000000000000500000032",
"after": "0x0000000000000000000001380000000000000000000000000000000500000032",
"description": "Sets the DA Footprint Gas Scalar to 312 (0x0138)",
"allowDifference": false
},
{
"key": "0x000000000000000000000000000000000000000000000000000000000000006c",
"before": "0x00000000000000000000000095703e0982140d16f8eba6d158fccede42f04a4c",
"after": "0x000000000000000000030d4095703e0982140d16f8eba6d158fccede42f04a4c",
"description": "Sets the Min Base Fee to 200000 (0x030d40)",
"allowDifference": false
}
]
}
],
"balanceChanges": []
}