Je me rends compte que c’est la 1ère fois que je réfléchis vraiment pleinement à ce problème, et j’en viens à une conclusion que je n’ai jamais vu ni lu nulle part, je vous partage donc ma réflexion
Quelle ressource commune ?
Le temps d’exécution sur la blockchain, que l’on peut vulgariser comme « l’espace disponible dans une page de notre grand livre de comptes commun ».
Comment font les autres ?
Toutes les crypto-monnaies que je connais choisissent de gérer la répartition de cette ressource via le paiement de frais de transaction dont le montant varie en fonction de la demande: plus il y a de demande, et plus c’est cher (l’offre - la capacité maximale de la blockchain - étant fixe).
Techniquement ça fonctionne, mais est-ce juste ? Cela conduit inexorablement à une exclusion des plus pauvres lorsque la demande augmente, quand bien même ces derniers ne sont pas responsables de cette augmentation de la demande.
Comment partager équitablement cette ressource commune ?
Une idée qui vient assez vite est celle des quotas.
Cela nécessite toutefois de quantifier correctement la ressource à partager, ce que substrate permet grâce au système de «poids».
Une fois que l’on a déterminé le poids maximal sur une période donnée, on peut accorder comme quota à chaque identité le poids maximal divisé par le nombre d’identités.
Cela demande de choisir une période, car si on choisit une période trop courte (par exemple 1 bloc), ça ne fonctionnera pas, chaque identité disposant d’un quota trop faible pour faire ne serait-ce qu’un simple transfert. Dans la pratique tout le monde n’effectue pas des transactions en même temps, donc il faut choisir une période plus grande pour la définition des quotas.
Si on choisit une période trop grande (par exemple 80 ans), un utilisateur peut cramer tout son « droit d’utilisation de la blockchain » trop rapidement, et se retrouver condamner à ne plus utiliser la blockchain Ğ1 pour le reste de sa vie.
Mais fixer une bonne période n’est pas le plus gros problème, il y a bien pire !
Comment fait-on pour les « comptes » qui ne sont pas rattachés à une identité certifiée ? Et donc qui ne sont pas limités par être humain ?
On peut décider que les quotas sont « transférables », et qu’une identité doit transférer une part de son quota (en nombre de « poids »), à un compte pour que ce compte puisse exécuter des transactions (transaction au sens large, ça peut être n’importe-quel extrinsic).
Une solution : une « monnaie poids »
Finalement, si ces « poids » deviennent transférables, c’est comme une monnaie vu qu’ils sont fongibles, donc pourquoi ne pas partager ces « poids » comme on partage la Ğ1 ?
Il faudrait donc que chaque utilisateur créer une proportion des nouveaux « poids » à parts égales avec tous les autres.
Cette « monnaie poids » doit-elle être séparée de la Ğ1 où être la Ğ1 elle-même ?
La Ğ1 donne un pouvoir d’achats de bien de services, les poids donnent un pouvoir d’exécution d’extrinsics sur la blockchain. C’est différent, mais des gens peuvent accepter de vendre des bien ou service contre du temps d’exécution sur la blockchain.
Une monnaie ne sert t’elle justement pas à gérer le partage des ressources ?
Supposons que cette « monnaie poids » soit la Ğ1 elle -même, on pourrait fixer le prix de poids de manière à ce qu’utiliser 100% des capacités de la blockchain corresponde exactement à verser 100% des Ğ1, mais cela signifie que la blockchain sera en sous-régime tout le temps.
Autre problème: que fait-on des Ğ1 allouées à la consommation de poids, sont-elles détruites ? sont-elles versées à une trésorerie commune ? Où à « autre chose » ?
L’avantage d’avoir une « monnaie poids » dédiée est double :
- On peut allouer 100% de cette monnaie poids à la consommation de temps d’exécution sur la blockchain, et donc utiliser à blockchain à sa capacité pleine et entière.
- On peut détruire cette « monnaie poids » lorsqu’elle est consommée pour acheter du temps d’exécution, sans que cela ne détruise des Ğ1.
Dans la pratique, cette « monnaie poids » si elle était mise en place, pourrait être achetée et vendue contre des Ğ1 (ou n’importe-quoi d’autre), il y aurait donc un marché des poids, il serait donc possible d’acheter des poids.
D’un point de vue expérience utilisateur, ça revient à avoir un quota gratuit (les poids que l’on crée chaque jour), puis des frais au-delà de ce quota (le prix des poids sur le marché de change poids/Ğ1).
Les interfaces utilisateur pourraient très bien parler uniquement de quotas transférables et achetables pour que ça reste simple à comprendre, et occulter le fait que techniquement c’est une monnaie que l’on crée tout comme on crée son DU Ğ1.
Avoir techniquement une monnaie dédiée pour les poids résout plusieurs problèmes que je ne vois pas comment résoudre autrement:
- Ça laisse le marché (qui est la résultante des actions de chaque utilisateur), décider du prix poids/Ğ1, donc nous développeurs n’avons aucun prix à fixer.
- Ça évite la question de qu’est-ce qu’on fait des Ğ1 qui ont payé les frais, car en réalité les Ğ1 ne payent pas les frais, elles payent celui qui vend ses poids dont il n’a pas besoin.
Quantification d’ordre 1 (pour avoir un ordre de grandeur)
Concrètement, chaque bloc dispose de 2000 milliards de poids, mais certains de ses poids sont consommés par des actions automatiques, et ne peuvent donc pas être alloués à des utilisateurs.
D’autres encore peuvent être alloués à des call collectif en root via la démocratie, et ne peuvent donc la non plus pas être alloués à des utilisateurs.
On peut définir une proportion des poids alloués aux actions utilisateurs, d’ailleurs substrate demande de le faire, et propose par défaut 75%.
Supposons donc que l’on ait 1500 milliards de « nouveaux » poids pour les utilisateurs à chaque bloc. Si l’on a 1 million de membres, chacun d’eux est «crédité» de 1,5 millions de poids à chaque bloc.
À titre d’exemple, dans Polkadot un simple transfert nécessite environ 69 millions de poids. Cela signifie que si l’utilisateur ne réalise que des simples transferts, et si notre simple transfère coûtait le même nombre de poids que sur Polkadot, cela signifie qu’un utilisateur pourrait faire un simple transfert tout les 46 blocs, où dit autrement, 313 simples transferts par jour.
Supposons que les autres types d’extrinsic (par exemple une certification), coûte en moyenne 10 fois plus de poids, on reste encore large avec 1 million d’utilisateurs, le besoin de layers 2 ne se ferait donc pas sentir avant au moins 10 millions d’utilisateurs.