From 05df53fe70710fade8f24edd22e3a322492db905 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 29 Jul 2026 15:09:04 -0400 Subject: [PATCH 01/23] feat(CHAIN-4707): add Zeronet SystemConfig ownership transfer task Adds the Zeronet task that transfers SystemConfig ownership from the proxy admin owner Safe to the incident multisig, using the shared active/evm project and script/common/ownership/TransferSystemConfigOwnership.s.sol. Includes the task Makefile, per-network config, and generated validation files (skipTaskOriginValidation for Zeronet). Generated with Claude Code Co-Authored-By: Claude --- active/evm/Makefile | 49 ++++++++++ .../FACILITATOR.md | 59 +++++++++++ .../config/zeronet/.env | 8 ++ .../config/zeronet/README.md | 25 +++++ .../config/zeronet/network.env | 9 ++ .../zeronet/validations/coinbase-signer.json | 97 +++++++++++++++++++ .../validations/security-council-signer.json | 91 +++++++++++++++++ 7 files changed, 338 insertions(+) create mode 100644 active/evm/Makefile create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json diff --git a/active/evm/Makefile b/active/evm/Makefile new file mode 100644 index 00000000..7426a81e --- /dev/null +++ b/active/evm/Makefile @@ -0,0 +1,49 @@ +include ../../Makefile +include ../../Multisig.mk + +TASK_NETWORK ?= zeronet +TASK_ID ?= 2026-07-10-transfer-systemconfig-ownership +TASK_DIR = tasks/$(TASK_ID) + +include $(TASK_DIR)/config/$(TASK_NETWORK)/network.env +include $(TASK_DIR)/config/$(TASK_NETWORK)/.env + +export BASE_CONTRACTS_COMMIT +export PROXY_ADMIN_OWNER +export INCIDENT_MULTISIG +export SYSTEM_CONFIG + +SIGNER_TOOL_PATH = ../../signer-tool +VALIDATIONS_DIR = $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK)/validations +# Task-origin signatures are stored OUTSIDE the config directory, at +# tasks//signatures//. The signer tool signs over the +# config/ tarball (TASK_ORIGIN_DIR); keeping signatures out of that +# directory ensures generating them does not change the signed payload. +TASK_ORIGIN_DIR = $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK) +SIGNATURE_DIR = $(CURDIR)/$(TASK_DIR)/signatures/$(TASK_NETWORK) +RPC_URL = $(L1_RPC_URL) + +SCRIPT_NAME = script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership +CB_SENDER = $(shell $(MISE_EXEC) cast call $(CB_MULTISIG) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) +SC_SENDER = $(shell $(MISE_EXEC) cast call $(BASE_SECURITY_COUNCIL) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) +TRANSFER_OWNERSHIP_ENV = PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) INCIDENT_MULTISIG=$(INCIDENT_MULTISIG) SYSTEM_CONFIG=$(SYSTEM_CONFIG) + +.PHONY: gen-validation-cb +gen-validation-cb: deps-signer-tool + $(call GEN_VALIDATION,$(SCRIPT_NAME),$(CB_MULTISIG),$(CB_SENDER),coinbase-signer.json,$(TRANSFER_OWNERSHIP_ENV)) + +.PHONY: gen-validation-sc +gen-validation-sc: deps-signer-tool + $(call GEN_VALIDATION,$(SCRIPT_NAME),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,$(TRANSFER_OWNERSHIP_ENV)) + +.PHONY: approve-cb +approve-cb: + $(call MULTISIG_APPROVE,$(CB_MULTISIG),$(SIGNATURES)) + +.PHONY: approve-sc +approve-sc: + $(call MULTISIG_APPROVE,$(BASE_SECURITY_COUNCIL),$(SIGNATURES)) + +.PHONY: execute +execute: + $(call MULTISIG_EXECUTE,0x) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md new file mode 100644 index 00000000..25decacd --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -0,0 +1,59 @@ +# Facilitator Guide + +Guide for facilitators managing the Zeronet `SystemConfig` owner transfer. + +## 1. Generate validation files + +Run this after any change to the task config or script: + +```bash +cd contract-deployments/active/evm +make deps +make gen-validation-cb +make gen-validation-sc +``` + +This produces: + +- `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json` +- `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json` + +The `--sender` in each `cmd` is derived from the first owner of the respective +Safe (`CB_MULTISIG` for Coinbase, `BASE_SECURITY_COUNCIL` for Security Council). + +Because this is a Zeronet task, keep this field at the JSON root in both +validation files (it is committed with the generated files): + +```json +"skipTaskOriginValidation": true +``` + +## 2. Collect signatures + +Ask signers to run `make sign-task` from the repository root and select +**Transfer Systemconfig Ownership** on the `zeronet` network. + +## 3. Approve and execute + +From `active/evm`, execute the Coinbase and Security Council approvals: + +```bash +SIGNATURES=AAABBBCCC make approve-cb +SIGNATURES=AAABBBCCC make approve-sc +make execute +``` + +## 4. Verify onchain + +```bash +cast call 0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 "owner()(address)" \ + --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net +``` + +Expected result: + +```text +0x856611ed7e07d83243b15e93f6321f2df6865852 +``` + +Then update the task status to `EXECUTED` with the transaction link and commit the execution records. diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env new file mode 100644 index 00000000..fab3a837 --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env @@ -0,0 +1,8 @@ +# https://github.com/base/contracts/tree/v8.2.1 +BASE_CONTRACTS_COMMIT=f3a33c8577c8ca1e037b45e822bfcb75f099270b + +PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 +INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 +SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 + +RECORD_STATE_DIFF=true diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md new file mode 100644 index 00000000..8d0bcd8f --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md @@ -0,0 +1,25 @@ +# Transfer Zeronet `SystemConfig` Owner + +Status: READY TO SIGN + +## Description + +Transfer the Zeronet `SystemConfig` owner from the proxy admin owner Safe to the incident multisig. + +## Addresses + +| Role | Address | +| -- | -- | +| `SystemConfig` | `0x0a111C7980152bDe41D71f48e2E1d8184f5f6187` | +| Current owner | `0x3d59999977e0896ee1f8783bB8251DF16fb483E9` | +| New owner | `0x856611ed7e07d83243b15e93f6321f2df6865852` | + +## Sign + +From the repository root: + +```bash +make sign-task +``` + +Open [http://localhost:3000](http://localhost:3000), select this Zeronet task, sign, and send the signature to the facilitator. diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env new file mode 100644 index 00000000..5561e528 --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env @@ -0,0 +1,9 @@ +NETWORK=zeronet +L1_RPC_URL=https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net +L2_RPC_URL=https://base-zeronet-reth-mempool-k8s-donotuse.cbhq.net:8545 +L1_CHAIN_ID=560048 +L2_CHAIN_ID=763360 +LEDGER_ACCOUNT=1 + +BASE_SECURITY_COUNCIL=0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA +CB_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json new file mode 100644 index 00000000..b26ed00f --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json @@ -0,0 +1,97 @@ +{ + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "ledgerId": 1, + "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", + "expectedDomainAndMessageHashes": { + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "domainHash": "0xc88eae2baaa4c8513a3d87913666de9463f106158aaf8be5cd31588215ccd5c4", + "messageHash": "0xbfa4bac86f8b9687cf69f94cb1777c94b5cd0d47299ce2c2faf712e710a20430" + }, + "stateOverrides": [ + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + } + ] + }, + { + "name": "CB Signer Safe - Zeronet", + "address": "0x856611eD7E07D83243b15E93f6321f2df6865852", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + }, + { + "key": "0x959d565b3f930eb27afc5160e96a82f7b009868594760118dfcd5423c8223a5c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed.", + "allowDifference": false + } + ] + } + ], + "stateChanges": [ + { + "name": "<>", + "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000033", + "before": "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", + "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", + "description": "<>", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000014", + "after": "0x0000000000000000000000000000000000000000000000000000000000000015", + "description": "Increments the nonce", + "allowDifference": false + }, + { + "key": "0x997c3974baa1d5a4276493e3da30992ec4683d57101ee29ac1c5a410892aa5f3", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "<>", + "allowDifference": false + } + ] + }, + { + "name": "CB Signer Safe - Zeronet", + "address": "0x856611eD7E07D83243b15E93f6321f2df6865852", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x000000000000000000000000000000000000000000000000000000000000001a", + "after": "0x000000000000000000000000000000000000000000000000000000000000001b", + "description": "Increments the nonce", + "allowDifference": false + } + ] + } + ], + "balanceChanges": [], + "taskOriginConfig": { + "taskCreator": { + "commonName": "thanh.trinh@coinbase.com" + } + }, + "skipTaskOriginValidation": true +} diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json new file mode 100644 index 00000000..a246b0e2 --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json @@ -0,0 +1,91 @@ +{ + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "ledgerId": 1, + "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", + "expectedDomainAndMessageHashes": { + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "domainHash": "0x1e2faea9157fbff31d9297595a71e2dedfeb1184207c07bb6bd64f807332a525", + "messageHash": "0xae6685da5cc0a954d8dc78cffc524d14a6e664bd5b300ba55287372d80c25fad" + }, + "stateOverrides": [ + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur.", + "allowDifference": false + } + ] + }, + { + "name": "Security Council Safe - Zeronet", + "address": "0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA", + "overrides": [ + { + "key": "0xd83b46009449ab7b1148bc60c09e0301c8656492806daae6ba4b607a0ff82284", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed.", + "allowDifference": false + } + ] + } + ], + "stateChanges": [ + { + "name": "<>", + "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000033", + "before": "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", + "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", + "description": "<>", + "allowDifference": false + } + ] + }, + { + "name": "Proxy Admin Owner - Zeronet", + "address": "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000014", + "after": "0x0000000000000000000000000000000000000000000000000000000000000015", + "description": "Increments the nonce", + "allowDifference": false + }, + { + "key": "0x0357b2352703f016eba49e117877cc0170c3c53d22e138fd6501caa01b912570", + "before": "0x0000000000000000000000000000000000000000000000000000000000000000", + "after": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "<>", + "allowDifference": false + } + ] + }, + { + "name": "Security Council Safe - Zeronet", + "address": "0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000017", + "after": "0x0000000000000000000000000000000000000000000000000000000000000018", + "description": "Increments the nonce", + "allowDifference": false + } + ] + } + ], + "balanceChanges": [], + "taskOriginConfig": { + "taskCreator": { + "commonName": "thanh.trinh@coinbase.com" + } + }, + "skipTaskOriginValidation": true +} From bf84de6b10050a15acd5b3309cd24f60b6f5e64b Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Mon, 3 Aug 2026 16:33:36 -0500 Subject: [PATCH 02/23] chore: adapt ownership task to archived run layout Co-authored-by: Codex --- active/evm/Makefile | 6 ++++-- .../FACILITATOR.md | 2 +- .../validations/{coinbase-signer.json => base-signer.json} | 2 +- .../config/zeronet/validations/security-council-signer.json | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) rename active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/{coinbase-signer.json => base-signer.json} (91%) diff --git a/active/evm/Makefile b/active/evm/Makefile index 7426a81e..1b322048 100644 --- a/active/evm/Makefile +++ b/active/evm/Makefile @@ -12,6 +12,8 @@ export BASE_CONTRACTS_COMMIT export PROXY_ADMIN_OWNER export INCIDENT_MULTISIG export SYSTEM_CONFIG +export RECORD_STATE_DIFF +export FOUNDRY_BROADCAST = $(TASK_DIR) SIGNER_TOOL_PATH = ../../signer-tool VALIDATIONS_DIR = $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK)/validations @@ -26,11 +28,11 @@ RPC_URL = $(L1_RPC_URL) SCRIPT_NAME = script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership CB_SENDER = $(shell $(MISE_EXEC) cast call $(CB_MULTISIG) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) SC_SENDER = $(shell $(MISE_EXEC) cast call $(BASE_SECURITY_COUNCIL) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) -TRANSFER_OWNERSHIP_ENV = PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) INCIDENT_MULTISIG=$(INCIDENT_MULTISIG) SYSTEM_CONFIG=$(SYSTEM_CONFIG) +TRANSFER_OWNERSHIP_ENV = PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) INCIDENT_MULTISIG=$(INCIDENT_MULTISIG) SYSTEM_CONFIG=$(SYSTEM_CONFIG) RECORD_STATE_DIFF=$(RECORD_STATE_DIFF) .PHONY: gen-validation-cb gen-validation-cb: deps-signer-tool - $(call GEN_VALIDATION,$(SCRIPT_NAME),$(CB_MULTISIG),$(CB_SENDER),coinbase-signer.json,$(TRANSFER_OWNERSHIP_ENV)) + $(call GEN_VALIDATION,$(SCRIPT_NAME),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,$(TRANSFER_OWNERSHIP_ENV)) .PHONY: gen-validation-sc gen-validation-sc: deps-signer-tool diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index 25decacd..49a5d086 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -15,7 +15,7 @@ make gen-validation-sc This produces: -- `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json` +- `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json` - `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json` The `--sender` in each `cmd` is derived from the first owner of the respective diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json similarity index 91% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json rename to active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json index b26ed00f..160eff8c 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/coinbase-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json @@ -1,5 +1,5 @@ { - "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", "ledgerId": 1, "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", "expectedDomainAndMessageHashes": { diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json index a246b0e2..6873f904 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json @@ -1,5 +1,5 @@ { - "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", "ledgerId": 1, "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", "expectedDomainAndMessageHashes": { From 06b091d944d8487539ec8a3a3229c2a267f66ef2 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 07:22:26 -0500 Subject: [PATCH 03/23] docs: align ownership task with shared dispatcher Co-authored-by: Codex --- .../FACILITATOR.md | 4 +++- .../config/zeronet/validations/base-signer.json | 6 +++--- .../config/zeronet/validations/security-council-signer.json | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index 49a5d086..25ab5f8f 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -8,6 +8,7 @@ Run this after any change to the task config or script: ```bash cd contract-deployments/active/evm +export TASK_ID=2026-07-10-transfer-systemconfig-ownership make deps make gen-validation-cb make gen-validation-sc @@ -31,13 +32,14 @@ validation files (it is committed with the generated files): ## 2. Collect signatures Ask signers to run `make sign-task` from the repository root and select -**Transfer Systemconfig Ownership** on the `zeronet` network. +**Transfer SystemConfig Ownership** on the `zeronet` network. ## 3. Approve and execute From `active/evm`, execute the Coinbase and Security Council approvals: ```bash +export TASK_ID=2026-07-10-transfer-systemconfig-ownership SIGNATURES=AAABBBCCC make approve-cb SIGNATURES=AAABBBCCC make approve-sc make execute diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json index 160eff8c..117079ca 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json @@ -41,14 +41,14 @@ ], "stateChanges": [ { - "name": "<>", + "name": "SystemConfig - Zeronet", "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", "changes": [ { "key": "0x0000000000000000000000000000000000000000000000000000000000000033", "before": "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", - "description": "<>", + "description": "Transfers ownership to the incident multisig", "allowDifference": false } ] @@ -68,7 +68,7 @@ "key": "0x997c3974baa1d5a4276493e3da30992ec4683d57101ee29ac1c5a410892aa5f3", "before": "0x0000000000000000000000000000000000000000000000000000000000000000", "after": "0x0000000000000000000000000000000000000000000000000000000000000001", - "description": "<>", + "description": "Records the nested Safe approval", "allowDifference": false } ] diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json index 6873f904..031cd45a 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json @@ -35,14 +35,14 @@ ], "stateChanges": [ { - "name": "<>", + "name": "SystemConfig - Zeronet", "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", "changes": [ { "key": "0x0000000000000000000000000000000000000000000000000000000000000033", "before": "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", - "description": "<>", + "description": "Transfers ownership to the incident multisig", "allowDifference": false } ] @@ -62,7 +62,7 @@ "key": "0x0357b2352703f016eba49e117877cc0170c3c53d22e138fd6501caa01b912570", "before": "0x0000000000000000000000000000000000000000000000000000000000000000", "after": "0x0000000000000000000000000000000000000000000000000000000000000001", - "description": "<>", + "description": "Records the nested Safe approval", "allowDifference": false } ] From 685804d58aa5837a73003cc639a43cf79fa6479c Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 07:29:22 -0500 Subject: [PATCH 04/23] docs: keep ownership task commands self-contained Co-authored-by: Codex --- .../2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index 25ab5f8f..05726239 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -8,7 +8,6 @@ Run this after any change to the task config or script: ```bash cd contract-deployments/active/evm -export TASK_ID=2026-07-10-transfer-systemconfig-ownership make deps make gen-validation-cb make gen-validation-sc @@ -39,7 +38,6 @@ Ask signers to run `make sign-task` from the repository root and select From `active/evm`, execute the Coinbase and Security Council approvals: ```bash -export TASK_ID=2026-07-10-transfer-systemconfig-ownership SIGNATURES=AAABBBCCC make approve-cb SIGNATURES=AAABBBCCC make approve-sc make execute From 32f41bfdf1e0c5d5121f76672056e7ce0fcb7a13 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 09:24:35 -0500 Subject: [PATCH 05/23] refactor: use global Zeronet configuration Co-authored-by: Codex --- active/evm/Makefile | 2 +- .../config/zeronet/.env | 4 ---- .../config/zeronet/network.env | 9 --------- .../config/zeronet/validations/base-signer.json | 2 +- .../zeronet/validations/security-council-signer.json | 2 +- 5 files changed, 3 insertions(+), 16 deletions(-) delete mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env diff --git a/active/evm/Makefile b/active/evm/Makefile index 1b322048..5d057526 100644 --- a/active/evm/Makefile +++ b/active/evm/Makefile @@ -5,7 +5,7 @@ TASK_NETWORK ?= zeronet TASK_ID ?= 2026-07-10-transfer-systemconfig-ownership TASK_DIR = tasks/$(TASK_ID) -include $(TASK_DIR)/config/$(TASK_NETWORK)/network.env +include $(REPO_ROOT)/config/$(TASK_NETWORK).env include $(TASK_DIR)/config/$(TASK_NETWORK)/.env export BASE_CONTRACTS_COMMIT diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env index fab3a837..bee1511d 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env @@ -1,8 +1,4 @@ # https://github.com/base/contracts/tree/v8.2.1 BASE_CONTRACTS_COMMIT=f3a33c8577c8ca1e037b45e822bfcb75f099270b -PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 -INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 -SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 - RECORD_STATE_DIFF=true diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env deleted file mode 100644 index 5561e528..00000000 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/network.env +++ /dev/null @@ -1,9 +0,0 @@ -NETWORK=zeronet -L1_RPC_URL=https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net -L2_RPC_URL=https://base-zeronet-reth-mempool-k8s-donotuse.cbhq.net:8545 -L1_CHAIN_ID=560048 -L2_CHAIN_ID=763360 -LEDGER_ACCOUNT=1 - -BASE_SECURITY_COUNCIL=0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA -CB_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json index 117079ca..b4c45c92 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json @@ -1,5 +1,5 @@ { - "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", "ledgerId": 1, "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", "expectedDomainAndMessageHashes": { diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json index 031cd45a..b1bc4fb8 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json @@ -1,5 +1,5 @@ { - "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bB8251DF16fb483E9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", "ledgerId": 1, "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", "expectedDomainAndMessageHashes": { From f657d9ba5e91754c0fb96f3112b99ddabcd70821 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 14:00:27 -0500 Subject: [PATCH 06/23] refactor: separate signer deps from task operations Co-authored-by: Codex --- active/evm/Makefile | 53 ++----------------- .../FACILITATOR.md | 16 +++--- .../Makefile | 45 ++++++++++++++++ .../config/zeronet/.env | 2 - .../zeronet/validations/base-signer.json | 7 +-- .../validations/security-council-signer.json | 7 +-- 6 files changed, 59 insertions(+), 71 deletions(-) create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile diff --git a/active/evm/Makefile b/active/evm/Makefile index 5d057526..fd97d1c9 100644 --- a/active/evm/Makefile +++ b/active/evm/Makefile @@ -1,51 +1,4 @@ -include ../../Makefile -include ../../Multisig.mk - -TASK_NETWORK ?= zeronet -TASK_ID ?= 2026-07-10-transfer-systemconfig-ownership -TASK_DIR = tasks/$(TASK_ID) - -include $(REPO_ROOT)/config/$(TASK_NETWORK).env -include $(TASK_DIR)/config/$(TASK_NETWORK)/.env - -export BASE_CONTRACTS_COMMIT -export PROXY_ADMIN_OWNER -export INCIDENT_MULTISIG -export SYSTEM_CONFIG -export RECORD_STATE_DIFF -export FOUNDRY_BROADCAST = $(TASK_DIR) - -SIGNER_TOOL_PATH = ../../signer-tool -VALIDATIONS_DIR = $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK)/validations -# Task-origin signatures are stored OUTSIDE the config directory, at -# tasks//signatures//. The signer tool signs over the -# config/ tarball (TASK_ORIGIN_DIR); keeping signatures out of that -# directory ensures generating them does not change the signed payload. -TASK_ORIGIN_DIR = $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK) -SIGNATURE_DIR = $(CURDIR)/$(TASK_DIR)/signatures/$(TASK_NETWORK) -RPC_URL = $(L1_RPC_URL) - -SCRIPT_NAME = script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership -CB_SENDER = $(shell $(MISE_EXEC) cast call $(CB_MULTISIG) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) -SC_SENDER = $(shell $(MISE_EXEC) cast call $(BASE_SECURITY_COUNCIL) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) -TRANSFER_OWNERSHIP_ENV = PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) INCIDENT_MULTISIG=$(INCIDENT_MULTISIG) SYSTEM_CONFIG=$(SYSTEM_CONFIG) RECORD_STATE_DIFF=$(RECORD_STATE_DIFF) +# The signer tool runs `make deps` from active/evm. +BASE_CONTRACTS_COMMIT ?= f3a33c8577c8ca1e037b45e822bfcb75f099270b -.PHONY: gen-validation-cb -gen-validation-cb: deps-signer-tool - $(call GEN_VALIDATION,$(SCRIPT_NAME),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,$(TRANSFER_OWNERSHIP_ENV)) - -.PHONY: gen-validation-sc -gen-validation-sc: deps-signer-tool - $(call GEN_VALIDATION,$(SCRIPT_NAME),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,$(TRANSFER_OWNERSHIP_ENV)) - -.PHONY: approve-cb -approve-cb: - $(call MULTISIG_APPROVE,$(CB_MULTISIG),$(SIGNATURES)) - -.PHONY: approve-sc -approve-sc: - $(call MULTISIG_APPROVE,$(BASE_SECURITY_COUNCIL),$(SIGNATURES)) - -.PHONY: execute -execute: - $(call MULTISIG_EXECUTE,0x) +include ../../Makefile diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index 05726239..d9f8c466 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -8,9 +8,10 @@ Run this after any change to the task config or script: ```bash cd contract-deployments/active/evm +TASK_MAKEFILE=tasks/2026-07-10-transfer-systemconfig-ownership/Makefile make deps -make gen-validation-cb -make gen-validation-sc +make -f "$TASK_MAKEFILE" gen-validation-cb +make -f "$TASK_MAKEFILE" gen-validation-sc ``` This produces: @@ -21,8 +22,8 @@ This produces: The `--sender` in each `cmd` is derived from the first owner of the respective Safe (`CB_MULTISIG` for Coinbase, `BASE_SECURITY_COUNCIL` for Security Council). -Because this is a Zeronet task, keep this field at the JSON root in both -validation files (it is committed with the generated files): +Because this is a Zeronet task, remove the generated `taskOriginConfig` and add +this field at the JSON root in both validation files: ```json "skipTaskOriginValidation": true @@ -38,9 +39,10 @@ Ask signers to run `make sign-task` from the repository root and select From `active/evm`, execute the Coinbase and Security Council approvals: ```bash -SIGNATURES=AAABBBCCC make approve-cb -SIGNATURES=AAABBBCCC make approve-sc -make execute +TASK_MAKEFILE=tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +SIGNATURES=AAABBBCCC make -f "$TASK_MAKEFILE" approve-cb +SIGNATURES=AAABBBCCC make -f "$TASK_MAKEFILE" approve-sc +make -f "$TASK_MAKEFILE" execute ``` ## 4. Verify onchain diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile new file mode 100644 index 00000000..a600d314 --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -0,0 +1,45 @@ +include ../../Makefile +include ../../Multisig.mk + +TASK_NETWORK ?= zeronet +TASK_DIR := tasks/2026-07-10-transfer-systemconfig-ownership + +include $(REPO_ROOT)/config/$(TASK_NETWORK).env +include $(TASK_DIR)/config/$(TASK_NETWORK)/.env + +export BASE_CONTRACTS_COMMIT +export PROXY_ADMIN_OWNER +export INCIDENT_MULTISIG +export SYSTEM_CONFIG +export FOUNDRY_BROADCAST = $(TASK_DIR) + +SIGNER_TOOL_PATH := ../../signer-tool +VALIDATIONS_DIR := $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK)/validations +TASK_ORIGIN_DIR := $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK) +SIGNATURE_DIR := $(CURDIR)/$(TASK_DIR)/signatures/$(TASK_NETWORK) +RPC_URL := $(L1_RPC_URL) + +SCRIPT_NAME := script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership +CB_SENDER = $(shell $(MISE_EXEC) cast call $(CB_MULTISIG) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) +SC_SENDER = $(shell $(MISE_EXEC) cast call $(BASE_SECURITY_COUNCIL) "getOwners()(address[])" --rpc-url $(L1_RPC_URL) | tr -d '[]' | cut -d',' -f1) +TRANSFER_OWNERSHIP_ENV = PROXY_ADMIN_OWNER=$(PROXY_ADMIN_OWNER) INCIDENT_MULTISIG=$(INCIDENT_MULTISIG) SYSTEM_CONFIG=$(SYSTEM_CONFIG) + +.PHONY: gen-validation-cb +gen-validation-cb: deps-signer-tool + $(call GEN_VALIDATION,$(SCRIPT_NAME),$(CB_MULTISIG),$(CB_SENDER),base-signer.json,$(TRANSFER_OWNERSHIP_ENV)) + +.PHONY: gen-validation-sc +gen-validation-sc: deps-signer-tool + $(call GEN_VALIDATION,$(SCRIPT_NAME),$(BASE_SECURITY_COUNCIL),$(SC_SENDER),security-council-signer.json,$(TRANSFER_OWNERSHIP_ENV)) + +.PHONY: approve-cb +approve-cb: + $(call MULTISIG_APPROVE,$(CB_MULTISIG),$(SIGNATURES)) + +.PHONY: approve-sc +approve-sc: + $(call MULTISIG_APPROVE,$(BASE_SECURITY_COUNCIL),$(SIGNATURES)) + +.PHONY: execute +execute: + $(call MULTISIG_EXECUTE,0x) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env index bee1511d..6c2843e4 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env @@ -1,4 +1,2 @@ # https://github.com/base/contracts/tree/v8.2.1 BASE_CONTRACTS_COMMIT=f3a33c8577c8ca1e037b45e822bfcb75f099270b - -RECORD_STATE_DIFF=true diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json index b4c45c92..a654f3dc 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json @@ -1,5 +1,5 @@ { - "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0x856611ed7e07d83243b15e93f6321f2df6865852] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", "ledgerId": 1, "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", "expectedDomainAndMessageHashes": { @@ -88,10 +88,5 @@ } ], "balanceChanges": [], - "taskOriginConfig": { - "taskCreator": { - "commonName": "thanh.trinh@coinbase.com" - } - }, "skipTaskOriginValidation": true } diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json index b1bc4fb8..78145773 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json @@ -1,5 +1,5 @@ { - "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 RECORD_STATE_DIFF=true mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", + "cmd": "PROXY_ADMIN_OWNER=0x3d59999977e0896ee1f8783bb8251df16fb483e9 INCIDENT_MULTISIG=0x856611ed7e07d83243b15e93f6321f2df6865852 SYSTEM_CONFIG=0x0a111c7980152bde41d71f48e2e1d8184f5f6187 mise exec -- forge script --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership --sig sign(address[]) [0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA] --sender 0x2c1475476B586d66a85bC65A5aB396BBbAa4f3aD", "ledgerId": 1, "rpcUrl": "https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net", "expectedDomainAndMessageHashes": { @@ -82,10 +82,5 @@ } ], "balanceChanges": [], - "taskOriginConfig": { - "taskCreator": { - "commonName": "thanh.trinh@coinbase.com" - } - }, "skipTaskOriginValidation": true } From 603d0107720f801d55b16cd00bf0392c16a74614 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 14:36:27 -0500 Subject: [PATCH 07/23] refactor: install active evm deps from root Co-authored-by: Codex --- Makefile | 9 ++++++++- active/evm/Makefile | 4 ---- .../FACILITATOR.md | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) delete mode 100644 active/evm/Makefile diff --git a/Makefile b/Makefile index 14edc878..240958a7 100644 --- a/Makefile +++ b/Makefile @@ -85,6 +85,7 @@ endif # Pinned tag for openzeppelin-contracts-upgradeable, installed via clone-oz-upgradeable. OZ_UPGRADEABLE_TAG=v4.7.3 LIB_KECCAK_COMMIT=3b1e7bbb4cc23e9228097cfebe42aedaf3b8f2b9 +ACTIVE_EVM_BASE_CONTRACTS_COMMIT=f3a33c8577c8ca1e037b45e822bfcb75f099270b PROJECT_DIR ?= $(CURDIR) .PHONY: deps @@ -106,6 +107,12 @@ forge-deps: github.com/ethereum-optimism/lib-keccak@$(LIB_KECCAK_COMMIT) \ github.com/base/contracts@$(BASE_CONTRACTS_COMMIT) +.PHONY: deps-active-evm +deps-active-evm: + $(MAKE) -C $(REPO_ROOT) deps \ + PROJECT_DIR=$(REPO_ROOT)/active/evm \ + BASE_CONTRACTS_COMMIT=$(ACTIVE_EVM_BASE_CONTRACTS_COMMIT) + ## # Task Signer Tool ## @@ -129,7 +136,7 @@ deps-signer-tool: bootstrap-mise checkout-signer-tool cd $(SIGNER_TOOL_PATH) && $(MISE_EXEC) npm ci .PHONY: sign-task -sign-task: bootstrap-mise checkout-signer-tool +sign-task: deps-active-evm checkout-signer-tool cd $(SIGNER_TOOL_PATH); \ $(MISE_EXEC) npm ci; \ $(MISE_EXEC) npm run dev diff --git a/active/evm/Makefile b/active/evm/Makefile deleted file mode 100644 index fd97d1c9..00000000 --- a/active/evm/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# The signer tool runs `make deps` from active/evm. -BASE_CONTRACTS_COMMIT ?= f3a33c8577c8ca1e037b45e822bfcb75f099270b - -include ../../Makefile diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index d9f8c466..9830e0b6 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -9,7 +9,7 @@ Run this after any change to the task config or script: ```bash cd contract-deployments/active/evm TASK_MAKEFILE=tasks/2026-07-10-transfer-systemconfig-ownership/Makefile -make deps +make -f "$TASK_MAKEFILE" deps make -f "$TASK_MAKEFILE" gen-validation-cb make -f "$TASK_MAKEFILE" gen-validation-sc ``` From 4624c89565e31f9161587e2a49bbfded41c5aba9 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 14:44:36 -0500 Subject: [PATCH 08/23] refactor: preserve signer bootstrap prerequisite Co-authored-by: Codex --- Makefile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 240958a7..54f75536 100644 --- a/Makefile +++ b/Makefile @@ -108,10 +108,9 @@ forge-deps: github.com/base/contracts@$(BASE_CONTRACTS_COMMIT) .PHONY: deps-active-evm -deps-active-evm: - $(MAKE) -C $(REPO_ROOT) deps \ - PROJECT_DIR=$(REPO_ROOT)/active/evm \ - BASE_CONTRACTS_COMMIT=$(ACTIVE_EVM_BASE_CONTRACTS_COMMIT) +deps-active-evm: PROJECT_DIR := $(REPO_ROOT)/active/evm +deps-active-evm: BASE_CONTRACTS_COMMIT := $(ACTIVE_EVM_BASE_CONTRACTS_COMMIT) +deps-active-evm: deps ## # Task Signer Tool @@ -136,7 +135,7 @@ deps-signer-tool: bootstrap-mise checkout-signer-tool cd $(SIGNER_TOOL_PATH) && $(MISE_EXEC) npm ci .PHONY: sign-task -sign-task: deps-active-evm checkout-signer-tool +sign-task: bootstrap-mise deps-active-evm checkout-signer-tool cd $(SIGNER_TOOL_PATH); \ $(MISE_EXEC) npm ci; \ $(MISE_EXEC) npm run dev From 0e95cd604b260f48e109b02ab4c4054b479b75fc Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 15:56:31 -0500 Subject: [PATCH 09/23] refactor: let signer install selected task deps Co-authored-by: Codex --- Makefile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 54f75536..7f37b4b6 100644 --- a/Makefile +++ b/Makefile @@ -85,7 +85,6 @@ endif # Pinned tag for openzeppelin-contracts-upgradeable, installed via clone-oz-upgradeable. OZ_UPGRADEABLE_TAG=v4.7.3 LIB_KECCAK_COMMIT=3b1e7bbb4cc23e9228097cfebe42aedaf3b8f2b9 -ACTIVE_EVM_BASE_CONTRACTS_COMMIT=f3a33c8577c8ca1e037b45e822bfcb75f099270b PROJECT_DIR ?= $(CURDIR) .PHONY: deps @@ -107,15 +106,10 @@ forge-deps: github.com/ethereum-optimism/lib-keccak@$(LIB_KECCAK_COMMIT) \ github.com/base/contracts@$(BASE_CONTRACTS_COMMIT) -.PHONY: deps-active-evm -deps-active-evm: PROJECT_DIR := $(REPO_ROOT)/active/evm -deps-active-evm: BASE_CONTRACTS_COMMIT := $(ACTIVE_EVM_BASE_CONTRACTS_COMMIT) -deps-active-evm: deps - ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=566102238bc78fb023f495372d6f80282efa05dd +SIGNER_TOOL_COMMIT=d8e9988d8fba7cb442da35309c221c0c1eef00a5 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool @@ -135,11 +129,15 @@ deps-signer-tool: bootstrap-mise checkout-signer-tool cd $(SIGNER_TOOL_PATH) && $(MISE_EXEC) npm ci .PHONY: sign-task -sign-task: bootstrap-mise deps-active-evm checkout-signer-tool +sign-task: bootstrap-mise clean-active-evm-lib checkout-signer-tool cd $(SIGNER_TOOL_PATH); \ $(MISE_EXEC) npm ci; \ $(MISE_EXEC) npm run dev +.PHONY: clean-active-evm-lib +clean-active-evm-lib: + rm -rf $(REPO_ROOT)/active/evm/lib + # Task origin signature variables (auto-derived, overridable). # Legacy task subdirectories sign their own folder by default. Active EVM tasks # override TASK_ORIGIN_DIR to sign active/evm/tasks//config/. From 0fe408d92ce68757ccf71452851cb54c73732b6a Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 16:02:07 -0500 Subject: [PATCH 10/23] chore: update task signing tool pin Co-authored-by: Codex --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7f37b4b6..8e88bce9 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=d8e9988d8fba7cb442da35309c221c0c1eef00a5 +SIGNER_TOOL_COMMIT=491a97fbe1e004f6c7f268c5b6fd63989f125ca8 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool From b8c1a4f6390c273543d85085d20e3ab98f151d3a Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Tue, 4 Aug 2026 16:12:30 -0500 Subject: [PATCH 11/23] chore: update task signing tool pin Co-authored-by: Codex --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8e88bce9..d0daf448 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=491a97fbe1e004f6c7f268c5b6fd63989f125ca8 +SIGNER_TOOL_COMMIT=06d75bffbc19615c395df971d5217a4c3ae60588 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool From 9589b3268b959eb20051daf136951ef1c6b51ed9 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 02:06:14 -0500 Subject: [PATCH 12/23] refactor: run task operations from task directory Co-authored-by: Codex --- Makefile | 2 +- Multisig.mk | 7 +++--- .../FACILITATOR.md | 18 ++++++------- .../Makefile | 25 +++++++++++-------- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index d0daf448..4792fe26 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=06d75bffbc19615c395df971d5217a4c3ae60588 +SIGNER_TOOL_COMMIT=ac879b4d703c74065d4f03d0020f7b6ac88afce0 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool diff --git a/Multisig.mk b/Multisig.mk index c3cded74..8db738f7 100644 --- a/Multisig.mk +++ b/Multisig.mk @@ -11,6 +11,7 @@ # ---------- Common fragments ---------- LEDGER_HD_PATH = "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" +FORGE_WORKDIR ?= $(CURDIR) empty := space := $(empty) $(empty) @@ -27,7 +28,7 @@ require_vars = $(foreach _var,$(2),$(if $(strip $($(_var))),,$(error $(1): requi # MULTISIG_APPROVE: $(1)=address list (space-separated), $(2)=signatures (e.g., 0x or $(SIGNATURES)) define MULTISIG_APPROVE $(call require_vars,MULTISIG_APPROVE,LEDGER_ACCOUNT RPC_URL SCRIPT_NAME) \ - $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ + cd $(FORGE_WORKDIR) && $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ --sig "approve(address[],bytes)" "[$(call comma_join,$(1))]" $(2) \ --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv endef @@ -35,7 +36,7 @@ endef # MULTISIG_EXECUTE: $(1)=signatures for run(bytes) (e.g., 0x or $(SIGNATURES)) define MULTISIG_EXECUTE $(call require_vars,MULTISIG_EXECUTE,LEDGER_ACCOUNT RPC_URL SCRIPT_NAME) \ - $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ + cd $(FORGE_WORKDIR) && $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ --sig "run(bytes)" $(1) \ --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv endef @@ -62,7 +63,7 @@ $(call require_vars,GEN_VALIDATION,RPC_URL LEDGER_ACCOUNT) \ cd $(SIGNER_TOOL_PATH) && \ $(MISE_EXEC) npx tsx scripts/genValidationFile.ts \ --rpc-url $(RPC_URL) \ - --workdir $(CURDIR) \ + --workdir $(FORGE_WORKDIR) \ --forge-cmd '$(if $(5),$(5) )mise exec -- forge script --rpc-url $(RPC_URL) $(1) --sig "sign(address[])" "[$(2)]" --sender $(3)' \ --ledger-id $(LEDGER_ACCOUNT) \ --out $(VALIDATIONS_DIR)/$(4) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index 9830e0b6..efc19c3b 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -7,11 +7,10 @@ Guide for facilitators managing the Zeronet `SystemConfig` owner transfer. Run this after any change to the task config or script: ```bash -cd contract-deployments/active/evm -TASK_MAKEFILE=tasks/2026-07-10-transfer-systemconfig-ownership/Makefile -make -f "$TASK_MAKEFILE" deps -make -f "$TASK_MAKEFILE" gen-validation-cb -make -f "$TASK_MAKEFILE" gen-validation-sc +cd contract-deployments/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership +make deps +make gen-validation-cb +make gen-validation-sc ``` This produces: @@ -36,13 +35,12 @@ Ask signers to run `make sign-task` from the repository root and select ## 3. Approve and execute -From `active/evm`, execute the Coinbase and Security Council approvals: +From the task directory, execute the Coinbase and Security Council approvals: ```bash -TASK_MAKEFILE=tasks/2026-07-10-transfer-systemconfig-ownership/Makefile -SIGNATURES=AAABBBCCC make -f "$TASK_MAKEFILE" approve-cb -SIGNATURES=AAABBBCCC make -f "$TASK_MAKEFILE" approve-sc -make -f "$TASK_MAKEFILE" execute +SIGNATURES=AAABBBCCC make approve-cb +SIGNATURES=AAABBBCCC make approve-sc +make execute ``` ## 4. Verify onchain diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile index a600d314..f1bae53e 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -1,22 +1,27 @@ -include ../../Makefile -include ../../Multisig.mk +TASK_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +EVM_ROOT := $(abspath $(TASK_ROOT)/../..) +CONTRACT_DEPLOYMENTS_ROOT := $(abspath $(EVM_ROOT)/../..) + +include $(CONTRACT_DEPLOYMENTS_ROOT)/Makefile +include $(CONTRACT_DEPLOYMENTS_ROOT)/Multisig.mk TASK_NETWORK ?= zeronet -TASK_DIR := tasks/2026-07-10-transfer-systemconfig-ownership +PROJECT_DIR := $(EVM_ROOT) +FORGE_WORKDIR := $(EVM_ROOT) -include $(REPO_ROOT)/config/$(TASK_NETWORK).env -include $(TASK_DIR)/config/$(TASK_NETWORK)/.env +include $(CONTRACT_DEPLOYMENTS_ROOT)/config/$(TASK_NETWORK).env +include $(TASK_ROOT)/config/$(TASK_NETWORK)/.env export BASE_CONTRACTS_COMMIT export PROXY_ADMIN_OWNER export INCIDENT_MULTISIG export SYSTEM_CONFIG -export FOUNDRY_BROADCAST = $(TASK_DIR) +export FOUNDRY_BROADCAST := $(TASK_ROOT) -SIGNER_TOOL_PATH := ../../signer-tool -VALIDATIONS_DIR := $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK)/validations -TASK_ORIGIN_DIR := $(CURDIR)/$(TASK_DIR)/config/$(TASK_NETWORK) -SIGNATURE_DIR := $(CURDIR)/$(TASK_DIR)/signatures/$(TASK_NETWORK) +SIGNER_TOOL_PATH := $(CONTRACT_DEPLOYMENTS_ROOT)/signer-tool +VALIDATIONS_DIR := $(TASK_ROOT)/config/$(TASK_NETWORK)/validations +TASK_ORIGIN_DIR := $(TASK_ROOT)/config/$(TASK_NETWORK) +SIGNATURE_DIR := $(TASK_ROOT)/signatures/$(TASK_NETWORK) RPC_URL := $(L1_RPC_URL) SCRIPT_NAME := script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership From 8749d972c440baef4132b44fe6702befe984b64d Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 02:11:41 -0500 Subject: [PATCH 13/23] refactor: simplify task Makefile paths Co-authored-by: Codex --- .../Makefile | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile index f1bae53e..db2333cc 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -1,27 +1,23 @@ -TASK_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) -EVM_ROOT := $(abspath $(TASK_ROOT)/../..) -CONTRACT_DEPLOYMENTS_ROOT := $(abspath $(EVM_ROOT)/../..) - -include $(CONTRACT_DEPLOYMENTS_ROOT)/Makefile -include $(CONTRACT_DEPLOYMENTS_ROOT)/Multisig.mk +include ../../../../Makefile +include $(REPO_ROOT)/Multisig.mk TASK_NETWORK ?= zeronet -PROJECT_DIR := $(EVM_ROOT) -FORGE_WORKDIR := $(EVM_ROOT) +PROJECT_DIR := $(abspath ../..) +FORGE_WORKDIR := $(PROJECT_DIR) -include $(CONTRACT_DEPLOYMENTS_ROOT)/config/$(TASK_NETWORK).env -include $(TASK_ROOT)/config/$(TASK_NETWORK)/.env +include $(REPO_ROOT)/config/$(TASK_NETWORK).env +include config/$(TASK_NETWORK)/.env export BASE_CONTRACTS_COMMIT export PROXY_ADMIN_OWNER export INCIDENT_MULTISIG export SYSTEM_CONFIG -export FOUNDRY_BROADCAST := $(TASK_ROOT) +export FOUNDRY_BROADCAST := $(CURDIR) -SIGNER_TOOL_PATH := $(CONTRACT_DEPLOYMENTS_ROOT)/signer-tool -VALIDATIONS_DIR := $(TASK_ROOT)/config/$(TASK_NETWORK)/validations -TASK_ORIGIN_DIR := $(TASK_ROOT)/config/$(TASK_NETWORK) -SIGNATURE_DIR := $(TASK_ROOT)/signatures/$(TASK_NETWORK) +SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool +VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations +TASK_ORIGIN_DIR := $(CURDIR)/config/$(TASK_NETWORK) +SIGNATURE_DIR := $(CURDIR)/signatures/$(TASK_NETWORK) RPC_URL := $(L1_RPC_URL) SCRIPT_NAME := script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership From 443d25b255c52eb470f284ac965c9fec26af8515 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 02:24:50 -0500 Subject: [PATCH 14/23] docs: align ownership task signer instructions Co-authored-by: Codex --- .../FACILITATOR.md | 8 ++++---- .../config/zeronet/README.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md index efc19c3b..f13ea816 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md @@ -15,8 +15,8 @@ make gen-validation-sc This produces: -- `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json` -- `tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json` +- `config/zeronet/validations/base-signer.json` +- `config/zeronet/validations/security-council-signer.json` The `--sender` in each `cmd` is derived from the first owner of the respective Safe (`CB_MULTISIG` for Coinbase, `BASE_SECURITY_COUNCIL` for Security Council). @@ -46,7 +46,7 @@ make execute ## 4. Verify onchain ```bash -cast call 0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 "owner()(address)" \ +mise exec -- cast call 0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 "owner()(address)" \ --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net ``` @@ -56,4 +56,4 @@ Expected result: 0x856611ed7e07d83243b15e93f6321f2df6865852 ``` -Then update the task status to `EXECUTED` with the transaction link and commit the execution records. +Then set `Status: [EXECUTED]()` in the signer README and commit the execution records. diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md index 8d0bcd8f..28edc594 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md @@ -1,4 +1,4 @@ -# Transfer Zeronet `SystemConfig` Owner +# Transfer SystemConfig Ownership Status: READY TO SIGN From e3fa4974bbaee8abb45770a12b315002e8d416ac Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 07:44:12 -0500 Subject: [PATCH 15/23] chore: pin merged task signing tool Co-authored-by: Codex --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4792fe26..8bdb7654 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=ac879b4d703c74065d4f03d0020f7b6ac88afce0 +SIGNER_TOOL_COMMIT=26f38b77ed1d157cb8eb148e7a65ef06b7a3a4c4 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool From 996248418ee0542302f5ce26b5fdfa31445feffa Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 08:39:17 -0500 Subject: [PATCH 16/23] refactor: simplify task dependency lifecycle Co-authored-by: Codex --- Makefile | 8 ++------ Multisig.mk | 7 +++---- .../2026-07-10-transfer-systemconfig-ownership/Makefile | 4 ---- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index 8bdb7654..1f5bc7c0 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=26f38b77ed1d157cb8eb148e7a65ef06b7a3a4c4 +SIGNER_TOOL_COMMIT=b857786516bede8dc0e9eb7d1fb2335cc6a10c79 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool @@ -129,15 +129,11 @@ deps-signer-tool: bootstrap-mise checkout-signer-tool cd $(SIGNER_TOOL_PATH) && $(MISE_EXEC) npm ci .PHONY: sign-task -sign-task: bootstrap-mise clean-active-evm-lib checkout-signer-tool +sign-task: bootstrap-mise checkout-signer-tool cd $(SIGNER_TOOL_PATH); \ $(MISE_EXEC) npm ci; \ $(MISE_EXEC) npm run dev -.PHONY: clean-active-evm-lib -clean-active-evm-lib: - rm -rf $(REPO_ROOT)/active/evm/lib - # Task origin signature variables (auto-derived, overridable). # Legacy task subdirectories sign their own folder by default. Active EVM tasks # override TASK_ORIGIN_DIR to sign active/evm/tasks//config/. diff --git a/Multisig.mk b/Multisig.mk index 8db738f7..1e7c2edb 100644 --- a/Multisig.mk +++ b/Multisig.mk @@ -11,7 +11,6 @@ # ---------- Common fragments ---------- LEDGER_HD_PATH = "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -FORGE_WORKDIR ?= $(CURDIR) empty := space := $(empty) $(empty) @@ -28,7 +27,7 @@ require_vars = $(foreach _var,$(2),$(if $(strip $($(_var))),,$(error $(1): requi # MULTISIG_APPROVE: $(1)=address list (space-separated), $(2)=signatures (e.g., 0x or $(SIGNATURES)) define MULTISIG_APPROVE $(call require_vars,MULTISIG_APPROVE,LEDGER_ACCOUNT RPC_URL SCRIPT_NAME) \ - cd $(FORGE_WORKDIR) && $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ + cd $(PROJECT_DIR) && $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ --sig "approve(address[],bytes)" "[$(call comma_join,$(1))]" $(2) \ --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv endef @@ -36,7 +35,7 @@ endef # MULTISIG_EXECUTE: $(1)=signatures for run(bytes) (e.g., 0x or $(SIGNATURES)) define MULTISIG_EXECUTE $(call require_vars,MULTISIG_EXECUTE,LEDGER_ACCOUNT RPC_URL SCRIPT_NAME) \ - cd $(FORGE_WORKDIR) && $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ + cd $(PROJECT_DIR) && $(MISE_EXEC) forge script --rpc-url $(RPC_URL) $(SCRIPT_NAME) \ --sig "run(bytes)" $(1) \ --ledger --hd-paths $(LEDGER_HD_PATH) --broadcast -vvvv endef @@ -63,7 +62,7 @@ $(call require_vars,GEN_VALIDATION,RPC_URL LEDGER_ACCOUNT) \ cd $(SIGNER_TOOL_PATH) && \ $(MISE_EXEC) npx tsx scripts/genValidationFile.ts \ --rpc-url $(RPC_URL) \ - --workdir $(FORGE_WORKDIR) \ + --workdir $(PROJECT_DIR) \ --forge-cmd '$(if $(5),$(5) )mise exec -- forge script --rpc-url $(RPC_URL) $(1) --sig "sign(address[])" "[$(2)]" --sender $(3)' \ --ledger-id $(LEDGER_ACCOUNT) \ --out $(VALIDATIONS_DIR)/$(4) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile index db2333cc..2bc37415 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -3,12 +3,10 @@ include $(REPO_ROOT)/Multisig.mk TASK_NETWORK ?= zeronet PROJECT_DIR := $(abspath ../..) -FORGE_WORKDIR := $(PROJECT_DIR) include $(REPO_ROOT)/config/$(TASK_NETWORK).env include config/$(TASK_NETWORK)/.env -export BASE_CONTRACTS_COMMIT export PROXY_ADMIN_OWNER export INCIDENT_MULTISIG export SYSTEM_CONFIG @@ -16,8 +14,6 @@ export FOUNDRY_BROADCAST := $(CURDIR) SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations -TASK_ORIGIN_DIR := $(CURDIR)/config/$(TASK_NETWORK) -SIGNATURE_DIR := $(CURDIR)/signatures/$(TASK_NETWORK) RPC_URL := $(L1_RPC_URL) SCRIPT_NAME := script/common/ownership/TransferSystemConfigOwnership.s.sol:TransferSystemConfigOwnership From d1ae9da59dc457e6e1c5aa98714ddff9e767041c Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 16:03:22 -0500 Subject: [PATCH 17/23] chore: bump SIGNER_TOOL_COMMIT to merged task-signing-tool main Generated with Claude Code Co-Authored-By: Claude --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1f5bc7c0..5361c82c 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ forge-deps: ## # Task Signer Tool ## -SIGNER_TOOL_COMMIT=b857786516bede8dc0e9eb7d1fb2335cc6a10c79 +SIGNER_TOOL_COMMIT=1fc76441a1cde3581c224023adfa79b8cfdb2fa4 SIGNER_TOOL_PATH=signer-tool .PHONY: checkout-signer-tool From 3f30d9c16790fcf8ee1c4f60525e5af97b125b32 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 16:23:14 -0500 Subject: [PATCH 18/23] chore: drop redundant exports already set by network env Generated with Claude Code Co-Authored-By: Claude --- .claude/settings.local.json | 64 +++++++++++++++++++ .../Makefile | 3 - 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..55213492 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,64 @@ +{ + "hooks": { + "Notification": [ + { + "hooks": [ + { + "type": "command", + "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: notification\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" + } + ] + } + ], + "PermissionRequest": [ + { + "hooks": [ + { + "type": "command", + "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: permission_request\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" + } + ] + } + ], + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: stop\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" + } + ] + } + ], + "PreToolUse": [ + { + "hooks": [ + { + "type": "command", + "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: tool_start\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" + } + ] + } + ], + "PostToolUse": [ + { + "hooks": [ + { + "type": "command", + "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: tool_end\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" + } + ] + } + ], + "UserPromptSubmit": [ + { + "hooks": [ + { + "type": "command", + "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: user_prompt_submit\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile index 2bc37415..f799f1ba 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -7,9 +7,6 @@ PROJECT_DIR := $(abspath ../..) include $(REPO_ROOT)/config/$(TASK_NETWORK).env include config/$(TASK_NETWORK)/.env -export PROXY_ADMIN_OWNER -export INCIDENT_MULTISIG -export SYSTEM_CONFIG export FOUNDRY_BROADCAST := $(CURDIR) SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool From 802e23b3291f203a4fe654a1edf212110bcd2039 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 5 Aug 2026 16:23:52 -0500 Subject: [PATCH 19/23] chore: remove accidentally committed local Claude settings Generated with Claude Code Co-Authored-By: Claude --- .claude/settings.local.json | 64 ------------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index 55213492..00000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "hooks": { - "Notification": [ - { - "hooks": [ - { - "type": "command", - "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: notification\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" - } - ] - } - ], - "PermissionRequest": [ - { - "hooks": [ - { - "type": "command", - "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: permission_request\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: stop\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" - } - ] - } - ], - "PreToolUse": [ - { - "hooks": [ - { - "type": "command", - "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: tool_start\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" - } - ] - } - ], - "PostToolUse": [ - { - "hooks": [ - { - "type": "command", - "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: tool_end\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" - } - ] - } - ], - "UserPromptSubmit": [ - { - "hooks": [ - { - "type": "command", - "command": "curl -sf -X POST -H \"Content-Type: application/json\" -H \"X-Mux-Token: $MUX_HOOK_TOKEN\" -H \"X-Mux-Pty-Id: $MUX_PTY_ID\" -H \"X-Mux-Event-Type: user_prompt_submit\" -d @- \"http://127.0.0.1:$MUX_HOOK_PORT/hook\" || true" - } - ] - } - ] - } -} \ No newline at end of file From 07baaaf5bf8e8bdff0c9d06f3cc0e39f7e3763e2 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Thu, 6 Aug 2026 09:07:31 -0500 Subject: [PATCH 20/23] fix: point FOUNDRY_BROADCAST at task records/ dir Artifacts landed directly in the task root, which the .gitignore records/ patterns do not match, so run-latest.json and dry-run output would have been committed. Generated with Claude Code Co-Authored-By: Claude --- .../2026-07-10-transfer-systemconfig-ownership/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile index f799f1ba..428e5f74 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -7,7 +7,10 @@ PROJECT_DIR := $(abspath ../..) include $(REPO_ROOT)/config/$(TASK_NETWORK).env include config/$(TASK_NETWORK)/.env -export FOUNDRY_BROADCAST := $(CURDIR) +# Forge runs from the shared project ($(PROJECT_DIR)), so artifacts would +# default to active/evm/records. Redirect into the task dir so they archive +# with the task, keeping the legacy records/ layout the .gitignore expects. +export FOUNDRY_BROADCAST := $(CURDIR)/records SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations From ae3121fe017017fb738b81d99c8f9e56f2632706 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Thu, 6 Aug 2026 09:51:12 -0500 Subject: [PATCH 21/23] refactor: default FOUNDRY_BROADCAST in Multisig.mk Every task includes Multisig.mk, so the broadcast dir no longer needs a per-task line. Uses ?= so a task can still override it. Generated with Claude Code Co-Authored-By: Claude --- Multisig.mk | 6 ++++++ .../2026-07-10-transfer-systemconfig-ownership/Makefile | 5 ----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Multisig.mk b/Multisig.mk index 1e7c2edb..0db51d3c 100644 --- a/Multisig.mk +++ b/Multisig.mk @@ -10,6 +10,12 @@ # # ---------- Common fragments ---------- +# Forge runs from $(PROJECT_DIR), so for a task sharing a project the relative +# `broadcast` setting in foundry.toml resolves into the shared project rather +# than the task. Anchor it to the task dir so records archive with the task. +# For a task that is its own Forge project this is where records already go. +export FOUNDRY_BROADCAST ?= $(CURDIR)/records + LEDGER_HD_PATH = "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" empty := diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile index 428e5f74..473ae2a2 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile @@ -7,11 +7,6 @@ PROJECT_DIR := $(abspath ../..) include $(REPO_ROOT)/config/$(TASK_NETWORK).env include config/$(TASK_NETWORK)/.env -# Forge runs from the shared project ($(PROJECT_DIR)), so artifacts would -# default to active/evm/records. Redirect into the task dir so they archive -# with the task, keeping the legacy records/ layout the .gitignore expects. -export FOUNDRY_BROADCAST := $(CURDIR)/records - SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations RPC_URL := $(L1_RPC_URL) From 3a3a64f7981115a2c732a5cd61d83dffc048d0ff Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Fri, 7 Aug 2026 09:17:05 -0500 Subject: [PATCH 22/23] chore(zeronet): mark SystemConfig ownership transfer executed Adds the three execution records (CB approval, SC approval, execute) and sets the task status to EXECUTED. Generated with Claude Code Co-Authored-By: Claude --- .../config/zeronet/README.md | 2 +- .../560048/run-1786058304954.json | 90 +++++++++++++++++++ .../560048/run-1786058847724.json | 90 +++++++++++++++++++ .../560048/run-1786058965333.json | 90 +++++++++++++++++++ 4 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json create mode 100644 active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md index 28edc594..f47faf22 100644 --- a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md @@ -1,6 +1,6 @@ # Transfer SystemConfig Ownership -Status: READY TO SIGN +Status: [EXECUTED](https://hoodi.etherscan.io/tx/0x588703bac3e3c12e546ad2c3bde3042f5e0cf0912358b878da695d4208f4c8cc) ## Description diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json new file mode 100644 index 00000000..dc54375d --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json @@ -0,0 +1,90 @@ +{ + "transactions": [ + { + "hash": "0xc04632b3655c99df6611d01d259fa23ab7a0b772be02725c9bdc7fe2eac39faa", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "0", + "0xd4d9bdcde533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca67284", + "0", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x938cb2b9943d5b60a00c655dee53da81de82983b38ac31a92db1082956ad1f0135b9b209712ef347816e33e295bccd9350451b20f31bb80394437c1964de0b621cf97cb4ae0a0fa42471a1808c5375b2b50b76df9451bee2d0070290cd7357503d6bfabfd7dd46caf56773739aa63851bbd28fedc0e39c73f0bf72661f3b3cf8a01bbc00c1ed985254e74ff68ea3936dba02b6436c37fc337b1841442806b84101a9595ea6c66536ceb6f1ad48facb71f191f360b7b39c15c203a46134cc1e31fba01c" + ], + "transaction": { + "from": "0x2c1475476b586d66a85bc65a5ab396bbbaa4f3ad", + "to": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "gas": "0x20381", + "value": "0x0", + "input": "0x6a7612020000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000024d4d9bdcde533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca672840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3938cb2b9943d5b60a00c655dee53da81de82983b38ac31a92db1082956ad1f0135b9b209712ef347816e33e295bccd9350451b20f31bb80394437c1964de0b621cf97cb4ae0a0fa42471a1808c5375b2b50b76df9451bee2d0070290cd7357503d6bfabfd7dd46caf56773739aa63851bbd28fedc0e39c73f0bf72661f3b3cf8a01bbc00c1ed985254e74ff68ea3936dba02b6436c37fc337b1841442806b84101a9595ea6c66536ceb6f1ad48facb71f191f360b7b39c15c203a46134cc1e31fba01c0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x26b50", + "logs": [ + { + "address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "topics": [ + "0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c", + "0xe533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca67284", + "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852" + ], + "data": "0x", + "blockHash": "0x4e0883e22d145d66813e61615fb4a1445c1d40c5f2e57b16ff274b6bcb1ef626", + "blockNumber": "0x336197", + "blockTimestamp": "0x6a751640", + "transactionHash": "0xc04632b3655c99df6611d01d259fa23ab7a0b772be02725c9bdc7fe2eac39faa", + "transactionIndex": "0x3", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0x527fce8fb593a7736fe207d8e3de1f46fce6ca4718dd3b4ccbab380df990c11a" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x4e0883e22d145d66813e61615fb4a1445c1d40c5f2e57b16ff274b6bcb1ef626", + "blockNumber": "0x336197", + "blockTimestamp": "0x6a751640", + "transactionHash": "0xc04632b3655c99df6611d01d259fa23ab7a0b772be02725c9bdc7fe2eac39faa", + "transactionIndex": "0x3", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000000000200000000000000000000000000040000001001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000010000000000000000000000000000000000000000000000000000000000200000000000008000000000000000000000000000000000000000000000000040000004000000200000000080000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000300000440100000000000004000", + "type": "0x2", + "transactionHash": "0xc04632b3655c99df6611d01d259fa23ab7a0b772be02725c9bdc7fe2eac39faa", + "transactionIndex": "0x3", + "blockHash": "0x4e0883e22d145d66813e61615fb4a1445c1d40c5f2e57b16ff274b6bcb1ef626", + "blockNumber": "0x336197", + "gasUsed": "0x17538", + "effectiveGasPrice": "0x3caddc4a", + "from": "0x2c1475476b586d66a85bc65a5ab396bbbaa4f3ad", + "to": "0x856611ed7e07d83243b15e93f6321f2df6865852", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1786058304954, + "chain": 560048, + "commit": "ae3121f" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json new file mode 100644 index 00000000..2db12cce --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json @@ -0,0 +1,90 @@ +{ + "transactions": [ + { + "hash": "0x7e573ce3b15c8f0ee3f97a51705ea18c836526af60c9fcdcd48762ebf08778f2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0x3d59999977e0896ee1f8783bB8251DF16fb483E9", + "0", + "0xd4d9bdcde533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca67284", + "0", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x459a382891579c841378eea0fc8ff9feff028c33dd7e891117acdc792c53925767d83601650a77e615059d0a32110d4e61d7a8736d74c1b67d01c2c0c66545431c" + ], + "transaction": { + "from": "0x2c1475476b586d66a85bc65a5ab396bbbaa4f3ad", + "to": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "gas": "0x1b752", + "value": "0x0", + "input": "0x6a7612020000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000024d4d9bdcde533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca67284000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041459a382891579c841378eea0fc8ff9feff028c33dd7e891117acdc792c53925767d83601650a77e615059d0a32110d4e61d7a8736d74c1b67d01c2c0c66545431c00000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x1", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x87f53", + "logs": [ + { + "address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "topics": [ + "0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c", + "0xe533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca67284", + "0x000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba" + ], + "data": "0x", + "blockHash": "0x97d785e4fcec87cb406da2e9daf1ff69760dba8427b8453ac4d9297dc6f8aade", + "blockNumber": "0x3361c1", + "blockTimestamp": "0x6a75185c", + "transactionHash": "0x7e573ce3b15c8f0ee3f97a51705ea18c836526af60c9fcdcd48762ebf08778f2", + "transactionIndex": "0x16", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0xbcd31be22c1682c008885b0058f1ebb1da63b89c2a8f8634287286373e7e9384" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x97d785e4fcec87cb406da2e9daf1ff69760dba8427b8453ac4d9297dc6f8aade", + "blockNumber": "0x3361c1", + "blockTimestamp": "0x6a75185c", + "transactionHash": "0x7e573ce3b15c8f0ee3f97a51705ea18c836526af60c9fcdcd48762ebf08778f2", + "transactionIndex": "0x16", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000000000000000000000000000000000000040000000001000000000000000000000000000000000000000000100000000000000000010000000000000000000000000000000000000800000000000000001000000008000000400000000000010000010000800000000000000000000000000000000000000000000000000000000000800000000000000000000000000002000000000000000000000000000000000004000000200000000080000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000100000000000004000", + "type": "0x2", + "transactionHash": "0x7e573ce3b15c8f0ee3f97a51705ea18c836526af60c9fcdcd48762ebf08778f2", + "transactionIndex": "0x16", + "blockHash": "0x97d785e4fcec87cb406da2e9daf1ff69760dba8427b8453ac4d9297dc6f8aade", + "blockNumber": "0x3361c1", + "gasUsed": "0x13e10", + "effectiveGasPrice": "0x3e24a2d6", + "from": "0x2c1475476b586d66a85bc65a5ab396bbbaa4f3ad", + "to": "0xc4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1786058847724, + "chain": 560048, + "commit": "ae3121f" +} \ No newline at end of file diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json new file mode 100644 index 00000000..3548938a --- /dev/null +++ b/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json @@ -0,0 +1,90 @@ +{ + "transactions": [ + { + "hash": "0x588703bac3e3c12e546ad2c3bde3042f5e0cf0912358b878da695d4208f4c8cc", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", + "0", + "0xf2fde38b000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", + "0", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba000000000000000000000000000000000000000000000000000000000000000001" + ], + "transaction": { + "from": "0x2c1475476b586d66a85bc65a5ab396bbbaa4f3ad", + "to": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "gas": "0x1732a", + "value": "0x0", + "input": "0x6a7612020000000000000000000000000a111c7980152bde41d71f48e2e1d8184f5f61870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c4c0ad998b5dfa4cf4b298970f21b9015a5ee7ba000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2", + "chainId": "0x88bb0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x8400b", + "logs": [ + { + "address": "0x0a111c7980152bde41d71f48e2e1d8184f5f6187", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", + "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852" + ], + "data": "0x", + "blockHash": "0x13e3224d7d2ed5732f7002f262449961fe3333f12dbe6239199c6306aefd381b", + "blockNumber": "0x3361ca", + "blockTimestamp": "0x6a7518d4", + "transactionHash": "0x588703bac3e3c12e546ad2c3bde3042f5e0cf0912358b878da695d4208f4c8cc", + "transactionIndex": "0x16", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0xe533b17416e0e90975a9d90215d6175b1a5fe3635ed60fe94b743a741ca67284" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x13e3224d7d2ed5732f7002f262449961fe3333f12dbe6239199c6306aefd381b", + "blockNumber": "0x3361ca", + "blockTimestamp": "0x6a7518d4", + "transactionHash": "0x588703bac3e3c12e546ad2c3bde3042f5e0cf0912358b878da695d4208f4c8cc", + "transactionIndex": "0x16", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000000000200000000000000000000800000040000000001000000000000000000000000000000000000000000100002000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000004000000200000000080000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000300400000000000000000004000", + "type": "0x2", + "transactionHash": "0x588703bac3e3c12e546ad2c3bde3042f5e0cf0912358b878da695d4208f4c8cc", + "transactionIndex": "0x16", + "blockHash": "0x13e3224d7d2ed5732f7002f262449961fe3333f12dbe6239199c6306aefd381b", + "blockNumber": "0x3361ca", + "gasUsed": "0x10cb8", + "effectiveGasPrice": "0x41743819", + "from": "0x2c1475476b586d66a85bc65a5ab396bbbaa4f3ad", + "to": "0x3d59999977e0896ee1f8783bb8251df16fb483e9", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1786058965333, + "chain": 560048, + "commit": "ae3121f" +} \ No newline at end of file From cd2b324f162308cbe0f1c0e97da5eff9f743fdeb Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Fri, 7 Aug 2026 15:03:13 -0500 Subject: [PATCH 23/23] chore(zeronet): archive SystemConfig ownership transfer task Generated with Claude Code Co-Authored-By: Claude --- .../2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md | 0 .../evm}/2026-07-10-transfer-systemconfig-ownership/Makefile | 0 .../config/zeronet/.env | 0 .../config/zeronet/README.md | 0 .../config/zeronet/validations/base-signer.json | 0 .../config/zeronet/validations/security-council-signer.json | 0 .../560048/run-1786058304954.json | 0 .../560048/run-1786058847724.json | 0 .../560048/run-1786058965333.json | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/Makefile (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json (100%) rename {active/evm/tasks => archive/evm}/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json (100%) diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md b/archive/evm/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile b/archive/evm/2026-07-10-transfer-systemconfig-ownership/Makefile similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/Makefile diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env b/archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md b/archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json b/archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json b/archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json b/archive/evm/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058304954.json diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json b/archive/evm/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058847724.json diff --git a/active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json b/archive/evm/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json similarity index 100% rename from active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json rename to archive/evm/2026-07-10-transfer-systemconfig-ownership/records/TransferSystemConfigOwnership.s.sol/560048/run-1786058965333.json