#!/usr/bin/env bash # SUBTC GATEWAY — Full Usage Commands v3.5 # Supported Coins: btc | ltc | doge # Change COIN to switch currency BASE="http://api.subtc.net" COIN="btc" # btc | ltc | doge # ───────────────────────────────────────────── # 0. Create API Key # ───────────────────────────────────────────── RESP=$(curl -sS -X POST "$BASE/v1/$COIN?mode=key_create" \ -H "Content-Type: application/json") KEY=$(echo "$RESP" | sed -n 's/.*"key":"\([^"]*\)".*/\1/p') echo "KEY=$KEY" # 0.1 Verify API Key curl -sS -X POST "$BASE/v1/$COIN?mode=key_status" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" # ───────────────────────────────────────────── # 1. Create Wallet # ───────────────────────────────────────────── RESP=$(curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_create" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d '{"net":"main"}') WID=$(echo "$RESP" | sed -n 's/.*"wallet_id":"\([^"]*\)".*/\1/p') echo "WALLET_ID=$WID" # 2. List Wallets curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_list" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" # 3. Generate Receive Address RESP=$(curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_receive" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\"}") ADDR=$(echo "$RESP" | sed -n 's/.*"address":"\([^"]*\)".*/\1/p') echo "ADDRESS=$ADDR" # 4. Check Wallet Balance curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_balance" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\"}" # 5. Send Transaction (with idempotency) TO="bc1xxxxxxxx" AMOUNT_SAT=10000 IDEM_ID="btc-send-001" curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_send" \ -H "X-SUBTC-KEY: $KEY" \ -H "X-SUBTC-IDEMPOTENCY: $IDEM_ID" \ -H "Content-Type: application/json" \ -d "{ \"wallet_id\": \"$WID\", \"to\": \"$TO\", \"amount_sat\": $AMOUNT_SAT }" # 6A. Wait for Funds — Long Poll EXPECTED_SAT=50000 RESP=$(curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_wait_event" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{ \"wallet_id\": \"$WID\", \"expected_sat\": $EXPECTED_SAT, \"timeout_sec\": 300 }") echo "WAIT_RESPONSE=$RESP" # 6B. Wait for Funds — Callback (Webhook) CALLBACK_URL="https://yourserver.com/webhook/payment" curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_wait_event" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{ \"wallet_id\": \"$WID\", \"expected_sat\": $EXPECTED_SAT, \"timeout_sec\": 600, \"callback_url\": \"$CALLBACK_URL\" }" # 6C. Manual Polling — wallet_poll curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_poll" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{ \"wallet_id\": \"$WID\", \"expected_sat\": $EXPECTED_SAT }" # Poll loop example while true; do RESP=$(curl -sS -X POST "$BASE/v1/$COIN?mode=wallet_poll" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"expected_sat\":$EXPECTED_SAT}") REACHED=$(echo "$RESP" | sed -n 's/.*"reached":\([a-z]*\).*/\1/p') BAL=$(echo "$RESP" | sed -n 's/.*"balance_sat":\([0-9]*\).*/\1/p') echo "balance=$BAL reached=$REACHED" if [ "$REACHED" = "true" ]; then echo "✅ Funds Arrived" break fi sleep 3 done # 7. Inbox Create — Generate Ready Receive Address curl -sS -X POST "$BASE/v1/$COIN?mode=inbox_create" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{ \"wallet_id\": \"$WID\", \"expected_sat\": $EXPECTED_SAT }" # 8. Health Check curl -sS "$BASE/health" # Atomic Units & Fee Philosophy # 1 BTC = 100,000,000 sat # SUBTC uses integer atomic units for BTC, LTC, DOGE # Min send amounts: # BTC: 50,000 SAT | LTC: 200,000 SAT | DOGE: 200,000,000 SAT # Service + network fee: 3% # Deterministic rounding, idempotency, simplified auditing