Astroport.ONE/RUNTIME/G1PalPay.sh

374 lines
15 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
########################################################################
2024-04-22 19:45:26 +02:00
# Version: 1.0
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
# PAD COCODING : https://pad.p2p.legal/s/G1PalPay
2023-11-23 12:31:25 +01:00
# This script monitors G1 Blockchain
########################################################################
# TODO : CHECK RX coming from UPlanet Wallet
## meaning an initial 3.1G1 from a ZenStation admin wallet
## if not relay payment to ZenStation admin
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
. "${MY_PATH}/../tools/my.sh"
2024-02-14 18:51:39 +01:00
CESIUM=${myCESIUM}
GCHANGE=${myGCHANGE}
echo "$ME RUNNING (•‿‿•)"
########################################################################
2024-02-14 18:51:39 +01:00
# PALPAY SERVICE : MONITOR INCOMING TX & NEW TIDDLERS
########################################################################
########################################################################
2024-02-14 18:51:39 +01:00
INDEX="$1" ## TW file
[[ ! ${INDEX} ]] && INDEX="$HOME/.zen/game/players/.current/ipfs/moa/index.html"
[[ ! -s ${INDEX} ]] && echo "ERROR - Please provide path to source TW index.html" && exit 1
[[ ! -s ${INDEX} ]] && echo "ERROR - Fichier TW absent. ${INDEX}" && exit 1
2024-02-14 18:51:39 +01:00
PLAYER="$2" ## PLAYER
[[ ! ${PLAYER} ]] && PLAYER="$(cat ~/.zen/game/players/.current/.player 2>/dev/null)"
[[ ! ${PLAYER} ]] && echo "ERROR - Please provide PLAYER" && exit 1
2024-02-14 18:51:39 +01:00
ASTRONAUTENS=$(ipfs key list -l | grep -w ${PLAYER} | cut -d ' ' -f1) ## TW /ipns/
[[ ! ${ASTRONAUTENS} ]] && echo "ERROR - Clef IPNS ${PLAYER} introuvable!" && exit 1
2024-02-14 18:51:39 +01:00
G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub) ## PLAYER WALLET
[[ ! $G1PUB ]] && echo "ERROR - G1PUB ${PLAYER} VIDE" && exit 1
# Extract tag=tube from TW
MOATS="$3"
[[ ! ${MOATS} ]] && MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
###################################################################
## CREATE APP NODE PLAYER PUBLICATION DIRECTORY
###################################################################
mkdir -p $HOME/.zen/game/players/${PLAYER}/G1PalPay/
mkdir -p $HOME/.zen/tmp/${MOATS}
echo "=====(•‿‿•)====== ( ◕‿◕) (◕‿◕ ) =======(•‿‿•)======= ${PLAYER}
${INDEX}"
2024-05-03 12:37:42 +02:00
echo "(✜‿‿✜) G1PalPay : CHECK LAST 30 TX comment"
2024-05-03 12:37:42 +02:00
# CHECK LAST 30 INCOMING PAYMENTS
~/.zen/Astroport.ONE/tools/timeout.sh -t 12 \
2024-05-03 12:37:42 +02:00
${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey history -n 30 -j \
> $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json
[[ ! -s $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json ]] \
2024-04-22 19:17:32 +02:00
&& echo "NO PAYMENT HISTORY.........................."
2023-11-23 12:31:25 +01:00
##############################
## CONTROL WALLET
########################################################################################
if [[ ${UPLANETNAME} != "" ]]; then
echo "UPLANET ORIGIN CONTROL"
while read LINE; do
echo "${LINE}"
JSON=${LINE}
TXIDATE=$(echo $JSON | jq -r .date)
TXIPUBKEY=$(echo $JSON | jq -r .pubkey)
TXIAMOUNT=$(echo $JSON | jq -r .amount)
COMMENT=$(echo $JSON | jq -r .comment)
lastTXdate=$(cat ~/.zen/game/players/${PLAYER}/.uplanet.check)
[[ -z lastTXdate ]] && lastTXdate=0
[[ $(cat ~/.zen/game/players/${PLAYER}/.uplanet.check) -ge $TXIDATE ]] \
&& continue
[[ $(echo "$TXIAMOUNT < 0" | bc) -eq 1 ]] \
&& echo "$TXIDATE" > ~/.zen/game/players/${PLAYER}/.uplanet.check \
&& continue
echo "# CHECK FOR PRIMAL REGULAR TX in INCOMING PAYMENTS"
# silkaj money history DsEx1pS33vzYZg4MroyBV9hCw98j1gtHEhwiZ5tK7ech | tail -n 3 | head -n 1
# │ 2017-11-25 │ 5nk2qdh1…:GWD │ 200 │ 18.332 │ │
line=$(silkaj money history $TXIPUBKEY | tail -n 3 | head -n 1)
pub8=$(echo $line | awk -F'│' '{gsub(/[[:space:]]*/, "", $3); split($3, a, ":"); print substr(a[1], 1, 8)}')
# pub8=$(echo $line | cut -d '│' -f 3 | cut -c 1-8)
# PUB8= UPLANET WALLET
done < $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json
fi
2023-11-23 12:31:25 +01:00
##########################################################
############# CHECK FOR N1COMMANDs IN PAYMENT COMMENT
#################################################################
2024-03-23 01:27:49 +01:00
# LOG / cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -rc .[]
## TREAT ANY COMMENT STARTING WITH N1: exemple : N1Kodi.sh
## EXTRACT /ASTROBOT/N1ProgramNames
2024-02-14 18:51:39 +01:00
ls ${MY_PATH}/../ASTROBOT/ | grep "N1" | cut -d "." -f 1 > ~/.zen/tmp/${MOATS}/N1PROG
while read prog; do
echo "# SCAN FOR N1 COMMAND : $prog"
2024-02-14 18:51:39 +01:00
cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -rc .[] | grep "$prog" >> ~/.zen/tmp/${MOATS}/myN1.json
done < ~/.zen/tmp/${MOATS}/N1PROG
# got N1 incoming TX
while read NLINE; do
## COMMENT FORMAT = N1$CMD:$TH:$TRAIL
TXIDATE=$(echo ${NLINE} | jq -r .date)
TXIPUBKEY=$(echo ${NLINE} | jq -r .pubkey)
COMMENT=$(echo ${NLINE} | jq -r .comment)
CMD=$(echo ${COMMENT} | cut -d ':' -f 1 | cut -c -12 ) # Maximum 12 characters CMD
2024-02-14 18:51:39 +01:00
# Verify last recorded acting date (avoid running twice)
[[ $(cat ~/.zen/game/players/${PLAYER}/.ndate) -ge $TXIDATE ]] \
&& echo "$CMD $TXIDATE from $TXIPUBKEY ALREADY TREATED - continue" \
&& continue
TH=$(echo ${COMMENT} | cut -d ':' -f 2)
TRAIL=$(echo ${COMMENT} | cut -d ':' -f 3-)
2023-11-20 22:31:11 +01:00
if [[ -s ${MY_PATH}/../ASTROBOT/${CMD}.sh ]]; then
echo "RECEIVED CMD=${CMD} from ${TXIPUBKEY}"
${MY_PATH}/../ASTROBOT/${CMD}.sh ${INDEX} ${PLAYER} ${MOATS} ${TXIPUBKEY} ${TH} ${TRAIL}
## WELL DONE .
[[ $? == 0 ]] && echo "${CMD} DONE" && echo "$TXIDATE" > ~/.zen/game/players/${PLAYER}/.ndate ## MEMORIZE LAST TXIDATE
else
echo "NOT A N1 COMMAND ${COMMENT}"
fi
done < ~/.zen/tmp/${MOATS}/myN1.json
########################################################################################
echo "# CHECK FOR EMAILs IN PAYMENT COMMENT"
## DEBUG ## cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -r
#################################################################
2024-05-03 12:37:42 +02:00
cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -rc .[] | grep '@' \
> ~/.zen/tmp/${MOATS}/myPalPay.json
# IF COMMENT CONTAINS EMAIL ADDRESSES
# SPREAD & TRANSFER AMOUNT TO NEXT (REMOVING IT FROM LIST)...
## Other G1PalPay will continue the transmission...
########################################################################
## GET @ in JSON INLINE
while read LINE; do
echo "${LINE}"
JSON=${LINE}
TXIDATE=$(echo $JSON | jq -r .date)
TXIPUBKEY=$(echo $JSON | jq -r .pubkey)
TXIAMOUNT=$(echo $JSON | jq -r .amount)
TXIAMOUNTUD=$(echo $JSON | jq -r .amountUD)
COMMENT=$(echo $JSON | jq -r .comment)
2024-05-03 15:05:37 +02:00
lastTXdate=$(cat ~/.zen/game/players/${PLAYER}/.atdate)
[[ -z lastTXdate ]] && lastTXdate=0
2024-02-14 18:51:39 +01:00
[[ $(cat ~/.zen/game/players/${PLAYER}/.atdate) -ge $TXIDATE ]] \
&& echo "PalPay $TXIDATE from $TXIPUBKEY ALREADY TREATED - continue" \
&& continue
## GET EMAILS FROM COMMENT
TXIMAILS=($(echo "$COMMENT" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"))
2024-05-03 15:05:37 +02:00
[[ $(echo "$TXIAMOUNT < 0" | bc) -eq 1 ]] \
2024-05-03 15:39:25 +02:00
&& echo "TX-OUT :: ${LINE}" \
2024-03-15 23:03:51 +01:00
&& echo "$TXIDATE" > ~/.zen/game/players/${PLAYER}/.atdate \
&& continue
## DIVIDE INCOMING AMOUNT TO SHARE
echo "N=${#TXIMAILS[@]}"
N=${#TXIMAILS[@]}
2024-03-15 22:32:13 +01:00
SHAREE=$(echo "scale=2; $TXIAMOUNT / $N" | bc)
SHARE=$(makecoord ${SHAREE})
2024-02-14 18:51:39 +01:00
## SHARE is received AMOUT divided by numbers of EMAILS in comment
echo "% ${#TXIMAILS[@]} % $SHARE % $TXIDATE $TXIPUBKEY $TXIAMOUNT [$TXIAMOUNTUD] $TXIMAILS"
2024-02-14 18:51:39 +01:00
# let's loop over TXIMAILS
for EMAIL in "${TXIMAILS[@]}"; do
2024-03-15 22:32:13 +01:00
[[ ${EMAIL} == $PLAYER ]] \
&& echo "ME MYSELF" \
&& echo "$TXIDATE" > ~/.zen/game/players/${PLAYER}/.atdate \
&& continue
echo "EMAIL : ${EMAIL}"
2023-11-23 12:31:25 +01:00
ASTROTW="" STAMP="" ASTROG1="" ASTROIPFS="" ASTROFEED="" # RESET VAR
$($MY_PATH/../tools/search_for_this_email_in_players.sh ${EMAIL}) ## export ASTROTW and more
[[ ${ASTROTW} == "" ]] && ASTROTW=${ASTRONAUTENS}
2024-05-03 15:39:25 +02:00
echo "export ASTROPORT=${ASTROPORT} ASTROTW=${ASTROTW} ASTROG1=${ASTROG1} ASTROMAIL=${EMAIL} ASTROFEED=${FEEDNS}"
if [[ ! ${ASTROTW} ]]; then
2024-05-03 15:39:25 +02:00
echo "# PLAYER ${EMAIL} INCONNU $(date)"
continue
fi
2024-04-22 19:43:11 +02:00
if [[ ! ${ASTROG1} ]]; then
echo "<html><head><meta charset='UTF-8'>
<style>
body {
font-family: 'Courier New', monospace;
}
pre {
white-space: pre-wrap;
}
</style></head><body>" > ~/.zen/tmp/palpay.bro
echo "<h1>BRO.<h1>
2024-05-03 15:46:24 +02:00
$PLAYER wants to send you ${SHARE} G1...<br>
<br>(♥‿‿♥)... on <a href='https://qo-op.com'>UPlanet</a>
2024-04-22 19:43:11 +02:00
</body></html>" >> ~/.zen/tmp/palpay.bro
${MY_PATH}/../tools/mailjet.sh "${EMAIL}" ~/.zen/tmp/palpay.bro "BRO. $PLAYER INVITATION"
continue
fi
2024-05-03 15:39:25 +02:00
sleep 3
## SEND G1
echo "PalPay____________
SEND ${SHARE} G1 to $ASTROMAIL
TW : $ASTROTW
2024-05-03 15:39:25 +02:00
G1 : ${ASTROG1}"
2024-05-03 15:39:25 +02:00
echo PAY4SURE.sh "${HOME}/.zen/game/players/${PLAYER}/secret.dunikey" "${SHARE}" "${ASTROG1}" "UPLANET:PALPAY"
${MY_PATH}/../tools/PAY4SURE.sh "${HOME}/.zen/game/players/${PLAYER}/secret.dunikey" "${SHARE}" "${ASTROG1}" "UPLANET:PALPAY"
STAMP=$?
## DONE STAMP IT
[[ $STAMP == 0 ]] \
&& echo "REDISTRIBUTION DONE" \
&& echo "$TXIDATE" > ~/.zen/game/players/${PLAYER}/.atdate
2024-05-03 15:39:25 +02:00
done
2024-04-16 03:54:56 +02:00
done < ~/.zen/tmp/${MOATS}/myPalPay.json
echo "====(•‿‿•)======= %%%%% (°▃▃°) %%%%%%% ======(•‿‿•)========"
########################################################################################
## SEARCH FOR TODAY MODIFIED TIDDLERS WITH MULTIPLE EMAILS IN TAG
2024-01-03 20:39:39 +01:00
# This can could happen in case Tiddler is copied OR PLAYER manualy adds an email tag to Tiddler to share with someone...
#################################################################
2024-04-01 22:50:41 +02:00
echo "# EXTRACT [days[-1]] DAYS TIDDLERS"
tiddlywiki --load ${INDEX} \
2024-03-30 00:32:09 +01:00
--output ~/.zen/tmp/${MOATS} \
2024-04-01 22:50:41 +02:00
--render '.' "today.${PLAYER}.tiddlers.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[days[-1]]'
2024-03-30 00:32:09 +01:00
# cat ~/.zen/tmp/${MOATS}/today.${PLAYER}.tiddlers.json | jq -rc # LOG
2024-04-01 01:27:41 +02:00
## FILTER MY OWN EMAIL
2024-03-30 00:32:09 +01:00
cat ~/.zen/tmp/${MOATS}/today.${PLAYER}.tiddlers.json \
2024-02-14 18:51:39 +01:00
| sed "s~${PLAYER}~ ~g" | jq -rc '.[] | select(.tags | contains("@"))' \
> ~/.zen/tmp/${MOATS}/@tags.json 2>/dev/null ## Get tiddlers with not my email in it
2024-02-14 18:51:39 +01:00
[[ ! -s ~/.zen/tmp/${MOATS}/@tags.json ]] \
2024-04-22 19:17:32 +02:00
&& echo "NO EXTRA @tags.json TIDDLERS TODAY"
# LOG
cat ~/.zen/tmp/${MOATS}/@tags.json
2024-02-14 18:51:39 +01:00
echo "******************TIDDLERS with new EMAIL in TAGS treatment"
2024-02-14 18:51:39 +01:00
################################
## detect NOT MY EMAIL in TODAY TIDDLERS
################################
while read LINE; do
2024-01-03 20:39:39 +01:00
echo "---------------------------------- Sava PalPé mec"
echo "${LINE}"
echo "---------------------------------- PalPAY for Tiddler"
TCREATED=$(echo ${LINE} | jq -r .created)
TTITLE=$(echo ${LINE} | jq -r .title)
2024-04-22 19:17:32 +02:00
TTEXT=$(echo ${LINE} | jq -r '.text | match("/ipfs/[^\"\\s]+") | .string | first')
TTAGS=$(echo ${LINE} | jq -r .tags)
2024-01-03 20:39:39 +01:00
2024-04-22 19:17:32 +02:00
## Extract "/ipfs/CID" from Tiddler - to pin TOPIN -
TOPIN=$(echo ${LINE} | jq -r .ipfs) ## Tiddler produced by "Astroport Desktop"
2024-04-22 19:17:32 +02:00
[[ ! $(echo ${TOPIN} | grep '/ipfs') ]] && TOPIN=$(echo ${LINE} | jq -r ._canonical_uri) ## Tiddler is exported to IPFS
[[ ! $(echo ${TOPIN} | grep '/ipfs') ]] && TOPIN=$(echo ${LINE} | jq -r '.text | match("/ipfs/[^\"\\s]+") | .string | first') ## Ket first /ipfs/ link from text field
[[ ! $(echo ${TOPIN} | grep '/ipfs') ]] && echo "NOT COMPATIBLE ${TOPIN}" && TOPIN=""
echo "$TTITLE"
2024-04-22 19:17:32 +02:00
## Count extra emails found
emails=($(echo "$TTAGS" | sed "s~${PLAYER}~ ~g" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"))
nb=${#emails[@]}
2024-04-06 16:14:19 +02:00
#~ zen=$(echo "scale=2; $nb / 10" | bc) ## / divide by 10 = 1 ZEN each
## Get first zmail
ZMAIL="${emails}"
MSG="SEND + $nb JUNE TO BROs : ${emails[@]}"
echo $MSG
ASTROTW="" STAMP="" ASTROG1="" ASTROIPFS="" ASTROFEED=""
2023-11-23 12:31:25 +01:00
#### SEARCH FOR PALPAY ACOUNTS : USING PALPAY RELAY - COULD BE DONE BY A LOOP ?? §§§
$($MY_PATH/../tools/search_for_this_email_in_players.sh ${ZMAIL}) ## export ASTROTW and more
echo "export ASTROPORT=${ASTROPORT} ASTROTW=${ASTROTW} ASTROG1=${ASTROG1} ASTROMAIL=${EMAIL} ASTROFEED=${FEEDNS}"
[[ ${ASTROTW} == "" ]] && ASTROTW=${ASTRONAUTENS}
2024-04-22 19:17:32 +02:00
echo "TOPIN=${TOPIN}"
if [[ ${TOPIN} && ${ASTROG1} && ${ASTROG1} != ${G1PUB} ]]; then
2024-04-01 01:27:41 +02:00
##############################
### GET PAID & GET PINNED !!
##############################
${MY_PATH}/../tools/PAY4SURE.sh "${HOME}/.zen/game/players/${PLAYER}/secret.dunikey" "${nb}" "${ASTROG1}" "${emails[@]} /ipfs/${TOPIN}"
2023-12-30 02:37:54 +01:00
2024-04-22 19:43:11 +02:00
echo "<html><head><meta charset='UTF-8'>
<style>
body {
font-family: 'Courier New', monospace;
}
pre {
white-space: pre-wrap;
}
</style></head><body><h1>BRO ${PLAYER}</h1> : $MSG" > ~/.zen/tmp/${MOATS}/g1message
2023-11-23 12:31:25 +01:00
## PINNING IPFS MEDIA - PROOF OF COPY SYSTEM -
2023-12-30 02:37:54 +01:00
[[ ! -z $TOPIN ]] \
&& ipfs pin add $TOPIN \
2024-04-22 19:43:11 +02:00
&& echo "<br> <a href='${myIPFSGW}'/ipns/${ASTROTW}#${TTITLE}>${TTITLE}</a>
<br>( ${emails[@]} )<br>
<h2>PIN: <a href='${myIPFSGW}'$TOPIN>$TOPIN</a></h2>(☼‿‿☼)" >> ~/.zen/tmp/${MOATS}/g1message
2024-01-04 00:11:50 +01:00
## lazy mode... NOT FINISHING HTML TAGGING... browser shoud display html page ;)
2023-11-23 12:31:25 +01:00
2024-04-22 19:43:11 +02:00
${MY_PATH}/../tools/mailjet.sh "${PLAYER}" ~/.zen/tmp/${MOATS}/g1message "BRO. ${ZMAIL} TW5 PIN"
else
2024-04-22 19:43:11 +02:00
## ${ZMAIL} NOT A PLAYER YET
2024-01-03 20:39:39 +01:00
## SEND MESSAGE TO INFORM ${ZMAIL} OF THIS EXISTING TIDDLER
2024-04-22 19:43:11 +02:00
echo "<html><head><meta charset='UTF-8'>
<style>
body {
font-family: 'Courier New', monospace;
}
pre {
white-space: pre-wrap;
}
</style></head><body>
2024-01-03 20:39:39 +01:00
<h1>BRO. </h1>
2024-04-22 19:43:11 +02:00
<br> <a href='${myIPFSGW}'/ipns/${ASTROTW}#${TTITLE}>${TTITLE}</a>
<br>( ${emails[@]} )<br>
2024-01-04 00:11:50 +01:00
<br><b>${TTITLE}</b><br>(✜‿‿✜)
2024-04-22 19:43:11 +02:00
... Join <a href='https://qo-op.com'>UPlanet</a>
2024-01-03 20:39:39 +01:00
</body></html>" > ~/.zen/tmp/palpay.bro
2024-04-22 19:43:11 +02:00
${MY_PATH}/../tools/mailjet.sh "${ZMAIL}" ~/.zen/tmp/palpay.bro "BRO. ${PLAYER} TW5 link"
fi
done < ~/.zen/tmp/${MOATS}/@tags.json
echo "=====(•‿‿•)====== ( ◕‿◕) (◕‿◕ ) =======(•‿‿•)======="
2024-05-03 12:37:42 +02:00
# rm -Rf $HOME/.zen/tmp/${MOATS}
ls $HOME/.zen/tmp/${MOATS}
exit 0