- testClient: add ensureFundedWallet() with USDC/ETH balance checks and faucet requests - fund-wallet.sh: update faucet format for Coinbase CDP API - start-test-server.sh: use Coinbase facilitator URL, add payment endpoint verification - test-endpoints.yaml: fund test wallet before server, pass RPC/Faucet URLs to test client
62 lines
No EOL
2.3 KiB
Shell
Executable file
62 lines
No EOL
2.3 KiB
Shell
Executable file
#!/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 ===" |