Skip to content

feat: Multisig migration script#1433

Open
tbwebb22 wants to merge 9 commits into
masterfrom
taylor/multisig-migration-script
Open

feat: Multisig migration script#1433
tbwebb22 wants to merge 9 commits into
masterfrom
taylor/multisig-migration-script

Conversation

@tbwebb22

@tbwebb22 tbwebb22 commented May 14, 2026

Copy link
Copy Markdown
Contributor

Open MULTISIGS.md in preview mode to see the formatted table

Closes ACP-142

@tbwebb22 tbwebb22 requested review from fusmanii and grasphoper May 28, 2026 22:41
@tbwebb22 tbwebb22 marked this pull request as ready for review May 29, 2026 02:15

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 781079dc31

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +233 to +237
function resolveProvider(chainId: number): ethers.providers.JsonRpcProvider | undefined {
try {
const url = getNodeUrl(chainId);
if (!url) return undefined;
return new ethers.providers.JsonRpcProvider(url);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate CUSTOM_NODE_URL matches each chain

When a developer has only CUSTOM_NODE_URL in .env (a common setup for single-chain scripts), getNodeUrl(chainId) returns that same RPC for every row this report builds, and this code never checks provider.getNetwork().chainId before querying contract addresses. In that scenario the multi-chain report silently reads owners from the wrong network for all other chains and can mark migrations green/red based on unrelated contracts; require per-chain RPCs here or verify the provider chain ID before using it.

Useful? React with 👍 / 👎.

Comment on lines +42 to +43
// DonationBox variants use AccessControl, so "ownership" = DEFAULT_ADMIN_ROLE membership.
const DONATION_BOX_NAMES = ["DonationBox", "DonationBox_CCTP", "DonationBox_OFT"];

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Match suffixed DonationBox deployment names

The deployed-addresses artifact currently stores DonationBox deployments with flow/token suffixes such as DonationBox_CCTP_USDC, DonationBox_CCTP_USDC_EVM, and DonationBox_OFT_USDT, so this exact-name allowlist never finds them. As a result, chains that do have DonationBoxes render DonationBox Admin as and those admin migrations are omitted from the progress count; match by prefix or include the actual suffixed names.

Useful? React with 👍 / 👎.

@linear

linear Bot commented Jun 10, 2026

Copy link
Copy Markdown

ACP-142

@fusmanii fusmanii left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the md file looks nice, easy to spot check at a glance.

Comment thread package.json
"extract-addresses": "./script/utils/extract_foundry_addresses.sh",
"generate-constants-json": "ts-node ./script/utils/GenerateConstantsJson.ts",
"deploy-safe": "ts-node ./script/safe-multisig/deploySafe.ts",
"list-multisigs": "ts-node ./script/safe-multisig/generateMultisigList.ts",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"list-multisigs": "ts-node ./script/safe-multisig/generateMultisigList.ts",
"list-multisigs": "ts-node ./script/safe-multisig/generateMultisigList.ts && yarn prettier --write script/safe-multisig/MULTISIGS.md",

so that it gets formatted

Comment thread script/safe-multisig/MULTISIGS.md Outdated

**Migration progress: 9.1%** — 6 of 66 checks pass (60 outstanding).

| Chain ID | Chain | Ops Multisig Deployed | Universal SpokePool Owner | Counterfactual WithdrawManager Owner | Counterfactual WithdrawManager directWithdrawer | Sponsored CCTP Periphery Owner | Sponsored OFT Periphery Owner | DonationBox Admin |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that the donation boxes are missing on all chains

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch! Updated the script and re-ran it - Donation boxes populated now. Since the DonationBox uses AccessControl (non-enumerable) - the table will just show "No" if the admin isn't one of the multisigs or fallback EOA

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also just realized we probably need two columns for DonationBox - some chains have CCTP and OFT deployments of it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok made this update - if there are multiple DonationBoxes for a chain, it will show each of them in the DonationBox column

@tbwebb22 tbwebb22 force-pushed the taylor/multisig-migration-script branch from 4e22148 to e6c6e41 Compare June 10, 2026 19:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants