Files
proxmox/scripts/deployment/deploy-transaction-mirror-chain138.sh
defiQUG bea1903ac9
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Sync all local changes: docs, config, scripts, submodule refs, verification evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 15:46:06 -08:00

78 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deploy TransactionMirror to Chain 138.
# Use this when forge script DeployTransactionMirror.s.sol fails with constructor-args decode (forge create works).
# Usage: ./scripts/deployment/deploy-transaction-mirror-chain138.sh [--dry-run]
# --dry-run Print forge create command and exit 0 (no deploy).
# Requires: smom-dbis-138/.env with PRIVATE_KEY, RPC_URL_138 or RPC_URL (Chain 138 Core). Optional: MIRROR_ADMIN.
# Also sources load-project-env (secure-secrets, config). Must run from a host that can reach RPC (e.g. LAN to 192.168.11.211:8545).
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
SMOM="${SMOM_DIR:-${PROJECT_ROOT}/smom-dbis-138}"
DRY_RUN=false
for a in "$@"; do [[ "$a" == "--dry-run" ]] && DRY_RUN=true && break; done
[[ -f "${SCRIPT_DIR}/../lib/load-project-env.sh" ]] && source "${SCRIPT_DIR}/../lib/load-project-env.sh" 2>/dev/null || true
[[ -f "${SMOM}/.env" ]] && set -a && source "${SMOM}/.env" 2>/dev/null && set +a || true
# RPC_URL_138 or RPC_URL (alias)
RPC="${RPC_URL_138:-${RPC_URL:-http://192.168.11.211:8545}}"
export RPC_URL_138="$RPC"
export ETH_RPC_URL="$RPC"
GAS_PRICE="${GAS_PRICE:-1000000000}"
if ! $DRY_RUN && [[ -z "${PRIVATE_KEY:-}" ]]; then
echo "ERROR: PRIVATE_KEY not set. Set in smom-dbis-138/.env"
exit 1
fi
if [[ "${PRIVATE_KEY#0x}" == "$PRIVATE_KEY" ]]; then
export PRIVATE_KEY="0x$PRIVATE_KEY"
fi
export PRIVATE_KEY # Ensure subshells/forge inherit it
# MIRROR_ADMIN or deployer address
if [[ -n "${MIRROR_ADMIN:-}" ]]; then
ADMIN="$MIRROR_ADMIN"
else
if $DRY_RUN; then ADMIN="<DEPLOYER_ADDRESS>"; else ADMIN=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null) || { echo "ERROR: cast not found or PRIVATE_KEY invalid"; exit 1; }; fi
fi
if $DRY_RUN; then
echo "[dry-run] Would run: forge create ... TransactionMirror --constructor-args $ADMIN --rpc-url $RPC --legacy --gas-price $GAS_PRICE"
echo " Add TRANSACTION_MIRROR_ADDRESS=<deployed> to smom-dbis-138/.env after deploy."
exit 0
fi
echo "Deploying TransactionMirror to Chain 138 (admin=$ADMIN)"
echo " RPC=$RPC"
cd "$SMOM"
# Use forge script (DeployTransactionMirror.s.sol) — more reliable than forge create with env
out=$(env ETH_RPC_URL="$RPC" MIRROR_ADMIN="$ADMIN" forge script script/DeployTransactionMirror.s.sol:DeployTransactionMirror \
--rpc-url "$RPC" \
--broadcast \
--private-key "$PRIVATE_KEY" \
--legacy \
--gas-price "$GAS_PRICE" 2>&1) || { echo "$out"; echo "Run from a host on LAN that can reach $RPC"; exit 1; }
echo "$out"
addr=$(echo "$out" | grep -oE 'TransactionMirror deployed at: (0x[a-fA-F0-9]{40})' | sed 's/TransactionMirror deployed at: //')
if [[ -n "$addr" ]]; then
echo ""
echo "Deployed TransactionMirror at: $addr"
env_file="${SMOM}/.env"
if [[ -f "$env_file" ]]; then
if grep -q "^TRANSACTION_MIRROR_ADDRESS=" "$env_file" 2>/dev/null; then
sed -i "s|^TRANSACTION_MIRROR_ADDRESS=.*|TRANSACTION_MIRROR_ADDRESS=$addr|" "$env_file"
echo " Updated TRANSACTION_MIRROR_ADDRESS in $env_file"
else
echo "TRANSACTION_MIRROR_ADDRESS=$addr" >> "$env_file"
echo " Appended TRANSACTION_MIRROR_ADDRESS to $env_file"
fi
fi
fi
echo ""
echo "Done. Add TRANSACTION_MIRROR_ADDRESS=<deployed> to smom-dbis-138/.env if not already set."