Files
proxmox/scripts/mint-tokens-for-deployer.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

171 lines
5.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Mint LINK, cUSDT, cUSDC to deployment wallet; optionally wrap ETH to WETH9/WETH10.
# Usage: ./scripts/mint-tokens-for-deployer.sh [--amount-link N] [--amount-stable N] [--wrap-eth N] [--dry-run]
#
# Defaults: 1000000 LINK (18 decimals), 100000 cUSDT + 100000 cUSDC (6 decimals each), 1 ETH wrap.
# Requires: PRIVATE_KEY, RPC_URL_138 in smom-dbis-138/.env
# Chain 138: use --gas-price 1000000000 (1 gwei) for all txs.
#
# If you get "Replacement transaction underpriced": a stuck tx is blocking the deployer nonce.
# Workarounds: (1) Wait for the stuck tx to be mined, (2) Use MetaMask to send a 0-ETH tx to clear,
# (3) Restart Besu RPC and flush mempool from Proxmox host.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
# Load smom-dbis-138 .env
if [[ -f smom-dbis-138/.env ]]; then
set -a
source smom-dbis-138/.env
set +a
fi
RPC="${RPC_URL_138:-${CHAIN138_RPC_URL:-http://192.168.11.211:8545}}"
GAS_PRICE="${GAS_PRICE:-1000000000}"
GAS_LIMIT="${GAS_LIMIT:-100000}"
# Token addresses (Chain 138)
LINK="0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03"
CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
WETH10="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
# Default amounts
AMOUNT_LINK="${AMOUNT_LINK:-1000000}"
AMOUNT_STABLE="${AMOUNT_STABLE:-100000}"
WRAP_ETH="${WRAP_ETH:-1}"
DRY_RUN=false
for a in "$@"; do
case "$a" in
--amount-link=*) AMOUNT_LINK="${a#*=}";;
--amount-stable=*) AMOUNT_STABLE="${a#*=}";;
--wrap-eth=*) WRAP_ETH="${a#*=}";;
--dry-run) DRY_RUN=true;;
esac
done
DEPLOYER=""
if [[ -n "${PRIVATE_KEY:-}" ]]; then
DEPLOYER=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || true)
fi
if [[ -z "$DEPLOYER" ]]; then
DEPLOYER="${DEPLOYER_ADDRESS:-0x4A666F96fC8764181194447A7dFdb7d471b301C8}"
fi
LINK_RAW="${AMOUNT_LINK}000000000000000000" # 18 decimals
STABLE_RAW="${AMOUNT_STABLE}000000" # 6 decimals
# 1 ETH = 10^18 wei
WRAP_WEI=$(awk "BEGIN {printf \"%.0f\", ${WRAP_ETH} * 1000000000000000000}" 2>/dev/null || echo "1000000000000000000")
echo "=== Mint tokens for deployer ==="
echo "Deployer: $DEPLOYER"
echo "RPC: $RPC"
echo "Amounts: LINK=$AMOUNT_LINK, cUSDT/cUSDC=$AMOUNT_STABLE each, wrap ETH=$WRAP_ETH"
echo ""
run_tx() {
local desc="$1"
shift
if $DRY_RUN; then
echo "[dry-run] Would run: $*"
return 0
fi
echo "Running: $desc ..."
if "$@" 2>&1; then
echo " OK"
return 0
else
echo " FAILED"
return 1
fi
}
if [[ -z "${PRIVATE_KEY:-}" ]] && ! $DRY_RUN; then
echo "Error: PRIVATE_KEY not set in smom-dbis-138/.env"
exit 1
fi
# 1. Mint LINK (MockLinkToken has unrestricted mint)
echo "1. Mint LINK to deployer..."
if $DRY_RUN; then
echo " [dry-run] cast send $LINK \"mint(address,uint256)\" $DEPLOYER $LINK_RAW --rpc-url \$RPC --private-key \$PRIVATE_KEY --legacy --gas-price $GAS_PRICE"
else
if cast send "$LINK" "mint(address,uint256)" "$DEPLOYER" "$LINK_RAW" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit "$GAS_LIMIT" --gas-price "$GAS_PRICE" 2>&1; then
echo " OK"
else
echo " (LINK may not have mint or different interface)"
fi
fi
echo ""
# 2. Mint cUSDT (onlyOwner - deployer must be owner)
echo "2. Mint cUSDT to deployer..."
if $DRY_RUN; then
echo " [dry-run] cast send $CUSDT \"mint(address,uint256)\" $DEPLOYER $STABLE_RAW --rpc-url \$RPC --private-key \$PRIVATE_KEY --legacy --gas-price $GAS_PRICE"
else
if cast send "$CUSDT" "mint(address,uint256)" "$DEPLOYER" "$STABLE_RAW" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit "$GAS_LIMIT" --gas-price "$GAS_PRICE" 2>&1; then
echo " OK"
else
echo " (Deployer may not be owner of cUSDT)"
fi
fi
echo ""
# 3. Mint cUSDC (onlyOwner)
echo "3. Mint cUSDC to deployer..."
if $DRY_RUN; then
echo " [dry-run] cast send $CUSDC \"mint(address,uint256)\" $DEPLOYER $STABLE_RAW --rpc-url \$RPC --private-key \$PRIVATE_KEY --legacy --gas-price $GAS_PRICE"
else
if cast send "$CUSDC" "mint(address,uint256)" "$DEPLOYER" "$STABLE_RAW" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit "$GAS_LIMIT" --gas-price "$GAS_PRICE" 2>&1; then
echo " OK"
else
echo " (Deployer may not be owner of cUSDC)"
fi
fi
echo ""
# 4. Wrap ETH to WETH9 (if WRAP_ETH > 0)
if [[ "${WRAP_ETH:-0}" != "0" ]] && [[ -n "${WRAP_WEI:-}" ]]; then
echo "4. Wrap $WRAP_ETH ETH to WETH9..."
if $DRY_RUN; then
echo " [dry-run] cast send $WETH9 \"deposit()\" --value $WRAP_WEI --rpc-url \$RPC --private-key \$PRIVATE_KEY --legacy --gas-price $GAS_PRICE"
else
if cast send "$WETH9" "deposit()" --value "$WRAP_WEI" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit "$GAS_LIMIT" --gas-price "$GAS_PRICE" 2>&1; then
echo " OK"
else
echo " (Insufficient ETH balance?)"
fi
fi
echo ""
fi
# 5. Wrap ETH to WETH10 (optional, same amount)
if [[ "${WRAP_ETH:-0}" != "0" ]] && [[ -n "${WRAP_WEI:-}" ]]; then
echo "5. Wrap $WRAP_ETH ETH to WETH10..."
if $DRY_RUN; then
echo " [dry-run] cast send $WETH10 \"deposit()\" --value $WRAP_WEI --rpc-url \$RPC --private-key \$PRIVATE_KEY --legacy --gas-price $GAS_PRICE"
else
if cast send "$WETH10" "deposit()" --value "$WRAP_WEI" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit "$GAS_LIMIT" --gas-price "$GAS_PRICE" 2>&1; then
echo " OK"
else
echo " (Insufficient ETH balance?)"
fi
fi
echo ""
fi
echo "=== Done ==="
if ! $DRY_RUN; then
echo "Verify balances: cd smom-dbis-138 && ./scripts/deployment/list-deployer-tokens-all-networks.sh"
fi