Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion solana/MCM.mk
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ mcm-proposal-bridge-pause:
$(if $(filter true,$(MCM_OVERRIDE_PREVIOUS_ROOT)),--override-previous-root) \
--output $(MCM_PROPOSAL_OUTPUT) \
--bridge-program-id $(BRIDGE_PROGRAM_ID) \
$(if $(filter true,$(PAUSED)),--paused)
$(if $(filter true,$(PAUSED)),--pause,--unpause)

.PHONY: mcm-proposal-loader-v3-upgrade
mcm-proposal-loader-v3-upgrade:
Expand Down
2 changes: 1 addition & 1 deletion solana/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ install-eip712sign:

.PHONY: install-mcmctl
install-mcmctl:
go install github.com/base/mcm-go/cmd/mcmctl@a296095b9dab9099b74d93bfc270f85285d1ec4a
go install github.com/base/mcm-go/cmd/mcmctl@8fdb1611ffc7081ce592f8957a9806c393c6f447

.PHONY: deps
deps: install-mcmctl install-eip712sign
Expand Down
38 changes: 38 additions & 0 deletions solana/devnet-alpha/2025-10-23-mcm-unpause-bridge/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
##
# Common MCM Proposal Variables
##

# MCM program ID (base58 encoded)
MCM_PROGRAM_ID=Ea5qsVs2kwQXi7LMAh3Qg5YKpuPQbW7oqvYaPXUwBwoX

# MCM multisig ID (32 bytes hex with 0x prefix)
MCM_MULTISIG_ID=0x0000000000000000000000000000000000000000000000000000000000000000

# Timestamp until which the proposal is valid and can be executed
MCM_VALID_UNTIL=1761330331 # Fri Oct 24 2025 18:25:31 GMT+0000

# Set to true if you want to override the previous root when registering the proposal
# 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=true

# Total number of signatures required to execute the proposal
MCM_SIGNATURES_COUNT=3

# MCM proposal signatures
MCM_SIGNATURES=0x0637aca8f49eaed945d40e5bc2b28951515813a65532f88954b5b1e0e0c85f136a819c299b43c759c0d93b9f9791d1c30296f52509c356578c2b51bdd708cfd51b,0xa9484496ea45d466e0ea48d2bf9be63244e177aad7a819165c97b3df83422c844f28703fbf0eedb1a3a75939a24636a7583c86d55bfccfe6b3fe119130dfaf731c,0x09264a2d02084d21344bb2e99acb20f7cbb7fe7d6ca6ced5c4494ac9fb45633f69c84860eb670a51c935212e9b227991dd5644a42255c667bc17f64fb4e01a191b

# 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 Bridge Pause
##

# Bridge program ID (base58 encoded)
BRIDGE_PROGRAM_ID=6YpL1h2a9u6LuNVi55vAes36xNszt2UDm3Zk1kj4WSBm

# Set to true to pause the bridge, omit or set to false to unpause
PAUSED=false
115 changes: 115 additions & 0 deletions solana/devnet-alpha/2025-10-23-mcm-unpause-bridge/FACILITATORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Facilitator Instructions: MCM Bridge Unpause

## Overview

As a Facilitator, you are responsible for:
1. Preparing the bridge unpause 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/devnet-alpha/2025-10-23-mcm-unpause-bridge
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 bridge unpause 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

# Bridge configuration
BRIDGE_PROGRAM_ID=<bridge-program-id>
PAUSED=false # or true to pause
```

### 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:
- Bridge program ID is correct
- Pause status is correct (unpausing)
- Valid until timestamp is appropriate

### 1.4. Commit and push

```bash
git add .
git commit -m "Add MCM bridge unpause 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

## Phase 4: Verification

### 4.1. View transaction 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 and verify:
- The transaction was successful
- The program logs show `Instruction: SetPauseStatus` (Anchor log)
- The pause status matches the intended action (unpaused)

### 4.2. 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.).
27 changes: 27 additions & 0 deletions solana/devnet-alpha/2025-10-23-mcm-unpause-bridge/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
include ../.env
include .env

include ../../Makefile

##
# MCM Bridge Pause/Unpause Workflow
##

# Step 1: Create pause/unpause proposal
.PHONY: step1-create-proposal
step1-create-proposal:
@echo "==> Step 1: Creating MCM pause/unpause proposal..."
make mcm-proposal-bridge-pause

# 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-signatures-all
make mcm-proposal-all
51 changes: 51 additions & 0 deletions solana/devnet-alpha/2025-10-23-mcm-unpause-bridge/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# MCM Bridge Unpause

Status: [EXECUTED](https://solscan.io/tx/2a23mhJfhs9uqrbXf7FvqgL38A5GgTUycqFWxXhiaMY6k8PD5YtSSe2EX9QXfH4cpJtsS8TPvXp9ep1AnBsgt8Qs?cluster=devnet)

## Description

This task unpauses the Bridge program using the MCM program. This is a critical security operation that can be used to halt bridge operations in emergency situations.

## Procedure for Signers

### 1. Update repo

```bash
cd contract-deployments
git pull
cd solana/devnet-alpha/2025-10-23-mcm-unpause-bridge
make deps
```

### 2. Setup Ledger

Your Ledger needs to be connected and unlocked. The **Ethereum application** needs to be opened on Ledger with the message "Application is ready".

### 3. Sign the proposal

```bash
make sign
```

This command will:
1. Display the proposal hash
2. Prompt you to sign on your Ledger
3. Output your signature

**Verify on your Ledger**: Check that the data you're signing matches the proposal hash displayed in the terminal.

After signing, you will see output like:

```
Signature: 1234567890abcdef...
```

### 4. Send signature to Facilitator

Copy the **entire signature** and send it to the Facilitator via your secure communication channel.

**That's it!** The Facilitator will collect all signatures and execute the proposal.

## For Facilitators

See [FACILITATORS.md](./FACILITATORS.md) for complete instructions on preparing, executing, and verifying this task.
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
{
"confirmationStatus": "finalized",
"transaction": {
"signatures": [
"2a23mhJfhs9uqrbXf7FvqgL38A5GgTUycqFWxXhiaMY6k8PD5YtSSe2EX9QXfH4cpJtsS8TPvXp9ep1AnBsgt8Qs"
],
"message": {
"header": {
"numRequiredSignatures": 1,
"numReadonlySignedAccounts": 0,
"numReadonlyUnsignedAccounts": 4
},
"accountKeys": [
"2aWsUTRfJu2hPNUYHaYJjm6C3SVPqXjtoxu2VgBXsd72",
"7BrnaHaHtFDshmyrZFi28r9vzxTqcmTjSZcf7KdLHRhL",
"9mYamYp9qGXSC5whTmfH92RG2BdBpwSP3DwaczyFieDN",
"F1HSdZSs7CWSNBV4jqa977hLcuxn6fcdg8R5JuoFvM2q",
"DBKy3Bb6kFS2HH2JXZ1DhaR1KvZ6z6nTVyu4HJuvnd1S",
"6YpL1h2a9u6LuNVi55vAes36xNszt2UDm3Zk1kj4WSBm",
"2N9nKVFPHsBVazniiYNxECB2nPLcwjk3dHAJH9tkr2xQ",
"Ea5qsVs2kwQXi7LMAh3Qg5YKpuPQbW7oqvYaPXUwBwoX"
],
"recentBlockhash": "diWKQ7P2oNPhbvrFgCL8xpsarX1MGhkK7MAWGVnkPC5",
"instructions": [
{
"programIdIndex": 7,
"accounts": [
1,
4,
2,
5,
6,
0,
3,
6
],
"data": "3XtzmXSf21G7ZgSaukdCPnKeKSpmU4LsofeemapAhJezh47KjzKQdAh5tmeJ3rjtfzSbUWeiAz3RZbhRmcSCLKtG3WCgLkq6aEiuE9vgKYkfnEpWBct1e5ubWQYKa7iLdAtA2C3q362WnonV",
"stackHeight": null
}
]
}
},
"meta": {
"err": null,
"status": {
"Ok": null
},
"fee": 5000,
"preBalances": [
197825900280,
4134240,
1252800,
4565760,
1343280,
1141440,
0,
1141440
],
"postBalances": [
197825895280,
4134240,
1252800,
4565760,
1343280,
1141440,
0,
1141440
],
"innerInstructions": [
{
"index": 0,
"instructions": [
{
"programIdIndex": 5,
"accounts": [
3,
6
],
"data": "2WBxVujLscd9h",
"stackHeight": 2
}
]
}
],
"logMessages": [
"Program Ea5qsVs2kwQXi7LMAh3Qg5YKpuPQbW7oqvYaPXUwBwoX invoke [1]",
"Program log: Instruction: Execute",
"Program 6YpL1h2a9u6LuNVi55vAes36xNszt2UDm3Zk1kj4WSBm invoke [2]",
"Program log: Instruction: SetPauseStatus",
"Program 6YpL1h2a9u6LuNVi55vAes36xNszt2UDm3Zk1kj4WSBm consumed 5974 of 179123 compute units",
"Program 6YpL1h2a9u6LuNVi55vAes36xNszt2UDm3Zk1kj4WSBm success",
"Program data: 3Q/UHSP8/04CAAAAAAAAAFJw9BMpTsJAnaNQ2SDcXQ5pG2X7hoV33jo1m3m+5rSsCQAAAHYZkdly0eyRAA==",
"Program Ea5qsVs2kwQXi7LMAh3Qg5YKpuPQbW7oqvYaPXUwBwoX consumed 32480 of 200000 compute units",
"Program Ea5qsVs2kwQXi7LMAh3Qg5YKpuPQbW7oqvYaPXUwBwoX success"
],
"preTokenBalances": [],
"postTokenBalances": [],
"rewards": [],
"loadedAddresses": {
"writable": [],
"readonly": []
},
"computeUnitsConsumed": 32480
},
"blockTime": 1761252055,
"slot": 416627224
}
Loading