-
Notifications
You must be signed in to change notification settings - Fork 425
feat(CHAIN-4707): add Zeronet SystemConfig ownership transfer task #755
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
0xth4nh
merged 23 commits into
main
from
thanhtrinh/chain-4707-transfer-ownership-of-zeronet-systemconfig-to-incident
Aug 7, 2026
Merged
Changes from 17 commits
Commits
Show all changes
23 commits
Select commit
Hold shift + click to select a range
05df53f
feat(CHAIN-4707): add Zeronet SystemConfig ownership transfer task
0xth4nh bf84de6
chore: adapt ownership task to archived run layout
0xth4nh 06b091d
docs: align ownership task with shared dispatcher
0xth4nh 685804d
docs: keep ownership task commands self-contained
0xth4nh 32f41bf
refactor: use global Zeronet configuration
0xth4nh f657d9b
refactor: separate signer deps from task operations
0xth4nh 603d010
refactor: install active evm deps from root
0xth4nh 4624c89
refactor: preserve signer bootstrap prerequisite
0xth4nh 0e95cd6
refactor: let signer install selected task deps
0xth4nh 0fe408d
chore: update task signing tool pin
0xth4nh b8c1a4f
chore: update task signing tool pin
0xth4nh 9589b32
refactor: run task operations from task directory
0xth4nh 8749d97
refactor: simplify task Makefile paths
0xth4nh 443d25b
docs: align ownership task signer instructions
0xth4nh e3fa497
chore: pin merged task signing tool
0xth4nh 9962484
refactor: simplify task dependency lifecycle
0xth4nh d1ae9da
chore: bump SIGNER_TOOL_COMMIT to merged task-signing-tool main
0xth4nh 3f30d9c
chore: drop redundant exports already set by network env
0xth4nh 802e23b
chore: remove accidentally committed local Claude settings
0xth4nh 07baaaf
fix: point FOUNDRY_BROADCAST at task records/ dir
0xth4nh ae3121f
refactor: default FOUNDRY_BROADCAST in Multisig.mk
0xth4nh 3a3a64f
chore(zeronet): mark SystemConfig ownership transfer executed
0xth4nh cd2b324
chore(zeronet): archive SystemConfig ownership transfer task
0xth4nh File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/FACILITATOR.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,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/tasks/2026-07-10-transfer-systemconfig-ownership | ||
| make deps | ||
| make gen-validation-cb | ||
| make gen-validation-sc | ||
| ``` | ||
|
|
||
| This produces: | ||
|
|
||
| - `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). | ||
|
|
||
| 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 | ||
| ``` | ||
|
|
||
| ## 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 the task directory, execute the Coinbase and Security Council approvals: | ||
|
|
||
| ```bash | ||
| SIGNATURES=AAABBBCCC make approve-cb | ||
| SIGNATURES=AAABBBCCC make approve-sc | ||
| make execute | ||
| ``` | ||
|
|
||
| ## 4. Verify onchain | ||
|
|
||
| ```bash | ||
| mise exec -- cast call 0x0a111C7980152bDe41D71f48e2E1d8184f5f6187 "owner()(address)" \ | ||
| --rpc-url https://c3-chainproxy-eth-hoodi-full-dev.cbhq.net | ||
| ``` | ||
|
|
||
| Expected result: | ||
|
|
||
| ```text | ||
| 0x856611ed7e07d83243b15e93f6321f2df6865852 | ||
| ``` | ||
|
|
||
| Then set `Status: [EXECUTED](<transaction-url>)` in the signer README and commit the execution records. |
42 changes: 42 additions & 0 deletions
42
active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/Makefile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| include ../../../../Makefile | ||
| include $(REPO_ROOT)/Multisig.mk | ||
|
|
||
| TASK_NETWORK ?= zeronet | ||
| 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) | ||
|
0xth4nh marked this conversation as resolved.
Outdated
|
||
|
|
||
| SIGNER_TOOL_PATH := $(REPO_ROOT)/signer-tool | ||
| VALIDATIONS_DIR := $(CURDIR)/config/$(TASK_NETWORK)/validations | ||
| 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) | ||
2 changes: 2 additions & 0 deletions
2
active/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/.env
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| # https://github.com/base/contracts/tree/v8.2.1 | ||
| BASE_CONTRACTS_COMMIT=f3a33c8577c8ca1e037b45e822bfcb75f099270b |
25 changes: 25 additions & 0 deletions
25
...e/evm/tasks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| # Transfer SystemConfig Ownership | ||
|
|
||
| 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. |
92 changes: 92 additions & 0 deletions
92
...ks/2026-07-10-transfer-systemconfig-ownership/config/zeronet/validations/base-signer.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,92 @@ | ||
| { | ||
| "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": "SystemConfig - Zeronet", | ||
| "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", | ||
| "changes": [ | ||
| { | ||
| "key": "0x0000000000000000000000000000000000000000000000000000000000000033", | ||
| "before": "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", | ||
| "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", | ||
| "description": "Transfers ownership to the incident multisig", | ||
| "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": "Records the nested Safe approval", | ||
| "allowDifference": false | ||
| } | ||
| ] | ||
| }, | ||
| { | ||
| "name": "CB Signer Safe - Zeronet", | ||
| "address": "0x856611eD7E07D83243b15E93f6321f2df6865852", | ||
| "changes": [ | ||
| { | ||
| "key": "0x0000000000000000000000000000000000000000000000000000000000000005", | ||
| "before": "0x000000000000000000000000000000000000000000000000000000000000001a", | ||
| "after": "0x000000000000000000000000000000000000000000000000000000000000001b", | ||
| "description": "Increments the nonce", | ||
| "allowDifference": false | ||
| } | ||
| ] | ||
| } | ||
| ], | ||
| "balanceChanges": [], | ||
| "skipTaskOriginValidation": true | ||
| } |
86 changes: 86 additions & 0 deletions
86
...0-transfer-systemconfig-ownership/config/zeronet/validations/security-council-signer.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,86 @@ | ||
| { | ||
| "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": "SystemConfig - Zeronet", | ||
| "address": "0x0a111C7980152bDe41D71f48e2E1d8184f5f6187", | ||
| "changes": [ | ||
| { | ||
| "key": "0x0000000000000000000000000000000000000000000000000000000000000033", | ||
| "before": "0x0000000000000000000000003d59999977e0896ee1f8783bb8251df16fb483e9", | ||
| "after": "0x000000000000000000000000856611ed7e07d83243b15e93f6321f2df6865852", | ||
| "description": "Transfers ownership to the incident multisig", | ||
| "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": "Records the nested Safe approval", | ||
| "allowDifference": false | ||
| } | ||
| ] | ||
| }, | ||
| { | ||
| "name": "Security Council Safe - Zeronet", | ||
| "address": "0xC4c0aD998B5DfA4CF4B298970F21b9015a5eE7bA", | ||
| "changes": [ | ||
| { | ||
| "key": "0x0000000000000000000000000000000000000000000000000000000000000005", | ||
| "before": "0x0000000000000000000000000000000000000000000000000000000000000017", | ||
| "after": "0x0000000000000000000000000000000000000000000000000000000000000018", | ||
| "description": "Increments the nonce", | ||
| "allowDifference": false | ||
| } | ||
| ] | ||
| } | ||
| ], | ||
| "balanceChanges": [], | ||
| "skipTaskOriginValidation": true | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.