Dans substrate il n’y a pas de nombres flottants, les soldes sont exprimés par un nombre entier non-signé, par défaut sur 128 bits (paramétrable).
Dans Duniter-v2s, je stocke les soldes sur 64 bits, car j’ai considéré que c’était suffisant, mais on peut passer à 128 bits si ça vous semble plus pertinent.
Dans l’API RPC, les soldes monétaires sont transmis encodés selon le format SCALE, chaque langage le décode alors à sa façon, pour le javascript par exemple ça sera décodé comme un BigInt
et pas un number
.
Je n’ai pas implémenté de mécanisme de rotation des bases dans duniter-v2s, car ça ne servira pas avant plusieurs siècles, et que d’ici là si la Ğ1 existe encore je pense que nos descendants auront déjà réécrit plusieurs fois l’implémentation technique, mais je pense plus probablement que la Ğ1 n’existera plus au profit d’autres monnaies libres.
Qu’importe en fait, je ne vise pas si loin, si duniter-v2s s’avérait fonctionnel en production pour les prochaines 50 années ce sera déjà énorme, et de toute façon ça ne sert à rien de viser dès maintenant un support de problématiques qui n’arriveront que dans plusieurs siècles.
Toutefois, le délai avant l’arrivée du problème dépend du nombre de décimal choisi. Pour le moment je suis parti sur 2 décimales pour coller à duniter v1.
Supposons qu’il y aura 100 millions de Ğ1 lors de la migration sur duniter v2. Avec deux décimales ça fait un montant maximal à représenter de l’ordre de 10^10.
Supposons que la masse monétaire totale soit multipliée par 10 tout les 25 ans, ce qui est à peu près le cas pour N stable, car 1.1^25 ~= 10
On gagne donc 4 puissances de 10 par siècles.
Sur 64 bits on peut monter jusqu’à 10^19, on est donc tranquille pour 225 ans !
Sur 128 bits on peut monter jusqu’à 10^38, on serait donc tranquille pour 700 ans !
Si on veut stocker les montants sur plus que 2 décimales, on perd 25 ans par décimale supplémentaire.
Pour être plus large on peut stocker les soldes sur 128 bits au lieu de 64 bits actuellement.
Du coup 2 questions:
- Souhaitez-vous que l’on utilise plus que 2 décimales ?
- Souhaitez-vous que l’on stocke les soldes sur 128 bits au lieu de 64 bits ?
Mon avis perso:
- Deux décimales c’est largement suffisant, surtout que cette limite s’applique à la Ğ1 mais pas au DUğ1, plus le DUğ1 sera grand (en Ğ1), plus il pourra être exprimé sur un grand nombre de décimales.
- Je trouve que c’est de stockage perdu si on utilise 128 bits, car les 64 derniers bits (c’est du little endian) ne nous serviront pas avant des siècles.