2023-11-29 16:50:42 +01:00
|
|
|
#!/bin/bash
|
|
|
|
########################################################################
|
|
|
|
# Version: 0.1
|
|
|
|
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
|
|
|
|
# MAKE PAYMENTS ON DUNITER BLOCKCHAIN
|
|
|
|
# VERIFY SUCCES & RENEW IF FAILED
|
|
|
|
########################################################################
|
|
|
|
MY_PATH="`dirname \"$0\"`" # relative
|
|
|
|
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
|
|
|
|
ME="${0##*/}"
|
|
|
|
|
|
|
|
. "${MY_PATH}/my.sh"
|
|
|
|
|
2024-02-26 22:59:54 +01:00
|
|
|
## REDIRECT OUTPUT TO "/tmp/20h12.log"
|
|
|
|
exec 2>&1 >> /tmp/20h12.log
|
2023-12-04 14:05:53 +01:00
|
|
|
|
2023-11-29 16:50:42 +01:00
|
|
|
KEYFILE="$1"
|
|
|
|
AMOUNT="$2"
|
|
|
|
G1PUB="$3"
|
|
|
|
COMMENT="$4"
|
|
|
|
MOATS="$5" ## RECALL PENDING
|
|
|
|
|
2024-01-01 02:53:58 +01:00
|
|
|
echo "KEYFILE=${KEYFILE}
|
|
|
|
AMOUNT=${AMOUNT}
|
|
|
|
G1PUB=${G1PUB}
|
|
|
|
COMMENT=${COMMENT}"
|
|
|
|
|
|
|
|
[[ -z $MOATS ]] \
|
|
|
|
&& MOATS=$(date -u +"%Y%m%d%H%M%S%4N") \
|
|
|
|
|| echo "OLD PAYMENT FAILURE = NEW TRY $MOATS"
|
2023-11-29 16:50:42 +01:00
|
|
|
|
2024-02-27 23:46:23 +01:00
|
|
|
## CHECKING ISSUER WALLET (dunikey file)
|
2023-11-29 16:50:42 +01:00
|
|
|
[[ -s ${KEYFILE} ]] \
|
2024-01-17 13:19:36 +01:00
|
|
|
&& ISSUERPUB=$(cat ${KEYFILE} | grep "pub:" | cut -d ' ' -f 2) \
|
2024-02-27 23:46:23 +01:00
|
|
|
|| { echo "ERROR : MISSING SECRET DUNIKEY FILE - EXIT -" && exit 1; }
|
|
|
|
|
|
|
|
[[ -z ${ISSUERPUB} ]] && echo "CANNOT EXTRACT ISSUERPUB FROM DUNIKEY - EXIT -" && exit 1
|
2023-11-29 16:50:42 +01:00
|
|
|
|
2024-01-17 13:19:36 +01:00
|
|
|
COINS=$($MY_PATH/COINScheck.sh ${ISSUERPUB} | tail -n 1)
|
2024-03-05 12:26:45 +01:00
|
|
|
sleep 3 ## Wait for ()&
|
2024-02-27 23:46:23 +01:00
|
|
|
[[ -z $COINS ]] && echo "ERROR : ${ISSUERPUB}=$COINS EMPTY WALLET - EXIT -" && exit 1
|
|
|
|
|
2023-11-29 16:50:42 +01:00
|
|
|
###### TEST INPUT VALUES
|
|
|
|
[[ $AMOUNT == "ALL" ]] && AMOUNT=$COINS ## ALL MEAN EMPTY ORIGIN WALLET
|
2024-02-27 23:46:23 +01:00
|
|
|
[[ -z $AMOUNT ]] && echo "ERROR : ${ISSUERPUB}=$COINS MISSING AMOUNT - EXIT -" && exit 1
|
|
|
|
[[ $AMOUNT =~ ^[0-9]+([.][0-9]+)?$ ]] \
|
|
|
|
&& echo "Valid AMOUNT=${AMOUNT}" \
|
|
|
|
|| { echo "ERROR NOT a valid AMOUNT : ${AMOUNT} - EXIT -" && exit 1; }
|
|
|
|
[[ $(echo "$COINS < $AMOUNT" | bc -l) -eq 1 ]] \
|
2024-03-15 23:03:51 +01:00
|
|
|
&& echo "ERROR : SOURCE WALLET ${ISSUERPUB} IS MISSING COINS !!! $AMOUNT > $COINS - EXIT -" && exit 1
|
2024-02-27 23:46:23 +01:00
|
|
|
|
|
|
|
[[ -z $G1PUB ]] && echo "ERROR : ${ISSUERPUB}=$COINS ($AMOUNT) MISSING DESTINATION - EXIT -" && exit 1
|
|
|
|
echo
|
2023-11-29 16:50:42 +01:00
|
|
|
echo "PAYMENT PROCESSOR ID ${MOATS}"
|
2024-01-17 13:19:36 +01:00
|
|
|
echo "${ISSUERPUB} : (${AMOUNT}) -> ${G1PUB}"
|
2023-11-29 16:50:42 +01:00
|
|
|
|
|
|
|
[[ -z $COMMENT ]] && COMMENT="ZEN:${MOATS}"
|
|
|
|
|
2024-01-17 13:19:36 +01:00
|
|
|
PENDINGDIR=$HOME/.zen/game/pending/${ISSUERPUB}
|
2023-11-29 16:50:42 +01:00
|
|
|
### PREPARE PENDINGFILE INFO ZONE
|
|
|
|
mkdir -p ${PENDINGDIR}
|
|
|
|
PENDINGFILE=${PENDINGDIR}/${MOATS}_${AMOUNT}+${G1PUB}.TX
|
|
|
|
|
|
|
|
rm -f ${PENDINGFILE} 2>/dev/null ## CLEAN START
|
|
|
|
|
|
|
|
## PREPARE CALLING MYSELF AGAIN COMMAND
|
2024-01-17 13:19:36 +01:00
|
|
|
cp ${KEYFILE} ${PENDINGDIR}/${MOATS}.key 2>/dev/null
|
2023-11-29 16:50:42 +01:00
|
|
|
echo '#!/bin/bash
|
2024-01-17 13:19:36 +01:00
|
|
|
bash '${ME}' "'${PENDINGDIR}'/'${MOATS}'.key" "'${AMOUNT}'" "'${G1PUB}'" "'${COMMENT}'" "'${MOATS}'"
|
2023-11-29 16:50:42 +01:00
|
|
|
' > ${PENDINGDIR}/${MOATS}_replay.sh
|
2024-01-08 23:46:43 +01:00
|
|
|
chmod +x ${PENDINGDIR}/${MOATS}_replay.sh
|
2023-11-29 16:50:42 +01:00
|
|
|
|
2024-02-10 15:50:28 +01:00
|
|
|
rm -f ${PENDINGDIR}/${MOATS}.result.html
|
2024-01-08 23:46:43 +01:00
|
|
|
|
|
|
|
################################################
|
2023-11-29 16:50:42 +01:00
|
|
|
# MAKE PAYMENT
|
2024-02-27 23:46:23 +01:00
|
|
|
echo
|
2024-02-10 15:50:28 +01:00
|
|
|
${MY_PATH}/jaklis/jaklis.py -k ${PENDINGDIR}/${MOATS}.key pay -a ${AMOUNT} -p ${G1PUB} -c "${COMMENT}" -m 2>&1> ${PENDINGDIR}/${MOATS}.result.html
|
|
|
|
CHK1=$(cat ${PENDINGDIR}/${MOATS}.result.html | head -n 1 )
|
|
|
|
CHK2=$(cat ${PENDINGDIR}/${MOATS}.result.html | head -n 2 )
|
2023-11-29 16:50:42 +01:00
|
|
|
|
2024-01-10 22:43:33 +01:00
|
|
|
echo ${CHK1}
|
|
|
|
echo ${CHK2}
|
2023-11-29 17:32:24 +01:00
|
|
|
|
2024-03-05 12:26:45 +01:00
|
|
|
if [[ $? == 0 || $(echo "${CHK2}" | grep 'succès') || $(echo "${CHK1}" | grep 'conforme') ]]; then
|
2024-01-10 22:43:33 +01:00
|
|
|
echo "TRANSACTION SENT"
|
2023-11-29 16:50:42 +01:00
|
|
|
echo "SENT" > ${PENDINGFILE} ## TODO : MONITOR POTENTIAL CHAIN REJECTION (FORK/MERGE WINDOW)
|
|
|
|
|
|
|
|
## CHANGE COINS CACHE
|
2024-01-17 13:19:36 +01:00
|
|
|
COINSFILE="$HOME/.zen/tmp/coucou/${ISSUERPUB}.COINS"
|
2023-11-29 16:50:42 +01:00
|
|
|
DESTFILE="$HOME/.zen/tmp/coucou/${G1PUB}.COINS"
|
|
|
|
|
|
|
|
## DECREASE SOURCE IN "coucou" CACHE
|
|
|
|
echo "$COINS - $AMOUNT" | bc > ${COINSFILE}
|
|
|
|
|
|
|
|
DES=$(cat ${DESTFILE})
|
|
|
|
[[ ${DES} != "" && ${DES} != "null" ]] \
|
|
|
|
&& echo "$DES + $AMOUNT" | bc > ${DESTFILE} \
|
2024-03-07 15:00:16 +01:00
|
|
|
|| { echo "${AMOUNT}" > ${DESTFILE} && DES=${AMOUNT}; }
|
2023-11-29 16:50:42 +01:00
|
|
|
|
|
|
|
## INFORM ABOUT PAYMENT
|
|
|
|
ZENAMOUNT=$(echo "$AMOUNT * 10" | bc | cut -d '.' -f 1)
|
|
|
|
ZENCUR=$(echo "$COINS * 10" | bc | cut -d '.' -f 1)
|
|
|
|
ZENDES=$(echo "$DES * 10" | bc | cut -d '.' -f 1)
|
|
|
|
|
2024-02-13 02:31:18 +01:00
|
|
|
##### MONITORING #########
|
2024-03-30 13:06:56 +01:00
|
|
|
echo "<html><h1>${ZENAMOUNT} ♥ OPERATION</h1>
|
2024-02-27 23:46:23 +01:00
|
|
|
${COMMENT}
|
|
|
|
<h3><a title='CESIUM' href='${CESIUMIPFS}/#/app/wot/tx/${ISSUERPUB}/'>${ISSUERPUB}</a>
|
|
|
|
(<a href='$myUPLANET/g1gate/?pubkey=${ISSUERPUB}'>SCAN</a>)
|
|
|
|
<br> //--->> <a title='CESIUM' href='${CESIUMIPFS}/#/app/wot/tx/${G1PUB}/'>${G1PUB}</a>
|
|
|
|
(<a href='$myUPLANET/g1gate/?pubkey=${G1PUB}'>SCAN</a>)
|
|
|
|
</h3>
|
|
|
|
</html>" > ${PENDINGDIR}/${MOATS}.result.html
|
|
|
|
|
2024-03-30 13:06:56 +01:00
|
|
|
$MY_PATH/mailjet.sh "support@qo-op.com" ${PENDINGDIR}/${MOATS}.result.html "${ZENAMOUNT} ♥ : ${COMMENT}"
|
2023-11-29 16:50:42 +01:00
|
|
|
|
|
|
|
## REMOVE IF YOU WANT TO MONITOR "SENT" WINDOW INCERTITUDE
|
2024-01-17 13:19:36 +01:00
|
|
|
rm ${PENDINGDIR}/${MOATS}.key
|
2023-11-29 16:50:42 +01:00
|
|
|
rm ${PENDINGDIR}/${MOATS}_replay.sh
|
2024-02-10 15:50:28 +01:00
|
|
|
rm ${PENDINGDIR}/${MOATS}.result.html
|
2024-01-17 13:19:36 +01:00
|
|
|
rm ${PENDINGFILE}
|
2023-11-29 16:50:42 +01:00
|
|
|
|
|
|
|
else
|
|
|
|
|
2024-01-10 22:43:33 +01:00
|
|
|
echo "TRANSACTION ERROR"
|
|
|
|
|
2023-11-29 16:50:42 +01:00
|
|
|
## INFORM SYSTEM MUST RENEW OPERATION
|
|
|
|
rm ${PENDINGFILE}
|
2024-01-08 23:46:43 +01:00
|
|
|
echo "<html><h2>BLOCKCHAIN CONNEXION ERROR</h2>
|
2023-11-29 16:50:42 +01:00
|
|
|
<h1>- MUST RETRY -</h1>
|
2024-02-10 15:50:28 +01:00
|
|
|
LAUNCHING SUB SHELL</html>" >> ${PENDINGDIR}/${MOATS}.result.html
|
2023-11-29 16:50:42 +01:00
|
|
|
|
|
|
|
## COUNT NUMBER OF TRY
|
|
|
|
try=$(cat ${PENDINGDIR}/${MOATS}.try 2>/dev/null) || try=0
|
|
|
|
|
2023-11-30 21:21:57 +01:00
|
|
|
[ $try -gt 2 ] \
|
2024-02-10 15:50:28 +01:00
|
|
|
&& echo "${MOATS} TOO MANY TRY ( $try )" >> ${PENDINGDIR}/${MOATS}.result.html \
|
|
|
|
&& $MY_PATH/mailjet.sh "support@qo-op.com" ${PENDINGDIR}/${MOATS}.result.html "PAYMENT CANCELED" \
|
2023-11-29 16:50:42 +01:00
|
|
|
&& exit 1 \
|
2024-02-10 15:50:28 +01:00
|
|
|
|| $MY_PATH/mailjet.sh "support@qo-op.com" ${PENDINGDIR}/${MOATS}.result.html "PAYMENT REPLAY"
|
2023-11-29 16:50:42 +01:00
|
|
|
|
|
|
|
(
|
|
|
|
((try++)) && echo $try > ${PENDINGDIR}/${MOATS}.try
|
|
|
|
chmod +x ${PENDINGDIR}/${MOATS}_replay.sh
|
|
|
|
sleep 3600
|
|
|
|
${PENDINGDIR}/${MOATS}_replay.sh
|
|
|
|
exit 0
|
|
|
|
) &
|
|
|
|
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit 0
|