2020-12-12 01:26:39 +01:00
#!/bin/bash
########################################################################
# Author: Fred (support@qo-op.com)
2021-01-31 14:19:15 +01:00
# Version: 0.2
2020-12-12 01:26:39 +01:00
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH = " `dirname \" $0 \"` " # relative
MY_PATH = " `( cd \" $MY_PATH \" && pwd )` " # absolutized and normalized
2021-08-02 08:10:14 +02:00
ME = " ${ 0 ##*/ } "
2020-12-12 01:26:39 +01:00
2021-06-04 23:50:39 +02:00
countMErunning = $( ps auxf --sort= +utime | grep -w $ME | grep -v -E 'color=auto|grep' | wc -l)
[ [ $countMErunning -gt 2 ] ] && echo " $ME already running $countMErunning time " && exit 0
2021-01-12 18:35:22 +01:00
# Retrieve Gchange profil data
# Sends "ipfstryme" messages to liked linking_me NODES
# If NODE is from "A_boostrap_nodes.txt" then auto-linking
2020-12-12 01:26:39 +01:00
########################################################################
2021-01-31 14:19:15 +01:00
# INITIALISATION & CONTROL
2020-12-12 01:26:39 +01:00
########################################################################
YOU = $( ps auxf --sort= +utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) ;
2021-07-10 14:04:16 +02:00
IPFSNODEID = $( ipfs --timeout= 20s id -f= '<id>\n' )
[ [ ! $IPFSNODEID ] ] && echo 'ERROR missing IPFS Node id !! IPFS is not installed !?' && exit 1
2021-07-10 13:29:15 +02:00
2020-12-12 01:26:39 +01:00
########################################################################
[ [ ! -f ~/.zen/secret.dunikey ] ] && echo "Missing ~/.zen/secret.dunikey. EXIT" && exit 1
G1PUB = $( cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
[ [ $G1PUB = = "" ] ] && echo "ERROR G1PUB empty !! EXIT" && exit 1
2021-04-02 23:26:47 +02:00
[ [ -f ~/.zen/ipfs/.$IPFSNODEID /_xbian.zuid ] ] && AXID = $( cat ~/.zen/ipfs/.$IPFSNODEID /_xbian.zuid)
2020-12-12 01:26:39 +01:00
2021-01-31 14:19:15 +01:00
########################################################################
# CREATNG IPFS LOCAL REPOSITORY for Node G1 Identity : G1SSB
2020-12-12 01:26:39 +01:00
mkdir -p ~/.zen/ipfs/.$IPFSNODEID /G1SSB
2021-01-31 14:19:15 +01:00
########################################################################
# CREATING MY tryme.addr
2020-12-24 16:29:36 +01:00
~/.zen/astrXbian/zen/tools/add_externIP_to_ipfstryme.sh
2020-12-12 01:26:39 +01:00
cat ~/.zen/ipfs/.${ IPFSNODEID } /tryme.addr
2021-01-31 14:19:15 +01:00
########################################################################
2020-12-12 01:26:39 +01:00
# ADD GCHANGE+ informations
2021-01-31 14:19:15 +01:00
########################################################################
2020-12-12 01:26:39 +01:00
GCHANGE = "https://data.gchange.fr"
2021-04-08 03:07:42 +02:00
## GET LATEST GCHANGE PROFILE
2021-03-18 00:18:48 +01:00
curl -s ${ GCHANGE } /user/profile/${ G1PUB } > /tmp/A_${ G1PUB } .cache
2021-04-08 03:07:42 +02:00
# UPDATE _g1.gchange_title
2021-03-18 00:18:48 +01:00
title = $( cat /tmp/A_${ G1PUB } .cache | jq -r '._source.title' )
2021-01-31 14:19:15 +01:00
[ [ $title ] ] && echo " $title " > ~/.zen/ipfs/.$IPFSNODEID /G1SSB/_g1.gchange_title
2020-12-12 01:26:39 +01:00
2021-04-08 03:07:42 +02:00
# UPDATE _g1.astroport_title with city
2021-04-02 23:26:47 +02:00
title = " Station $USER @ $AXID "
2021-03-18 00:18:48 +01:00
city = $( cat /tmp/A_${ G1PUB } .cache | jq -r '._source.city' )
2020-12-12 01:26:39 +01:00
[ [ " $city " != "null" ] ] && title = " $title in $city "
2021-01-31 14:19:15 +01:00
echo " $title " > ~/.zen/ipfs/.$IPFSNODEID /G1SSB/_g1.astroport_title
2020-12-12 01:26:39 +01:00
2021-04-08 03:07:42 +02:00
# UPDATE _g1.gchange_avatar.png
2021-03-18 00:18:48 +01:00
cat /tmp/A_${ G1PUB } .cache | jq -r '._source.avatar._content' | base64 -d > " /home/ $YOU /.zen/ipfs/. $IPFSNODEID /G1SSB/_g1.gchange_avatar.png "
2020-12-12 01:26:39 +01:00
2021-01-31 14:19:15 +01:00
# CREATE _nodename
2020-12-12 01:26:39 +01:00
[ [ -f /home/$YOU /.zen/ipfs/.$IPFSNODEID /G1SSB/_nodename ] ] && nodename = $( cat /home/$YOU /.zen/ipfs/.$IPFSNODEID /G1SSB/_nodename)
2021-04-08 03:07:42 +02:00
if [ [ " $nodename " = = "" ] ] ; then
2021-01-31 14:19:15 +01:00
nodename = $( hostname)
2020-12-12 01:26:39 +01:00
extension = $( echo $nodename | cut -d '.' -f 2)
2021-04-08 03:07:42 +02:00
if [ [ " $extension " = = " $nodename " ] ] ; then
nodename = " $nodename .home "
2020-12-12 01:26:39 +01:00
fi
2021-01-31 14:19:15 +01:00
echo " $nodename " > ~/.zen/ipfs/.$IPFSNODEID /G1SSB/_nodename
2020-12-12 01:26:39 +01:00
fi
########################################################################
# DUNITER G1 Wallet balance
export LC_ALL = C.UTF-8 #attipix
export LANG = C.UTF-8 #attipix
2021-01-31 14:19:15 +01:00
# _g1.pubkey
2021-03-17 16:41:56 +01:00
[ [ ! ~/.zen/ipfs/.${ IPFSNODEID } /G1SSB/_g1.pubkey ] ] && echo " $G1PUB " > ~/.zen/ipfs/.${ IPFSNODEID } /G1SSB/_g1.pubkey
2021-03-18 00:18:48 +01:00
2021-04-08 02:47:52 +02:00
# ipfsnodeid
[ [ ! -f ~/.zen/ipfs/.${ IPFSNODEID } /.ipfsnodeid ] ] && echo ${ IPFSNODEID } > ~/.zen/ipfs/.${ IPFSNODEID } /.ipfsnodeid
2021-03-18 00:18:48 +01:00
########################################################################
# NODE DISK PERFORMANCE, manual remove ~/.ipfs/test.disk to run again
if [ [ ! -f ~/.ipfs/test.disk ] ] ; then
2021-06-04 01:44:36 +02:00
diskperf = $( dd if = /dev/zero of = ~/.ipfs/test.disk bs = 10M count = 1 oflag = dsync 2>& 1 | tail -n 1 | sed s/\, \ /\ -/g | cut -d '-' -f 4)
echo " DISK PERFORMANCE TESTING : $diskperf "
# NODE disk.perf
echo " $diskperf " > ~/.zen/ipfs/.${ IPFSNODEID } /disk.perf
# NODE disk.bytes
echo $( df ~/.ipfs/ | tail -n 1 | awk '{print $4}' ) > ~/.zen/ipfs/.${ IPFSNODEID } /disk.bytes
# IPFS repo.stat
ipfs repo stat > ~/.zen/ipfs/.${ IPFSNODEID } /repo.stat
###########################################
# GEOLOC MUST BE SECURELY EXCHANGED (TODO)
###########################################
# CREATE "_g1.gchange_geoPoint.lat" AND "_g1.gchange_geoPoint.lon"
# rm -f ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_geoPoint.lat
# echo $(curl -s ${GCHANGE}/user/profile/${G1PUB} | jq '._source.geoPoint.lat') > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_geoPoint.lat
# rm -f ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_geoPoint.lon
# echo $(curl -s ${GCHANGE}/user/profile/${G1PUB} | jq '._source.geoPoint.lon') > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_geoPoint.lon
2021-03-18 00:18:48 +01:00
fi
2020-12-12 01:26:39 +01:00
2021-08-05 23:36:40 +02:00
########################################################################
## CREATE & CUSTOMIZE WIKI
########################################################################
echo " ####################################################
Customisation TiddlyWiki"
[ [ ! -f ~/.zen/ipfs/.${ IPFSNODEID } /index.html ] ] && mkdir -p ~/.zen/ipfs/.${ IPFSNODEID } && cp ~/.zen/astrXbian/.install/templates/tiddlywiki/index.html ~/.zen/ipfs/.${ IPFSNODEID } /index.html
# RESET TilldyWIKI (TODO REMOVE)
cp ~/.zen/astrXbian/.install/templates/tiddlyone/index.html ~/.zen/ipfs/.${ IPFSNODEID } /index.html
zuid = " $( cat ~/.zen/ipfs/.$IPFSNODEID /_xbian.zuid ) "
wiki = " /home/ $USER /.zen/ipfs/. $IPFSNODEID /index.html "
sed -i " s/Moa/ $zuid /g " $wiki ## (star) pseudo (score)
GTITLE = " $( cat ~/.zen/ipfs/.$IPFSNODEID /G1SSB/_g1.gchange_title | sed 's/\ /-/g' ) "
sed -i " s/ $zuid / $GTITLE /g " $wiki ## (star) pseudo (score)
sed -i " s/_IPFSNODEID_/ $IPFSNODEID /g " $wiki
sed -i " s/_G1PUB_/ $G1PUB /g " $wiki
# sed -i "s/Personnalisez/<a href=\"http:\/\/127.0.0.1:8181\/ipns\/$IPFSNODEID\/.$IPFSNODEID\/FRIENDS\">Amis de/g" $wiki
# https:\/\/www.gchange.fr\/#\/app\/records\/wallet?q=$G1PUB
########################################################################
########################################################################
2020-12-12 01:26:39 +01:00
###
2021-01-31 13:51:24 +01:00
#### FRIENDS && BOOTSTRAP ipfstryme MESSAGE sending procedure
2020-12-25 19:27:26 +01:00
########################################################################
2021-01-31 14:19:15 +01:00
# GET LIST of issuer(s) who likes me & A_boostrap_nodes.txt
2021-05-09 22:25:26 +02:00
IamINBOOTSTRAP = $( cat ~/.zen/astrXbian/A_boostrap_nodes.txt | grep " $IPFSNODEID " ) # AM I A BOOTSTRAP ?
ipfsnodeid = ${ IamINBOOTSTRAP ##*/ }
2021-05-20 15:25:39 +02:00
## FILTER Qm !
2021-06-04 22:35:20 +02:00
[ [ " ${ ipfsnodeid : 0 : 2 } " != "Qm" && " ${ ipfsnodeid : 0 : 2 } " != "" ] ] && IamBOOTSTRAP = $( ~/.zen/astrXbian/zen/tools/ipfs_to_g1.py $ipfsnodeid ) || IamBOOTSTRAP = "" # Contains G1PUB
2021-02-21 21:35:23 +01:00
2021-08-05 23:36:40 +02:00
########################################################################
################## BOOTSTRAP AUTO PINNING NEW MEDIAKEYs
2021-04-04 20:33:41 +02:00
[ [ $IamBOOTSTRAP ] ] && ~/.zen/astrXbian/zen/tools/autoPINfriends.sh
2021-08-02 08:10:14 +02:00
################## AUTO PINNING
2021-08-05 23:36:40 +02:00
########################################################################
2021-02-21 21:35:23 +01:00
2021-08-05 23:36:40 +02:00
########################################################################
2021-05-23 02:10:28 +02:00
################## CHECKING WHO GAVE ME STARS
2021-08-05 23:36:40 +02:00
################## BOOTSTRAP LIKES THEM BACK
################## SEND ipfstryme MESSAGES to FRIENDS
2021-05-23 02:10:28 +02:00
rm -f /tmp/friend_of_mine
2021-08-05 23:36:40 +02:00
## Getting Gchange liking_me list
~/.zen/astrXbian/zen/tools/timeout.sh -t 20 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" stars | jq -r '.likes[].issuer' > /tmp/liking_me
## Adding random bootstrap to liking_me list
2021-06-03 03:42:53 +02:00
~/.zen/astrXbian/zen/tools/ipfs_to_g1.py $( cat ~/.zen/astrXbian/A_boostrap_nodes.txt | grep -Ev "#" | rev | cut -d '/' -f 1 | rev | shuf | head -n 1) >> /tmp/liking_me
2021-06-04 02:56:53 +02:00
for liking_me in $( cat /tmp/liking_me | sort | uniq) ;
2020-12-12 01:26:39 +01:00
do
2021-08-05 23:36:40 +02:00
[ [ " $liking_me " = = "" ] ] && continue ## Protect from empty line !!
2021-03-17 16:54:15 +01:00
##### BOOTSTRAP AUTO LIKE BACK (NOT liking Myself)
2021-06-04 01:44:36 +02:00
if [ [ " $IamBOOTSTRAP " = = " $G1PUB " ] ] ; then
echo " I AM A BOOTSTRAP AUTO LIKING $liking_me FRIEND "
if [ [ ! -f ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me /tryme.addr && " $liking_me " != " $G1PUB " ] ] ; then
echo " SENDING 1 STAR AUTO LIKE to $liking_me "
2021-06-04 22:35:20 +02:00
~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" unstars -p $liking_me
2021-06-04 01:44:36 +02:00
sleep $(( 1 + RANDOM % 2 )) # SLOW DOWN
2021-06-04 22:35:20 +02:00
~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" stars -p $liking_me -n 1
2021-06-04 01:44:36 +02:00
sleep $(( 1 + RANDOM % 2 )) # SLOW DOWN
fi
fi
2021-01-31 13:51:24 +01:00
2021-03-19 02:37:03 +01:00
2021-03-19 20:22:24 +01:00
##### CHECKING IF WE LIKE EACH OTHER (AVOID LIKING MYSELF)
2021-06-04 01:44:36 +02:00
~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" stars -p $liking_me > /tmp/Gstars.json
2021-05-23 02:10:28 +02:00
2021-08-02 08:10:14 +02:00
## ZOMBIE PROTECTION
2021-06-04 02:24:25 +02:00
[ [ " $? " = = "0" && ! -f /tmp/Gstars.json ] ] && rm -Rf ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me && echo " $liking_me is a ZOMBIE... " && continue
2021-08-02 08:10:14 +02:00
2021-03-19 20:22:24 +01:00
friend_of_mine = $( cat /tmp/Gstars.json | jq -r '.yours' ) ;
2021-06-04 01:44:36 +02:00
if [ [ " $friend_of_mine " != "null" && " $liking_me " != " $G1PUB " ] ]
then
# ADD $liking_me TO MY ipfs FRIENDS list
echo " $liking_me is my FRIEND "
mkdir -p ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me
# REFRESH & PUBLISH stars friends map
stars = " $( cat /tmp/Gstars.json | jq -r '.yours.level' ) "
2021-06-04 02:24:25 +02:00
[ [ " $stars " = = "null" || " $stars " = = "" ] ] && rm -Rf ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me && echo " $friend_of_mine NO STAR !! Removing $liking_me " && continue ## REMOVE NO GOOD FRIENDS (no star)
2021-06-04 01:44:36 +02:00
cp /tmp/Gstars.json ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me / && rm -f /tmp/Gstars.json
echo " $stars " > ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me /stars.level && echo " ***** $stars STARS ***** "
2021-08-02 08:10:14 +02:00
echo " ***** Convert $liking_me to ipfsnodeid ***** "
ipfsnodeid = $( ~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $liking_me )
2021-07-31 12:25:22 +02:00
echo ${ ipfsnodeid } > ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me /ipfsnodeid
2021-08-02 08:14:38 +02:00
## TIMEOUT... uncomment in DEFCON3 only
# zuid=$(ipfs --timeout=10s cat /ipns/${ipfsnodeid}/.${ipfsnodeid}/_xbian.zuid)
2021-08-02 08:10:14 +02:00
# [[ ${zuid} ]] && touch ~/.zen/ipfs/.${IPFSNODEID}/FRIENDS/$liking_me/${zuid}
# SEND jaklis message if tryme.addr is different from last one
2021-06-04 01:44:36 +02:00
if [ [ $( diff ~/.zen/ipfs/.${ IPFSNODEID } /tryme.addr ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me /tryme.addr 2>& 1) ] ]
then
2021-08-02 08:10:14 +02:00
echo " I AM $G1PUB "
2021-06-04 01:44:36 +02:00
echo " Sending IPFSTRYME message to $liking_me "
if [ [ -f ~/.zen/ipfs/.${ IPFSNODEID } /tryme.addr ] ] ; then
2021-08-02 08:10:14 +02:00
~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" send -d $liking_me -t "ipfstryme" -f ~/.zen/ipfs/.${ IPFSNODEID } /tryme.addr
2021-06-04 01:44:36 +02:00
else
echo 'MISSING ~/.zen/ipfs/.${IPFSNODEID}/tryme.addr'
fi
echo " $friend_of_mine " >> /tmp/friend_of_mine
else
echo " tryme.addr MESSAGE ALREADY SENT TO $liking_me "
fi
# MEMORIZE actual tryme.addr
cp -f ~/.zen/ipfs/.${ IPFSNODEID } /tryme.addr ~/.zen/ipfs/.${ IPFSNODEID } /FRIENDS/$liking_me /
fi
sleep $(( 1 + RANDOM % 2 )) # SLOW DOWN
2020-12-24 16:43:37 +01:00
done
2020-12-25 17:27:17 +01:00
2021-05-23 02:10:28 +02:00
# REMOVE NOT ANYMORE FRIENDS ~/.zen/ipfs/.${IPFSNODEID}/FRIENDS/$liking_me/
## TODO compare with /tmp/friend_of_mine
2021-02-15 11:09:43 +01:00
# REFRESH IPNS SELF PUBLISH
########################################################################
~/.zen/astrXbian/zen/ipns_self_publish.sh
########################################################################
2021-01-31 14:19:15 +01:00
2021-07-31 04:09:42 +02:00
########################################################################
########################################################################
## LOVE ###
# ACTIVATION MONNAIES LIBRES EQUIBIBREES
# En relatif M/N :
# DU(t+1)=(DU+c²)/r
# S(t+1)=(S+DU)/r
# M(t+1)=N (et oui, si vous regardez les formules, on n’ a pas besoin de M :slight_smile: On a donc pas besoin de stocker M !)
# r=(1+DU)*N/N(t+1) (diviser par r, c’ est multiplier par [N(t+1)/N]/(1+DU), qui prend en compte la variation de N)
## N est le nombre de relations 5* !!
# Chaque joueur démarre à 100 LOVE au début du JEu. DU = 100 LOVE.
# Le compteur de DU de chacun converge chaque jour vers 100 LOVE (prélevant au fort pour redistribuer aux faibles)
# amortis temporellement par C² (adapté à la durée de vie moyenne des joueurs de chaque essaim !!).
2021-08-02 08:10:14 +02:00
# Cela ressemble à circuit résonant (RLC) amortis par la durée de vie?!
2021-07-31 04:09:42 +02:00
2021-08-02 08:10:14 +02:00
# https://forum.monnaie-libre.fr/t/etude-commencer-a-la-moyenne/15231/34?u=qoop
2021-07-31 04:09:42 +02:00
# https://forum.monnaie-libre.fr/t/formules-en-referentiel-du-et-m-n/10417
2020-12-12 01:26:39 +01:00
exit 0