888 views
# G1Tag conteneur de G1 dans IPFS # Définition, explications, améliorations > FR: Il s'agit d'une structure de fichiers copiée dans IPFS et partagée par IPNS entre tous les noeuds de l'essaim G1sms. Elle renferme la valeur en ZEN (centimes de Ḡ1) dépensés pour sa création. > EN: It consists on a file structure copied in IPFS and shared through IPNS between all the nodes from a G1sms+ swarm. It contains a ZEN value (Ḡ1 cents) used to create it. Stocké localement par le Noeud créateur dans **./tag** sa valeur est notée dans **./_amount** Voici sa structure (vous devriez la voir si vous utilisez les clefs de l'[essaim G1sms+](https://pad.p2p.legal/s/G1sms-install#) en décembre 2019): ipfs ls /ipns/QmVvD5Z4YrUoeU9kWKkc78Hnb3JNsutJqyJ2ztmufxhecf QmPrumas2N5DuwcqUz9mayAU6oDL2bLjhpkVZ8hCRq9rpx 5 TAG_amount Qmecsgt2VRxg5o4zVBdvApo8SrHkiZZbjPNQVgiNnposrp 47 TAG_chain QmeHHBZKtLJHr11rwXKeimwDE4i3nLMy2VPkWZsNaFasg1 4 TAG_currency QmcND38MpsevtXnrJdFmMA4xGJisrYz3kV7bNR1XdM2cK2 31 TAG_id QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 2 TAG_n Qmax8MepdmBzAdATEcqGRAFv5XMoKHMbQZPHxUMhaRZqTk 20 TAG_nanodate QmbN6gNM2vjLj7yaJ6xJcySDxmuSK2eB9ZDv5dpj2bo5pM 47 TAG_nodeid QmXsuZCS4VMZ5unAjM4ayizJ3sTY3xiQBGfNeaUWVD69BD 1243 TAG_publishkey.+33647683646.crypt Qmb1upAej2JcBpgCmUzf3EXn6KqsD3NsbWtA8Vxc1fbiUC 1296 TAG_publishkey.B.gpg QmPqjFpKxs1jFDmxoru471jZjfsMUhGkL1m26vvA7dfkVZ 1243 TAG_publishkey.MASTER.crypt Qmc5m94Gu7z62RC8waSKkZUrCCBJPyHbkpmGzEePxy2oXJ 1 TAG_type Il comporte des fichiers **TAG_(*)** dont la valeur correspond à l'Etat et la valeur du **G1Tag**. Les fichiers **TAG_publishkey.*** sont les **clefs** permettant (à celui ou ceux sachant la déchiffrer) de mettre à jour l'état des fichiers et de **publier** la valeur courante **sur IPNS**. Ces fichiers (G1Tag) sont créés par le script **[./shell/sms_G1TAG.sh](https://git.p2p.legal/axiom-team/G1sms/src/master/shell/sms_G1TAG.sh)** Actuellement en développement, plusieurs clefs y sont introduites pour identifier celles qui sont nécessaires en fonction de l'usage et des manipulations du G1Tag. - **TAG_publishkey.+33647683646.crypt** a été chiffré par la clef publique du portefeuille G1sms - **TAG_publishkey.B.gpg** est chiffré en pgp symétrique par la clef B (présente sur le QRCode de TX du G1Tax) - **TAG_publishkey.MASTER.crypt** est chiffré par la clef publique du portefeuille G1 garant des G1Tag (partagé par tous les noeuds de l'essaim) - Nous pouvons introduire différentes clefs et même des programmes bash (ou autres en fonction des dépendances système qui en résultent)... NB: Plutot que d'utiliser la clef de l'essaim pour modifier son état, il serait préférable de laisser uniquement le noeud créateur du G1Tag le manipuler (pour créditer la somme débitée du second par l'usage de la clef gpg B). Cela nécessite l'usage du canal de communication inter nodes ouvert dans le répertoire **./wallets_swarm/.Qm*** (TODO: fonction à isoler) Dans un cas d'usage sans fraude, une opération sur un G1Tag se fait à priori rarement de façon contradictoire et simultanément à une autre. En effet les 2 G1Tag impliqués dans la transaction doivent être présenté à un même terminal G1Tx (ils ne peuvent être ailleurs à ce même moment) >La **synchronisation temporelle des noeuds ipfs/ipns est importante** pour obtenir un chainage (_chain, _nanodate, _n) des nouveaux Etats d'un G1Tag sur un délai rapide! # G1Tag : Schéma transactionnel actuel ## G1Tag QR Code Un [G1Tag est constitué de 2 QRCode](https://www.g1sms.fr/fr/blog/g1tag). - **Celui de Gauche permet la lecture,** RJ:pansezbanalsgratinrarestotem1930#QmTKYsNs7bFDnpckMv87NTFNen75TTnBUAohhv3pJZGpXD - **Celui de Droite autorise la modification.** BJ:NTY3YjQ4NzU0MGNiZGM2NTAzYmRjNjQ0#QmTKYsNs7bFDnpckMv87NTFNen75TTnBUAohhv3pJZGpXD ### DECODEX ??:\*#\* Les QRCode du G1Tag comportent 3 sections (:#) et sont de 2 types. ?? = Type QRCode ( RJ = lecture / BJ = écriture). (B)GPGKey: Clef GPG de déchiffrage publishkey (R)TAG_id: Identifiant G1Tag (diceware concaténé) (J) IPNS: Lien IPNS du Tag (ipfs ls /ipns/J) ## G1Tx: Déroulement d'une transaction Les G1Tag sont créés par commande SMS "**TAG #Montant #Nombre**" envoyée au serveur **[G1sms](https://www.g1sms.fr/) + G1Dab** > G1Tx en VIDEO: https://www.youtube.com/watch?v=hr9PGw8vqa8 **Le G1Tag2 veut effectuer une transaction de 5 Junes vers le G1Tag1** Les G1Tag sont présentés par leurs propriétaires devant le G1Tx selon la séquence suivante: - 1) G1Tag1 (contient 3000 ZEN *** 30 G1) **RJ:tactstruffapansever1994tm#QmVvD5Z4YrUoeU9kWKkc78Hnb3JNsutJqyJ2ztmufxhecf** - 2) G1Tag2 (contient 70 ZEN *** 7 G1) **BJ:NTY3YjQ4NzU0MGNiZGM2NTAzYmRjNjQ0#QmTKYsNs7bFDnpckMv87NTFNen75TTnBUAohhv3pJZGpXD** - 3) Saisie de 0005 au clavier, TODO améliorer [matrixKeypad.py](https://git.p2p.legal/axiom-team/G1sms/src/master/shell/tools/matrixKeypad.py) pour plus de flex. > ACTIONS: Le G1Tx récupère le **G1Tag2** et déchiffre "***TAG_publishkey.B.gpg***" grâce à la clef B fournie dans le QRCode. Il y modifie la valeur des fichiers **TAG_amount (-500), TAG_chain, TAG_n et TAG_nanodate, TAG_nodeid** pour chainer et publier ce nouvel état dans IPNS. Ensuite, il récupère le **G1Tag1** pour lui appliquer un changement d'état vers **TAG_amount (+500)** et se servir de la clef "***TAG_publishkey.MASTER.crypt***" pour le publier. En quelques secondes les nouvelles valeurs sont publiées sur IPNS comme nouvel Etat des G1Tag. NB: Ces actions se déroulent depuis [./shell/tag_OP.sh](https://git.p2p.legal/axiom-team/G1sms/src/master/shell/tag_OP.sh) appelé par [./shell/tag_READ_X.sh](https://git.p2p.legal/axiom-team/G1sms/src/master/shell/tag_READ_X.sh#L261) # Mémorisation IPNS La valeur des G1Tag est maintenue cohérente par le chainage des modifications et la publication IPNS de leur valeur courante (cf [./shell/sms_G1TAG.sh#L183](https://git.p2p.legal/axiom-team/G1sms/src/master/shell/sms_G1TAG.sh#L183) ). Il faudra tester les temps de propopagation avec un nombre important de Node, mais la propagation est quasi-instantannée avec des tests avec 3 à 5 noeuds. Le Node créateur du G1Tag doit récupérer régulièrement la valeur courante de celui-ci pour le conserver 'PIN' et officielement mémoriser cet nouvelle suite d'états (la table IPNS dynamique disparait toutes les 12 heures en cas de non raffraichissement) On pourra ajouter à cette phase de "consolidation" par les Nodes des vérifications pour valider que "la chaine d'un G1Tag ne fork pas" (en cas d'accès concurrent mal géré apr exemple)... Alors alerter du poblème: bug, fraude?!