#!/usr/bin/env zsh delay=0.5 hostnameBitcoin=127.0.0.1:82 hostnameLiquid=127.0.0.1:83 warm() { echo "$1" time curl -o /dev/null -s "$1" sleep $delay # delay between queries to not DoS mariadb echo } warmCommonURLs=( '/api/v1/blocks' '/api/v1/statistics/2h' '/api/v1/statistics/24h' '/api/v1/statistics/1w' '/api/v1/statistics/1m' '/api/v1/statistics/3m' '/api/v1/statistics/6m' '/api/v1/statistics/1y' '/api/v1/statistics/2y' '/api/v1/statistics/3y' '/api/v1/statistics/4y' '/api/v1/statistics/all' ) warmMiningURLs=( '/api/v1/mining/pools/24h' '/api/v1/mining/pools/3d' '/api/v1/mining/pools/1w' '/api/v1/mining/pools/1m' '/api/v1/mining/pools/3m' '/api/v1/mining/pools/6m' '/api/v1/mining/pools/1y' '/api/v1/mining/pools/2y' '/api/v1/mining/pools/3y' '/api/v1/mining/pools/all' '/api/v1/mining/hashrate/3m' '/api/v1/mining/hashrate/6m' '/api/v1/mining/hashrate/1y' '/api/v1/mining/hashrate/2y' '/api/v1/mining/hashrate/3y' '/api/v1/mining/hashrate/all' '/api/v1/mining/hashrate/pools/3m' '/api/v1/mining/hashrate/pools/6m' '/api/v1/mining/hashrate/pools/1y' '/api/v1/mining/hashrate/pools/2y' '/api/v1/mining/hashrate/pools/3y' '/api/v1/mining/hashrate/pools/all' '/api/v1/mining/reward-stats/144' '/api/v1/mining/blocks/fees/24h' '/api/v1/mining/blocks/fees/3d' '/api/v1/mining/blocks/fees/1w' '/api/v1/mining/blocks/fees/1m' '/api/v1/mining/blocks/fees/3m' '/api/v1/mining/blocks/fees/6m' '/api/v1/mining/blocks/fees/1y' '/api/v1/mining/blocks/fees/2y' '/api/v1/mining/blocks/fees/3y' '/api/v1/mining/blocks/fees/all' '/api/v1/mining/blocks/rewards/24h' '/api/v1/mining/blocks/rewards/3d' '/api/v1/mining/blocks/rewards/1w' '/api/v1/mining/blocks/rewards/1m' '/api/v1/mining/blocks/rewards/3m' '/api/v1/mining/blocks/rewards/6m' '/api/v1/mining/blocks/rewards/1y' '/api/v1/mining/blocks/rewards/2y' '/api/v1/mining/blocks/rewards/3y' '/api/v1/mining/blocks/rewards/all' '/api/v1/mining/blocks/fee-rates/24h' '/api/v1/mining/blocks/fee-rates/3d' '/api/v1/mining/blocks/fee-rates/1w' '/api/v1/mining/blocks/fee-rates/1m' '/api/v1/mining/blocks/fee-rates/3m' '/api/v1/mining/blocks/fee-rates/6m' '/api/v1/mining/blocks/fee-rates/1y' '/api/v1/mining/blocks/fee-rates/2y' '/api/v1/mining/blocks/fee-rates/3y' '/api/v1/mining/blocks/fee-rates/all' '/api/v1/mining/difficulty-adjustments/24h' '/api/v1/mining/difficulty-adjustments/3d' '/api/v1/mining/difficulty-adjustments/1w' '/api/v1/mining/difficulty-adjustments/1m' '/api/v1/mining/difficulty-adjustments/3m' '/api/v1/mining/difficulty-adjustments/6m' '/api/v1/mining/difficulty-adjustments/1y' '/api/v1/mining/difficulty-adjustments/2y' '/api/v1/mining/difficulty-adjustments/3y' '/api/v1/mining/difficulty-adjustments/all' ) warmLightningURLs=( '/api/v1/lightning/channels-geo?style=widget' '/api/v1/lightning/channels-geo?style=graph' '/api/v1/lightning/statistics/latest' '/api/v1/lightning/statistics/1m' '/api/v1/lightning/statistics/3m' '/api/v1/lightning/statistics/6m' '/api/v1/lightning/statistics/1y' '/api/v1/lightning/statistics/2y' '/api/v1/lightning/statistics/3y' '/api/v1/lightning/statistics/all' '/api/v1/lightning/nodes/isp-ranking' '/api/v1/lightning/nodes/isp/15169,396982' `# Google` '/api/v1/lightning/nodes/isp/14618,16509' `# Amazon` '/api/v1/lightning/nodes/isp/39572' `# DataWeb` '/api/v1/lightning/nodes/isp/14061' `# Digital Ocean` '/api/v1/lightning/nodes/isp/24940,213230' `# Hetzner` '/api/v1/lightning/nodes/isp/394745' `# LunaNode` '/api/v1/lightning/nodes/isp/45102' `# Alibaba` '/api/v1/lightning/nodes/isp/3209' `# Vodafone Germany` '/api/v1/lightning/nodes/isp/7922' `# Comcast Cable` '/api/v1/lightning/nodes/isp/34197' `# SHRD SARL` '/api/v1/lightning/nodes/isp/42275' `# Three Fourteen SASU` '/api/v1/lightning/nodes/isp/16276' `# OVH SAS` '/api/v1/lightning/nodes/isp/10796,11351,11426,11427,12271,20001,20115,33363' `# Spectrum` \ '/api/v1/lightning/nodes/isp/701' `# Verizon` '/api/v1/lightning/nodes/isp/12876' `# Scaleway` '/api/v1/lightning/nodes/isp/33915' `# Ziggo` '/api/v1/lightning/nodes/isp/3320' `# Deutsche Telekom AG` '/api/v1/lightning/nodes/isp/8075' `# Microsoft Azure` '/api/v1/lightning/nodes/isp/212531' `# UAB Interneto vizija` '/api/v1/lightning/nodes/isp/63949' `# Linode` '/api/v1/lightning/nodes/isp/51167' `# Contabo GmbH` '/api/v1/lightning/nodes/countries' '/api/v1/lightning/nodes/rankings' '/api/v1/lightning/nodes/rankings/liquidity' '/api/v1/lightning/nodes/rankings/connectivity' '/api/v1/lightning/nodes/rankings/age' ) warmLiquidURLs=( '/api/v1/assets/icons' '/api/v1/assets/featured' '/api/v1/liquid/pegs' '/api/v1/liquid/pegs/month' '/api/v1/liquid/pegs/volume' '/api/v1/liquid/pegs/count' '/api/v1/liquid/reserves' '/api/v1/liquid/reserves/month' '/api/v1/liquid/reserves/addresses' '/api/v1/liquid/reserves/addresses/total' '/api/v1/liquid/reserves/utxos' '/api/v1/liquid/reserves/utxos/total' '/api/v1/liquid/reserves/utxos/expired' '/api/v1/liquid/reserves/utxos/emergency-spent' '/api/v1/liquid/reserves/utxos/emergency-spent/stats' '/api/v1/liquid/reserves/status' ) echo "[*] Wait 60s for mempool backend to start..." sleep 60 while true do echo "[*] Starting warm cache cycle..." date for url in $warmCommonURLs do warm "http://${hostnameBitcoin}${url}" warm "http://${hostnameBitcoin}/testnet${url}" warm "http://${hostnameBitcoin}/testnet4${url}" warm "http://${hostnameBitcoin}/signet${url}" warm "http://${hostnameLiquid}${url}" warm "http://${hostnameLiquid}/testnet${url}" done for url in $warmMiningURLs do warm "http://${hostnameBitcoin}${url}" # only warm cache for testnet URLs 10% of the time if (( RANDOM % 100 < 10 )); then warm "http://${hostnameBitcoin}/testnet${url}" warm "http://${hostnameBitcoin}/testnet4${url}" warm "http://${hostnameBitcoin}/signet${url}" fi done for url in $warmLightningURLs do warm "http://${hostnameBitcoin}${url}" # only warm cache for testnet URLs 10% of the time if (( RANDOM % 100 < 10 )); then warm "http://${hostnameBitcoin}/testnet${url}" warm "http://${hostnameBitcoin}/signet${url}" fi done for url in $warmLiquidURLs do warm "http://${hostnameLiquid}${url}" warm "http://${hostnameLiquid}/testnet${url}" done slugs=(`curl -sSL http://${hostnameBitcoin}/api/v1/mining/pools/3y|jq -r -S '(.pools[].slug)'`) for slug in $slugs do warm "http://${hostnameBitcoin}/api/v1/mining/pool/${slug}" warm "http://${hostnameBitcoin}/api/v1/mining/pool/${slug}/hashrate" warm "http://${hostnameBitcoin}/api/v1/mining/pool/${slug}/blocks" done date echo "[*] Completed warm cache cycle" sleep 1 done