tag_OP.sh 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #!/bin/bash
  2. ################################################################################
  3. # Author: Fred (support@qo-op.com)
  4. # Version: 0.2020
  5. # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
  6. ###########################################################################################
  7. # tag_OP.sh OPERATION ON G1TAG...
  8. # sudo pip3 install duniterpy
  9. ###########################################################################################
  10. # ipfs ls /ipns/QmY6ooFcsGXY4VSindqKMz9GvrprFXY32RrsTmqvVTYQX5
  11. # QmZ3RfWk1u5LEGYLHA633B5TNJy3Du27K6Fny9wcxpowGS 4 TAG_amount
  12. # QmXizDydPuiBd1V7JBVY5kdppShm9xdk2aoYj7c8V8Foxe 47 TAG_chain
  13. # QmeHHBZKtLJHr11rwXKeimwDE4i3nLMy2VPkWZsNaFasg1 4 TAG_currency
  14. # QmSjBDpjnoxnQT5RWRnyLxqwE3ovSRVb7xjwZoiufZAv3E 39 TAG_id
  15. # QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 2 TAG_n
  16. # QmdbdBWv4SygqaaeWHAvABiQAa3faf4ncfSyzRnx8BDdCc 20 TAG_nanodate
  17. # QmbN6gNM2vjLj7yaJ6xJcySDxmuSK2eB9ZDv5dpj2bo5pM 47 TAG_nodeid
  18. # QmXaMzRqhEs4cQMRN18FWaCeqGmrDBfV8hTkbfQuBCXnnA 1243 TAG_publishkey.swarm.crypt
  19. # QmWHsRZCTSjSxnp1Qm8WcmHNNQTJwDS2ukLE7NTccc3Kp9 1304 TAG_publishkey.B.gpg
  20. # ...
  21. # TAG_passenger, TAG_file is used to attach G1Tag to file.
  22. #
  23. # TRANSFERT ZEN FROM G1Tag to G1Tag
  24. # G1Tag J References IPNS G1 Tag link
  25. JSOURCE=$1
  26. JDEST=$2
  27. # Zen Amount to transfert
  28. VALUE=$3
  29. # Needed to Open ipfs publish Key
  30. KEYFILE=$4
  31. ############################################
  32. ############## INIT & root check
  33. NANODATE=$(date -u +%s%N)
  34. echo "__SUB:tag_OP.sh: TRANSFER from $JSOURCE (1) to $JDEST (2) G1Tag = $VALUE (3) using \"$KEYFILE\" (4)... GO... $NANODATE"
  35. if [[ "$USER" != "root" ]]; then echo "__SUB:tag_OP.sh: Hey, $USER you must at least be admin of your system. sudo -s ?"; exit; fi
  36. #############################################
  37. ############## CHECK ipfs daemon user
  38. YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1)
  39. if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "__SUB:tag_OP.sh: BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $YOU !"; exit; fi
  40. IPFSNODEID=$(su $YOU -c "ipfs id -f='<id>\n'")
  41. #############################################
  42. ############## SOURCE EXTRACTION
  43. JSOURCERR=$(su $YOU -c "ipfs cat /ipns/$JSOURCE/TAG_id | sed s/\ //g");
  44. #############################################
  45. ############## GOOD or BAD ?
  46. if [[ "$JSOURCERR" == "" ]]; then echo "__SUB:tag_OP.sh: G1TAG DETRUIT. Aucun G1Tag /ipns/$JSOURCERR ici... Ciao."; exit; fi
  47. echo "__SUB:tag_OP.sh: LOG. SOURCE G1Tag OK!! GREAT... Retrieving it all: ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE"
  48. mkdir -p ./TAG/${JSOURCERR}; rm -f ./TAG/${JSOURCERR}/*
  49. chown -R $YOU ./TAG/${JSOURCERR}/
  50. su $YOU -c "ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE"
  51. JSOURCEPUBLISHKEY="./TAG/${JSOURCERR}/TAG_publishkey.swarm.crypt"
  52. JSOURCEVALUE=$(cat ./TAG/${JSOURCERR}/TAG_amount);
  53. #############################################
  54. ############## No JDEST, then return $JSOURCEVALUE
  55. if [[ "$JDEST" == "" ]]; then echo "__SUB:tag_OP.sh: OK. G1Tag $JSOURCE VALUE = $JSOURCEVALUE Zen"; exit; fi
  56. #############################################
  57. ############## TEST IF $VALUE IS AVAILABLE
  58. FINALSOURCE=$( echo "${JSOURCEVALUE} - ${VALUE}" | bc -l )
  59. if [[ $FINALSOURCE -lt 0 ]]; then echo "__SUB:tag_OP.sh: KO. La valeur de ce G1Tag ne peut pas être : $FINALSOURCE Zen... Ciao $YOU !"; exit; fi
  60. #############################################
  61. ############## EXTRACT $JSOURCERR PUBLISH KEY
  62. if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" ]]; then
  63. ./shell/natools.py decrypt -k "$KEYFILE" -i "$JSOURCEPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JSOURCERR"
  64. else
  65. if [[ ! -f $KEYFILE ]]; then
  66. echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JSOURCERR est inexistante. Contact: https://g1sms.fr"
  67. fi
  68. fi
  69. #############################################
  70. ############## DESTINATION EXTRACTION
  71. JDESTRR=$(su $YOU -c "ipfs cat /ipns/$JDEST/TAG_id | sed s/\ //g");
  72. if [[ "$JDESTRR" == "" ]]; then echo "__SUB:tag_OP.sh: BAD G1TAG. Aucun G1Tag /ipns/$JDESTRR ici... Ciao."; exit; fi
  73. mkdir -p ./TAG/${JDESTRR}; rm -f ./TAG/${JDESTRR}/*
  74. echo "__SUB:tag_OP.sh: LOG. Hey You get a G1Tag!! GREAT... ipfs get --output=./TAG/${JDESTRR}/ /ipns/$JDEST"
  75. chown -R $YOU ./TAG/${JDESTRR}/
  76. su $YOU -c "ipfs get --output=./TAG/${JDESTRR}/ /ipns/$JDEST"
  77. JDESTPUBLISHKEY="./TAG/${JDESTRR}/TAG_publishkey.swarm.crypt"
  78. JDESTVALUE=$(cat ./TAG/${JDESTRR}/TAG_amount);
  79. FINALDEST=$(echo "${JDESTVALUE} + ${VALUE}" | bc -l)
  80. # EXTRACT $JSOURCERR PUBLISH KEY to "/home/$YOU/.ipfs/keystore/JSOURCE"
  81. # EXTRACT PUBLISH KEY
  82. if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JDESTRR" ]]; then
  83. ./shell/natools.py decrypt -k "$KEYFILE" -i "$JDESTPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JDESTRR"
  84. else
  85. if [[ ! -f $KEYFILE ]]; then
  86. echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JDESTRR est inexistante. Contact: https://g1sms.fr"
  87. fi
  88. fi
  89. ######################################################################################################
  90. if [[ -f "/home/$YOU/.ipfs/keystore/$JDESTRR" && -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" ]]; then
  91. # IF PUBLISH key for BOTH G1TAG exists
  92. #############################################
  93. ############## SOURCE OPERATION
  94. NN=$(cat ./TAG/${JSOURCERR}/TAG_n); ((NN++)); echo "$NN" > "./TAG/${JSOURCERR}/TAG_n"
  95. #############################################
  96. # Destroy B Access ?!!
  97. #rm -f ./TAG/${JSOURCERR}/TAG_publishkey.B.gpg
  98. echo "$FINALSOURCE" > "./TAG/${JSOURCERR}/TAG_amount"
  99. echo "${NANODATE}" > "./TAG/${JSOURCERR}/TAG_nanodate" # TODO: ACTIVATE NANODATE CONTROL / NODES MEDIANTIME
  100. echo "${IPFSNODEID}" > "./TAG/${JSOURCERR}/TAG_writerid"
  101. if [[ "$JSOURCE" == "$JDEST" ]]; then
  102. # PUT "READY" IN TAG_passenger (can now be loaded with a file), now actual IPFSNODEID is creator
  103. echo "READY" > "./TAG/${JSOURCERR}/TAG_passenger"
  104. echo "${IPFSNODEID}" > "./TAG/${JSOURCERR}/TAG_nodeid"
  105. echo "__SUB:tag_OP.sh: ${IPFSNODEID} NODE created REC TAG. ${JSOURCERR}. READY to LOAD_passenger now!!"
  106. fi
  107. SOURCENODEID=$(cat "./TAG/${JSOURCERR}/TAG_nodeid")
  108. I=$(su $YOU -c "ipfs add -qr ./TAG/${JSOURCERR} | tail -n 1")
  109. # RECORD TAG_chain And HASH again
  110. echo "$I" > "./TAG/${JSOURCERR}/TAG_chain"
  111. I=$(su $YOU -c "ipfs add -qr ./TAG/${JSOURCERR} | tail -n 1")
  112. # IPNS $JSOURCERR PUBLISH
  113. J=$(su $YOU -c "ipfs name publish -k ${JSOURCERR} --quieter /ipfs/${I}")
  114. # CLEAN IPFS keystore
  115. if [[ "${SOURCENODEID}" != "${IPFSNODEID}" ]]; then
  116. rm -f "/home/$YOU/.ipfs/keystore/$JSOURCERR"
  117. fi
  118. echo "__SUB:tag_OP.sh: G1Tag $JSOURCERR value ($FINALSOURCE) :: su $YOU -c \"ipfs cat /ipns/$JSOURCE/TAG_amount\""
  119. if [[ "$JSOURCE" != "$JDEST" ]]; then
  120. #############################################
  121. ############## DESTINATION OPERATION
  122. NN=$(cat ./TAG/${JDESTRR}/TAG_n); ((NN++)); echo "$NN" > "./TAG/${JDESTRR}/TAG_n"
  123. #############################################
  124. # Destroy B Access ?!!
  125. #rm -f ./TAG/${JDESTRR}/TAG_publishkey.B.gpg
  126. echo "${FINALDEST}" > "./TAG/${JDESTRR}/TAG_amount"
  127. ##############################################################################################################################
  128. if [[ $FINALSOURCE -eq 0 ]]; then
  129. echo "OK. G1Tag ${JSOURCERR} is empty destroying it!!";
  130. rm -f "./TAG/${JDESTRR}/TAG_id";
  131. fi
  132. ##############################################################################################################################
  133. echo "${NANODATE}" > "./TAG/${JDESTRR}/TAG_nanodate"
  134. echo "${IPFSNODEID}" > "./TAG/${JDESTRR}/TAG_writerid"
  135. DESTNODEID=$(cat "./TAG/${JDESTRR}/TAG_nodeid")
  136. I=$(su $YOU -c "ipfs add -qr ./TAG/${JDESTRR} | tail -n 1")
  137. # RECORD TAG_chain And HASH again
  138. echo "$I" > "./TAG/${JDESTRR}/TAG_chain"
  139. I=$(su $YOU -c "ipfs add -qr ./TAG/${JDESTRR} | tail -n 1")
  140. # IPNS $JDESTRR PUBLISH
  141. J=$(su $YOU -c "ipfs name publish -k ${JDESTRR} --quieter /ipfs/${I}")
  142. if [[ "${DESTNODEID}" != "${IPFSNODEID}" ]]; then
  143. rm -f "/home/$YOU/.ipfs/keystore/$JDESTRR"
  144. fi
  145. echo "__SUB:tag_OP.sh: G1Tag $JDESTRR value ($FINALDEST) :: su $YOU -c \"ipfs cat /ipns/$JDEST/TAG_amount\""
  146. fi
  147. echo "__SUB:tag_OP.sh: DONE. G1Tag balance updated:
  148. $JSOURCERR (/ipns/$JSOURCE) : $JSOURCEVALUE => $FINALSOURCE
  149. $JDESTRR (/ipns/$JSDEST) : $JDESTVALUE) => $FINALDEST"
  150. else
  151. echo "__SUB:tag_OP.sh: NO OPERATION DONE"
  152. fi
  153. ######################################################################################################