Post
Topic
Board Announcements (Altcoins)
Re: [ANN][HZ] Horizon Long + Fair Distribution|Decentralized Asset Exchange
by
MaWo
on 24/01/2016, 00:00:08 UTC
...
BUT that way, I could NOT find 85.214.65.220 which is api.nhzcrypto.org.
So ... something in my strategy is not perfect yet. I might not be finding all nodes!
Happy about any suggestion.

My bash script finds peer 85.214.65.220:7774/api.nhzcrypto.org:7774

Code:
#!/bin/bash

SDATE=`date '+%Y-%m-%d-%H-%M-%S'`
RESULTS="peer-results-${SDATE}.txt"
PEER_SERVER_PORT="7774"
PEER_URI_SUFFIX="nhz"
FIRST_PEER="eu6.woll-e.net"

declare -A assoPeers

exists(){
  if [ "$2" != in ]; then
    echo "Wrong syntax!"
    echo "Syntax: exists {key} in {array}"
    return
  fi   
  eval '[ ${'$3'[$1]+test} ]' 
}

typeset -i addCounter=0

function getPeerInfo() {
    peer="$1"
    addCounter=0
    ROW="$peer  "

    # test whether announced address includes a port
    if [ `echo $peer| grep ':'|wc -l` -gt 0 ]; then
        URI="http://${peer}/${PEER_URI_SUFFIX}"
    else
        URI="http://${peer}:${PEER_SERVER_PORT}/${PEER_URI_SUFFIX}"
    fi

    ROW2=`curl --silent -4 -m5 --data '{"platform":"TEST","protocol":1,"application":"TEST Bot","requestType":"getInfo","version":"v0.1"}' "${URI}" | tr '\r\|\n' ' '`
    if [ $? -gt 0 ]; then
        assoPeers["${peer}"]="error getInfo"
        return 1
    fi
    sleep 0.1

    peerVersion=`echo "$ROW2" | jshon -C -Q -e version | sed -e 's/"//g'`

    ROW3=`curl --silent -4 -m5 --data '{"platform":"TEST","protocol":1,"application":"TEST Bot","requestType":"getCumulativeDifficulty","version":"v0.1"}' "${URI}" | tr '\r\|\n' ' '`
    ROW2+="     ${ROW3}"
    if [ $? -gt 0 ]; then
        assoPeers["${peer}"]="error getCumulativeDifficulty"
        return 1
    fi
    sleep 0.1
    peerHeight=`echo "$ROW3" | jshon -C -Q -e blockchainHeight | sed -e 's/"//g'`

    PEERS=`curl --silent -4 -m5 --data '{"platform":"TEST","protocol":1,"application":"TEST Bot","requestType":"getPeers","version":"v0.1"}' "${URI}"| jshon -C -Q -e peers | grep -v '\]\|\['| sed -e 's/[" ,]//g'`
    if [ $? -gt 0 ]; then
        assoPeers["${peer}"]="error getPeers"
        return 1
    fi

    ROW2+="     "`echo $PEERS|tr '\r\|\n' ' '`

    # read peers into an array
    IFS=$'\n ' read -r -d '' -a peersarray < <(printf '%s\0' "$PEERS")

    #add only elements from peersarray into the associative array which doesn't exist
    if [ "${#peersarray[@]}" -gt 0 ]; then
        for a in "${peersarray[@]}"; do
            if ! exists "$a" in assoPeers; then
                assoPeers["$a"]="0";
                addCounter=addCounter+1
            fi
        done
    fi
    ROW+="      ${#peersarray[@]}       $addCounter     ${#assoPeers[@]}"
    assoPeers["${peer}"]="$ROW  $ROW2"

    printf "${peerCounter}\t${#peersarray[@]}\t$addCounter\t${#assoPeers[@]}\t${peer}\t${peerVersion}\t${peerHeight}\n" | tee -a $RESULTS
}

function isNextPeer() {
    nextPeer=""
    for key in ${!assoPeers[@]}; do
        if [ "${assoPeers[${key}]}" == "0" ]; then
            assoPeers["${key}"]="started"
            nextPeer="${key}"
            return 0
        fi
    done
    return 1
}

### MAIN  ###

typeset -i peerCounter=1
printf "counter\tpeers\tnew\ttotal\thost\tversion\theight\n"| tee -a $RESULTS
getPeerInfo "${FIRST_PEER}"

while isNextPeer; do
    peerCounter=peerCounter+1
    getPeerInfo "$nextPeer"
done