-
Notifications
You must be signed in to change notification settings - Fork 319
feat(solana): prepare MCM 1 signers update task on Solana mainnet #483
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
xenoliss marked this conversation as resolved.
Show resolved
Hide resolved
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| ## | ||
| # Common MCM Proposal Variables | ||
| ## | ||
|
|
||
| # MCM program ID (base58 encoded) | ||
| MCM_PROGRAM_ID=Ea5qsVs2kwQXi7LMAh3Qg5YKpuPQbW7oqvYaPXUwBwoX | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Expected deployed address of our MCM program |
||
|
|
||
| # MCM multisig ID (32 bytes hex with 0x prefix) | ||
| MCM_MULTISIG_ID=0x0000000000000000000000000000000000000000000000000000000000000001 | ||
|
|
||
| # Timestamp until which the proposal is valid and can be executed | ||
| MCM_VALID_UNTIL= | ||
|
|
||
| # Set to true if you want to override the previous root when registering the proposal, omit or set to false otherwise | ||
| # If set to true, it allows to override the (proposal) root even if there are outstanding operations left to execute in the previous proposal | ||
| MCM_OVERRIDE_PREVIOUS_ROOT=false | ||
|
|
||
| # Total number of signatures required to execute the proposal | ||
| MCM_SIGNATURES_COUNT=1 | ||
|
|
||
| # MCM proposal signatures | ||
| MCM_SIGNATURES= | ||
|
|
||
| # Output file for the MCM proposal | ||
| MCM_PROPOSAL_OUTPUT=proposal.json | ||
|
|
||
| # Authority account that will sign and submit MCM transactions | ||
| AUTHORITY=~/.config/solana/id.json | ||
|
|
||
| ## | ||
| # MCM Proposal Variables Specific to Signers Update | ||
| ## | ||
|
|
||
| # Comma-separated list of new EVM signer addresses (20 bytes hex string, with 0x prefix) | ||
| MCM_NEW_SIGNERS=0x1841CB3C2ce6870D0417844C817849da64E6e937,0x5B154B8587168CB984Ff610F5De74289D8f68874,0x541a833E4303EB56a45bE7E8E4A908db97568d1e,0x4427683AA1f0ff25ccDC4a5Db83010c1DE9b5fF4,0xA31E1c38d5c37D8ECd0e94C80C0F7FD624d009A3,0xB37B2D42cb0C10ebf96279CcECa2cBFc47C6f236,0x24c3AE1AeDB8142D32BB6d3B988f5910F272D53b,0x644e3DedB0e4F83Bfcf8F9992964d240224B74dc,0x7Ad8E6B7B1f6D66F49559f20053Cef8a7b6c488E,0x5468985B560D966dEDEa2DAF493f5756101137DC,0x26c72586FB396325F58718152FEFA94E93Cf177b,0xa3D3c103442F162856163d564b983ae538c6202D,0x49243DcE94e0f5A1B08b9556bBEc5a84363c3839 | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
||
| # New signers configuration (see https://github.com/smartcontractkit/chainlink-ccip/blob/main/chains/solana/contracts/programs/mcm/src/lib.rs#L141-L157) | ||
| MCM_SIGNER_GROUPS=0,0,0,0,0,0,0,0,0,0,0,0,0 | ||
| MCM_GROUP_QUORUMS=3 | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| MCM_GROUP_PARENTS=0 | ||
|
|
||
| # Set to true to clear the previous pending signers when registering the new signers, omit or set to false otherwise | ||
| MCM_CLEAR_SIGNERS=false | ||
|
|
||
| # Set to true to clear the previous root when registering the new signers, omit or set to false otherwise | ||
| MCM_CLEAR_ROOT=false | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,128 @@ | ||
| # Facilitator Instructions: Signers Update MCM 1 | ||
|
|
||
| ## Overview | ||
|
|
||
| As a Facilitator, you are responsible for: | ||
| 1. Preparing the new signers configuration | ||
| 2. Creating the MCM proposal | ||
| 3. Committing and pushing the proposal to the repo | ||
| 4. Coordinating with Signers | ||
| 5. Collecting signatures | ||
| 6. Executing the proposal on-chain | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| ```bash | ||
| cd contract-deployments | ||
| git pull | ||
| cd solana/mainnet/2025-10-27-signers-update-mcm-1 | ||
| make deps | ||
| ``` | ||
|
|
||
| Ensure you have: | ||
| - `mcmctl` installed (via `make deps`) | ||
| - `eip712sign` installed (via `make deps`) | ||
| - A funded Solana wallet configured | ||
|
|
||
| ## Phase 1: Prepare and Generate Proposal | ||
|
|
||
| ### 1.1. Update .env with signers configuration | ||
|
|
||
| Set the following in `.env`: | ||
|
|
||
| ```bash | ||
| MCM_PROGRAM_ID=<mcm-program-id> | ||
| MCM_MULTISIG_ID=<multisig-id> | ||
| MCM_VALID_UNTIL=<unix-timestamp> | ||
| MCM_OVERRIDE_PREVIOUS_ROOT=false # or true if needed | ||
| MCM_PROPOSAL_OUTPUT=proposal.json | ||
|
|
||
| # New signers configuration | ||
| MCM_NEW_SIGNERS=0xADDRESS1,0xADDRESS2,0xADDRESS3 | ||
| MCM_SIGNER_GROUPS=0,0,1 | ||
| MCM_GROUP_QUORUMS=2,1 | ||
| MCM_GROUP_PARENTS=0,0 | ||
| MCM_CLEAR_SIGNERS=false # or true if needed | ||
| MCM_CLEAR_ROOT=false # or true if needed | ||
| ``` | ||
|
|
||
| ### 1.2. Generate proposal | ||
|
|
||
| ```bash | ||
| make step1-create-proposal | ||
| ``` | ||
|
|
||
| This creates the proposal file (default `proposal.json` or whatever is set in `MCM_PROPOSAL_OUTPUT`). | ||
|
|
||
| ### 1.3. Review proposal | ||
|
|
||
| Open and review the generated proposal file to verify: | ||
| - All new signers are included | ||
| - Signer groups are correctly assigned | ||
| - Group quorums are appropriate | ||
| - Group parent relationships are correct | ||
| - Valid until timestamp is appropriate | ||
|
|
||
| ### 1.4. Commit and push | ||
|
|
||
| ```bash | ||
| git add . | ||
| git commit -m "Add MCM signers update proposal" | ||
| git push | ||
| ``` | ||
|
|
||
| ## Phase 2: Coordinate with Signers and Collect Signatures | ||
|
|
||
| Coordinate with Signers to collect their signatures. Each Signer will run `make sign` and provide their signature. | ||
|
|
||
| Concatenate all signatures in the format: `0xSIG1,0xSIG2,0xSIG3` | ||
|
|
||
| Once you have all required signatures, update `.env`: | ||
|
|
||
| ```bash | ||
| MCM_SIGNATURES_COUNT=<number-of-signatures> | ||
| MCM_SIGNATURES=0xSIG1,0xSIG2,0xSIG3 | ||
| ``` | ||
|
|
||
| ## Phase 3: Execute Proposal | ||
|
|
||
| ```bash | ||
| make step3-execute-proposal | ||
| ``` | ||
|
|
||
| This command executes all the necessary steps: | ||
| - Initialize signatures account | ||
| - Append signatures | ||
| - Finalize signatures | ||
| - Set root | ||
| - Execute proposal | ||
| - Print the new configuration | ||
|
|
||
| ## Phase 4: Verification | ||
|
|
||
| ### 4.1. Verify MCM configuration | ||
|
|
||
| Check that: | ||
| - All new signers are present | ||
| - Old signers (if removed) are no longer present | ||
| - Signers are in the correct groups | ||
| - Group quorums are set correctly | ||
| - Group parent relationships are correct | ||
|
|
||
| ### 4.2. View on Solana Explorer | ||
|
|
||
| Visit the Solana Explorer for your network: | ||
| - Mainnet: https://explorer.solana.com/ | ||
| - Devnet: https://explorer.solana.com/?cluster=devnet | ||
|
|
||
| Search for the execution transaction to verify the update. | ||
|
|
||
| ### 4.3. Update README | ||
|
|
||
| Update the Status line in README.md to: | ||
|
|
||
| ```markdown | ||
| Status: [EXECUTED](https://explorer.solana.com/tx/<transaction-signature>?cluster=<network>) | ||
| ``` | ||
|
|
||
| Replace `<transaction-signature>` with the execution transaction signature and `<network>` with the appropriate cluster (devnet, mainnet-beta, etc.). |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| include ../.env | ||
| include .env | ||
|
|
||
| include ../../Makefile | ||
|
|
||
| ## | ||
| # MCM Signers Update Workflow | ||
| ## | ||
|
|
||
| # Step 1: Create signers update proposal | ||
| .PHONY: step1-create-proposal | ||
| step1-create-proposal: | ||
| @echo "==> Step 1: Creating MCM signers update proposal..." | ||
| make mcm-proposal-update-signers | ||
|
|
||
| # Step 2: Sign proposal | ||
| .PHONY: sign | ||
| sign: | ||
| @echo "==> Step 2: Signing proposal..." | ||
| make mcm-sign | ||
|
|
||
| # Step 3: Execute proposal (signatures + set-root + execute) | ||
| .PHONY: step3-execute-proposal | ||
| step3-execute-proposal: | ||
| @echo "==> Step 3: Executing MCM proposal..." | ||
| make mcm-all | ||
| make mcm-signers-print-config |
Uh oh!
There was an error while loading. Please reload this page.