- Organized 252 files across project - Root directory: 187 → 2 files (98.9% reduction) - Moved configuration guides to docs/04-configuration/ - Moved troubleshooting guides to docs/09-troubleshooting/ - Moved quick start guides to docs/01-getting-started/ - Moved reports to reports/ directory - Archived temporary files - Generated comprehensive reports and documentation - Created maintenance scripts and guides All files organized according to established standards.
143 lines
5.5 KiB
Bash
Executable File
143 lines
5.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Test bridge quote for (ChainID 138, WETH) → (ChainID 1, USDT)
|
|
# Tests thirdweb Bridge API and CCIP Bridge
|
|
# Usage: ./test-bridge-quote.sh
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
|
log_section() { echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"; echo -e "${CYAN}$1${NC}"; echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"; }
|
|
|
|
# Configuration
|
|
CHAIN138_ID=138
|
|
ETHEREUM_MAINNET_ID=1
|
|
WETH_CANONICAL="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
|
USDT_MAINNET="0xdAC17F958D2ee523a2206206994597C13D831ec7"
|
|
AMOUNT="1000000000000000000" # 1 WETH
|
|
|
|
log_section "Bridge Quote Test: (ChainID 138, WETH) → (ChainID 1, USDT)"
|
|
|
|
log_info "Route Details:"
|
|
log_info " From Chain: $CHAIN138_ID"
|
|
log_info " From Token: WETH at $WETH_CANONICAL"
|
|
log_info " To Chain: $ETHEREUM_MAINNET_ID (Ethereum Mainnet)"
|
|
log_info " To Token: USDT at $USDT_MAINNET"
|
|
log_info " Amount: 1 WETH ($AMOUNT wei)"
|
|
log_info ""
|
|
|
|
# Test 1: thirdweb Bridge API
|
|
log_section "Test 1: thirdweb Bridge API"
|
|
|
|
THIRDWEB_ENDPOINTS=(
|
|
"https://api.thirdweb.com/v1/bridge/quote"
|
|
"https://bridge.thirdweb.com/api/quote"
|
|
)
|
|
|
|
BRIDGE_QUOTE_FOUND=false
|
|
|
|
for endpoint in "${THIRDWEB_ENDPOINTS[@]}"; do
|
|
log_info "Trying endpoint: $endpoint"
|
|
|
|
QUOTE_PAYLOAD=$(cat <<EOF
|
|
{
|
|
"fromChainId": $CHAIN138_ID,
|
|
"toChainId": $ETHEREUM_MAINNET_ID,
|
|
"fromTokenAddress": "$WETH_CANONICAL",
|
|
"toTokenAddress": "$USDT_MAINNET",
|
|
"amount": "$AMOUNT"
|
|
}
|
|
EOF
|
|
)
|
|
|
|
QUOTE_RESPONSE=$(curl -s -X POST "$endpoint" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$QUOTE_PAYLOAD" \
|
|
--max-time 10 \
|
|
2>&1 || echo "ERROR")
|
|
|
|
if [[ "$QUOTE_RESPONSE" != *"ERROR"* ]] && [[ "$QUOTE_RESPONSE" != *"404"* ]]; then
|
|
if command -v jq &> /dev/null; then
|
|
# Check for valid quote
|
|
if echo "$QUOTE_RESPONSE" | jq -e '.quoteId, .estimatedTime, .fee, .toAmount' >/dev/null 2>&1; then
|
|
log_success "✅ Valid route found via thirdweb Bridge!"
|
|
log_info " Quote Response:"
|
|
echo "$QUOTE_RESPONSE" | jq '.' 2>/dev/null || echo "$QUOTE_RESPONSE"
|
|
BRIDGE_QUOTE_FOUND=true
|
|
break
|
|
elif echo "$QUOTE_RESPONSE" | jq -e '.error, .message' >/dev/null 2>&1; then
|
|
ERROR_MSG=$(echo "$QUOTE_RESPONSE" | jq -r '.error // .message // "Unknown error"' 2>/dev/null || echo "API error")
|
|
log_warn " API returned error: $ERROR_MSG"
|
|
log_info " Full response: $QUOTE_RESPONSE"
|
|
else
|
|
log_warn " Unexpected response format"
|
|
log_info " Response: $QUOTE_RESPONSE"
|
|
fi
|
|
else
|
|
log_warn " jq not available, cannot parse response"
|
|
log_info " Raw response: $QUOTE_RESPONSE"
|
|
fi
|
|
else
|
|
log_warn " Endpoint returned error or not found"
|
|
fi
|
|
done
|
|
|
|
if [ "$BRIDGE_QUOTE_FOUND" = false ]; then
|
|
log_warn "⚠ No valid route found via thirdweb Bridge API"
|
|
log_info " Possible reasons:"
|
|
log_info " 1. ChainID 138 not supported by thirdweb Bridge"
|
|
log_info " 2. WETH token not recognized at canonical address"
|
|
log_info " 3. No liquidity for WETH → USDT route"
|
|
log_info " 4. API requires authentication"
|
|
fi
|
|
|
|
# Test 2: CCIP Bridge (alternative)
|
|
log_section "Test 2: CCIP Bridge Alternative"
|
|
|
|
log_info "CCIP Bridge is available as alternative:"
|
|
log_info " CCIPWETH9Bridge: 0x89dd12025bfCD38A168455A44B400e913ED33BE2"
|
|
log_info " This bridge supports ChainID 138 and can bridge WETH"
|
|
log_info " After bridging, swap WETH → USDT on Ethereum Mainnet"
|
|
log_info ""
|
|
|
|
# Summary
|
|
log_section "Bridge Quote Test Summary"
|
|
|
|
if [ "$BRIDGE_QUOTE_FOUND" = true ]; then
|
|
log_success "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_success "✅ ROUTE EXISTS: Bridge quote obtained"
|
|
log_success "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
log_info "You can proceed with bridging WETH → USDT via thirdweb Bridge"
|
|
log_info "Next steps:"
|
|
log_info " 1. Implement approval flow"
|
|
log_info " 2. Execute bridge transaction"
|
|
log_info " 3. Monitor bridge status"
|
|
exit 0
|
|
else
|
|
log_warn "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_warn "⚠ NO DIRECT ROUTE: Bridge quote not available"
|
|
log_warn "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
log_info "Recommendation: Use CCIP Bridge instead"
|
|
log_info " Route: Bridge WETH via CCIP → Swap to USDT on Mainnet"
|
|
log_info ""
|
|
log_info "Or try alternative routes:"
|
|
log_info " 1. Bridge to intermediate L2 (Arbitrum/Optimism/Base)"
|
|
log_info " 2. Swap on L2, then bridge to mainnet"
|
|
exit 1
|
|
fi
|