#!/bin/bash echo "Analyzing 171 Valid Failing Pools" echo "==================================" echo "" # Get the valid pools from cleaned blacklist POOLS=$(cat logs/pool_blacklist.json | jq -r '.[].address' | head -30) echo "Testing first 30 valid failing pools to identify exchange types..." echo "" RPC="https://arb1.arbitrum.io/rpc" UNISWAP_V3=0 UNISWAP_V2=0 SUSHISWAP=0 OTHER=0 UNKNOWN=0 for POOL in $POOLS; do echo "Analyzing $POOL:" # Test UniswapV3 methods TOKEN0=$(curl -s -X POST $RPC \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL\",\"data\":\"0x0dfe1681\"},\"latest\"],\"id\":1}" \ | jq -r '.result // "error"') TOKEN1=$(curl -s -X POST $RPC \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL\",\"data\":\"0xd21220a7\"},\"latest\"],\"id\":1}" \ | jq -r '.result // "error"') # Check fee() for V3 FEE=$(curl -s -X POST $RPC \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL\",\"data\":\"0xddca3f43\"},\"latest\"],\"id\":1}" \ | jq -r '.result // "error"') # Check getReserves() for V2 RESERVES=$(curl -s -X POST $RPC \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL\",\"data\":\"0x0902f1ac\"},\"latest\"],\"id\":1}" \ | jq -r '.result // "error"') # Check slot0() for V3 SLOT0=$(curl -s -X POST $RPC \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL\",\"data\":\"0x3850c7bd\"},\"latest\"],\"id\":1}" \ | jq -r '.result // "error"') # Analyze results if [[ "$TOKEN0" == "0x"* ]] && [[ "$TOKEN1" == "0x"* ]]; then if [[ "$FEE" == "0x"* ]] && [[ "$SLOT0" == "0x"* ]]; then echo " ✅ UniswapV3 Pool (has token0, token1, fee, slot0)" UNISWAP_V3=$((UNISWAP_V3 + 1)) # Decode the fee to see what tier if [[ "$FEE" == "0x"* ]]; then FEE_INT=$((16#${FEE:2})) echo " Fee tier: $FEE_INT ($(echo "scale=2; $FEE_INT/10000" | bc)%)" fi # Decode tokens TOKEN0_ADDR="0x${TOKEN0: -40}" TOKEN1_ADDR="0x${TOKEN1: -40}" echo " Token0: $TOKEN0_ADDR" echo " Token1: $TOKEN1_ADDR" elif [[ "$RESERVES" == "0x"* ]] && [[ ${#RESERVES} -gt 66 ]]; then echo " ✅ UniswapV2/Sushiswap Pool (has token0, token1, getReserves)" UNISWAP_V2=$((UNISWAP_V2 + 1)) else echo " ⚠️ Has token0/token1 but unknown type" UNKNOWN=$((UNKNOWN + 1)) fi else # Try other DEX signatures echo " ❌ Not Uniswap - checking other protocols..." # Check for Balancer vault getPoolTokens BALANCER=$(curl -s -X POST $RPC \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL\",\"data\":\"0xf94d4668\"},\"latest\"],\"id\":1}" \ | jq -r '.result // "error"') if [[ "$BALANCER" != "error" ]] && [[ "$BALANCER" == "0x"* ]]; then echo " ✅ Possibly Balancer Pool" OTHER=$((OTHER + 1)) else echo " ❓ Unknown DEX type" UNKNOWN=$((UNKNOWN + 1)) fi fi echo "" done echo "Summary of 30 Analyzed Pools" echo "=============================" echo "UniswapV3: $UNISWAP_V3" echo "UniswapV2/Sushi: $UNISWAP_V2" echo "Other DEX: $OTHER" echo "Unknown: $UNKNOWN" echo "" echo "Checking original error reasons from blacklist..." echo "=================================================" cat logs/pool_blacklist.json | jq '[.[] | select(.is_blacklisted == true)] | group_by(.last_reason) | map({reason: .[0].last_reason, count: length})' | jq -r '.[] | "\(.reason): \(.count)"'