Recentemente, precisei de uma maneira rápida de ver quando o próximo ajuste de dificuldade de bitcoin ocorreria. Surpreendentemente, não há nenhum recurso online (funcionando) para ver isso. Eu escrevi este script rápido para pegar os dados brutos relevantes de blockchain.info e analisá-los para me mostrar uma saída rápida de quando isso acontecerá.
Lembre-se de que esta é apenas uma estimativa e muda com o tempo / velocidade de hash da rede. Se você não sabe disso, este script provavelmente não é útil para você. Isso é específico do ZSH, pois usa o módulo zsh mathfun.
#!/bin/zsh
zmodload zsh/mathfunc
echo "Loading data from blockchain.info ..."
NEXT_RETARGET=$(curl -s http://blockchain.info/q/nextretarget)
CURRENT_BLOCK=$(curl -s http://blockchain.info/q/getblockcount)
AVG_BLOCK_TIME=$(curl -s http://blockchain.info/q/interval)
(( AVG_BLOCK_TIME=int(floor($AVG_BLOCK_TIME)) )) # Convert AVG time to int
(( BLOCKS_LEFT=$NEXT_RETARGET - $CURRENT_BLOCK ))
(( TOTAL_SECS_LEFT=$AVG_BLOCK_TIME * $BLOCKS_LEFT ))
##########################
# Calculate Seconds Left
##########################
TIME_LEFT=""
DAYS_LEFT=0
HOURS_LEFT=0
MINS_LEFT=0
(( SECS_LEFT=int(rint($TOTAL_SECS_LEFT)) ))
# Days
if [ $SECS_LEFT -ge 86400 ]; then
(( DAYS_LEFT=int(floor($SECS_LEFT / 86400)) ))
(( SECS_LEFT=$SECS_LEFT-$DAYS_LEFT * 86400 ))
fi
# Hours
if [ $SECS_LEFT -ge 3600 ]; then
(( HOURS_LEFT=int(floor($SECS_LEFT / 3600)) ))
(( SECS_LEFT=$SECS_LEFT-$HOURS_LEFT * 3600 ))
fi
# Mins
if [ $SECS_LEFT -ge 60 ]; then
(( MINS_LEFT=int(floor($SECS_LEFT / 60)) ))
(( SECS_LEFT=$SECS_LEFT-$MINS_LEFT * 60 ))
fi
if [ $DAYS_LEFT -gt 0 ]; then TIME_LEFT="${TIME_LEFT}${DAYS_LEFT}d "; fi
if [ $HOURS_LEFT -gt 0 ]; then TIME_LEFT="${TIME_LEFT}${HOURS_LEFT}h "; fi
if [ $MINS_LEFT -gt 0 ]; then TIME_LEFT="${TIME_LEFT}${MINS_LEFT}m "; fi
if [ $SECS_LEFT -gt 0 ]; then TIME_LEFT="${TIME_LEFT}${SECS_LEFT}s"; fi
cat <<EOF
Current Block Height: $CURRENT_BLOCK
Next Retarget: $NEXT_RETARGET
Blocks Left: $BLOCKS_LEFT
Avg Time Solve: $AVG_BLOCK_TIME
Total Secs Left: $TOTAL_SECS_LEFT
Est. Left: $TIME_LEFT
EOF
A saída é semelhante a esta:
Loading data from blockchain.info ...
Current Block Height: 261304
Next Retarget: 262079
Blocks Left: 775
Avg Time Solve: 496
Total Secs Left: 384400
Est. Left: 4d 10h 46m 40s