Autre point qui va changer au niveau du protocole : ne plus produire le DU à la place des utilisateurs, qui devront manuellement intervenir pour le produire via leur wallet. Je m’explique.
C’est un problème technique : lorsque le DU « tombe », il faut modifier N comptes dans la base de données, où N est le nombre de membres. Sur Duniter v1 c’est déjà coûteux d’insérer N UTXO avec N = 4000, or Duniter V2S vise un N bien plus gros (a minima 100 000).
Pour permettre une production de bloc en 2" max, il faut lever cette contrainte.
Une façon de le faire est de répartir le coût de mise à jour de la BDD au besoin. Concrètement, lorsque le DU tombe nous ajouterions une entrée dans la table des DU « dernier DU de valeur 10,42 Ğ1 le 05/01/2022 », ce qui est très rapide, puis quand les utilisateurs voudront produire leur monnaie, il leur suffira de dire « produire les DU de la date X à Y ». Bien évidemment dans le compte de l’utilisateur seront inscrites 2 données afin d’éviter la double production :
- les dates d’entrées et sortie du statut de membre (a)
- la date de dernière production du DU (b)
De plus, une contrainte sera ajoutée pour que l’utilisateur produise les DUs de façon continue, et intégralement à chaque fois. Dans les faits nous aurons donc un extrinsic Dubp.produce_ud
qui crédite le compte du montant des DUs non-encore produits pour le compte.
Je pingue @kimamila, @vit, @poka, @Moul car cela va impacter les clients : suite à cette modification, le solde du compte nécessitera quelques calculs supplémentaires pour être affiché. Aussi, réaliser une dépense pourra nécessiter d’appeler Dubp.produce_ud
au préalable.
Mais le gain en termes de performances côté nœud Duniter sera considérable.