Files
ethereum-rpc-docker/catchup.sh
Para Dox 358e014ad7 fix
2025-04-13 16:45:10 +07:00

71 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# ANSI color codes
RED='\033[0;31m'
YELLOW='\033[0;33m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
s_to_human_readable() {
local ms=$1
local days=$((ms / 86400))
ms=$((ms % 86400))
local hours=$((ms / 3600))
ms=$((ms % 3600))
local minutes=$((ms / 60))
ms=$((ms % 60))
local seconds=$((ms % 60))
printf "%d days, %02d hours, %02d minutes, %02d seconds\n" $days $hours $minutes $seconds
}
BASEPATH="$(dirname "$0")"
source $BASEPATH/.env
seconds_to_measure=${2:-10}
# Assume 1 block per 12 seconds as default chain block time
chain_block_time=${3:-12}
# First measurement
latest_block_timestamp_decimal=$(./timestamp.sh $1)
current_time=$(date +%s)
time_difference=$((current_time - latest_block_timestamp_decimal))
echo "Current chain head is $time_difference seconds behind real time"
# s_to_human_readable $time_difference
# Wait to measure progress
sleep $seconds_to_measure
# Second measurement
latest_block_timestamp_decimal=$(./timestamp.sh $1)
current_time=$(date +%s)
time_difference2=$((current_time - latest_block_timestamp_decimal))
# Calculate catchup rate
progress=$((time_difference - time_difference2))
progress_per_second=$(echo "scale=4; $progress / $seconds_to_measure" | bc)
# Calculate time to catch up
if (( $(echo "$progress_per_second <= 0" | bc -l) )); then
echo -e "${RED}ERROR: Node is not catching up! It's falling behind by $(echo "scale=2; -1 * $progress_per_second" | bc) seconds per second.${NC}"
exit 1
fi
# Time until caught up
time_to_catchup=$(echo "scale=0; $time_difference2 / $progress_per_second" | bc)
# Calculate if catchup rate is faster than chain growth rate
# Chain growth is typically 1 second of block time per second of real time
chain_growth_rate=1.0 # 1 second per second as baseline
catchup_needed=$(echo "scale=4; $chain_growth_rate + 0.01" | bc) # Slight buffer for safety
if (( $(echo "$progress_per_second < $catchup_needed" | bc -l) )); then
echo -e "${YELLOW}WARNING: Node catchup rate ($progress_per_second seconds/second) is slower than chain growth rate ($chain_growth_rate seconds/second).${NC}"
echo -e "${YELLOW}The node will likely never catch up to the chain head!${NC}"
else
echo -e "${GREEN}Node catchup rate is good: $progress_per_second seconds/second${NC}"
echo -e "${GREEN}Estimated time to sync:${NC}"
s_to_human_readable $time_to_catchup
fi