110 lines
4.0 KiB
Bash
Executable File
110 lines
4.0 KiB
Bash
Executable File
#!/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)"' |