#!/bin/bash set -euo pipefail echo "=== Funding Wallet with Base Sepolia USDC ===" # Required environment variables : "${PRIVATE_KEY:?PRIVATE_KEY must be set}" : "${FUNDING_FAUCET_URL:?FUNDING_FAUCET_URL must be set}" WALLET_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY") echo "Wallet address: $WALLET_ADDRESS" # Check current USDC balance USDC_CONTRACT="0x036CbD53842c5426634e7929541eC2318f3dCF7e" RPC_URL="https://sepolia.base.org" BALANCE=$(cast call "$USDC_CONTRACT" "balanceOf(address)(uint256)" "$WALLET_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0") BALANCE_DECIMAL=$(cast to-dec "$BALANCE" 2>/dev/null || echo "0") BALANCE_USDC=$(echo "scale=6; $BALANCE_DECIMAL / 1000000" | bc 2>/dev/null || echo "0") echo "Current USDC balance: $BALANCE_USDC USDC" # If balance is less than 10 USDC, request from faucet if (( $(echo "$BALANCE_USDC < 10" | bc -l) )); then echo "Balance below 10 USDC, requesting from faucet..." # Request from faucet (Coinbase CDP faucet API format) curl -X POST "$FUNDING_FAUCET_URL" \ -H "Content-Type: application/json" \ -d "{\"address\": \"$WALLET_ADDRESS\", \"token\": \"USDC\"}" \ || echo "Faucet request failed, may need manual funding" # Wait for funding echo "Waiting for funding..." sleep 30 # Check balance again BALANCE=$(cast call "$USDC_CONTRACT" "balanceOf(address)(uint256)" "$WALLET_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0") BALANCE_DECIMAL=$(cast to-dec "$BALANCE" 2>/dev/null || echo "0") BALANCE_USDC=$(echo "scale=6; $BALANCE_DECIMAL / 1000000" | bc 2>/dev/null || echo "0") echo "New USDC balance: $BALANCE_USDC USDC" else echo "Sufficient USDC balance" fi # Also fund with ETH for gas ETH_BALANCE=$(cast balance "$WALLET_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0") ETH_BALANCE_DECIMAL=$(cast to-dec "$ETH_BALANCE" 2>/dev/null || echo "0") ETH_BALANCE_ETH=$(echo "scale=6; $ETH_BALANCE_DECIMAL / 1000000000000000000" | bc 2>/dev/null || echo "0") echo "Current ETH balance: $ETH_BALANCE_ETH ETH" if (( $(echo "$ETH_BALANCE_ETH < 0.01" | bc -l) )); then echo "ETH balance low, requesting from faucet..." curl -X POST "$FUNDING_FAUCET_URL" \ -H "Content-Type: application/json" \ -d "{\"address\": \"$WALLET_ADDRESS\", \"token\": \"ETH\"}" \ || echo "ETH faucet request failed" sleep 10 fi echo "=== Wallet Funding Complete ==="