diff --git a/Makefile b/Makefile index 4604f077..0deb3e0e 100644 --- a/Makefile +++ b/Makefile @@ -126,15 +126,12 @@ checkout-signer-tool: git fetch --depth=1 origin $(SIGNER_TOOL_COMMIT); \ git reset --hard FETCH_HEAD -.PHONY: sign -sign: +.PHONY: sign-task +sign-task: checkout-signer-tool cd $(SIGNER_TOOL_PATH); \ npm ci; \ npm run dev -.PHONY: sign-task -sign-task: checkout-signer-tool sign - ## # Solidity Testing ## diff --git a/sepolia/2025-10-23-pause-bridge-base/.env b/sepolia/2025-10-23-pause-bridge-base/.env new file mode 100644 index 00000000..9103a958 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/.env @@ -0,0 +1,7 @@ +OP_COMMIT=594bc933a38425f745b46399a3619bcdeb74965d +BASE_CONTRACTS_COMMIT=98ec680a67c173d38aa52588c5dc0fbaa1c0561c + +# Sepolia +OWNER_SAFE=0x5dfEB066334B67355A15dc9b67317fD2a2e1f77f +L1_PORTAL=0x49f53e41452C74589E85cA1677426Ba426459e85 +L2_BRIDGE=0x64567a9147fa89B1edc987e36Eb6f4b6db71656b diff --git a/sepolia/2025-10-23-pause-bridge-base/FACILITATOR.md b/sepolia/2025-10-23-pause-bridge-base/FACILITATOR.md new file mode 100644 index 00000000..49257e39 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/FACILITATOR.md @@ -0,0 +1,24 @@ +# Facilitator Guide + +Guide for facilitators after collecting signatures from signers. + +### 1. Update repo: + +```bash +cd contract-deployments +git pull +cd sepolia/2025-10-23-pause-bridge-base +make deps +``` + +### 2. Execute pause + +```bash +SIGNATURES=AAABBBCCC make execute-pause +``` + +### 3. (When ready) Execute un-pause + +```bash +SIGNATURES=AAABBBCCC make execute-unpause +``` diff --git a/sepolia/2025-10-23-pause-bridge-base/Makefile b/sepolia/2025-10-23-pause-bridge-base/Makefile new file mode 100644 index 00000000..6f927978 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/Makefile @@ -0,0 +1,49 @@ +include ../../Makefile +include ../.env +include .env + +ifndef LEDGER_ACCOUNT +override LEDGER_ACCOUNT = 1 +endif + +SAFE_NONCE=6 + +SCRIPT_NAME=PauseBridge + +.PHONY: gen-validation +gen-validation: checkout-signer-tool run-script + +.PHONY: run-script +run-script: + cd $(SIGNER_TOOL_PATH); \ + npm ci; \ + bun run scripts/genValidationFile.ts --rpc-url $(L1_RPC_URL) \ + --workdir .. --forge-cmd 'forge script --rpc-url $(L1_RPC_URL) \ + $(SCRIPT_NAME) --sig "sign(address[])" [] --sender 0xb2d9a52e76841279EF0372c534C539a4f68f8C0B' --out ../validations/base-signer.json; + +.PHONY: sign-pause +sign-pause: + IS_PAUSED=true SAFE_NONCE=$(SAFE_NONCE) $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) $(SCRIPT_NAME) \ + --sig "sign(address[])" "[]" --sender 0xb2d9a52e76841279EF0372c534C539a4f68f8C0B + +.PHONY: sign-unpause +sign-unpause: + IS_PAUSED=false SAFE_NONCE=$(SAFE_NONCE) $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) $(SCRIPT_NAME) \ + --sig "sign(address[])" "[]" --sender 0xb2d9a52e76841279EF0372c534C539a4f68f8C0B + +# Execute +.PHONY: execute-pause +execute-pause: + IS_PAUSED=true forge script --rpc-url $(L1_RPC_URL) $(SCRIPT_NAME) \ + --sig "run(bytes)" $(SIGNATURES) --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv + +.PHONY: execute-unpause +execute-unpause: + IS_PAUSED=false forge script --rpc-url $(L1_RPC_URL) $(SCRIPT_NAME) \ + --sig "run(bytes)" $(SIGNATURES) --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv + +.PHONY: check-status +check-status: + cast call $(L2_BRIDGE) "paused()" --rpc-url $(L2_RPC_URL) diff --git a/sepolia/2025-10-23-pause-bridge-base/README.md b/sepolia/2025-10-23-pause-bridge-base/README.md new file mode 100644 index 00000000..0c0ae906 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/README.md @@ -0,0 +1,48 @@ +# Pause Base Bridge + +Status: EXECUTED + +## Description + +Pauses the Base side of [Base Bridge](https://github.com/base/bridge). + +## Install dependencies + +### 1. Update foundry + +```bash +foundryup +``` + +### 2. Install Node.js if needed + +First, check if you have node installed + +```bash +node --version +``` + +If you see a version output from the above command, you can move on. Otherwise, install node + +```bash +brew install node +``` + +## Sign Task + +### 1. Update repo: + +```bash +cd contract-deployments +git pull +``` + +### 2. Run the signing tool (NOTE: do not enter the task directory. Run this command from the project's root). + +```bash +make sign-task +``` + +### 3. Open the UI at [http://localhost:3000](http://localhost:3000) + +### 4. Send signature to facilitator diff --git a/sepolia/2025-10-23-pause-bridge-base/foundry.toml b/sepolia/2025-10-23-pause-bridge-base/foundry.toml new file mode 100644 index 00000000..a6a0066d --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/foundry.toml @@ -0,0 +1,21 @@ +[profile.default] +src = 'src' +out = 'out' +libs = ['lib'] +broadcast = 'records' +fs_permissions = [{ access = "read-write", path = "./" }] +optimizer = true +optimizer_runs = 999999 +solc_version = "0.8.28" +via-ir = false +remappings = [ + '@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/', + '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', + '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts', + '@rari-capital/solmate/=lib/solmate/', + '@base-contracts/=lib/base-contracts', + '@solady/=lib/solady/src/', + '@lib-keccak=lib/lib-keccak/contracts/lib/' +] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/sepolia/2025-10-23-pause-bridge-base/records/PauseBridge.s.sol/11155111/run-1761250009978.json b/sepolia/2025-10-23-pause-bridge-base/records/PauseBridge.s.sol/11155111/run-1761250009978.json new file mode 100644 index 00000000..eb6297b2 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/records/PauseBridge.s.sol/11155111/run-1761250009978.json @@ -0,0 +1,91 @@ +{ + "transactions": [ + { + "hash": "0xe6fae08da55fdc7b6528b7811e442346f900e0ae6931942943a5bbbfe4e3b4ae", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0xcA11bde05977b3631167028862bE2a173976CA11", + "0", + "0x174dea7100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000049f53e41452c74589e85ca1677426ba426459e850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e9e05c4200000000000000000000000064567a9147fa89b1edc987e36eb6f4b6db71656b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002416c38b3c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "1", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x56dc393143b8405549aa0c7a299ff0cfc7dd82c596a694d3c2b54fe57710036b23357f11666f06611dec9456682632d7fdb309e93725b5204b9ce48a1e063e621cd62972fb9082eb07ebaaf2b0565f6a333609ba12f24ff52543b20d068f05d46878dcda435eff9ae5a2e04a2b5f9e5d5419a5e9a5f70b021254d604a2146923d31b7a2137ab7d9402e758c0fbe2757c573adf01cf44ced16d7b17d7b2ffb7136a4039fabae68feb11a7863b0edd20ad8bd2cf8ff91ef1558d904db6af00f959b6741c" + ], + "transaction": { + "from": "0x9986ccaf9e3de0ffef82a0f7fa3a06d5afe07252", + "to": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "gas": "0x3cf1a", + "value": "0x0", + "input": "0x6a761202000000000000000000000000ca11bde05977b3631167028862be2a173976ca110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000224174dea7100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000049f53e41452c74589e85ca1677426ba426459e850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e9e05c4200000000000000000000000064567a9147fa89b1edc987e36eb6f4b6db71656b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002416c38b3c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c356dc393143b8405549aa0c7a299ff0cfc7dd82c596a694d3c2b54fe57710036b23357f11666f06611dec9456682632d7fdb309e93725b5204b9ce48a1e063e621cd62972fb9082eb07ebaaf2b0565f6a333609ba12f24ff52543b20d068f05d46878dcda435eff9ae5a2e04a2b5f9e5d5419a5e9a5f70b021254d604a2146923d31b7a2137ab7d9402e758c0fbe2757c573adf01cf44ced16d7b17d7b2ffb7136a4039fabae68feb11a7863b0edd20ad8bd2cf8ff91ef1558d904db6af00f959b6741c0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x3f", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3c3b98", + "logs": [ + { + "address": "0x49f53e41452c74589e85ca1677426ba426459e85", + "topics": [ + "0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32", + "0x0000000000000000000000006f0fb066334b67355a15dc9b67317fd2a2e20890", + "0x00000000000000000000000064567a9147fa89b1edc987e36eb6f4b6db71656b", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186a00016c38b3c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000", + "blockHash": "0xc7ea062f6ab34be42113df58502c6ce2d25ad9b4183d119039dc709b79ccfeeb", + "blockNumber": "0x909482", + "blockTimestamp": "0x68fa8ad8", + "transactionHash": "0xe6fae08da55fdc7b6528b7811e442346f900e0ae6931942943a5bbbfe4e3b4ae", + "transactionIndex": "0x39", + "logIndex": "0x38", + "removed": false + }, + { + "address": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0x1b059d5ad73ceae3d06e384e5071f67169f00807b1ae659b40a60e5852a0055b" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc7ea062f6ab34be42113df58502c6ce2d25ad9b4183d119039dc709b79ccfeeb", + "blockNumber": "0x909482", + "blockTimestamp": "0x68fa8ad8", + "transactionHash": "0xe6fae08da55fdc7b6528b7811e442346f900e0ae6931942943a5bbbfe4e3b4ae", + "transactionIndex": "0x39", + "logIndex": "0x39", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000000000000000000000000000000000000040000000000000002000000000000000000000000000000000000000000000040000000000001000000000000000002000000000000000000000000000800000000000000000000020000000000400000000800000000000020000000000000000008000000000000000000000000000000000008000000000000000002000000000000002000000000000000000000000404080000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000040002000000000000000080000100000000000000000", + "type": "0x2", + "transactionHash": "0xe6fae08da55fdc7b6528b7811e442346f900e0ae6931942943a5bbbfe4e3b4ae", + "transactionIndex": "0x39", + "blockHash": "0xc7ea062f6ab34be42113df58502c6ce2d25ad9b4183d119039dc709b79ccfeeb", + "blockNumber": "0x909482", + "gasUsed": "0x2c1f5", + "effectiveGasPrice": "0xf6402", + "from": "0x9986ccaf9e3de0ffef82a0f7fa3a06d5afe07252", + "to": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1761250009978, + "chain": 11155111, + "commit": "b99e9f4" +} \ No newline at end of file diff --git a/sepolia/2025-10-23-pause-bridge-base/records/PauseBridge.s.sol/11155111/run-1761251184644.json b/sepolia/2025-10-23-pause-bridge-base/records/PauseBridge.s.sol/11155111/run-1761251184644.json new file mode 100644 index 00000000..2ce6b4d6 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/records/PauseBridge.s.sol/11155111/run-1761251184644.json @@ -0,0 +1,91 @@ +{ + "transactions": [ + { + "hash": "0x05f0e3e877ded508584d96b22424b69334a0e73326470b4bb0fe16960664a644", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0xcA11bde05977b3631167028862bE2a173976CA11", + "0", + "0x174dea7100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000049f53e41452c74589e85ca1677426ba426459e850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e9e05c4200000000000000000000000064567a9147fa89b1edc987e36eb6f4b6db71656b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002416c38b3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "1", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x6b00a009c79a2fae0ed54b15ed1f44f5e60067127bb9acc14a95bd5b0278b2de0b8c7e6b8e4f3b8e35439ca59a4727797476d4c01315df7dc269a851dd9ea4781b922110400ab33d3d135b058aaa6f945ccdb487a5c7899dcb67fbd7e447cd99cc11267dd805693df603fde1b41372890ba6cb51ec7173bce42f134489d234e8061ba8070e0c6800e2c96b4a9b7f76c9b1cf3d4f4acdd36ee890ecc3eef5b78c62311f8c27a6495badb164c9b39bf89cd31e291fd6006e2bdd66313ce30e8df05f9a1b" + ], + "transaction": { + "from": "0x9986ccaf9e3de0ffef82a0f7fa3a06d5afe07252", + "to": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "gas": "0x3ced7", + "value": "0x0", + "input": "0x6a761202000000000000000000000000ca11bde05977b3631167028862be2a173976ca110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000224174dea7100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000049f53e41452c74589e85ca1677426ba426459e850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e9e05c4200000000000000000000000064567a9147fa89b1edc987e36eb6f4b6db71656b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002416c38b3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c36b00a009c79a2fae0ed54b15ed1f44f5e60067127bb9acc14a95bd5b0278b2de0b8c7e6b8e4f3b8e35439ca59a4727797476d4c01315df7dc269a851dd9ea4781b922110400ab33d3d135b058aaa6f945ccdb487a5c7899dcb67fbd7e447cd99cc11267dd805693df603fde1b41372890ba6cb51ec7173bce42f134489d234e8061ba8070e0c6800e2c96b4a9b7f76c9b1cf3d4f4acdd36ee890ecc3eef5b78c62311f8c27a6495badb164c9b39bf89cd31e291fd6006e2bdd66313ce30e8df05f9a1b0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x40", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3cdb21", + "logs": [ + { + "address": "0x49f53e41452c74589e85ca1677426ba426459e85", + "topics": [ + "0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32", + "0x0000000000000000000000006f0fb066334b67355a15dc9b67317fd2a2e20890", + "0x00000000000000000000000064567a9147fa89b1edc987e36eb6f4b6db71656b", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186a00016c38b3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x223710445892c08e4135a8cccdda857b543aabbdc0e9ae23cc479942631276ef", + "blockNumber": "0x9094e4", + "blockTimestamp": "0x68fa8f70", + "transactionHash": "0x05f0e3e877ded508584d96b22424b69334a0e73326470b4bb0fe16960664a644", + "transactionIndex": "0x30", + "logIndex": "0x2b", + "removed": false + }, + { + "address": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", + "0x9f8287f8ea209cb8ddcd13a15c260bfb43ee4ec65c3e8ad46b6e06a6edf3c834" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x223710445892c08e4135a8cccdda857b543aabbdc0e9ae23cc479942631276ef", + "blockNumber": "0x9094e4", + "blockTimestamp": "0x68fa8f70", + "transactionHash": "0x05f0e3e877ded508584d96b22424b69334a0e73326470b4bb0fe16960664a644", + "transactionIndex": "0x30", + "logIndex": "0x2c", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000008000000000000000000000000000000040000000000000002000000000000000000000000000000000000000000000040000200000001000000000000000002000000000000000000000000000800000000000000000000020000000000400000000820000000000020000000000000000008000000000000000000000000000000000008000000000000000002000000000000000000000000000000000000000404080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000040002000000000000000080000000000000000000000", + "type": "0x2", + "transactionHash": "0x05f0e3e877ded508584d96b22424b69334a0e73326470b4bb0fe16960664a644", + "transactionIndex": "0x30", + "blockHash": "0x223710445892c08e4135a8cccdda857b543aabbdc0e9ae23cc479942631276ef", + "blockNumber": "0x9094e4", + "gasUsed": "0x2c1c5", + "effectiveGasPrice": "0xfa1cf", + "from": "0x9986ccaf9e3de0ffef82a0f7fa3a06d5afe07252", + "to": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1761251184644, + "chain": 11155111, + "commit": "b99e9f4" +} \ No newline at end of file diff --git a/sepolia/2025-10-23-pause-bridge-base/script/PauseBridge.s.sol b/sepolia/2025-10-23-pause-bridge-base/script/PauseBridge.s.sol new file mode 100644 index 00000000..5710012d --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/script/PauseBridge.s.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Vm} from "forge-std/Vm.sol"; +import {IMulticall3} from "forge-std/interfaces/IMulticall3.sol"; +import {Simulation} from "@base-contracts/script/universal/Simulation.sol"; +import {MultisigScript} from "@base-contracts/script/universal/MultisigScript.sol"; + +interface IOptimismPortal2 { + function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes memory _data) + external + payable; +} + +interface IBridge { + function setPaused(bool) external; +} + +contract PauseBridge is MultisigScript { + address public immutable OWNER_SAFE = vm.envAddress("OWNER_SAFE"); + address public immutable L1_PORTAL = vm.envAddress("L1_PORTAL"); + address public immutable L2_BRIDGE = vm.envAddress("L2_BRIDGE"); + bool public immutable IS_PAUSED = vm.envBool("IS_PAUSED"); + + function _buildCalls() internal view override returns (IMulticall3.Call3Value[] memory) { + IMulticall3.Call3Value[] memory calls = new IMulticall3.Call3Value[](1); + + address to = L2_BRIDGE; + uint256 value = 0; + uint64 gasLimit = 100_000; + bool isCreation = false; + bytes memory data = abi.encodeCall(IBridge.setPaused, (IS_PAUSED)); + + calls[0] = IMulticall3.Call3Value({ + target: L1_PORTAL, + allowFailure: false, + callData: abi.encodeCall(IOptimismPortal2.depositTransaction, (to, value, gasLimit, isCreation, data)), + value: value + }); + + return calls; + } + + function _postCheck(Vm.AccountAccess[] memory, Simulation.Payload memory) internal view override {} + + function _ownerSafe() internal view override returns (address) { + return OWNER_SAFE; + } +} diff --git a/sepolia/2025-10-23-pause-bridge-base/validations/base-signer.json b/sepolia/2025-10-23-pause-bridge-base/validations/base-signer.json new file mode 100644 index 00000000..443fe953 --- /dev/null +++ b/sepolia/2025-10-23-pause-bridge-base/validations/base-signer.json @@ -0,0 +1,58 @@ +{ + "task_name": "sepolia-pause-base-bridge", + "script_name": "PauseBridge", + "signature": "sign(address[])", + "sender": "0xb2d9a52e76841279EF0372c534C539a4f68f8C0B", + "args": "[]", + "ledger-id": 1, + "rpc_url": "https://ethereum-full-sepolia-k8s-dev.cbhq.net", + "expected_domain_and_message_hashes": { + "address": "0x5dfEB066334B67355A15dc9b67317fD2a2e1f77f", + "domain_hash": "0x0127bbb910536860a0757a9c0ffcdf9e4452220f566ed83af1f27f9e833f0e23", + "message_hash": "0x4b6ccc7a2fbd88da7340b54ab6b065a2a6640ed4dcaf3342fefa89bf075eec90" + }, + "state_overrides": [ + { + "name": "CB Signer Safe - Sepolia", + "address": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "overrides": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Override the threshold to 1 so the transaction simulation can occur." + }, + { + "key": "0x2e7309fd460be25e22fa96a891bd961839cf6c2ca56f9a059b605f768f8b4a92", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "description": "Simulates an approval from msg.sender in order for the task simulation to succeed." + } + ] + } + ], + "state_changes": [ + { + "name": "OptimismPortal2 - Sepolia", + "address": "0x49f53e41452c74589e85ca1677426ba426459e85", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "before": "0x00000000009092cb000000000007e1760000000000000000000000003b9aca00", + "after": "0x00000000009092cc00000000000186a00000000000000000000000003b9aca00", + "description": "Gas fee tracking for deposit tx execution on L2" + } + ] + }, + { + "name": "CB Signer Safe - Sepolia", + "address": "0x5dfeb066334b67355a15dc9b67317fd2a2e1f77f", + "changes": [ + { + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "before": "0x0000000000000000000000000000000000000000000000000000000000000006", + "after": "0x0000000000000000000000000000000000000000000000000000000000000007", + "description": "Increments the nonce" + } + ] + } + ] +}