diff --git a/_chain b/_chain index 33d4fcc..c021b22 100755 --- a/_chain +++ b/_chain @@ -1 +1 @@ -Qmad8nh1sLJJS8UtyXQJ2GzYrv768dDsBfwhtFyBjXh8Z3 +QmRd3LFiGbA8s17vsYdwWftSnEnnEQGzAzCEPbJBLDrXEf diff --git a/_comments b/_comments index 9cc3739..d7fd648 100755 --- a/_comments +++ b/_comments @@ -172,3 +172,4 @@ OK 2019-12-14: COMMENT 2019-12-14: 2019-12-14: +2019-12-17: Better G1Tx diff --git a/_nanodate b/_nanodate index d0acc79..ae44054 100755 --- a/_nanodate +++ b/_nanodate @@ -1 +1 @@ -1576284752579254475 +1576547374550330601 diff --git a/_publishkey.gpg b/_publishkey.gpg index 8927cc3..9e22954 100755 Binary files a/_publishkey.gpg and b/_publishkey.gpg differ diff --git a/shell/functions.sh b/shell/functions.sh index 484bf4c..4e00c34 100755 --- a/shell/functions.sh +++ b/shell/functions.sh @@ -115,8 +115,9 @@ if [[ $PHONE ]]; then rm -Rf ./wallets_swarm/$PHONE; fi #log "__SUB:ipfs_swarm_wallets_refresh: IPFS: ipfs get --output=./wallets_swarm/ /ipns/$IPFSNODEID" su $YOU -c "ipfs get --output=./wallets_swarm/ /ipns/$IPFSNODEID" count=1 -#for id in $(su $YOU -c "ipfs swarm peers" | awk -F '/' '{print $7}'); -for id in ./wallets_swarm/.Qm*/; +# Search for All peers Nodes. TODO: To be changed when Swarm is too bug or not expendanding +#for id in ./wallets_swarm/.Qm*/; +for id in $(su $YOU -c "ipfs swarm peers" | awk -F '/' '{print $7}'); do count=$((count+1)) id=$(echo $id | cut -d '.' -f 3 | cut -d '/' -f 1) diff --git a/shell/init.sh.old b/shell/init.sh.old new file mode 100755 index 0000000..47d1f27 --- /dev/null +++ b/shell/init.sh.old @@ -0,0 +1,79 @@ +#!/bin/bash +################################################################## +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: GPL (http://www.google.com/search?q=GPL) +################################################################## +# Adapter les valeurs au contexte spatio-temporel du NODE G1SMS +function log () { +# log ($1=text) + if [ "$DOLOG" == "YES" ] + then + echo "$PHONE:$1" >> /tmp/g1sms.log + fi +} + + +################################################################################################################################### +fn_exists() { + # appended double quote is an ugly trick to make sure we do get a string -- if $1 is not a known command, type does not output anything + [ `type -t $1`"" == 'file' ] +} +# ATOMATIC gammu-smsd-inject desactivation if no gammu is installed on system +if ! fn_exists gammu-smsd-inject; then +log ":p) DESACTIVATION ENVOI DE SMS .............." +function gammu-smsd-inject () { + log "$PHONE: >>> SENDING SMS $4 TO $2 " +} +else +export G1SMS="YES" +fi + + + export YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) + export CHEMIN="/home/$YOU/G1sms+" + cd $CHEMIN + ################################################################## + # Activate logging to /tmp/g1sms.log (YES/NO) + export DOLOG="YES" + export CPERROR="NOYES" + ################################################################## + # Country Node Phone international prefix (TODO Worldwide) + export COUNTRY="+33" + ################################################################## + # DU has a G1 value changed every 6 month! + # ./_DU Updated by cron_CODE.backup.sh + if [[ -f "./_DU" ]]; then export DUFACTOR=$(bc <<< "scale=2; $(cat "./_DU") / 100"); else log "__SUB:init.sh: FAILING TO FIND ./_DU EXIT!!!"; exit; fi + ################################################################## + # Choose Default Unit: G1, DU, LOVE (DU cents), ZEN (G1 cents) + export COIN="G1" + ################################################################## + # Limit and commission values + export LIMIT=2 # Solde minimum = 2 G1 + # FIXED COMMISSION SYSTEM + export COMMISSION=1 # transaction commission amount (G1) + export BILLCOM=20 + ################################################################## + # COMMISSION PARTS FROM TX FOR NODE & G1SMS NETWORK + # PART COMMISSION SYSTEM + export SWARMCOMM=10 + # TODO: NODE G1sms Wallet can receive rewards from SWARM or WALLETS/FILES + export NODECOMM=10 + ################################################################## + # SMS SIM Card Phone Number + export MASTERPHONE="+33651136520" + export ADRESSE="G1_Fablab_Toulouse" + export G1DAB="NO" + ################################################################## + # ADMIN COMMAND PHONE ORIGIN + export ADMINPHONE="+33647683646" + export ADMINPSEUDO="Fred" + ################################################################## + # DUNITER/CESIUM+ DEFAULT SERVERS + export DUNITER="https://g1.duniter.org" + export CESIUM="https://g1.data.le-sou.org" + + # TODO Use latest Silkaj from "sudo fredp3 install silkaj" + # export SILKAJ="/usr/local/bin/silkaj" + source $CHEMIN/shell/init_keys.sh + diff --git a/shell/sms_G1TAG.sh b/shell/sms_G1TAG.sh index 2951d25..e022f48 100755 --- a/shell/sms_G1TAG.sh +++ b/shell/sms_G1TAG.sh @@ -49,11 +49,11 @@ if [[ $UNKNOWN == "unknown" ]]; then fi ## NEEDED FOR Avatar + GeoPoint -if [[ ! $PASSENGER && "$MEMBER" == "" ]]; then - sms_ERROR "$PHONE" "Aucun membre associé à votre Portefeuille!? Envoyer N suivi de votre Pseudo membre pour activer la création de G1Tag..." - log "__SUB:sms_G1TAG.sh: Aucun membre associé" - exit -fi +#if [[ ! $PASSENGER && "$MEMBER" == "" ]]; then +# sms_ERROR "$PHONE" "Aucun membre associé à votre Portefeuille!? Envoyer N suivi de votre Pseudo membre pour activer la création de G1Tag..." +# log "__SUB:sms_G1TAG.sh: Aucun membre associé" +# exit +#fi ########################################################### # CALCULATE if wallet have enough for VIR+PERCENT @@ -115,16 +115,19 @@ log "__SUB:sms_G1TAG.sh: CREATE $NUMBER x $2 $UNIT G1Tag(s) for $MEMBER ($PHONE) c=0 while [[ $c -lt $NUMBER ]]; do ((c++)) - # Create Unique SWARM G1tag! - AA=$(./shell/diceware.sh 6 | xargs); RR=$(echo ${AA} | sed s/\ //g ); PR=$(echo ${AA} | cut -d ' ' -f 1 ); - while [ -d "./wallets_swarm/TAG/${RR}" ]; do - AA=$(./shell/diceware.sh 6 | xargs); - RR=$(echo ${AA} | sed s/\ //g ); + # Nom du G1Tag imprimé du le QRCode RJ + AA=$(./shell/diceware.sh 6 | xargs); # Nom = Diceware de 6 mots + RR=$(echo ${AA} | sed s/\ //g ); # Nom concaténé + PR=$(echo ${AA} | cut -d ' ' -f 1 ); # Prénom du G1Tag + # Create Unique G1tag! + while [[ $(ls "./wallets_swarm/.Qm*/TAG/${RR}") ]]; do + AA=$(./shell/diceware.sh 6 | xargs); RR=$(echo ${AA} | sed s/\ //g ); PR=$(echo ${AA} | cut -d ' ' -f 1 ); done + # Clef de chiffrage PGP imprimée sur le QRCode BJ BB=$(date +%N | sha256sum | base64 | head -c 32) #YjY4MDc3OTVjNmUxN2JhYWVjYmU3MDcy # BB=$(openssl rand -base64 32 | base64) #Yk8yMnVtdzZmendJbHNoK2Q0b0liakRpNHNJUk9UQW5Dd042cFdDODlJTT0K -# G1Tag init +# G1Tag init : Nom et usage des fichiers du G1Tag # TODO CHECK _nanodate to detect bad nodes/tx behaviour... and banish them) TAGDATE="./TAG/${RR}/TAG_nanodate" # Nanodate notification (ntpdate in init.sh for NODE sync in case of TAGNID="./TAG/${RR}/TAG_nodeid" # G1sms+ NODE IPFS ID managing that G1Tag @@ -153,7 +156,7 @@ TAGCHAIN="./TAG/${RR}/TAG_chain" # contains IPFS current ipfs hash #################################################### # IPFS files are created and calculated immutable I #################################################### - # A or R is the Human readable G1tag ID (kind of TAG pubkey) + # A or R is Human readable G1tag Name echo "${AA}" > "$TAGID" echo "0" > "$TAGN" echo "${NANODATE}" > "$TAGDATE" diff --git a/shell/tag_OP.sh b/shell/tag_OP.sh index 4a47744..a7075de 100755 --- a/shell/tag_OP.sh +++ b/shell/tag_OP.sh @@ -69,7 +69,7 @@ if [[ $FINALSOURCE -lt 0 ]]; then echo "__SUB:tag_OP.sh: KO. La valeur de ce G1T if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" ]]; then ./shell/natools.py decrypt -k "$KEYFILE" -i "$JSOURCEPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JSOURCERR" else - if [[ ! -f $KEYFILE ]] then + if [[ ! -f $KEYFILE ]]; then echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JSOURCERR est inexistante. Contact: https://g1sms.fr" fi fi @@ -90,7 +90,7 @@ FINALDEST=$(echo "${JDESTVALUE} + ${VALUE}" | bc -l) if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JDESTRR" ]]; then ./shell/natools.py decrypt -k "$KEYFILE" -i "$JDESTPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JDESTRR" else - if [[ ! -f $KEYFILE ]] then + if [[ ! -f $KEYFILE ]]; then echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JDESTRR est inexistante. Contact: https://g1sms.fr" fi fi diff --git a/shell/tag_READ_X.sh b/shell/tag_READ_X.sh index 5e101c5..538939c 100755 --- a/shell/tag_READ_X.sh +++ b/shell/tag_READ_X.sh @@ -27,14 +27,16 @@ if [ ! -f $MASTERKEYFILE ]; then echo "ERREUR CLEF DECHIFFRAGE!"; exit; fi # DOUCHETTE ES TU LA? if [ ! $G1TX ]; then echo "Branchez votre lecteur de QR code!"; exit; fi ./shell/tools/4LETTER.scroll.py "G1TX START" -./shell/timeout.sh -t 2 ./shell/tools/4LETTER.spinner.py - +./shell/tools/4LETTER.clock.py & +clockpid=$! # TABLEAU MEMOIRE DE SCAN declare -a act declare -a obj declare -a val cat /dev/ttyACM0 | while read line; do + kill $clockpid + lon=${#line} pref=$(echo $line | cut -d ":" -f 1) qrvalue=$(echo $line | cut -d ":" -f 2) @@ -55,7 +57,7 @@ cat /dev/ttyACM0 | while read line; do FID=$(echo $ID | awk '{print toupper($1)}') RR=$(echo $ID | sed s/\ //g) - ./shell/tools/4LETTER.scroll.py "G1TAG $FID READ" + ./shell/tools/4LETTER.scroll.py "G1TAG $FID >" RVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount"); CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') if [[ "$CURRENCY" == "zen" ]]; then CUR="zène"; else CUR=$CURRENCY; fi # Correction du défaut de prononciation. @@ -65,7 +67,7 @@ cat /dev/ttyACM0 | while read line; do else G1VAL=$(bc -l <<< "scale=2; $RVALUE / 100" | cut -d '.' -f 1) log "__SUB:tag_READ_X.sh: G1Tag $FID. Valeur $RVALUE $CURRENCY = $G1VAL G1" - ./shell/tools/4LETTER.scroll.py "$RVALUE ZEN *** $RVALUE ZEN" + ./shell/tools/4LETTER.scroll.py "$RVALUE ZEN *** $G1VAL G1" fi cmd="RJ" CASHBACK="" @@ -85,7 +87,7 @@ cat /dev/ttyACM0 | while read line; do FID=$(echo $ID | awk '{print toupper($1)}') RR=$(echo $ID | sed s/\ //g) - ./shell/tools/4LETTER.scroll.py "G1TAG $FID >>TX>> " + ./shell/tools/4LETTER.scroll.py "G1TAG [TX] $FID >" BVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount") CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') if [[ "$CURRENCY" == "zen" ]]; then CUR="zène"; else CUR=$CURRENCY; fi # Correction du défaut de prononciation. @@ -110,8 +112,9 @@ cat /dev/ttyACM0 | while read line; do log "__SUB:tag_READ_X.sh: !!!! $FID REC Tag = $BVALUE $CURRENCY" ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $BVALUE ZEN" else + G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) log "__SUB:tag_READ_X.sh: Ce G1 Tag $FID contient $BVALUE $CURRENCY" - ./shell/tools/4LETTER.scroll.py "$BVALUE ZEN *** $BVALUE ZEN MAX" + ./shell/tools/4LETTER.scroll.py "$BVALUE ZEN *** $G1VAL G1 MAX" fi cmd="BJ" val+=("$BVALUE") @@ -132,21 +135,21 @@ cat /dev/ttyACM0 | while read line; do cmd="G1" val+=("$VALUE") else - log "__SUB:tag_READ_X.sh: ERREUR QR code illisible. longueur $J = ${#J}" if [[ "$VALUE" == "" ]]; then DUNITER=$(./shell/checknodes.sh 'BAN') - echo "ERREUR TIMEOUT. CHANGE SILKAJ SERVER: $DUNITER" + log "__SUB:tag_READ_X.sh: ERREUR TIMEOUT. CHANGE SILKAJ SERVER: $DUNITER" ./shell/tools/4LETTER.scroll.py "ERREUR TIMEOUT SILKAJ" ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py CASHBACK="" else + log "__SUB:tag_READ_X.sh: ERREUR QRCODE ILLISIBLE. longueur $J = ${#J}" ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py CASHBACK="" fi fi else - ./shell/tools/4LETTER.scroll.py "G1 ${val[0]} / G1 ${val[0]}" + ./shell/tools/4LETTER.scroll.py " 2 X " fi else ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" @@ -159,10 +162,12 @@ cat /dev/ttyACM0 | while read line; do ############################################################### # APRES G1 CASHBACK : G1 Tag BJ WRITE => ENCAISSEMENT if [[ "${cmd}" == "BJ" && "$CASHBACK" != "" && -f /home/$YOU/.ipfs/keystore/${RR} ]]; then - ./shell/tools/4LETTER.scroll.py "ENCAISSEMENT G1TAG" + ./shell/tools/4LETTER.scroll.py "ZEN -> G1" log "__SUB:tag_READ_X.sh: G1 tag de $BVALUE G1 ! /ipns/$J Virement vers $CASHBACK? " - ./shell/tools/4LETTER.scroll.py "VERS PORTEFEUILLE G1" + ./shell/tools/4LETTER.spinner.py & + spinnerpid=$! + # ipfs get G1Tag vers ./TAG/${RR} mkdir -p ./TAG/${RR}; rm -f ./TAG/${RR}/*; chown -R $YOU ./TAG/${RR}/ log "__SUB:tag_READ_X.sh: ipfs get --output=./TAG/${RR} /ipns/$J" @@ -173,16 +178,19 @@ cat /dev/ttyACM0 | while read line; do # Make Silkaj TX G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) log "__SUB:tag_READ_X.sh: Silkaj TX $MASTERKEYFILE ($G1VAL) -> $CASHBACK" - PAY=$(./silkaj/silkaj transaction --auth-file -file="$MASTERKEYFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] CAPTURE G1Tag $RR" -y) + PAY=$(./silkaj/silkaj transaction --auth-file -file="$MASTERKEYFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] G1Tag $RR ZEN -> G1" -y) log "__SUB:tag_READ_X.sh: Silkaj output = $PAY" - if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then + # Stop 1LETTER.spinner.py + kill $spinnerpid + + if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" && "$PAY" != "" ]]; then new=$(./shell/checknodes.sh "BAN") sms_ERROR "$ADMINPHONE" "Il est survenu un problème avec un virement. Retour silkaj: $PAY ... $new"; ./shell/tools/4LETTER.scroll.py "ERREUR SILKAJ ERREUR" else # ENCAISSEMENT G1Tag - ./shell/tools/4LETTER.scroll.py "VIR ${FID} $G1VAL G1 ---) OK" + ./shell/tools/4LETTER.scroll.py "VIR ${FID} $G1VAL G1 -> OK " # CAPTURE / DESTRUCTION du G1 Tag echo "0" > "./TAG/${RR}/TAG_amount" echo "${J}" > "./TAG/${RR}/TAG_ipns" @@ -208,7 +216,7 @@ cat /dev/ttyACM0 | while read line; do J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") log "__SUB:tag_READ_X.sh: Destruction de ce G1 Tag publish -k ${RR} --quieter /ipfs/${I} :: ipfs ls /ipns/$J" - ./shell/tools/4LETTER.scroll.py "${FID} G1TAG VIDE !! DETRUCTION !!" + ./shell/tools/4LETTER.scroll.py "DETRUIRE G1TAG ${FID}" # CLEAN IPFS keystore: remove NOT created NODE keys SOURCENODEID=$(cat "./TAG/${RR}/TAG_nodeid") @@ -236,14 +244,17 @@ cat /dev/ttyACM0 | while read line; do if [[ "$PASSENGER" != "" ]]; then ./shell/tools/4LETTER.scroll.py "IMPOSSIBLE TAG PASSENGER"; else - # READ KEYBOARD VALUE !!! - COMBIEN=$(./shell/tools/matrixKeypad.py) + ########################################################### + # READ KEYBOARD VALUE !!! 4 DIGIT REMOVING LEADING 0 + COMBIEN=$(./shell/tools/matrixKeypad.py | sed 's/^0*//') if [[ $COMBIEN -le ${val[1]} ]]; then + COMBIENZEN=$(bc -l <<< "$COMBIEN * 100") log "__SUB:tag_READ_X.sh: Transfert de G1 Tag à G1 Tag. $COMBIEN" - ./shell/tools/4LETTER.scroll.py "G1TAG ${FID} TRANSFERT DE $COMBIEN ZEN" - log "__SUB:tag_READ_X.sh: $(./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIEN $MASTERKEYFILE)" + ./shell/tools/4LETTER.scroll.py "G1TAG ${FID} -> TX $COMBIENZEN ZEN *** $COMBIEN G1" + log "__SUB:tag_READ_X.sh: ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN $MASTERKEYFILE" + ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN "$MASTERKEYFILE" else - ./shell/tools/4LETTER.scroll.py "$COMBIEN DEPASSE ${val[1]} $CUR DU G1TAG ${FID}" + ./shell/tools/4LETTER.scroll.py "ERREUR $COMBIEN > VALEUR DE ${FID} *** ${val[1]} ZEN" fi fi CASHBACK="" @@ -265,9 +276,11 @@ cat /dev/ttyACM0 | while read line; do act=() obj=() val=() + # END OF 2-PASS READ ./shell/timeout.sh -t 2 ./shell/tools/4LETTER.spinner.py fi ./shell/tools/4LETTER.blink.py - + ./shell/tools/4LETTER.clock.py & + clockpid=$! done diff --git a/shell/tools/G1_TUX_keygen.py b/shell/tools/G1_TUX_keygen.py old mode 100644 new mode 100755 diff --git a/shell/tools/G1_TUX_natools.py b/shell/tools/G1_TUX_natools.py old mode 100644 new mode 100755 diff --git a/shell/tools/G1_request_cesium_profile.py b/shell/tools/G1_request_cesium_profile.py old mode 100644 new mode 100755 diff --git a/shell/tools/matrixKeypad.py b/shell/tools/matrixKeypad.py index 492de43..ba1c3d4 100755 --- a/shell/tools/matrixKeypad.py +++ b/shell/tools/matrixKeypad.py @@ -6,7 +6,7 @@ from time import sleep # Initialize the keypad class kp = keypad() -fourletterphat.print_str("ZEN?") +fourletterphat.print_str(" G1?") fourletterphat.show() def digit(): diff --git a/shell/tools/matrixKeypad_RPi_GPIO.pyc b/shell/tools/matrixKeypad_RPi_GPIO.pyc old mode 100644 new mode 100755