Stabilize oracle and relay status helpers

This commit is contained in:
defiQUG
2026-04-28 23:33:58 -07:00
parent 4bf669b667
commit 68cd541265
4 changed files with 77 additions and 20 deletions

View File

@@ -12,6 +12,8 @@
# PMM_MESH_POLL_POOLS — space-separated pool addresses (default: cUSDT/cUSDC PMM pool)
# ENABLE_MESH_ORACLE_TICK=1 Run scripts/update-oracle-price.sh each tick (skips on-chain if <1% move)
# ENABLE_MESH_KEEPER_TICK=1 Run keeper when checkUpkeep is true
# ENABLE_MESH_WETH_MOCK_SYNC=0 Sync CHAIN138_WETH_MOCK_PRICE_FEED before keeper upkeep
# MESH_WETH_MOCK_SYNC_EVERY_N=5 Only sync mock feed every N ticks (5 * 6s = 30s)
# ENABLE_MESH_PMM_READS=1 eth_call getPoolPriceOrOracle per pool (warm path / observability)
# ENABLE_MESH_WETH_READS=1 eth_call WETH9/WETH10 totalSupply (ETH mesh signal)
# MESH_WETH_WRAP_WEI=0 If >0 and KEEPER_PRIVATE_KEY set: WETH9.deposit{value} (costs gas; rare)
@@ -71,6 +73,8 @@ WETH10="${WETH10_ADDRESS:-0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f}"
ENABLE_ORACLE="${ENABLE_MESH_ORACLE_TICK:-1}"
ENABLE_KEEPER="${ENABLE_MESH_KEEPER_TICK:-1}"
ENABLE_WETH_MOCK_SYNC="${ENABLE_MESH_WETH_MOCK_SYNC:-0}"
WETH_MOCK_SYNC_EVERY_N="${MESH_WETH_MOCK_SYNC_EVERY_N:-5}"
ENABLE_PMM_READS="${ENABLE_MESH_PMM_READS:-1}"
ENABLE_WETH_READS="${ENABLE_MESH_WETH_READS:-1}"
WRAP_WEI="${MESH_WETH_WRAP_WEI:-0}"
@@ -188,6 +192,48 @@ tick_keeper() {
fi
}
tick_weth_mock_sync() {
[ "$ENABLE_WETH_MOCK_SYNC" = "1" ] || return 0
[ -n "${CHAIN138_WETH_MOCK_PRICE_FEED:-}" ] || return 0
[ -n "$ORACLE_PK" ] || { log "WETH mock sync skipped (set PRIVATE_KEY)"; return 0; }
[ "$WETH_MOCK_SYNC_EVERY_N" -gt 0 ] || WETH_MOCK_SYNC_EVERY_N=1
local n="${TICK_COUNT:-0}"
if (( n % WETH_MOCK_SYNC_EVERY_N != 0 )); then
return 0
fi
local now
now="$(date +%s)"
if (( now < NEXT_ORACLE_TX_AT )); then
log "WETH mock sync cooling down until $(date -d "@$NEXT_ORACLE_TX_AT" -Iseconds)"
return 0
fi
if account_has_pending_nonce_gap "$ORACLE_ADDR"; then
NEXT_ORACLE_TX_AT=$(( now + MESH_TX_BACKOFF_SEC ))
log "WETH mock sync tx already pending for $ORACLE_ADDR; backoff ${MESH_TX_BACKOFF_SEC}s"
return 0
fi
if [ -n "${DRY_RUN:-}" ]; then
log "[dry-run] sync-weth-mock-price.sh"
return 0
fi
local out rc
set +e
out="$(MESH_CAST_GAS_PRICE="$MESH_CAST_GAS_PRICE" bash "$SMOM_ROOT/scripts/reserve/sync-weth-mock-price.sh" "$RPC" 2>&1)"
rc=$?
set -e
if [ "$rc" -ne 0 ]; then
echo "$out"
if is_retryable_tx_error "$out"; then
NEXT_ORACLE_TX_AT=$(( now + MESH_TX_BACKOFF_SEC ))
log "WARN: WETH mock sync pending/underpriced; backoff ${MESH_TX_BACKOFF_SEC}s"
else
log "WARN: sync-weth-mock-price.sh failed; next tick in ${INTERVAL}s"
fi
else
echo "$out"
fi
}
tick_oracle() {
[ "$ENABLE_ORACLE" = "1" ] || return 0
local now
@@ -246,6 +292,7 @@ while true; do
log "--- tick $TICK_COUNT ---"
tick_pmm_reads
tick_weth_reads
tick_weth_mock_sync
tick_keeper
tick_oracle
tick_weth_wrap

View File

@@ -43,6 +43,14 @@ fetch_usd() {
u=$(curl -s --max-time 20 -A "$CG_UA" 'https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd' | \
python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('ethereum',{}).get('usd',0) or 0)" 2>/dev/null || echo 0)
fi
if [ "$u" = "0" ] || [ -z "$u" ]; then
u=$(curl -s --max-time 20 -A "$CG_UA" 'https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD' | \
python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('USD',0) or 0)" 2>/dev/null || echo 0)
fi
if [ "$u" = "0" ] || [ -z "$u" ]; then
u=$(curl -s --max-time 20 -A "$CG_UA" 'https://api.coinbase.com/v2/prices/ETH-USD/spot' | \
python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('data',{}).get('amount',0) or 0)" 2>/dev/null || echo 0)
fi
echo "$u"
}