#!/bin/bash ######################################################################## # Author: Fred (support@qo-op.com) # Version: 1.0 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ######################################################################## MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized ME="${0##*/}" echo " ######################################################################## # \\/// # qo-op ############# $ME DELAY ######################################################################## # ex: ./$ME \"10 days\" # SCAN NODE G1 Wallet FOR ZEN Command received (or pending) TX/IN ######################################################################## # _(_)_ _(_)_ # @@@@ (_)@(_) @@@@ (_)@(_) @@@@ # @@()@@ wWWWw (_)\ @@()@@ wWWWw (_)\ @@()@@ wWWWw # @@@@ (___) \|/ @@@@ (___) \|/ @@@@ (___) # / Y \| / Y \| / Y # \ | \ |/ | / \ | \ |/ | / \ | \ |/ # \\|// \\|/// \\\|// \\|// \\|/// \\\|// \\|// \\|/// #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # [ASTROPORT](https://astroport.com) ######################################################################## " DELAY="$1" # GET DUNITER SERVER DUNITERNODE=$($MY_PATH/tools/duniter_getnode.sh) DUNITERURL="https://$DUNITERNODE" IPFSNODEID=$(ipfs id -f='\n') [[ $IPFSNODEID == "" ]] && echo "$USER Please Install IPFS !!" && exit 1 [[ ! -d ~/.zen/scan ]] && mkdir -p ~/.zen/scan # Directory containing G1 blockchain incoming TX Scan [[ ! -d ~/.zen/wallets ]] && mkdir -p ~/.zen/wallets # Directory where NODE store SMS & other Channel Wallets [[ ! -d ~/.zen/wallets_swarm ]] && mkdir -p ~/.zen/wallets_swarm # Local copy of all SSB friends IPFS Nodes published wallets ######################################################################################################### # GET G1 PUBKEY FROM SCUTTLEBUTT or $2 (DEBUG) [[ $DELAY == "" ]] && DELAY="30 days" && echo "*** HELP ***" && echo "./$ME \"duration\" (default $DELAY)" && echo "************" && echo DELAYUNIT=$(echo $DELAY | cut -d ' ' -f 2) # NODE_G1PUBKEY=$2 # DEBUG if [[ $NODE_G1PUBKEY == "" ]]; then if [[ -f ~/.ssb/secret ]]; then ssbpub=$(cat ~/.ssb/secret | grep public\" | cut -d ' ' -f 4 | cut -d '.' -f 1 | sed s/\"//g) ssbpriv=$(cat ~/.ssb/secret | grep private\" | cut -d ' ' -f 4 | cut -d '.' -f 1 | sed s/\"//g) NODE_G1PUBKEY=$(echo $ssbpub | base64 -d | base58) NODE_G1PRIVKEY=$(echo $ssbpriv | base64 -d | base58) if [[ ! -f ~/.ssb/secret.dunikey ]]; then echo "pub: $NODE_G1PUBKEY" > ~/.ssb/secret.dunikey echo "sec: $NODE_G1PRIVKEY" >> ~/.ssb/secret.dunikey fi else NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) NODE_G1PRIVKEY=$(cat ~/.ssb/secret.dunikey | grep 'sec:' | cut -d ' ' -f 2) fi fi [[ "$NODE_G1PUBKEY" == "" ]] && echo "$USER Missing ~/.ssb/secret : Please Install Scuttlebutt server !" && exit 1; ######################################################################################################### echo "=======================================" echo "IPFS ID = $IPFSNODEID" echo "G1 PUBKEY = $NODE_G1PUBKEY" echo "SSB ID = %$ssbpub.ed25519" echo " ############################################# # GET G1 WALLET AMOUNT silkaj -p $DUNITERNODE balance $NODE_G1PUBKEY #############################################" echo "Checking G1 Wallet received TX ($DELAY) for ZEN command" # PREPARE TIMESTAMP LIMITS TIMEBEFORE=$(date -u --date="-$DELAY" +"%s") TIMESTAMP=$(date -u +"%s") # GET BLOCKCHAIN TX FOR TIME WINDOW curl -s $DUNITERURL/tx/history/$NODE_G1PUBKEY/times/$TIMEBEFORE/$TIMESTAMP > ~/.zen/g1zen.scan ## TODO VERIFY ~/.zen/g1zen.scan IS GOOD ?! AND RETRY... $DUNITERURL ########################################################################### # TX EXTRACTION ########################################################################### # MORE THAN MINUTE DELAY = history.received if [[ $DELAYUNIT != "minutes" && $DELAYUNIT != "minute" ]]; then # HOW MANY TX DO WE HAVE... TXnb=$(cat ~/.zen/g1zen.scan | jq '.history.received[].hash' | wc -l) echo "DETECTED $TXnb TX... Checking TX/IN..." # PARSE $TXnb TX line=1 while [[ $line -le $TXnb ]]; do # GET TX HASH TXhash=$(cat ~/.zen/g1zen.scan | jq -r '.history.received[].hash' | head -n $line | tail -n 1 ) # IT IS A NEW TX? if [[ ! -f ~/.zen/scan/zen.$TXhash ]]; then # GET LAST TX ISSUER ISSUER=$(cat ~/.zen/g1zen.scan | jq -r '.history.received[].issuers[0]' | head -n $line | tail -n 1) [[ $ISSUER == $NODE_G1PUBKEY ]] && ((line++)) && continue ## TX/OUT CONTINUE echo $ISSUER > ~/.zen/scan/zen.$TXhash # GET OUTPUTS AND MAKE ZEN=G1*100 SUM ZEN=$(cat ~/.zen/g1zen.scan | jq -r '.history.received[].outputs[]' | grep $NODE_G1PUBKEY | head -n $line | tail -n 1 | cut -d ':' -f 1) # GET COMMENT COMMENT=$(cat ~/.zen/g1zen.scan | jq '.history.received' | jq -r '.[].comment' | head -n $line | tail -n 1) # echo "TX-IN $ISSUER => $NODE_G1PUBKEY" echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)" CMD=$(echo "$COMMENT" | awk '{print toupper($1)}') ###### CREATE ZEN VALUE IN IPFS ######### [[ $CMD == "ZEN" ]] && $MY_PATH/zen_MAKE.sh $ZEN $TXhash $ISSUER ############################################ # else # STILL OLD TX # [[ $TXhash != "" ]] && echo "ALREADY TREATED TX/IN: $TXhash $(cat ~/.zen/scan/zen.$TXhash)" || echo "NO TX" fi ((line++)) done else # MINUTE DELAY = pending // TODO: if anyone succeed in passing $VAR in jq command, both can be merge... # HOW MANY TX DO WE HAVE... TXnb=$(cat ~/.zen/g1zen.scan | jq '.history.pending[].hash' | wc -l) echo "DETECTED $TXnb TX... Checking TX/IN..." # PARSE $TXnb TX line=1 while [[ $line -le $TXnb ]]; do TXhash=$(cat ~/.zen/g1zen.scan | jq -r '.history.pending[].hash' | head -n $line | tail -n 1) # IT IS A NEW TX/IN? if [[ ! -f ~/.zen/scan/zen.$TXhash ]]; then # GET LAST RX ISSUER ISSUER=$(cat ~/.zen/g1zen.scan | jq -r '.history.pending[].issuers[0]' | head -n $line | tail -n 1) [[ $ISSUER == $NODE_G1PUBKEY ]] && ((line++)) && continue ## TX/OUT CONTINUE echo $ISSUER > ~/.zen/scan/zen.$TXhash # GET OUTPUTS AND MAKE ZEN SUM ZEN=$(cat ~/.zen/g1zen.scan | jq -r '.history.pending[].outputs[]' | grep $NODE_G1PUBKEY | head -n $line | tail -n 1 | cut -d ':' -f 1) # GET COMMENT COMMENT=$(cat ~/.zen/g1zen.scan | jq '.history.pending' | jq -r '.[].comment' | head -n $line | tail -n 1) # echo "TX-IN $ISSUER => $NODE_G1PUBKEY" echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)" CMD=$(echo "$COMMENT" | awk '{print toupper($1)}') ###### CREATE ZEN VALUE IN IPFS ######### [[ $CMD == "ZEN" ]] && $MY_PATH/zen_MAKE.sh $ZEN $TXhash $ISSUER ############################################ # else # STILL OLD TX # [[ $TXhash != "" ]] && echo "ALREADY TREATED TX/IN: $TXhash $(cat ~/.zen/scan/zen.$TXhash)" || echo "NO TX" fi ((line++)) done fi echo "FINISH" exit 0