[FINAL] Protocol Upgrade #8: Guardian, Security Council Threshold and L2 ProxyAdmin Ownership changes for Stage 1 Decentralization

The verification should be carried out by the Security Council (SC). The OP Labs will provide a L2 block number anchor that the SC will verify that its output is configured in the AnchorStateRegistry. The SC will need access to an op-node to verify this.

The procedure can be summarized as:

  1. OP Labs provides a recent block number used to initialize the AnchorStateRegistry
  2. Given an op-node, the SC will run the following script to verify the AnchorStateRegistry:
set BLOCK_NUMBER # Anchored L2 block provied by OP Labs
set ASR # AnchorStateRegistry address
set OPNODE_URL
ROOT=$(cast rpc optimism_outputAtBlock $(cast --to-hex $BLOCK_NUMBER) --rpc-url $OPNODE_URL | jq .outputRoot)
cast call $ASR 'anchors(uint32) returns(bytes32,uint256)' 0

The output of cast call must correspond to the ROOT and provided BLOCK_NUMBER.

#!/bin/bash
set -euo pipefail
L1URL="${1:?Must specify L1 RPC URL}"
OPNODEURL="${2:?Must specify op-node RPC URL}"
ASR="${3:-0x18DAc71c228D1C32c99489B7323d441E1175e443}"

RESULT=$(cast call  --rpc-url "${L1URL}" "${ASR}" 'anchors(uint32) returns(bytes32,uint256)' 0)
# First result is the output root
ACTUAL_ROOT=$(echo "$RESULT" | head -n 1)
# Second result is the block number but cast outputs it in decimal and scientific notation (e.g. 120059865 [1.2e8])
# So trim to just the decimal number
BLOCK_NUM=$(echo "$RESULT" | tail -n 1 | cut -d ' ' -f 1)

echo "Block Number: ${BLOCK_NUM}"
echo "Actual:       ${ACTUAL_ROOT}"

BLOCK_HEX=$(cast --to-hex "${BLOCK_NUM}")
EXPECTED_ROOT=$(cast rpc optimism_outputAtBlock "${BLOCK_HEX}" --rpc-url "${OPNODEURL}" | jq -r .outputRoot)
echo "Expected:     ${EXPECTED_ROOT}"

if [[ "${EXPECTED_ROOT}" == "${ACTUAL_ROOT}" ]]
then
    echo "Anchor state is valid"
else
    echo "Anchor state is invalid"
fi

The Guardian is able to take 4 actions, which are enumerated in the DeputyGuardian module’s specification:

  1. Pause withdrawals
  2. Unpause withdrawals
  3. Blacklist a dispute game
  4. Set the respected game type

The intention is to finalize both upgrades as soon as possible after the Token House approves, and the Citizen’s House veto period has passed on Wednesday June 5th.

However its worth noting that the two changes are independent of each other, and if for whatever reason either proposal does not go forward, they are not mutually dependent and can be activated independently.

2 Likes