# Work in progress Transaction / Module

**URL:** https://forum.duniter.org/t/work-in-progress-transaction-module/3421
**Category:** Discussion
**Tags:** electronic, card, transaction
**Created:** [14 October 2017 15:27 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421 "2017-10-14T15:27:19Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Max](https://forum.duniter.org/user_avatar/forum.duniter.org/max/32/2424_2.png) [@Max](https://forum.duniter.org/u/Max)
#### Post date: [14 October 2017 15:27 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/1 "2017-10-14T15:27:19Z")

</div>

Ola,

Un tout petit aperçu pour montrer que la signature fonctionne sur ce genre de composant 🙂

En l’état sur la vidéo, le module effectue une signature des la reception du document,  
et la transmet aussitôt  
transaction visible sur Gtest

bien sur l’integration d’un code pin sera de mise  
🙂

Un premier proto «&nbsp;propre&nbsp;» bientot avec le code pin, j’attends des boutons poussoirs

C’est donc dans un premier temps un systeme tel qu’une carte bleue de paiement,  
peut etre bientot un «&nbsp;portefeuille electronique de plusieurs monnaies libre&nbsp;» 🤗

maintenant ca peut servir a stocker ces identifiants au chaud également 🙂  
.[https://streamable.com/ki5kg](https://streamable.com/ki5kg)

---

<div class="post-metadata">

### Author: ![stephane](https://forum.duniter.org/user_avatar/forum.duniter.org/stephane/32/2801_2.png) [@stephane](https://forum.duniter.org/u/stephane)
#### Post date: [14 October 2017 15:41 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/2 "2017-10-14T15:41:34Z")

</div>

Tu utilises quelle type de composants? C’est un module LoRa au premier plan?

---

<div class="post-metadata">

### Author: ![Max](https://forum.duniter.org/user_avatar/forum.duniter.org/max/32/2424_2.png) [@Max](https://forum.duniter.org/u/Max)
#### Post date: [14 October 2017 15:51 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/3 "2017-10-14T15:51:28Z")

</div>

[https://forum.duniter.org/t/systeme-transaction-discussion/3053/62?u=max](https://forum.duniter.org/t/systeme-transaction-discussion/3053/62?u=max)

donc en 1er plan c’est un ESP qui execute la signature et qui affiche quelques data concernant les etapes dans le code

la communication se fait par liaison UART, la c’est cablé sur mon poste,  
je vais le plugé sur les pins UART d’un PI zero W que je viens d’acquerir a cet effet 🙂

pour l’instant j’utilise l’UART,  
je suis face a une problematique concernant l’I2C,  
pour faire communiquer un PI zero ou un PC celui ci doit etre esclave et mon module ESP doit être le maitre

pour les brancher directement, ca demande le developpement d’un driver, ce a quoi je vais m’atteler de comprendre comment en realiser un specifiquement pour le composant BCM2835 du rpi  
sinon quoi je passe par un atmega entre les 2 et ca fonctionne aussi, le atmega sert d’intermediaire entre les 2

---

<div class="post-metadata">

### Author: ![stephane](https://forum.duniter.org/user_avatar/forum.duniter.org/stephane/32/2801_2.png) [@stephane](https://forum.duniter.org/u/stephane)
#### Post date: [14 October 2017 15:55 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/4 "2017-10-14T15:55:02Z")

</div>

Je suis tombé sur ça : [https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=44482](https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=44482). Je ne sais pas si c’est toujours d’actualité…

---

<div class="post-metadata">

### Author: ![Max](https://forum.duniter.org/user_avatar/forum.duniter.org/max/32/2424_2.png) [@Max](https://forum.duniter.org/u/Max)
#### Post date: [14 October 2017 15:58 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/5 "2017-10-14T15:58:57Z")

</div>

et moi sur ca:

> **[hendric-git/bsc-slave](https://github.com/hendric-git/bsc-slave)**
>
> bsc-slave - the place to find the kernel modul for the BSC Slave of the raspberry pi

a priori sur le PI zero W , j’ai essayer de compiler le module pour le kernel  
maintenant a l execution lorsque je l’insert dans le kernel,  
il ne me crée pas de chemin /dev/i2c-slave…

en meme temps c’est expliqué que ca fonctionne que sur certains modele, A et B+ je crois, a revoir…  
faudrait que quelqu’un qui a ces modeles puissent confirmer que le pi peut fonctionner en slave et la c’est bonheur 🙂

* * *

edit:

d’un autre cote l’uart c’est pas mal non plus pour faire communiquer l’ESP et [PC / RPI / INTEL EDISON / ONION OMEGA / CHIP] \<\< terminal de paiement

comme ca je garde la ligne i2c de l’ESP pour l’ecran et du coup "l’affichage " du code pin se faisant sur cette ligne i2c,  
n’est pas en communication direct avec le module “terminal de paiement” et plus de sniffing potentiel avec un module de paiement traffiqué

---

<div class="post-metadata">

### Author: ![stephane](https://forum.duniter.org/user_avatar/forum.duniter.org/stephane/32/2801_2.png) [@stephane](https://forum.duniter.org/u/stephane)
#### Post date: [14 October 2017 16:18 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/6 "2017-10-14T16:18:14Z")

</div>

Merci pour le lien.

Je n’ai malheureusement que du RPI B, 2B, 3B, PIZERO et PIZERO W

Edit: Une idée: si on utilise un module LoRa embarquant un atmega, on pourrait créer son propre réseau de paiement…  
Dans tous les cas, bravo pour ce que tu fais.

Edit2: N’y a t-il pas un moyen d’informer l’I2c maitre par un fil/signal type IRQ pour demander à l’I²C maitre “interroge moi”?

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [14 October 2017 17:39 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/7 "2017-10-14T17:39:23Z")

</div>

@Max excellent 🙂

Souhaiterai tu nous présenter ce projets lors du créneau de libre le Jeudi de 16h à 17h ?

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [25 October 2017 10:31 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/8 "2017-10-25T10:31:23Z")

</div>

Super @Max 🙂  
As-tu avancé depuis sur ta RPI ?

Je parle justement de ça sur ce topic: [https://forum.duniter.fr/t/terminaux-de-paiement-pour-g1/895/4](https://forum.duniter.fr/t/terminaux-de-paiement-pour-g1/895/4)

---

<div class="post-metadata">

### Author: ![Max](https://forum.duniter.org/user_avatar/forum.duniter.org/max/32/2424_2.png) [@Max](https://forum.duniter.org/u/Max)
#### Post date: [25 October 2017 20:18 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/9 "2017-10-25T20:18:11Z")

</div>

Salut @poka

> [@poka](#):
>
> As-tu avancé depuis sur ta RPI ?

A vrai dire , sur le RPI non.  
J’ai passé des commandes de composants chez des fournisseurs chinois,  
je dois compter 3 semaines ou + pour la livraison,  
 → avant tout pour finaliser la partie “Carte bleue”.

pour le coté TPE,  
Le programme qui tourne sur cette demo doit tourner sans probleme a priori sur un RPI. J’ai déjà tester la communication entre les 2 ca tourne 🙂 la je reste en standby sur le PI…

Donc, ici, le TPE c’est mon poste, ca peut être un RPI, une tablette sous android etc…

Concernant :  
“” ce qui empêche de simplement utiliser une tablette avec Cesium dessus en guise de TPE… “”

Je ne suis pas au fait de l’appli Cesium pour smartphones / tablettes,

En soit , c’est une contrainte technique vis a vis du systeme operateur (android / ios) pour communiquer avec “la carte bleue” tel que moi de mon côté je l’envisage…

* * *

Sinon pour revenir au QRCode,  
sur Cesium, c’est un parsing a faire d’une URL,

pour exemple

je me fais ma petite appli en JS executé dans le navigateur pour essayer tout un tas de combinaisons exotiques dont on dispose avec les fonctions de lock/unlock.

Bref,  
je peux pré remplir des champs avec l’url tel que :  
k=clé cible  
a=montant  
d=choix d’un domaine sur lequel envoyer les requetes  
c=choix de la monnaie (G1 ou G1-test)

grosso modo , tu crées un QRCode sur un site adapte  
avec une url en parametre tel que:  
[monsite.com](http://monsite.com/mapage.html?k=MACLE&a=1234) (fake url)

ce qui créer un QRCode que tu imprime et que n’importe qui peut scanner  
et ca le renvois sur “[monsite.com](http://monsite.com)”, prêt a signer puis expedier 1234 unité (12,34 G1) a la clé MACLE 🙂

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [26 October 2017 09:49 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/10 "2017-10-26T09:49:34Z")

</div>

Tu nous présentera ca aux RML10 ?! 😉  
Où au moins en off, si c’est pas près.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [26 October 2017 09:51 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/11 "2017-10-26T09:51:05Z")

</div>

@Max a dit qu’il ne sera pas présent.

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [9 November 2017 11:51 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/12 "2017-11-09T11:51:46Z")

</div>

Désolé pour la latence…  
Oui c’est super intéressent tout ça… Je suis curieux de voir ton système en fonctionnement.  
Tu ne sera donc pas présent aux RML10 ?

---

<div class="post-metadata">

### Author: ![Max](https://forum.duniter.org/user_avatar/forum.duniter.org/max/32/2424_2.png) [@Max](https://forum.duniter.org/u/Max)
#### Post date: [9 November 2017 13:20 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/13 "2017-11-09T13:20:20Z")

</div>

Yop,

Je confirme que pour ces RML10 je ne peux pas être présent.

* * *

Après quoi ca avance,  
mon appli en JS pour :

1-creer des “smarts contract”  
2-generer des qrcodes (comme expliqué plus haut)  
les qrcodes :  
==\> d’un coté, un commercant creer un qrcode pour un produit, le client le scan et est renvoyé vers l’appli y a plus qu’ a signer et envoyer la transaction.

==\> d’un autre, le client creer un qrcode que le commercant scan et est renvoyé vers l’appli pour savoir si le client a suffisament de credit sur son compte et accepter de lui vendre un produit

* * *

pour les smarts contracts j’ai des pulls requests qui vont tomber 😉  
j’ai besoin que duniter accepte certains contrats tout autant que je dois peaufiner certaines fonctionnalités sur mon appli, dependantes (ou pas) d’implementation coté duniter (je fais reference au topic doc protocole tx format).

On peut tres bien envisager de faire tourner cette appli dans le navigateur d’un RPI avec mon autre appli pour communiquer avec le “module CB” et la on a un dispositif si je puis dire “tout en un” (pratique pour un commercant) pratique pour qui a une prestation / des produits a vendre tout court…

petit apercu de l’appli JS dans le navigateur

* * *

> creation de qrcode une fois avoir remplis la clé publique

j’ai brouillé le qrcode à l’image  
il y a aussi un champ pour mettre un montant (non visible sur cette image)

![smartqrcode_](https://forum.duniter.org/uploads/default/original/2X/d/d7f8ed789636ee024dd4a418932ecf52675b0e96.png)

* * *

> smart contract:

pour unlock des ressources et constituer un nouveau document de transaction

photo : je peux disposer de 9.99 (G1/GT) si je remplis la condition

> SIG && XHX

ma clé m8zQ (infiné le lien est vert c’est moi qui produit le document) **ET** que je valide un mot de pass dont le resultat de SHA256(mon pass) == EA0…

 ![smartcontract2](https://forum.duniter.org/uploads/default/original/2X/e/ef7b69e70f511fa02467599e7a1c643962ebb08f.png)

dans la meme liste de ressources  
je peux disposer d’une unité si conditions:

> SIG && CSV && CLTV

**pseudo valid ici, les liens verts sont ok,**  
**pour le lien bleu,** il est certe valide CSV(1) cependant  
j’ai besoin de recup le champ median time du bloc ou se trouve la transaction d’où provient cette source et pour le moment ca implique que l’utilisateur qui veut consommer cette ressource doit connaitre cette valeur pour faire en sorte que l’appli n’est pas a effectuer moultes requetes avec l’api BMA pour trouver cette info

(ca implique qu’une requete tx/sources/pubkey renvois dans les sources ce champ mediantime du block dans lequel la transaction a etait validé **dans l’objet json de retour** – tout comme il serait utile notamment pour des transactions ou il existe un seul et unique unlock XHX ou CSV ou CLTV , bref ==\> _voir topic doc tx example … pull request 😊_)

donc conditions =  
ma clé **ET** que 1s est écoulé a partir du temps median du block ou se trouve la transaction **ET** que la date du 9/11/2017 minuit est écoulé

 ![smartcontract1](https://forum.duniter.org/uploads/default/original/2X/2/2d46fc925873c660f49ffb7351906c852e949e1f.png)

* * *

cette photo ci dessous juste pour le fun histoire de voir l’arbre des conditions de lock (les liens sont rouges = verrouiller ici c’est pour tester jusqu’ou le text reste lisible)

 ![smartcontractfake](https://forum.duniter.org/uploads/default/original/2X/1/1becfb24f529d24aa6c9ac9e2b9e392b9f535b37.png)

* * *

enfin une fois avoir déverroullier ces ressources  
creation d’un tel arbre où l’on définit les parametres des fonctions pour finir le document de transaction

 ![smartcontract_produce](https://forum.duniter.org/uploads/default/original/2X/3/385f1fbbb1ae460835af378d4aff38cd4c71c62a.png)

* * *

voili voilou 🙂

---

<div class="post-metadata">

### Author: ![Inso](https://forum.duniter.org/user_avatar/forum.duniter.org/inso/32/1229_2.png) [@Inso](https://forum.duniter.org/u/Inso)
#### Post date: [9 November 2017 16:09 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/14 "2017-11-09T16:09:49Z")

</div>

Si je résume :

- tu as une appli destinée aux échanges avec les commerçants. Par contre, je n’ai pas bien compris le principe des deux qrcode (ils ont un lien avec les smart contract que tu développes ?)

- tu as une appli pour développer des smart contract : ça c’est hyper cool ! J’ai hâte de jouer avec 🙂 par contre, c’est destiné aux développeurs d’application ou aux utilisateurs/commerçants ?

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [9 November 2017 16:25 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/15 "2017-11-09T16:25:30Z")

</div>

> [@Max](#):
>
> pour les smarts contracts j’ai des pulls requests qui vont tomber 😉
> 
> j’ai besoin que duniter accepte certains contrats

A mon avis, ce n’est pas au protocole DUP en lui même de gérer directement les smarts contract, ils doivent fonctionner “par dessus” le protocole.

Si tu souhaite une modification du protocole DUP, stp ouvre un thread dédié a cette proposition de modification du protocole afin qu’on en discute.

Qui plus est la prochaine modif du protocole ne sera que pour la version 2.0 je viens donc de créer une branche `2.0-dev` c’est sur cette branche là que devrons êtres soumises les PR touchant au protocole 🙂

Mais avant de soumettre tes PR ouvre un thread pour discuter des changements que tu souhaite dans le protocole.  
Si tes PR ne touchent pas au protocole tu peut les soumettre directement sur la branche `dev` 😉

---

<div class="post-metadata">

### Author: ![Inso](https://forum.duniter.org/user_avatar/forum.duniter.org/inso/32/1229_2.png) [@Inso](https://forum.duniter.org/u/Inso)
#### Post date: [9 November 2017 17:01 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/16 "2017-11-09T17:01:55Z")

</div>

> [@elois](#):
>
> A mon avis, ce n’est pas au protocole DUP en lui même de gérer directement les smarts contract, ils doivent fonctionner “par dessus” le protocole.

Il me semble que ce que @max appelle “smart contract” ce sont les différents type de conditions des transactions. Ce qui concerne directement DUP !

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [9 November 2017 17:15 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/17 "2017-11-09T17:15:36Z")

</div>

> [@Inso](#):
>
> Il me semble que ce que @max appelle “smart contract” ce sont les différents type de conditions des transactions. Ce qui concerne directement DUP !

Oui j’avais compris mais justement, les fonctions actuelles (+ P2SH pour la 2.0) devraient suffirent 🙂  
Si @Max a besoin d’autres fonctions il faut qu’il nous en parle !

Après s’il s’agit de correctifs sur les parser pour régler les bug actuels là c’est différent 😉

---

<div class="post-metadata">

### Author: ![Inso](https://forum.duniter.org/user_avatar/forum.duniter.org/inso/32/1229_2.png) [@Inso](https://forum.duniter.org/u/Inso)
#### Post date: [9 November 2017 17:25 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/18 "2017-11-09T17:25:37Z")

</div>

Les changements de protocole doivent faire office d’une discussion (Appelons ça par exemple DCP - DUP Change Proposal) afin de vérifier le besoin, la justification technique, les implications, la réalisation, etc.

---

<div class="post-metadata">

### Author: ![Max](https://forum.duniter.org/user_avatar/forum.duniter.org/max/32/2424_2.png) [@Max](https://forum.duniter.org/u/Max)
#### Post date: [16 November 2017 07:27 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/19 "2017-11-16T07:27:43Z")

</div>

Yop,

> [@Inso](#):
>
> je n’ai pas bien compris le principe des deux qrcode (ils ont un lien avec les smart contract que tu développes ?)

non, pas avec le smart contract

> [@Inso](#):
>
> tu as une appli pour développer des smart contract…  
> c’est destiné aux développeurs d’application ou aux utilisateurs/commerçants ?

je vais commencer par définir ce que j’entends par “smart contract”

Pour moi, c’est l’utilisation d’une source soumise a des conditions.  
de maniere simple, utiliser un operateur [et, ou] c’est definir un smart contract.

De la, c’est destiné a celui qui sait se débrouiller a minima pour composer un tel document

* * *

> [@Max](#):
>
> j’ai besoin que duniter accepte certains contrats

pour eviter toute confusion, oui je fais bien référence aux opcodes existants SIG,XHX et les operateurs… qui ne me permettent pas de deverrouiller des sources.  
pas encore de la creation de nouveau opcodes / operateurs. (ca va peut etre venir…)

* * *

A ce titre, j’ai vaguement survoler comment ils definissent “smart contract” dans ethereum,  
puis j’ai regardé P2SH dans bitcoin

l’un dans l’autre, cela nécessite d’implementer une machine virtuelle.

* * *

Dans ethereum, ce sont les devs qui ecrivent un bout de code et ce code est inscrit dans la blockchain,

j’ai pas encore trouver les infos expliquant , quand comment, tout ca c’est gérer  
a quel moment ce code s’execute, par qui…  
et a premiere vue ca me semble délicat.  
Sachant qu’un “contrat” peut en appeler un autre, qu’il y a egalement une limite du nombre d’appel de fonction,  
et que enfin de compte, il est possible d’arriver a ce qu’un contrat n’execute pas l’ensemble de ses instructions dans ce cas où il y a une succession d’appel d’autre fonction appartenant a d’autre contrat…

* * *

Coté P2SH

si je considere que en l’etat aujourd’hui dans duniter, je dispose des opcodes SIG , etc…les operateurs et/ou

les seuls operateurs manquant  
ce serait eventuellement des operateurs de comparaison, \>, \>= , \<, \<= , == , !=

j’ai vu tourner un document qui date de 2014 sur le bitcoin  
99,9% des transactions sont “simple signature”  
je ne sais pas ce qu’il en est aujourd’hui

C’est pour en venir au fait que , oui, implementer une machine virtuelle dans duniter,  
je trouve cela techniquement parlant interessant,  
cela ne “me” semble pas pour autant etre une priorité  
dans la mesure où  
on peut déjà proposer des contrats intéressants avec ce dont on dispose,  
commencer par s’assurer que tout cela soit bien en place

* * *

a l’ecriture de ce post,  
je vous propose 1 opcode :  
NOTSIG =\> en parametre une clé publique dont la signature est exclue du document de transaction, exemple : NOTSIG(7t38…)  
🤣

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [16 November 2017 09:56 UTC](https://forum.duniter.org/t/work-in-progress-transaction-module/3421/20 "2017-11-16T09:56:58Z")

</div>

> [@Max](#):
>
> pour eviter toute confusion, oui je fais bien référence aux opcodes existants SIG,XHX et les operateurs… qui ne me permettent pas de deverrouiller des sources.

Ça sera corrigé dans la 1.6 officielle.

> [@Max](#):
>
> C’est pour en venir au fait que , oui, implementer une machine virtuelle dans duniter,
> 
> je trouve cela techniquement parlant interessant,
> 
> cela ne “me” semble pas pour autant etre une priorité

Exactement.

Mais d’ailleurs il n’était pas dans mon intention que Duniter soit une machine à tout faire, mais juste une machine à gérer de la monnaie libre. J’ai quand même pris compte de certains développements de Bitcoin concernant les transactions crosschain (permettre réaliser un change de monnaie automatique et sans tiers de confiance) et les lightning networks (permettre des paiements instatanés hors blockchain), qui ouvrent un champ des possibles considérable et à très court terme.

Mais on reste dans l’utilisation de monnaie. Je ne souhaite pas que Duniter fasse autre chose, toutefois désormais mon avis pèse moins lourd qu’avant, je ne suis plus le seul développeur sur le projet, et donc libre aux futurs contributeurs de changer cet état de fait 🙂

[Next page](https://forum.duniter.org/t/work-in-progress-transaction-module/3421.md?page=2)
