Définition d'un compte sur Duniter V2

Cette page vise à donner des précisions sur ce qu'est un compte sur Duniter V2, et comment ils sont créés et utilisés.

Table des matières

  1. Trousseau de clefs
    1. Précisions sur la notion de compte "membre"
  2. Adresse
  3. Mnémonique
  4. Dérivation
    1. Dérivation des comptes membres
    2. Import de comptes dérivés
    3. Usages avancés de la dérivation
      1. Dérivation par mot
      2. Dérivation sur plusieurs niveaux
      3. Oneshot account

Trousseau de clefs

Un compte est un trousseau de clefs cryptographique, composé d'une clef privée (un grand nombre -sur 32 octets- qui permet de signer des documents) et d'une clef publique associée, qui permet de chiffrer les documents et désigner le trousseau comme destinataire. Les deux clefs sont liées mathématiquement de sorte que :

Dans le cas de Ğ1, la clef publique permet d'indiquer 'je transfère de la monnaie vers le compte A et je veux que seule la propriétaire du compte A puisse la dépenser à nouveau'. La clef privée permet de signer la transaction.

La clef privée est destinée à être connue uniquement par la propriétaire du compte, et doit être tenue secrète. Si la clef privée est révélée à un tiers, ceci permet au tiers de faire des actions au nom de la propriétaire, sans qu'il soit possible de distinguer qui a fait quoi.

Précisions sur la notion de compte "membre"

Un compte n'est pas intrinsèquement "membre" ou "portefeuille". Sur Ğ1, un compte peut être lié à une identité. C'est le lien avec cette identité qui détermine si un compte est "membre" ou pas. C'est l'identité, et non le compte, qui reçoit les certifications, même si par abus de language on parle de "certifier un compte membre".

Adresse

Le framework Substrate utilise le format SS58 pour générer les adresses. Ce format contient :

Ces trois informations sont groupées au format binaire, puis converties dans le format base58 pour être lisible par des humains. Ainsi, une même clef publique donnera deux adresses totalement différentes pour deux réseaux :

# adresse sur réseau GDev (préfixe=42)
5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY
# adresse sur réseau Ğ1 (préfixe=4450, ...)
g1Pn1geRZnHcVdWdKkoYwQrAARDTXK1D7H3zuXj7GNayT1thu

Ce format a deux avantages majeurs :

Le préfixe 4450 a été choisi car toutes les adresses du réseau Ğ1 commenceront par g1.

Mnémonique

Un mnémonique est une phrase de 12 mots choisis aléatoirement parmi une liste de 2048 mots prédéfinis. C'est le secret qui va permettre de générer un trousseau de clefs, c'est-à-dire un compte. Ces 12 mots représentent un nombre tiré au hasard. Si deux personnes tirent les mêmes 12 mots dans le même ordre, alors elles ont accès au même compte. Mais ce risque est si imporbable qu'il est considéré nul en pratique.

Voici un exemple de mnémonique en anglais :

deposit kite bleak skate early flag fabric picture exile consider express size

Ce mnémonique correspond au compte 5FRx9wBiNAVragvnCXQdegpYQCN74WJxANnx6hFF1McW3Ei3 sur le réseau de ĞDev.

Dérivation

Les clefs publiques peuvent être dérivées, c'est-à-dire qu'on peut générer des comptes "enfants" d'un autre compte. Le compte généré à partir du mnémonique est appelé la racine : c'est à partir de ce compte qu'on va dériver tous les autres. C'est cette propriété qui permet d'avoir un "coffre-fort" avec différents comptes, en utilisant un seulmnémonique. Le schéma de dérivation suit le standard bip32.

La dérivation est notée, par exemple //2 pour la dérivation d'un compte selon le chiffre 2. Prenons un exemple, avec le mnémonique qu'on a donné en exemple plus haut :

Si vous voulez faire des essais, l'extension duniter-connect le permet.

Dérivation des comptes membres

Par convention, les comptes membres sont créés sur le compte racine (donc sans dérivation).

Import de comptes dérivés

Si vous devez importer le mnémonique d'un compte dérivé et que le logiciel client ne donne pas l'adresse attendue, vous pouvez entrer le mnémonique et la dérivation ( par exemple //2 à la fin):

deposit kite bleak [...] consider express size//2

Usages avancés de la dérivation

La dérivation hierarchique déterministe des clef ("hierarchically deterministic wallet") permet de nombreuses possibilités. En voici trois :

Dérivation par mot

Une dérivation peut également être faite par un mot, par exemple //gdev

Dérivation sur plusieurs niveaux

Il est possible de définir un chemin de dérivation, par exemple //gdev//3

Oneshot account

Pour certains aspects techniques ou pour des aspects de confidentialité, il est possible de dériver des comptes "à usage unique" (oneshot account), qui recevront un unique versement et pourront le dépenser en même temps que d'autres oneshot account s'il y a besoin d'une somme qu'ils ne contiennent pas. Ces comptes sont destinés à n'être utilisés qu'une seule fois.