Petite compilation des discussions pour “entrevoir” comment mettre en oeuvre une requête pour faire une transaction :
A envois 10 unités a B <=> accrochez vos ceintures : operation ninjaaa
KA = pubkey de A
KB = pubkey de B
M = 10 = montant de la transaction
TX = document de transaction
Le temps de traitement d’une transaction en blockchain est approximativement de 5 à 30 minutes.
Soit établir le processus suivant pour realiser une transaction
requête sur /tx/sources/KA => retourne les sources
traitement des sources pour composer TX
requête sur /tx/process avec parametre TX => retourne l’enregistrement de TX
requête sur /tx/history/KB => retourne l’historique des transactions de KB
- requête sur /tx/sources/KA => retourne les sources
.duniter/doc/HTTP_API.md at master · duniter/duniter · GitHub
Le montant total des sources c’est le solde du compte.
définition d’une source dans la doc - des key/values associées ?
déduction personnelle des keys/valeurs :
identifier = KA
type = D ou T .duniter/doc/Protocol.md at master · duniter/duniter · GitHub
conditions = fonction de (dé)vérrouillage, ex: SIG(KA)
noffset = " un numéro de block pour un Dividende, un id dans la liste des outputs"
“num_block” <=> type = D, accessible via blockchain/block/num_block,
“id dans la liste des outputs” <=> type = T , indexage dans la liste des inputs d’un TX précèdent que Duniter a traité ?
amount = montant
base = valeur de l’exposant (base = 0 , 1 , 2 …)
Pour écrire 10 unités :
10 (amount) et base (0) => 10 * 10^0 = 10
1 (amount) et base (1) => 1 * 10^1 = 10
La base peut augmenté pour 2 raisons :
1 : le dividende a augmenté et est passé dans une base supérieure
2 : un TX de base courante a aboutie en un TX de base supérieure
.Thought about big numbers - #2 by cgeek
Les montants sont en centimes donc 10000 cents = 100 g1 sur cet exemple:
AMOUNT:BASE:CONDITIONS
10000:0:SIG(TEN…vp1mS)
une pubkey qui possède moins de 1.00 Ğ1 en base courante voit son montant = à 0 (pour limiter l’inflation de la BDD aussi)
choisir les sources par rapport au montant de sortie
par exemple : si envois de 5 en base 0, ne pas prendre une source [ 1 * 10^1 ]
si tu dois envoyer quelque chose en base 0, ne pas prendre des inputs en base 1…
par contre pour envoyer quelque chose en base 1, tu peux prendre des choses en base 0 et 1
- traitement des sources pour composer TX
définition du format de TX
.duniter/doc/Protocol.md at master · duniter/duniter · GitHub
.duniter/doc/Protocol.md at master · duniter/duniter · GitHub
Locktime : Integer, “waiting delay to be included in the blockchain”
dans les exemples, locktime = 0, valeur de base pour usage “simple” de TX ,
son utilisation est a mettre en relation avec la fonction XHX au regard de ce post
.[DAB, printing rules] How about fuduciary money? - #9 by Inso
Blockstamp : BLOCK_UID, définition : .duniter/doc/Protocol.md at master · duniter/duniter · GitHub
“prendre un block valide de la chaine, en général le block courant
(ça permet de dater la transaction vis à vis de la chaine de block et d’éviter les attaques type anti datage)”
déduction personnelle :
effectuer une requete /blockchain/current => retourne infos du dernier block
.duniter/doc/HTTP_API.md at master · duniter/duniter · GitHub
inner_hash = ?
hash = ?
…
définition du block:
.duniter/doc/Protocol.md at master · duniter/duniter · GitHub
InnerHash = The hash value of the block’s inner content
BlockHash = Hash from InnerHash: to SIGNATURE
déduction personnelle : d’apres la déf du block, BLOCK_UID, remplir le champ Blockstamp avec la valeur contenue par la clé “hash”.
définition inputs:
.duniter/doc/Protocol.md at master · duniter/duniter · GitHub
définition outputs:
.duniter/doc/Protocol.md at master · duniter/duniter · GitHub
définition unlocks:
.duniter/doc/Protocol.md at master · duniter/duniter · GitHub
4 fonctions de lock/unlock :
SIG(PUBLIC_KEY), XHX(SHA256_HASH), CLTV(INTEGER), CSV(INTEGER)
SIG This function is a control over the signature
XHX This function is a password control
CLTV This function locks an output in the future, which will be unlocked at a given date
CSV This function locks an output in the future, which will be unlocked after the given amount of time has elapsed.
La liste “inputs” représente les TX précèdents de KA
La liste “outputs” représente les informations à générer, traiter par les TX suivants
La liste “unlocks” represente les fonctions de déverrouillage des inputs
- requête sur /tx/process avec parametre TX => retourne infos de l’enregistrement d’une transaction
.duniter/doc/HTTP_API.md at master · duniter/duniter · GitHub ← exemple du retour de l’envois de TX [ bien formaté, (pas pour autant validée par la blockchain ) ? ].
quid du retour de la requete si TX erroné ?
ce pour ces raisons:
mal formaté : revenir à étape 1 / 2
bien formaté : je suppose devoir se réferer à l’etape 4
=> dont le montant est invalide >>> KA ne peut pas transférer 100 unités si il ne possède que 50 unités
=> dont KB est erroné >>> KA perd ses unités
=> dont KA est erroné >>> il ne va rien se passer
- requête sur /tx/history/KB => retourne l’historique des transactions de KB
.duniter/doc/HTTP_API.md at master · duniter/duniter · GitHub
permet a KB de voir l’historique de son portefeuille enregistré en blockchain
et de vérifier si TX est validé par la blockchain.
sent = transaction que KB a envoyé (validé !?)
received = transaction que KB a reçu (validé !?)
sending = transaction que KB a envoyé ( non traité [et / ou non validé ] par la blockchain !?)
receiving = transaction que KB recoit ( non traité [et / ou non validé ] par la blockchain !?)
Tu aime le serpent =>
.https://github.com/duniter/silkaj/blob/master/src/tx.py#L176-L190
.sakia/src/sakia/services/documents.py at master · duniter/sakia · GitHub
.https://github.com/duniter/silkaj/blob/master/src/tx.py
Tu es arrivé jusque la =>
j’ai hâte du jour où :
/sendTX/tx?src=KA&dest=KB&amount=M
@kimamila ?