diff --git a/sync-status.sh b/sync-status.sh index f963233a..300f50a4 100755 --- a/sync-status.sh +++ b/sync-status.sh @@ -20,48 +20,76 @@ for path in $pathlist; do http_status_code=$(curl --ipv4 -m 1 -s -X POST -w "%{http_code}" -o "$response_file" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest", false],"id":1}' $RPC_URL) if [ $? -eq 0 ]; then - + if [[ $http_status_code -eq 200 ]]; then - response=$(cat "$response_file") + + response=$(cat "$response_file") latest_block_timestamp=$(echo "$response" | jq -r '.result.timestamp') latest_block_timestamp_decimal=$((16#${latest_block_timestamp#0x})) current_time=$(date +%s) time_difference=$((current_time - latest_block_timestamp_decimal)) - if [ $time_difference -lt 60 ]; then - if [ -n "$2" ]; then - echo "do a quick fitness test" - # use the proxy to normalize responses from different implementations of eth endpoints. - # make the proxy exit on a mismatch - # push a few seconds of ethspam | versus through the proxy to give it a chance to hit a mismatch + rm "$response_file" - latest_block_number=$(echo "$response" | jq -r '.result.number') - latest_block_hash=$(echo "$response" | jq -r '.result.hash') - response_file2=$(mktemp) - - http_status_code2=$(curl --ipv4 -m 1 -s -X POST -w "%{http_code}" -o "$response_file" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["$latest_block_number", false],"id":1}' $2) - if [ $? -eq 0 ]; then - if [[ $http_status_code2 -eq 200 ]]; then - response2=$(cat "$response_file2") - latest_block_hash2=$(echo "$response2" | jq -r '.result.hash') + if [ -n "$2" ]; then + # echo "do a quick fitness test" + # use the proxy to normalize responses from different implementations of eth endpoints. + # make the proxy exit on a mismatch + # push a few seconds of ethspam | versus through the proxy to give it a chance to hit a mismatch + + latest_block_number=$(echo "$response" | jq -r '.result.number') + latest_block_hash=$(echo "$response" | jq -r '.result.hash') + response_file2=$(mktemp) + + http_status_code2=$(curl --ipv4 -m 1 -s -X POST -w "%{http_code}" -o "$response_file" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["$latest_block_number", false],"id":1}' $2) + if [ $? -eq 0 ]; then + if [[ $http_status_code2 -eq 200 ]]; then + response2=$(cat "$response_file2") + latest_block_hash2=$(echo "$response2" | jq -r '.result.hash') - if [ "$latest_block_hash" == "$latest_block_hash22" ]; then - echo "online" - exit 0 - else - echo "forked" - exit 1 + rm "$response_file2" + + if [ "$latest_block_hash" == "$latest_block_hash2" ]; then + response_file3=$(mktemp) + + http_status_code=$(curl --ipv4 -m 1 -s -X POST -w "%{http_code}" -o "$response_file" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest", false],"id":1}' $RPC_URL) + + if [ $? -eq 0 ]; then + if [[ $http_status_code -eq 200 ]]; then + response3=$(cat "$response_file3") + latest_block_timestamp3=$(echo "$response" | jq -r '.result.timestamp') + latest_block_timestamp_decimal3=$((16#${latest_block_timestamp3#0x})) + time_difference3=$(( latest_block_timestamp_decimal3 - latest_block_timestamp_decimal )) + + rm "$response_file3" + + if [ $time_difference3 -lt 2 ]; then + echo "online" + exit 0 + elif [ $time_difference3 -lt 5 ]; then + echo "lagging" + exit 0 + else + echo "syncing" + exit 1 + fi + fi fi - fi - fi - - rm "$response_file2" - echo "unverified" - exit 1 + else + echo "forked" + exit 1 + fi + fi fi - + + echo "unverified" + exit 1 + elif [ $time_difference -lt 60 ]; then echo "online" exit 0 + else + echo "behind" + exit 1 fi elif [[ $http_status_code -eq 404 ]]; then echo "offline" @@ -81,7 +109,6 @@ for path in $pathlist; do exit 1 fi - rm "$response_file" break else echo "not found"