Transaction de valeur et transaction de bien

Une transaction dans une monnaie permet la transmission de valeur entre deux entités. Cette transmission est une (ré)attribution de la valeur matérialisée par un jeton ou une partie de jeton. Mais une transaction peut aussi potentiellement porter non sur la valeur d’un jeton mais sur un objet physique attaché à un jeton. Dans ce cas on peut figer dans une cryptomonnaie une transaction de bien. Et si la monnaie permet une transaction contenant de multiples transactions unitaires, on peut avoir dans une même transaction une réattribution de bien simultané à une réattribution de valeur, les deux non répudiables et non séparables.

Modes de transaction

Dans l’article La transaction est un lien, on a abordé le mode de transaction LNS et la possibilité d’en gérer plus sous la forme d’un objet.

Le code ne prend en compte que le mode LNS mais sa structure est déjà faite afin d’intégrer plus facilement d’autres modes.

Les modes prévisibles :

  • LNS : mode par Lien et jeton non sécable. C’est l’unique mode capable de fonctionner aujourd’hui avec un cÅ“ur de lien à trois champs.
  • UNS : mode à objet contenant une unique transaction unitaire d’un jeton non sécable.
  • UJP : mode à objet contenant une unique transaction unitaire d’une partie de jeton (sécable).
  • MNS : mode à objet contenant plusieurs transactions unitaires de jetons non sécables.
  • MJP : mode à objet contenant plusieurs transactions unitaires de parties de jetons (sécables).

Le nommage des modes est sous forme de trigramme, c’est une simple convention.

Les types de transactions supportées sont inscrits dans la propriété TRS de la monnaie du jeton.

Gestion de la hiérarchie dans la monnaie et les jetons

Lorsque l’on crée une monnaie, on lui attribue une unique entité autorité AID.

Cet autorité de la monnaie délègue la gestion de la monnaie à une ou plusieurs entités gestionnaires MID.

Les gestionnaires de la monnaie forgent un ou plusieurs sac de jetons PID.

Pour chaque sac de jetons, un gestionnaire de la monnaie délègue la gestion du sac de jetons à une ou plusieurs entités gestionnaires MID.

Les gestionnaires d’un sac de jetons forgent des jetons TID.

Il est possible d’attribuer les rôles à une seule entité.

Forçage de la monnaie dans les jetons

Jusque là dans le code on essayait de retrouver la monnaie lorsque que l’on instanciait un jeton ou un sac de jeton. Ou plutôt on injectait l’identifiant de la monnaie dans l’instance du jeton pour pouvoir récupérer des valeurs héritées essentielles.

Cette méthode pose problème parce qu’il faut justement préalablement connaître la monnaie dans laquelle le jeton est utilisé. Il est théoriquement possible de retrouver la monnaie d’un jeton que l’on souhaite utiliser en exploitant les liens du jeton qui le lie à une monnaie. Mais comme le jeton non forcé affilié à une monnaie peut être associé à plusieurs monnaies, en l’absence de l’indication de la monnaie celle-ci est déduite d’un traitement social sur les liens avec la monnaie. Et donc qui dit traitement social des liens dit aussi possibilité manipulation, et donc problème de confiance.

Pour réaliser une transaction il faudrait préciser un jeton et une monnaie, soit à peut près le lien de rattachement du jeton à la monnaie. Le but est de ne pas utiliser des liens dans les transactions mais des jetons (objets) ou des fractions de jetons (via des liens de sous-parties d’objets).
Donc l’implémentation actuelle ne convient pas.

Pour résoudre ce problème d’implémentation, la monnaie devient un paramètre obligatoirement inscrit dans l’objet du jeton. Et c’est le cas aussi pour le sac de jetons. Ainsi le champs CID doit apparaître dans l’objet du jeton en ligne 3 de la même façon que le champs AID était devenu obligatoire en ligne 3 des objets des monnaies.

Génération de monnaie fonctionnelle

La génération et l’affichage des monnaies, sacs de jetons et jetons sont fonctionnels même si pas encore complètement terminés.

Le travail continue maintenant sur les portefeuilles et les transactions.

Un portefeuille est un dérivé des entités. C’est le portefeuille qui sera l’élément actif des transactions vers d’autres portefeuilles.

Entité autorité forcée dans les monnaies

Aujourd’hui, le code force déjà l’écriture d’un objet pour une monnaie, c’est à dire que le paramètre HCT est forcé à true lors de la création d’une monnaie. Et c’est pareil lors de la lecture des paramètres d’une monnaie, on va aujourd’hui essayer de lire l’objet même si là le code est plus tolérant.

Pour les monnaies, les jetons et sacs de jetons, seuls les paramètres TYP et SID étaient obligatoirement écrits dans l’objet. Pour la monnaie on impose maintenant aussi l’écriture du paramètre AID, c’est à dire l’entité autorité de la monnaie générée.

Sans le forçage de l’AID, lors de la recherche des monnaies disponibles, pour un même CID ou SID nous pouvons avoir plusieurs entités qui se déclarent AID. Cela se traduit par des monnaies différentes sans qu’il n’y ai de conflit mais l’affichage peut être ambiguë. Donc pour éviter toute ambiguïté, on force par défaut l’AID.

Le code pourra évoluer plus tard pour permettre de lever cette ambiguïté et le forçage correspondant.

Désactivation de paramètres d’une monnaie

Le travail sur la génération d’une monnaie et de ces composants se poursuit.

Il apparaît un problème potentiel au niveau de la monnaie qui ne se manifeste pas sur ses composants.

Un jeton va voir certaines propriétés imposées par la monnaie dans laquelle il est utilisé puisqu’il peut être utilisé par plusieurs monnaies avec des caractéristiques et buts différents. Dans ce cas un paramètre forcé sur un jeton n’est pas remplaçable par la monnaie, mais après tout si on utilise les jetons de quelqu’un d’autre on en assume les effets secondaires. Sinon lors de l’utilisation du jeton on remonte à a monnaie associée pour voir les paramètres à utiliser. Si on force le CID d’un jeton on le réduit donc à un usage strict dans la monnaie d’émission.

Cependant si on peut forcer un paramètre dans une monnaie il n’est pas possible aujourd’hui de le forcer vide, c’est à dire de ne pas l’utiliser et d’en interdire un usage ultérieur. Il va falloir voir comment implémenter ça.

Fusion des monnaies dans la bibliothèque

Plutôt que de laisser tout dans une application et un module, la gestion des monnaies a migré vers la bibliothèque nebule.

C’est plus simple pour l’application mais cela a nécessité pas mal de modifications dans la bibliothèque. Cela veut dire aussi que la documentation dispose maintenant d’une partie dédiée.

Premiers essais pour bientôt !

G̩n̩ration de jetons Рcompl̩ment 2

Complément à l’article Génération de jetons et complément.

Le contenu des objets des jetons va recevoir plusieurs lignes de type clé:valeur. Chaque ligne débute par trois lettre en majuscules définissant le sens sémantique (clé) de la ligne, suivi d’un deux-points ( : ) et de la valeur associée. La valeur est un texte en minuscule sans caractères spéciaux, l’espace des caractères est limité aux lettres minuscules, aux chiffres, à l’espace (sauf au début et à la fin), au point, à la virgule et à l’égal. La valeur est par défaut limité en taille à 1024 caractères sauf mention contraire pour une propriété. Il ne doit pas y avoir d’espace sur une ligne, ni en début et fin de ligne, ni autour du deux-points. Chaque ligne est terminée par un retour chariot type UNIX.

De nouvelle propriétés sont ajoutées :

  • BID : Le jeton fait parti d’un bloc (blockchain). Optionnel.
  • SVC : Le jeton fait référence à un type de service rendu (service). Taille limitée à 1024 caractères. Optionnel.
  • CLB : Le jeton peut être désactivé (cancelable). Par défaut un jeton n’est pas désactivable. Si cette option est présente, quelque soit son contenu, cela active la capacité de désactivation du jeton par la propriété CLD. Cette propriété n’interfère pas avec DTD. La taille est de un caractère maximum. Optionnel.
  • CLD : Le jeton est désactivé (canceled). Cette propriété n’a d’utilité que si CLB est activé. Si cette option est présente, quelque soit son contenu, cela désactive le jeton. La taille est de un caractère maximum. Optionnel.

La propriété CLB permet d’activer le mécanisme de désactivation à la demande piloté par l’option CLD. Mais elle n’a pas d’action sur la propriété de désactivation programmée DTD. Un jeton peut avoir une date de suppression programmée et être non désactivable avant la date de suppression. Activer la propriété CLD de façon forcée dans le contenu du jeton est faisable mais n’a pas de sens. Des jetons peuvent être générés désactivés et activés à posteriori. Un jeton désactivé ne peut pas faire parti d’une transaction.