Lancement de la blockchain ĞDev le 27 mai 2022

J’aimerais profiter des RML16 pour créer la toile de confiance initiale de la ĞDev et lancer la blockchain ĞDev par la même occasion :slight_smile:

Cela implique d’avoir choisi entre-temps les valeurs des paramètres, on en discute
ici:

Disclaimer

:warning::warning::warning:
Je rappelle qu’il s’agit d’un logiciel libre que je développe sur mon temps libre les soir et week-end, je ne suis lié par aucun contrat et je n’apporte donc aucune garantie quant au bon fonctionnement de cette 1ʳᵉ monnaie de test. Il est tout à fait possible qu’il y ait de gros problèmes et que l’on soit obligé d’arrêter la blockchain ĞDev prématurément (ou qu’elle soit carrément bloquée). Si cela arrive ce n’est pas grave, je relancerai la blockchain ĞDev à partir d’un nouveau genesis dans les jours/semaines qui suivront (avec la même wot initiale où très proche).

Security

Certaines fonctionnalités indispensables à la bonne sécurité d’un mainnet sont manquantes, mais ce n’est pas gênant, car la ĞDev comportera un admin central (moi), qui pourra tout faire, y compris supprimer un membre ou une autorité.
Bien entendu, il n’y aura jamais d’admin central dans la Ğ1, cette fonctionnalité est réservée aux réseaux de test, elle permet de lancer un réseau sans attendre d’avoir toutes les fonctionnalités pour assurer le niveau de sécurité que requiert un système décentralisé.

Features

La ĞDev contiendra déjà la plupart des fonctionnalités de la Ğ1 dès son lancement, et même de nombreuses fonctionnalités en plus (la plupart apportées par substrate donc n’ayant pas demandé de développement spécifique de ma part, seulement de la configuration/intégration).

La seule grosse fonctionnalité en plus que j’ai développée moi-même, c’est la sous-toile forgeron.

Liste non-hexhaustive des fonctionnalités:

  • La monnaie crée par Dividende Universel avec transfers en quantitatif et en relatif DU
  • Les actions utilisateur planifiables, ce qui permet par exemple les virements automatiques (pallet scheduler).
  • Les comptes multisig: compte partagé nécessitant la signature de plusieurs clés privées.
  • Atomic swap (pallet atomic-swap)
  • La toile de confiance (tout sauf la distance)
  • La sous-toile forgeron
  • Un collectif des membres forgerons: gouvernance on-chain permettant de réaliser n’importe-quel « call » au nom d’une proportion des members forgerons.
  • Une trésorerie commune: compte spécial sans clé privée, qui ne peut être dépensé que par la blockchain. La trésorerie commune est alimentée par don libre et par la monnaie prélevée pour frais ou/et sanctions. N’importe-qui peut proposer d’utiliser les sous de la trésorerie pour financer un projet, la proposition doit être approuvée par 50% des membres forgerons pour être exécutée.
  • La possibilité de déléguer des droits sur son compte à un autre compte (pallet proxy)
  • Et d’autres fonctionnalités encore

Missing Features

Certaines fonctionnalités sont manquantes, et seront ajoutées par runtime upgrade, où par purge du réseau si nécessaire pour ne pas trop ralentir les développements.

Il manque notamment:

  • L’étalonnage des weighs: indispensable pour estimer correctement le coût d’exécution de chaque transaction. Pour le moment les weighs sont inscrits manuellement à des valeurs surévaluées par sécurité.
  • La gestion des « offences »: c’est à dire comment sanctionner les autorités qui agissent mal. Le consensus BABE/GRANDPA gère le système de rapport automatique d’« offences » et de vérification de leur validité, ce qui permet de prouver qu’une autorité a mal agi, mais ça ne gère pas les sanctions, donc pour le moment dans la ĞDev une autorité qui agit mal ne sera pas sanctionnée (ce qui n’est pas gênant, car il y a un admin central).
  • L’évaluation de la règle de distance: de par la manière dont est conçu substrate, et les contraintes du consensus BABE/GRANDPA, on ne peut par calculer directement la distance on-chain. Il va donc falloir développer un système d’oracle, ça sera probablement la plus longue feature manquante à développer.
  • La création manuelle du DU
  • L’auto-renouvellement du membership
  • Peut-être d’autres fonctionnalités que j’oublie

Autorités au genesis

Par mesure de sécurité et de simplicité, il y aura une seule autorité au genesis (mon compte), et dans un premier temps je serai le seul à pouvoir ajouter des autorités, j’en ajouterai au compte-goutte en fonction des volontaires et si tout ce passe bien.
J’ouvrirai le droit de rejoindre les autorités lorsque je serais suffisamment confiant sur la stabilité du réseau, probablement quelques jours/semaines après le lancement.

Déroulement du lancement

Le lancement va se dérouler en plusieurs étapes, certaines seront peut-être diffusées en live où en différé selon les conditions de connexion sur le lieu des RML16.

Avant les RML16:

Choix des paramètres du genesis
Vérification minutieuse des paramètres du runtime, si possible contre-vérifiée par au moins 2 autres personnes. je ferai sans doute une visio dédiée pour ça, il faudra juste qu’on soit 2 ou 3 (max 4), ça ne sert à rien d’être trop nombreux).
Tag et build du runtime définitif qui sera inscrit dans le genesis.
Faux lancement de test pour vérifier que le runtime est fonctionnel

Pendant les RML16, le jeudi (26 mai 2022):

Inscription de ceux qui le souhaitent dans la wot initiale. Vérification des clés en présentiel.
Génération des chain spec
Faux lancement de test pour vérifier le fonctionnement des chain spec

Pendant les RML16, le vendredi (27 mai 2022):

Réel lancement du genesis et déploiement de nœuds RPC publics
Test des différentes fonctionnalités avec les présents aux RML16, c’est aussi une bonne opportunité de découvrir son fonctionnement en interagissant avec.
Si l’on trouve des bugs corrigeables rapidement, j’en profiterai pour faire un atelier pour montrer comment corriger un bug dans le cœur.

10 « J'aime »

Extra ! Je ne pensais pas qu’il soit déjà possible de lancer une monnaie de test. Voilà qui est très motivant !

1 « J'aime »

Dans les fonctions disponibles, y aura t’il bien l’API RPC ? Est-ce possible d’y intégrer les binding typescript ? (A priori c’est simple a générer, j’avais fais une MR au tout début de duniter2s…) C’est peut-être déjà le cas …

A+

En vrai ça fait déjà des mois que c’est techniquement possible, en gros depuis ma vidéo de début février, mais je ne voulais pas la lancée trop prématurément, j’avais besoin de vérifier de plusieurs aspects. Ça à aussi été retardé, car je me suis absenté pendant 2 mois, sans cette absence la ĞDev aurait été lancée fin mars.

Sachant que j’ai également été absent 4 mois de septembre à décembre, et que je travaille sur duniter-v2s depuis mi-juillet, je n’ai donc travaillé que 4 mois sur duniter-v2s, et uniquement les soir et week-end, ce qui représente grand max 1 mois et demi de travail pour un ETP.
Donc avec des financements pour au moins 1 ETP pérènne, on aurait lancé la ĞDev fin août 2021…

Oui, je ne l’ai pas précisé dans les fonctionnalités car fait partie des trucs de base intégrés dans tout nœud substrate :slight_smile:

Oui je me souviens, mais je pense que ça n’a pas sa place dans le dépôt duniter-v2s lui-même. À ta place je créerai un dépôt git dédié dans le groupe « libs », nommé par exemple « duniter-v2s-typescript-api » :slight_smile:
Il te faudra te baser sur les tags des runtime, je devrais faire un 1ᵉʳ tag runtime-100 dès que le runtime sera finalisé.

2 « J'aime »

J’ai build et release le runtime-100: Releases · nodes / rust / Duniter v2S · GitLab

Le bytecode wasm du runtime sera inscrit dans le bloc genesis, vous pourrez vérifier sa conformité dans les raw chain spec que je vais générer jeudi soir (car il me faut le contenu définitif du genesis pour le faire).

Pour recompiler le runtime vous-même, et ainsi vérifier sa conformité:

  1. Checkout le tag git runtime-100
  2. Compilez le runtime avec la commande suivante:
docker run \
  -i \
  --rm \
  -e PACKAGE=gdev-runtime \
  -e RUNTIME_DIR=runtime/gdev \
  -v $PWD:/build \
  paritytech/srtool:1.60.0 build --app --json -cM

Le fichier wasm contenant le bytecode qui sera intégré dans le genesis se trouve alors ici:

runtime/gdev/target/srtool/release/wbuild/gdev-runtime/gdev_runtime.compact.compressed.wasm

Vous avez uniquement besoin de git et docker pour compiler le runtime, vous n’avez pas besoin de rust ni de quoi que ce soit d’autre, tout est inclus dans l’image srtool, elle est faite pour ça.

2 « J'aime »

La ĞDev est officiellement lancée, mon nœud public RPC: wss://gdev.librelois.fr/ws

6 « J'aime »

N’importe qui peu explorer la blockchain.
Il faut aller sur Polkadot/Substrate Portal
Puis en haut à gauche, ouvrez le menu et allez dans « développement » et entrez l’adresse donnée par elois.

2 « J'aime »

Et je viens d’effectuer une transaction de 3.14GD vers elois depuis Gecko :slight_smile:

4 « J'aime »

Si vous me donnez vos addresses, je dois pouvoir créer vos identités et vous certifier depuis gecko.

1 « J'aime »

Je semble toujours membre mais bloqué à 96.86 GD, ne semble plus créer le DU.

RML16-1000i100 : 5CCrBS67BrpBx3ihGHc72HZp3eHHbETxWFuNfwbbdoGSJFN8

1 « J'aime »

Salut Poka.
Ici aux RML:
kapis: 5HJyyim1W8Y1UD8LAbBL7cQQLjGofMoD45RtRSAmhkFQxrvs

par contre wss://gdev.librelois.fr/ws ça marche pas dans mon dernier gecko .apk , c’est normal?

Je t’ai certifié Kapis

1 « J'aime »

Non cela devrait fonctionner, ça fonctionne chez moi.
Dans les paramètres tu vois bien le bon noeud ? Quand tu utilise le bouton orange pour forcer ça ne fonctionne pas ?

Il faut se baser sur ce dernier fix: https://git.duniter.org/clients/gecko/uploads/cc37953f1feb73364c8f6a175697b81e/gecko-0.0.6+5.apk

Sur la branche gdev : (--tmp optionnel)

cargo build
./target/debug/duniter --chain gdev --execution Wasm --tmp
1 « J'aime »

Le DU est créé toutes les 24h @poka, tu verra le prochain DU demain midi :slight_smile:

1 « J'aime »

Ah pardon j’était trop habitué aux paramètre des monnaies de tests lol

1 « J'aime »

2 messages ont été fusionnés à un sujet existant : Ğecko: Nouveau client de paiements Ḡ1 sur mobile en cours de développement (Dart/Flutter)

Bon ça manque d’indexer pour l’historique tout ça, on voit juste des identités et des soldes bouger ^^

cc @ManUtopiK :stuck_out_tongue_winking_eye:

2 « J'aime »