#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then # shellcheck disable=SC1090 source "$SCRIPT_DIR/../lib/deployment/dotenv.sh" load_deployment_env --repo-root "$REPO_ROOT" fi FACTORY="${FACTORY:-${UNISWAP_V3_FACTORY:-}}" RPC_URL="${RPC_URL:-}" TOKEN_A="${TOKEN_A:-}" TOKEN_B="${TOKEN_B:-}" FEE="${FEE:-500}" EXECUTE="${EXECUTE:-0}" SQRT_PRICE_X96="${SQRT_PRICE_X96:-79228162514264337593543950336}" PRIVATE_KEY="${PRIVATE_KEY:-}" if [[ -z "$FACTORY" || -z "$RPC_URL" || -z "$TOKEN_A" || -z "$TOKEN_B" ]]; then echo "Required: FACTORY RPC_URL TOKEN_A TOKEN_B" >&2 exit 1 fi get_pool() { cast call "$FACTORY" \ "getPool(address,address,uint24)(address)" \ "$TOKEN_A" "$TOKEN_B" "$FEE" \ --rpc-url "$RPC_URL" 2>/dev/null || true } pool="$(get_pool)" pool="${pool//$'\n'/}" if [[ -z "$pool" || "$pool" == "0x0000000000000000000000000000000000000000" ]]; then echo "Pool does not exist yet for $TOKEN_A / $TOKEN_B fee $FEE" if [[ "$EXECUTE" != "1" ]]; then echo "Dry run: set EXECUTE=1 to call createPool on $FACTORY" exit 0 fi if [[ -z "$PRIVATE_KEY" ]]; then echo "PRIVATE_KEY is required when EXECUTE=1" >&2 exit 1 fi cast send "$FACTORY" \ "createPool(address,address,uint24)" \ "$TOKEN_A" "$TOKEN_B" "$FEE" \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ -vv pool="$(get_pool)" pool="${pool//$'\n'/}" fi echo "Pool address: $pool" slot0="$(cast call "$pool" "slot0()((uint160,int24,uint16,uint16,uint16,uint8,bool))" --rpc-url "$RPC_URL" 2>/dev/null || true)" slot0_no_ws="$(printf '%s' "$slot0" | tr -d '[:space:]')" if [[ "$slot0_no_ws" == "(0,0,0,0,0,0,false)" || -z "$slot0_no_ws" ]]; then echo "Pool is not initialized" if [[ "$EXECUTE" != "1" ]]; then echo "Dry run: set EXECUTE=1 to initialize at sqrtPriceX96=$SQRT_PRICE_X96" exit 0 fi if [[ -z "$PRIVATE_KEY" ]]; then echo "PRIVATE_KEY is required when EXECUTE=1" >&2 exit 1 fi cast send "$pool" \ "initialize(uint160)" \ "$SQRT_PRICE_X96" \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ -vv echo "Initialized pool at sqrtPriceX96=$SQRT_PRICE_X96" else echo "Pool already initialized: $slot0" fi