#!/usr/bin/env bash # Propose emergency pause via multisig # Usage: ./propose-pause.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../../.." && pwd)" source "$PROJECT_ROOT/.env" 2>/dev/null || true MULTISIG_ADDRESS="${1:-}" TARGET_CONTRACT="${2:-}" REASON="${3:-Emergency pause}" if [ -z "$MULTISIG_ADDRESS" ] || [ -z "$TARGET_CONTRACT" ]; then echo "Usage: $0 [reason]" echo "" echo "Example:" echo " $0 0x1234... 0x5678... 'Security incident detected'" exit 1 fi RPC_URL="${ETHEREUM_MAINNET_RPC:-${RPC_URL:-}}" if [ -z "$RPC_URL" ]; then echo "Error: RPC_URL or ETHEREUM_MAINNET_RPC must be set" exit 1 fi echo "Proposing emergency pause via multisig..." echo "Multisig: $MULTISIG_ADDRESS" echo "Target Contract: $TARGET_CONTRACT" echo "Reason: $REASON" echo "" # Encode pause transaction data # Note: This assumes the target contract has a pause() function PAUSE_DATA=$(cast calldata "pause()") # Create multisig transaction MULTISIG_CALLDATA=$(cast calldata "submitTransaction(address,uint256,bytes)" \ "$TARGET_CONTRACT" \ "0" \ "$PAUSE_DATA") echo "Transaction data prepared:" echo "$MULTISIG_CALLDATA" echo "" echo "To submit this transaction:" echo "1. Use Gnosis Safe web interface, or" echo "2. Use Gnosis Safe SDK, or" echo "3. Call submitTransaction on the multisig contract" echo "" echo "Transaction details:" echo " To: $MULTISIG_ADDRESS" echo " Data: $MULTISIG_CALLDATA" echo " Value: 0 ETH" echo "" # Create JSON file with transaction details TX_FILE="$SCRIPT_DIR/pause-proposal-$(date +%Y%m%d-%H%M%S).json" cat > "$TX_FILE" <