Tag Reader G1Tx

This commit is contained in:
qo-op 2019-12-17 11:51:13 +01:00
parent 0ac66b60ed
commit 5a862c5f5a
14 changed files with 137 additions and 40 deletions

2
_chain
View File

@ -1 +1 @@
Qmad8nh1sLJJS8UtyXQJ2GzYrv768dDsBfwhtFyBjXh8Z3
QmRd3LFiGbA8s17vsYdwWftSnEnnEQGzAzCEPbJBLDrXEf

View File

@ -172,3 +172,4 @@ OK
2019-12-14: COMMENT
2019-12-14:
2019-12-14:
2019-12-17: Better G1Tx

View File

@ -1 +1 @@
1576284752579254475
1576547374550330601

Binary file not shown.

View File

@ -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)

79
shell/init.sh.old Executable file
View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

0
shell/tools/G1_TUX_keygen.py Normal file → Executable file
View File

0
shell/tools/G1_TUX_natools.py Normal file → Executable file
View File

0
shell/tools/G1_request_cesium_profile.py Normal file → Executable file
View File

View File

@ -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():

0
shell/tools/matrixKeypad_RPi_GPIO.pyc Normal file → Executable file
View File