TODO: Replace ‣ with this runbook once psp_executor is provisioned properly for both Superchain Mainnet and Sepolia.
As deputy guardian of the Superchain, Optimism Foundation has authorized both OP Labs and Coinbase to maintain pre-signd pauses so that authorized personnel can unilaterally execute a Superchain-wide pause to pause withdrawals across all chains in the Superchain.
For OP Labs, the pre-signed pauses are kept in GCP Secret Manager and a psp_executor
API server in k8s is responsible for monitoring, retrieving and executing the pre-signed pause when called.
This runbook outlines how an authorized personnel (OP Labs Security Oncall for Superchain Mainnet, and all signers on the Superchain Sepolia guardian multisig for Superchain Sepolia) can leverage the API service to execute the pre-signed pause.
Authenticate with the right k8s cluster:
$ gcloud container clusters get-credentials oplabs-dev-client-primary --region us-central1 --project oplabs-dev-client
Reauthentication required.
Please touch your security key.
Fetching cluster endpoint and auth data.
kubeconfig entry generated for oplabs-dev-client-primary.
Make sure Tailscale VPN is on.
kubie ctx
and choose the right cluster.
gke_oplabs-tools-security_us-central1_oplabs-tools-security-primary
gke_oplabs-dev-security_us-central1_oplabs-dev-security-primary
kubie ns
and choose the op-defender
namespace.
kubectl get all
and keep a note of the pod name to use.
pod/psp-executor-op-sepolia-dev-5db657c574-m4lws
.Port forward the API server to localhost with the correct pod.
kubectl port-forward pod/psp-executor-op-**sepolia**-**prod**-5db657c574-m4lws **8080**:8080
kubectl port-forward pod/psp-executor-op-**mainnet**-**dev**-4ac887c533-339gp **8888**:8080
Use cURL to call the HTTP API psp-executor
# PROD
$ curl -X POST <http://localhost:8080/api/psp_execution> \\-H "Content-Type: application/json" \\-d '{"Pause":true,"Timestamp":1596240000,"Operator":"your name"}'
{"message":"PSP executed successfully","status":200}
# DEV
$ curl -X POST <http://localhost:8888/api/psp_execution> \\-H "Content-Type: application/json" \\-d '{"Pause":true,"Timestamp":1596240000,"Operator":"your name"}'
Verify if the pause is successful onchain
Production (Mainnet):
cast call 0x95703e0982140D16f8ebA6d158FccEde42f04a4C "paused()(bool)" --rpc-url <https://ethereum.publicnode.com>
Production (Sepolia):
cast call 0xC2Be75506d5724086DEB7245bd260Cc9753911Be "paused()(bool)" --rpc-url <https://ethereum-sepolia.publicnode.com>
Development (Mainnet or Sepolia):
# Use the RPC the tenderly provided RPC for the forks.
cast call 0xC2Be75506d5724086DEB7245bd260Cc9753911Be "paused()(bool)" --rpc-url <https://tenderly.co/[XXXXX...XXXX]>
Other useful links for the operator to refer to.