Stabilize oracle and relay status helpers
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user