#!/usr/bin/env bash # Transfer contract ownership to multisig # Usage: ./transfer-ownership.sh [contract_name] 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:-}" CONTRACT_ADDRESS="${2:-}" CONTRACT_NAME="${3:-Unknown}" if [ -z "$MULTISIG_ADDRESS" ] || [ -z "$CONTRACT_ADDRESS" ]; then echo "Usage: $0 [contract_name]" echo "" echo "Example:" echo " $0 0x1234... 0x5678... LiquidityPoolETH" 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 PRIVATE_KEY="${PRIVATE_KEY:-}" if [ -z "$PRIVATE_KEY" ]; then echo "Error: PRIVATE_KEY must be set" exit 1 fi echo "Transferring ownership to multisig..." echo "Contract: $CONTRACT_NAME ($CONTRACT_ADDRESS)" echo "Multisig: $MULTISIG_ADDRESS" echo "" # Check if contract has owner function echo "Checking contract functions..." OWNER=$(cast call "$CONTRACT_ADDRESS" "owner()" --rpc-url "$RPC_URL" 2>/dev/null || echo "") if [ -z "$OWNER" ]; then echo "⚠️ Contract may not have owner() function" echo " Check if contract uses different access control pattern" echo "" fi # Create transfer transaction # Note: Adjust function name based on contract (transferOwnership, setOwner, etc.) TRANSFER_DATA=$(cast calldata "transferOwnership(address)" "$MULTISIG_ADDRESS" 2>/dev/null || \ cast calldata "setOwner(address)" "$MULTISIG_ADDRESS" 2>/dev/null || \ echo "") if [ -z "$TRANSFER_DATA" ]; then echo "⚠️ Could not determine transfer function" echo " Common functions:" echo " - transferOwnership(address)" echo " - setOwner(address)" echo " - updateOwner(address)" echo "" echo " Manual transfer required" exit 1 fi echo "Transfer transaction data:" echo " To: $CONTRACT_ADDRESS" echo " Data: $TRANSFER_DATA" echo "" # For safety, don't auto-execute echo "⚠️ To execute this transfer:" echo "" echo "Option 1: Use cast send (if current owner)" echo " cast send $CONTRACT_ADDRESS \"transferOwnership(address)\" $MULTISIG_ADDRESS \\" echo " --rpc-url $RPC_URL \\" echo " --private-key $PRIVATE_KEY" echo "" echo "Option 2: Use multisig (if already transferred)" echo " 1. Create transaction in multisig" echo " 2. Get required signatures" echo " 3. Execute transaction" echo "" # Create transaction file TX_FILE="$SCRIPT_DIR/transfer-ownership-$(date +%Y%m%d-%H%M%S).json" cat > "$TX_FILE" <