astroport/zen/zen_G1TXtoZenTag.sh

154 lines
7.2 KiB
Bash
Raw Normal View History

2020-03-16 02:24:20 +01:00
#!/bin/bash
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 1.0
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
# == Transform incoming G1 TX into IPFS ZenTAG ==
2020-03-18 01:47:10 +01:00
# SCAN NODE G1 Wallet FOR "ZEN" Command received (or pending) TX/IN
2020-03-16 02:24:20 +01:00
########################################################################
2020-03-18 01:47:10 +01:00
#
2020-03-16 02:24:20 +01:00
########################################################################
# _(_)_ _(_)_
# @@@@ (_)@(_) @@@@ (_)@(_) @@@@
# @@()@@ wWWWw (_)\ @@()@@ wWWWw (_)\ @@()@@ wWWWw
# @@@@ (___) \|/ @@@@ (___) \|/ @@@@ (___)
# / Y \| / Y \| / Y
# \ | \ |/ | / \ | \ |/ | / \ | \ |/
# \\|// \\|/// \\\|// \\|// \\|/// \\\|// \\|// \\|///
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2020-03-18 01:47:10 +01:00
# [ASTROPORT](https://astroport.com)
2020-03-16 02:24:20 +01:00
########################################################################
2020-03-20 04:06:36 +01:00
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
########################################################################
# \\///
# qo-op
#############
2020-03-16 02:24:20 +01:00
if [[ ! $(which silkaj) ]]; then
2020-03-18 01:47:10 +01:00
echo "$USER please Install SILKAJ !!" && exit 1
2020-03-16 02:24:20 +01:00
fi
2020-03-18 01:47:10 +01:00
# GET DUNITER SERVER
DUNITERURL="https://$(./duniter_getnode.sh)"
2020-03-16 02:24:20 +01:00
IPFSNODEID=$(ipfs id -f='<id>\n')
2020-03-18 01:47:10 +01:00
[[ $IPFSNODEID == "" ]] && echo "$USER Please Install IPFS !!" && exit 1
2020-03-19 13:09:54 +01:00
[[ ! -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
2020-03-16 02:24:20 +01:00
#########################################################################################################
# GET G1 PUBKEY FROM SCUTTLEBUTT or $2 (DEBUG)
DELAY=$1
[[ $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)
2020-03-18 01:47:10 +01:00
if [[ ! -f ~/.ssb/secret.dunikey ]]; then
echo "pub: $NODE_G1PUBKEY" > ~/.ssb/secret.dunikey
echo "sec: $NODE_G1PRIVKEY" >> ~/.ssb/secret.dunikey
fi
2020-03-16 02:24:20 +01:00
else
2020-03-18 01:47:10 +01:00
NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
NODE_G1PRIVKEY=$(cat ~/.ssb/secret.dunikey | grep 'sec:' | cut -d ' ' -f 2)
2020-03-16 02:24:20 +01:00
fi
fi
2020-03-18 01:47:10 +01:00
[[ "$NODE_G1PUBKEY" == "" ]] && echo "$USER Missing ~/.ssb/secret : Please Install Scuttlebutt server !" && exit 1;
2020-03-16 02:24:20 +01:00
#########################################################################################################
echo "CHECKING G1WALLET LAST TX/IN ($DELAY)"
echo "======================================="
2020-03-18 01:47:10 +01:00
echo "DUNITER URL = $DUNITERURL"
echo "G1 PUBKEY = $NODE_G1PUBKEY"
echo "SSB ID = %$ssbpub.ed25519"
echo "IPFS ID = $IPFSNODEID"
# SPECIAL ONE LINE BASH BONUS
# HOW MUCH = silkaj -p $(./duniter_getnode.sh) balance $(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)"
2020-03-16 02:24:20 +01:00
2020-03-18 01:47:10 +01:00
# 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
2020-03-16 02:24:20 +01:00
2020-03-18 01:47:10 +01:00
###########################################################################
# TX EXTRACTION
###########################################################################
# MORE THAN MINUTE DELAY = history.received
2020-03-16 02:24:20 +01:00
if [[ $DELAYUNIT != "minutes" && $DELAYUNIT != "minute" ]]; then
# HOW MANY TX DO WE HAVE...
2020-03-18 01:47:10 +01:00
TXnb=$(cat ~/.zen/g1zen.scan | jq '.history.received[].hash' | wc -l)
2020-03-16 02:24:20 +01:00
echo "DETECTED $TXnb TX... Checking TX/IN..."
# PARSE $TXnb TX
line=1
while [[ $line -le $TXnb ]]; do
2020-03-18 01:47:10 +01:00
# 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)
2020-03-16 02:24:20 +01:00
[[ $ISSUER == $NODE_G1PUBKEY ]] && ((line++)) && continue ## TX/OUT CONTINUE
2020-03-18 01:47:10 +01:00
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)
2020-03-16 02:24:20 +01:00
# GET COMMENT
2020-03-18 01:47:10 +01:00
COMMENT=$(cat ~/.zen/g1zen.scan | jq '.history.received' | jq -r '.[].comment' | head -n $line | tail -n 1)
2020-03-16 02:24:20 +01:00
# echo "TX-IN $ISSUER => $NODE_G1PUBKEY"
echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)"
2020-03-19 13:09:54 +01:00
CMD=$(echo "$COMMENT" | awk '{print toupper($1)}')
2020-03-18 01:47:10 +01:00
###### CREATE ZEN VALUE IN IPFS #########
[[ $CMD == "ZEN" ]] && ./zen_MAKE.sh $ZEN $TXhash $ISSUER
############################################
echo "DEBUG! ./zen_MAKE.sh $ZEN $TXhash $ISSUER"
############################################
2020-03-16 02:24:20 +01:00
else
# STILL OLD TX
2020-03-18 01:47:10 +01:00
[[ $TXhash != "" ]] && echo "ALREADY TREATED TX/IN: $TXhash $(cat ~/.zen/scan/zen.$TXhash)" || echo "NO TX"
2020-03-16 02:24:20 +01:00
fi
((line++))
done
else
2020-03-18 01:47:10 +01:00
# MINUTE DELAY = pending // TODO: if anyone succeed in passing $VAR in jq command, both can be merge...
2020-03-16 02:24:20 +01:00
# HOW MANY TX DO WE HAVE...
2020-03-18 01:47:10 +01:00
TXnb=$(cat ~/.zen/g1zen.scan | jq '.history.pending[].hash' | wc -l)
2020-03-16 02:24:20 +01:00
echo "DETECTED $TXnb TX... Checking TX/IN..."
# PARSE $TXnb TX
line=1
while [[ $line -le $TXnb ]]; do
2020-03-18 01:47:10 +01:00
TXhash=$(cat ~/.zen/g1zen.scan | jq -r '.history.pending[].hash' | head -n $line | tail -n 1)
2020-03-16 02:24:20 +01:00
# IT IS A NEW TX/IN?
2020-03-18 01:47:10 +01:00
if [[ ! -f ~/.zen/scan/zen.$TXhash ]]; then
2020-03-16 02:24:20 +01:00
# GET LAST RX ISSUER
2020-03-18 01:47:10 +01:00
ISSUER=$(cat ~/.zen/g1zen.scan | jq -r '.history.pending[].issuers[0]' | head -n $line | tail -n 1)
2020-03-16 02:24:20 +01:00
[[ $ISSUER == $NODE_G1PUBKEY ]] && ((line++)) && continue ## TX/OUT CONTINUE
2020-03-18 01:47:10 +01:00
echo $ISSUER > ~/.zen/scan/zen.$TXhash
2020-03-16 02:24:20 +01:00
# GET OUTPUTS AND MAKE ZEN SUM
2020-03-18 01:47:10 +01:00
ZEN=$(cat ~/.zen/g1zen.scan | jq -r '.history.pending[].outputs[]' | grep $NODE_G1PUBKEY | head -n $line | tail -n 1 | cut -d ':' -f 1)
2020-03-16 02:24:20 +01:00
# GET COMMENT
2020-03-18 01:47:10 +01:00
COMMENT=$(cat ~/.zen/g1zen.scan | jq '.history.pending' | jq -r '.[].comment' | head -n $line | tail -n 1)
2020-03-16 02:24:20 +01:00
# echo "TX-IN $ISSUER => $NODE_G1PUBKEY"
echo "TX/IN :: $ZEN ZEN from $ISSUER :: $COMMENT ($TXhash)"
2020-03-19 13:09:54 +01:00
CMD=$(echo "$COMMENT" | awk '{print toupper($1)}')
2020-03-18 01:47:10 +01:00
###### CREATE ZEN VALUE IN IPFS #########
2020-03-19 13:09:54 +01:00
[[ $CMD == "ZEN" ]] && ./zen_MAKE.sh $ZEN $TXhash $ISSUER
2020-03-18 01:47:10 +01:00
############################################
echo "DEBUG! ./zen_MAKE.sh $ZEN $TXhash $ISSUER"
############################################
2020-03-16 02:24:20 +01:00
else
# STILL OLD TX
2020-03-18 01:47:10 +01:00
[[ $TXhash != "" ]] && echo "ALREADY TREATED TX/IN: $TXhash $(cat ~/.zen/scan/zen.$TXhash)" || echo "NO TX"
2020-03-16 02:24:20 +01:00
fi
((line++))
done
fi