diff --git a/mainnet/2025-12-04-set-jovian-parameters/.env b/mainnet/2025-12-04-set-jovian-parameters/.env new file mode 100644 index 00000000..8dfcfafc --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/.env @@ -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 diff --git a/mainnet/2025-12-04-set-jovian-parameters/FACILITATORS.md b/mainnet/2025-12-04-set-jovian-parameters/FACILITATORS.md new file mode 100644 index 00000000..327dffca --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/FACILITATORS.md @@ -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 +``` diff --git a/mainnet/2025-12-04-set-jovian-parameters/Makefile b/mainnet/2025-12-04-set-jovian-parameters/Makefile new file mode 100644 index 00000000..c25f9322 --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/Makefile @@ -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)) diff --git a/mainnet/2025-12-04-set-jovian-parameters/README.md b/mainnet/2025-12-04-set-jovian-parameters/README.md new file mode 100644 index 00000000..128be5ef --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/README.md @@ -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 diff --git a/mainnet/2025-12-04-set-jovian-parameters/foundry.toml b/mainnet/2025-12-04-set-jovian-parameters/foundry.toml new file mode 100644 index 00000000..14499ab0 --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/foundry.toml @@ -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 diff --git a/mainnet/2025-12-04-set-jovian-parameters/script/SetJovianParameters.s.sol b/mainnet/2025-12-04-set-jovian-parameters/script/SetJovianParameters.s.sol new file mode 100644 index 00000000..21059cca --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/script/SetJovianParameters.s.sol @@ -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; + } +} diff --git a/mainnet/2025-12-04-set-jovian-parameters/validations/base-signer.json b/mainnet/2025-12-04-set-jovian-parameters/validations/base-signer.json new file mode 100644 index 00000000..a3e047c7 --- /dev/null +++ b/mainnet/2025-12-04-set-jovian-parameters/validations/base-signer.json @@ -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": [] +}