#!/bin/bash cd $AK_MINEDBLOCKSDIR PROGRAM="$(basename $0)" declare -A counters source $AK_LIBDIR/_ak_log source $AK_LIBDIR/_ak_ipfs if [ ! -z $1 ] && [ -n "$1" ] then if [ "$1" == "-h" ] || [ "$1" == "--help" ] then echo "$PROGRAM - Finds longest schain from the $AK_MINEDBLOCKSDIR dir">&2 exit 2 fi fi further(){ # _ak_log_info "Diving into $1" lookfor $1 } lookfor(){ echo -n $1 | grep -e '[0-9a-f]\{128\}' > /dev/null if [ $? -ne 0 ] then _ak_log_error "Oops!!! The argument passed, does not match the regular expression!" else counters[$CHAIN_PARENT]="$(expr ${counters[$CHAIN_PARENT]} + 1)" if [ $? -ne 0 ] then echo "$1, $counters[$1]" exit 1 fi _ak_log_info "Accessing file: $1" # echo "$1 file:" # cat "$1" | jq NEXT_TARGET="$(cat "$1" | jq | grep previous | tr -d ' ' | sed -e 's/previous//g; s/[",:]//g;')" if [ -n "$NEXT_TARGET" ] then _ak_log_info "Found previous: $NEXT_TARGET" if [ ! -f "$NEXT_TARGET" ] then _ak_log_warning "Could not find $NEXT_TARGET" else further "$NEXT_TARGET" fi else _ak_log_warning "No next target found. So long for $1" fi fi } templistblock="$(mktemp)" find . -type f | sed 's/^\.\/000/000/g' | grep '^000' | sort > $templistblock while IFS="" read -r p || [ -n "$p" ] do # if [ ! "$p" = "" ] && [ ! "$p" = "tmplistblock" ] if [ "$(echo $p | tr -d '\n' | wc -c)" = 128 ] then filename="$(basename $p)" _ak_log_info "Investigating $filename..." export CHAIN_PARENT="$filename" counters[$CHAIN_PARENT]=1 lookfor "$filename" else _ak_log_warning "Nothing to do with $filename" fi done < $templistblock rm $templistblock max=0 max_holder=0 for value in "${!counters[@]}" do # echo "${value} : ${counters[${value}]}" if [ ${counters[${value}]} -gt $max ] then max="${counters[${value}]}" max_holder="${value}" _ak_log_info "New MAX $max on $max_holder" fi done echo '{"latest_block":"'$max_holder'"}'