<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title></title>
      <link>https://duniter.fr/</link>
      <description></description>
      <generator>Zola</generator>
      <language>fr</language>
      <atom:link href="https://duniter.fr/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sat, 12 Sep 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Duniter v2.3.0 : mise à jour de sécurité</title>
          <pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v2-3-0/</link>
          <guid>https://duniter.fr/blog/duniter-v2-3-0/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v2-3-0/">&lt;h1 id=&quot;duniter-v2-3-0-mise-a-jour-de-securite&quot;&gt;Duniter v2.3.0 : mise à jour de sécurité&lt;/h1&gt;
&lt;p&gt;La version &lt;strong&gt;2.3.0&lt;/strong&gt; de &lt;a href=&quot;https://duniter.fr/logiciels/duniter-v2/&quot;&gt;Duniter&lt;/a&gt; est disponible. Elle corrige plusieurs vulnérabilités, de sévérités diverses, trouvées par &lt;strong&gt;elois&lt;/strong&gt; lors d&#39;un audit du code.&lt;/p&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;Si vous hébergez un nœud Ğ1 ou ĞTest, &lt;strong&gt;mettez à jour dès que possible&lt;/strong&gt;, en particulier si vous êtes forgeron.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;mettre-a-jour&quot;&gt;Mettre à jour&lt;/h2&gt;
&lt;p&gt;Nouvelles images Docker :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ğ1 : &lt;code&gt;duniter/duniter-g1-1100:1100-2.3.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ĞTest : &lt;code&gt;duniter/duniter-gtest-1000:1100-2.3.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;details-des-vulnerabilites&quot;&gt;Détails des vulnérabilités&lt;/h2&gt;
&lt;p&gt;Ils ne seront publiés qu&#39;une fois la majorité des nœuds mis à jour pour ne pas faciliter une attaque entre-temps.&lt;/p&gt;
&lt;h2 id=&quot;utilisateurs&quot;&gt;Utilisateurs&lt;/h2&gt;
&lt;p&gt;Rien à faire : cette mise à jour ne concerne que les hébergeurs de nœuds.&lt;/p&gt;
&lt;h2 id=&quot;comment-ces-failles-ont-ete-trouvees&quot;&gt;Comment ces failles ont été trouvées&lt;/h2&gt;
&lt;p&gt;Par un audit du code assisté par IA, via le programme de cyberdéfense &lt;a rel=&quot;external&quot; href=&quot;https://openai.com/fr-FR/daybreak/&quot;&gt;Daybreak&lt;/a&gt; d&#39;OpenAI, qui lève les restrictions habituelles sur la recherche de vulnérabilités.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Source et discussion : &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/duniter-v2-3-0-mise-a-jour-de-securite-pour-g1-et-gtest/14000&quot;&gt;Duniter v2.3.0, mise à jour de sécurité pour Ğ1 et ĞTest&lt;/a&gt; (forum Duniter).&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Comment je suis devenue développeuse sans rien y connaître en codage</title>
          <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/comment-je-suis-devenue-developpeuse/</link>
          <guid>https://duniter.fr/blog/comment-je-suis-devenue-developpeuse/</guid>
          <description xml:base="https://duniter.fr/blog/comment-je-suis-devenue-developpeuse/">&lt;br/&gt;
&lt;br/&gt;
&lt;h2 id=&quot;comment-je-suis-devenue-developpeuse-sans-rien-y-connaitre-en-codage&quot;&gt;Comment je suis devenue développeuse sans rien y connaître en codage&lt;/h2&gt;
&lt;p&gt;Après être passée par la case des testeurs de la V2, j&#39;ai un peu compris le fonctionnement des applications et plus particulièrement de Gecko qui m&#39;a beaucoup plu. De cette façon j&#39;ai pu aider ceux qui sont en difficulté avec les applications , renouvellements, certifications et migration.&lt;br /&gt;
J&#39;ai de cette façon pu remonter aux développeurs les bugs, détails à corriger et améliorations à apporter.&lt;br /&gt;
Et un jour Poka (développeur de Gecko) post un message sur le forum de duniter :
&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/contribuer-a-gecko-cest-facile/13880&quot;&gt;&lt;em&gt;&lt;strong&gt;Contribuer à Ğecko, c’est facile!&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt; ni une ni deux , je me lance dans l&#39;aventure, il avait détaillé toute la procédure pour avoir tous les outils en main:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ouvrir un compte sur git.duniter et adhérer a Axiom-Team pour profiter d&#39;un compte Claude (lntelligence Artificielle)&lt;br /&gt;
Ok c&#39;est facile et presque fait. 12€ et 12DU plus tard je suis fin prête a commencer l&#39;aventure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;etape-1-installer-claude-code&quot;&gt;Étape 1 : installer Claude Code&lt;/h3&gt;
&lt;p&gt;là je rentre dans le vif du sujet :&lt;br /&gt;
installer Claude Code &lt;a rel=&quot;external&quot; href=&quot;http://&quot;&gt;https://code.claude.com/docs/en/quickstart&lt;/a&gt; je repère la ligne Windows  , Poka a parlé de PowerShell donc j&#39;ouvre un terminal sur mon PC (ça je connaissais un petit peu ayant débuté avec un Amstrad a diskette puis le premier Windows qui se lançait avec ligne de commande 😅&lt;br /&gt;
donc j&#39;ouvre mon terminal et recopie la ligne de commande ! essaie les 2 lignes ECHEC&lt;br /&gt;
&lt;em&gt;bash: irm: command not found&lt;br /&gt;
bash: iex: command not found&lt;/em&gt;&lt;br /&gt;
POKA ... AU SECOURS !&lt;br /&gt;
Ah Windows PowerShell est le nom d&#39;un terminal :-)))&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ok je n’avais pas compris que c’était l’application Powershell sur Windows&lt;br /&gt;
j’ai mis a jour je ne sais comment&lt;/em&gt; 🤣&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/2026-07-05/67dacafab421c30b7415abf5545271967bbc8303.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;etape-2-laisser-claude-installer-l-environnement-gecko&quot;&gt;Étape 2 : laisser Claude installer l’environnement Ğecko&lt;/h3&gt;
&lt;p&gt;Une fois que l&#39;on m&#39;a communiqué comment accéder à Claude je tape la ligne de commande  et&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/2026-07-05/6ec0b284b35c317d9121544cbe92d36e3112b7f4.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Là je suis bien avancée je comprend un peu l&#39;anglais mais là ce n&#39;est plus de l&#39;anglais c&#39;est du chinois 🤪&lt;/p&gt;
&lt;p&gt;Et c&#39;est là tout le miracle, Poka me dit de dialoguer avec Claude de lui expliquer que je n&#39;y connais rien et qu&#39;il doit me parler en français, OUF!&lt;/p&gt;
&lt;p&gt;je recopie les instructions de Poka à Claude  et là il prend la main sur mon ordi et installe tout un tas de logiciels&lt;/p&gt;
&lt;h3 id=&quot;etape-3-lancer-gecko-en-mode-debug&quot;&gt;Étape 3 : lancer Ğecko en mode debug&lt;/h3&gt;
&lt;p&gt;Ah là je suis en terrain connu !&lt;/p&gt;
&lt;h3 id=&quot;etape-4-modifier-tester-proposer&quot;&gt;Étape 4 : modifier, tester, proposer&lt;/h3&gt;
&lt;p&gt;Bon ne soyons pas fou, il faut commencer petit, pour me faciliter la tache j&#39;ai donné le lien vers la discussion  &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/contribuer-a-gecko-cest-facile/13880/&quot;&gt;Contribuer à Ğecko, c&#39;est facile!&lt;/a&gt; afin que Claude comprenne les demandes de Poka et consignes et JE ME LANCE:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;première demande:&lt;/strong&gt; ajouter un smiley contact dans la version desktop,  j&#39;ai vite compris qu&#39;une photo est plus explicative qu&#39;une description et que les 2 ensemble c&#39;est le top , donc j&#39;explique a Claude ce que je souhaite et ou se trouve la capture écran pour lui montrer la différence entre la version mobile et celle desktop.  Et là cela dépasse toutes mes espérances, en plus de mettre l&#39;icône il ajoute aussi un texte au survol !&lt;br /&gt;
Claude s&#39;occupe alors de tout envoyer sur Git.duniter je vois que les voyants sont au vert&lt;/p&gt;
&lt;p&gt;💪 &lt;strong&gt;YESSSS j&#39;ai réussi mon premier codage !&lt;/strong&gt; 💪&lt;br /&gt;
Après, c&#39;est le job de Poka qui vérifie une deuxième fois que cet ajout ne casse rien ni ne fait régresser le code, puis il valide et fusionne avec la version de base.&lt;/p&gt;
&lt;p&gt;Petit à petit j&#39;ai pris de l&#39;assurance avec mes demandes, toujours sous le contrôle de Poka, et ai pu alors apporter des modifications esthétiques dans le profil. jusqu&#39;à lancer la messagerie qui manquait tellement à tout le monde, de plus comme l&#39;ajout de contacts est un élément important de Gecko on m&#39;a rapporté des demandes: pouvoir les trier, y ajouter des éléments  comme des notes personnelles, et je vous laisse découvrir le résultat avec la prochaine mise à jour ! 🍾 🍸&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter v2 est lancé</title>
          <pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v2/</link>
          <guid>https://duniter.fr/blog/duniter-v2/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v2/">&lt;h1 id=&quot;duniter-v2-est-lance&quot;&gt;Duniter v2 est lancé !&lt;/h1&gt;
&lt;p&gt;Ça y est enfin ! Après cinq ans de travail en pointillé, avec des périodes intenses et des phases plus calmes, Duniter version 2 et son écosystème logiciel (duniter-squid, Ğecko, Césium 2, Ğ1nkgo …) sont enfin prêts à accueillir la Ğ1. Le réseau définitif a été lancé avec succès le &lt;strong&gt;7 mars 2026&lt;/strong&gt;. Le dernier bloc de Duniter v1 (bloc &lt;strong&gt;913 638&lt;/strong&gt;) a été créé ce jour-là, et l&#39;ensemble des données a été transféré dans le bloc zéro de Duniter v2. Dès le &lt;strong&gt;8 mars&lt;/strong&gt;, le premier Dividende Universel a été produit par Duniter v2.&lt;/p&gt;
&lt;p&gt;Le premier commit de Duniter v2 date du 6 juillet 2021 (&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/rust/duniter-v2s/-/commit/8425343df130d48d73bbd6bfb8bb14e2a7a3c7a5&quot;&gt;8425343d&lt;/a&gt;), et la &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/important-proposition-de-migrer-la-g1-sur-une-blockchain-substrate/8573&quot;&gt;première annonce sur le forum&lt;/a&gt; du 14 juillet 2021. De nombreuses personnes ont contribué à cet effort au fil des années. Merci à toutes et tous !&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-une-version-2&quot;&gt;Pourquoi une version 2 ?&lt;/h2&gt;
&lt;p&gt;Duniter v1, écrit en TypeScript/Node.js, a permis à la Ğ1 de fonctionner pendant neuf ans. Mais les limites de cette architecture rendaient difficile l&#39;ajout de nouvelles fonctionnalités et la maintenance à long terme du logiciel.&lt;/p&gt;
&lt;p&gt;Duniter v2 est une réécriture complète en &lt;strong&gt;Rust&lt;/strong&gt;, basée sur le framework &lt;strong&gt;Polkadot SDK&lt;/strong&gt; (anciennement Substrate). Ce choix apporte des gains significatifs en performance, en sécurité et en maintenabilité, tout en ouvrant la porte à un écosystème d&#39;outils plus riche.&lt;/p&gt;
&lt;h3 id=&quot;ameliorations-immediates&quot;&gt;Améliorations immédiates&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt; : le passage à Rust et Polkadot SDK apporte un gain notable en vitesse de traitement des blocs et en consommation mémoire.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indexeur&lt;/strong&gt; : duniter-squid permet d&#39;interroger l&#39;historique de la blockchain de manière fine et rapide, ce qui facilite le développement d&#39;applications clientes et d’&lt;strong&gt;outils d&#39;analyse&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modularité&lt;/strong&gt; : l&#39;architecture en pallets Polkadot SDK permet d&#39;activer ou désactiver des fonctionnalités indépendamment, et de mettre à jour le protocole sans fork du réseau.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interopérabilité&lt;/strong&gt; : Polkadot SDK offre une compatibilité avec l&#39;écosystème Polkadot et ses outils (indexeurs, wallets, infrastructures réseau…).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;perspectives-d-evolution&quot;&gt;Perspectives d&#39;évolution&lt;/h3&gt;
&lt;p&gt;Duniter v2 ouvre la voie à des fonctionnalités attendues de longue date :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;transferts automatiques&lt;/strong&gt; (programmés dans le temps)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;comptes tuteurs&lt;/strong&gt; permettant la récupération d&#39;un compte par un tiers de confiance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;comptes de groupe&lt;/strong&gt; avec seuils de dépense collectifs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gouvernance on-chain&lt;/strong&gt; pour les décisions techniques du réseau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces fonctionnalités seront activées progressivement par la communauté via les mécanismes de mise à jour du protocole.&lt;/p&gt;
&lt;h2 id=&quot;comment-se-mettre-a-jour&quot;&gt;Comment se mettre à jour ?&lt;/h2&gt;
&lt;p&gt;La migration des comptes se fait à l&#39;aide des applications clientes compatibles v2. Les utilisateurs peuvent migrer leur compte en utilisant leur phrase de restauration via :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/logiciels/gecko/&quot;&gt;&lt;strong&gt;Ğecko&lt;/strong&gt;&lt;/a&gt; — portefeuille mobile&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/logiciels/cesium-v2/&quot;&gt;&lt;strong&gt;Césium 2&lt;/strong&gt;&lt;/a&gt; — application multiplateforme&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/logiciels/ginkgo/&quot;&gt;&lt;strong&gt;Ğ1nkgo&lt;/strong&gt;&lt;/a&gt; — application de paiement&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/logiciels/g1cli/&quot;&gt;&lt;strong&gt;Ğ1cli&lt;/strong&gt;&lt;/a&gt; — client en ligne de commande&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;&lt;strong&gt;Pour les forgerons v1&lt;/strong&gt; : il faut migrer votre compte forgeron puis lancer un nœud forgeron v2.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;signaler-un-bug&quot;&gt;Signaler un bug&lt;/h2&gt;
&lt;p&gt;La peinture est encore fraîche !
Si vous rencontrez un problème, n&#39;hésitez pas à le signaler, ça nous aide beaucoup :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sur le &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/&quot;&gt;forum Duniter&lt;/a&gt; avec le tag &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/tag/bugv2/718&quot;&gt;&lt;code&gt;#bugV2&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;sur les dépôts &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/rust/duniter-v2s/-/issues&quot;&gt;GitLab du projet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous suivons activement tous les retours et priorisons les corrections en fonction des énergies bénévoles disponibles.&lt;/p&gt;
&lt;h2 id=&quot;un-effort-collectif&quot;&gt;Un effort collectif&lt;/h2&gt;
&lt;p&gt;La version 1 du logiciel est née grâce à &lt;strong&gt;cgeek&lt;/strong&gt;, auteur principal du protocole Duniter. Elle s&#39;est développée pendant toutes ces années grâce aux contributions de nombreux développeurs.&lt;/p&gt;
&lt;p&gt;Duniter v2 est le fruit d&#39;un travail collaboratif mené par de nombreux contributeurs. Merci notamment à &lt;strong&gt;elois&lt;/strong&gt; pour l&#39;impulsion initiale et son aide précieuse, à &lt;strong&gt;Hugo&lt;/strong&gt; pour la reprise du projet, à &lt;strong&gt;cgeek&lt;/strong&gt; pour son travail sur le CI et les xtasks, à &lt;strong&gt;poka&lt;/strong&gt; pour son travail sans relâche, son enthousiasme, l&#39;orchestration du lancement et la maintenance de l&#39;infrastructure, à &lt;strong&gt;Moul&lt;/strong&gt; et &lt;strong&gt;Immae&lt;/strong&gt; pour l&#39;administration système du projet, et à tous les autres contributeurs, testeuses et testeurs, et membres de la communauté qui ont rendu cette migration possible.&lt;/p&gt;
&lt;p&gt;Deux financements participatifs (2022 et 2024) ainsi qu&#39;un financement ADEME ont permis de soutenir le développement. Un grand merci aux &lt;strong&gt;883 donatrices et donateurs&lt;/strong&gt; qui ont participé à ces levées de fonds.&lt;/p&gt;
&lt;p&gt;Au-delà du code, le &lt;a rel=&quot;external&quot; href=&quot;https://monnaie-libre.fr/maj-v2/&quot;&gt;collectif MàJ v2&lt;/a&gt; a joué un rôle essentiel dans la préparation de cette migration : information de la communauté, accompagnement des utilisateurs et coordination des échanges sur la &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/c/communication/mise-a-jour-v2/131&quot;&gt;catégorie dédiée du forum Monnaie Libre&lt;/a&gt;. Merci à toutes les personnes impliquées dans cette dynamique collective qui mériterait certainement un article dédié.&lt;/p&gt;
&lt;h2 id=&quot;et-maintenant&quot;&gt;Et maintenant ?&lt;/h2&gt;
&lt;p&gt;Après cette étape technique majeure, une nouvelle phase commence : celle des usages.&lt;/p&gt;
&lt;p&gt;Aujourd’hui, la Ğ1 dispose d’une base technique robuste, prête à supporter de nouveaux outils, de nouvelles pratiques et surtout une adoption plus large.&lt;/p&gt;
&lt;p&gt;C’est donc le moment idéal pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(re)découvrir la Ğ1 si vous l’aviez laissée de côté&lt;/li&gt;
&lt;li&gt;créer ou migrer votre compte sur la v2&lt;/li&gt;
&lt;li&gt;échanger avec d’autres membres près de chez vous&lt;/li&gt;
&lt;li&gt;proposer vos biens et services&lt;/li&gt;
&lt;li&gt;développer de nouveaux outils dans cet écosystème renouvelé&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chaque utilisateur, chaque transaction, chaque initiative contribue à renforcer la monnaie.&lt;/p&gt;
&lt;p&gt;La Ğ1 reste une expérience unique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une monnaie co-créée par ses membres via le Dividende Universel&lt;/li&gt;
&lt;li&gt;un système sans banque centrale ni spéculation&lt;/li&gt;
&lt;li&gt;un réseau basé sur la confiance humaine plutôt que sur le capital&lt;/li&gt;
&lt;li&gt;une économie encore émergente, où tout reste à construire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec Duniter v2, les freins techniques diminuent et les perspectives s’élargissent. C’est une opportunité rare : participer à une économie alternative dès ses fondations. À nous de faire vivre la Monnaie Libre Ğ1&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Pour suivre les discussions autour du lancement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/la-g1v2-est-la/13647/&quot;&gt;La Ğ1v2 est là !&lt;/a&gt; (forum Duniter)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/duniter-g1-v2-0-2-bootnodes/13694/&quot;&gt;Duniter-g1 v2.0.2 bootnodes&lt;/a&gt; (forum Duniter)&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Recit d&#39;une testeuse de Gecko/Gtest</title>
          <pubDate>Wed, 06 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/recit-testeuse-gtest-gecko/</link>
          <guid>https://duniter.fr/blog/recit-testeuse-gtest-gecko/</guid>
          <description xml:base="https://duniter.fr/blog/recit-testeuse-gtest-gecko/">&lt;br/&gt;
&lt;br/&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-info note-block note-info&quot;&gt;
&lt;p&gt;Article initialement rédigé sur le forum monnaie libre dans une catégorie privée &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/t/recit-dune-testeuse-de-gecko-gtest-aout-2025/32540&quot;&gt;https://forum.monnaie-libre.fr/t/recit-dune-testeuse-de-gecko-gtest-aout-2025/32540&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h1 id=&quot;recit-d-une-testeuse-de-gecko-gtest-aout-2025&quot;&gt;Recit d&#39;une testeuse de Gecko/Gtest - août 2025&lt;/h1&gt;
&lt;p&gt;La Gtest de DuniterV2 a été &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/lancement-dun-reseau-gtest-et-nouvelle-version-de-duniter/13172/47&quot;&gt;lancée en juillet 2025&lt;/a&gt;. Merci à nos devs !
Début août, je me suis lancée à tester Ğecko, l&#39;application mobile qui permet d&#39;utiliser la Ğ1 et sa toile de confiance. Me voici à partager avec vous mon expérience.&lt;/p&gt;
&lt;p&gt;📲 &lt;strong&gt;Où trouver Ğecko ?&lt;/strong&gt; &lt;em&gt;l&#39;application de paiement ĞT plus rapide qu&#39;un reptile du Vietnam&lt;/em&gt; :&lt;/p&gt;
&lt;img src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/f/e/fe07ac41253d54b25b8b26ab33e31923232b639f.png&quot; width=&quot;120&quot; height=&quot;130&quot;/&gt;
&lt;ul&gt;
&lt;li&gt;sur le PlayStore (Android) : &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https://play.google.com/store/apps/details?id=fr.axiomteam.gecko&quot;&gt;Gecko-G1Wallet&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;sur l&#39;AppStore (ios)&lt;/li&gt;
&lt;li&gt;sur le forum duniter l&#39;APK &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/gecko-gdev-gtest-last-build/9367/128&quot;&gt;ici&lt;/a&gt;, la dernière version étant à la fin du post. Si vous ne savez pas quoi choisir prenez &lt;em&gt;New Phones&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&#39;ai choisi 2 scénarios de test que j&#39;ai mis en pratique sur deux téléphones différents :
1° Nouvelle utilisatrice de la June
2° Importer mon compte V1 en V2&lt;/p&gt;
&lt;p&gt;Afin de réaliser le test j&#39;ai eu besoin d&#39;environ une heure de liberté, en toute tranquillité et sérénité.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;🙇‍♀️📲 1er test sur un téléphone Android : &lt;strong&gt;Nouvelle utilisatrice de la June&lt;/strong&gt; 📱&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;1. JE TÉLÉCHARGE&lt;/strong&gt;
Je télécharge l&#39;app &lt;strong&gt;APK new phone&lt;/strong&gt; pour l&#39;installer sur mon Android15. Je vais la chercher dans &lt;strong&gt;Mes Fichiers&lt;/strong&gt;.
Mon ennemi Google me dit &quot;&lt;em&gt;l&#39;app est inconnue&lt;/em&gt;&quot;, mais je lui réponds &quot;&lt;em&gt;vas-y installe-la sans l&#39;analyser&lt;/em&gt; &quot; Et puis &lt;strong&gt;Ouvrir&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je dois créer un premier &lt;strong&gt;portefeuille&lt;/strong&gt; dans Ğecko : il sera dans un &lt;strong&gt;Coffre&lt;/strong&gt; avec d&#39;autres portefeuilles si j&#39;ai envie d&#39;en créer d&#39;autres plus tard.&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;2. J&#39;INSTALLE&lt;/strong&gt;
Allons-y donc : dix pages de conseils à faire défiler. Les quatre premières expliquent l&#39;importance de la &lt;strong&gt;phrase de restauration&lt;/strong&gt;, à savoir 12 mots en français qui vous permettront d&#39;ouvrir votre coffre sur d&#39;autres téléphones ou tablettes (si vous souhaitez changer de téléphone par exemple). Quatre pages, eh oui, car vous êtes en pleine auto-responsabilité : pour bien expliquer que si vous perdez vos mots personne ne pourra venir à votre secours, &quot;&lt;em&gt;mot de passe oublié&lt;/em&gt;&quot; n&#39;existe pas.&lt;/p&gt;
&lt;p&gt;En 5ème page les 12 mots miracles apparaissent. Je respire, je suis calme, j&#39;ai tout mon temps. Stylo et papier comme le Lézard m&#39;a conseillé, je les note, &lt;strong&gt;je vérifie que je les ai bien copiés&lt;/strong&gt; (3 fois !) tout en minuscule et en indiquant le numéro de chaque mot. Pour plus de sécurité je ne fais ni photo ni copie, aucune trace sur mon téléphone.&lt;/p&gt;
&lt;p&gt;En 6ème page le Lézard vérifie que j&#39;ai bien noté mes mots et &lt;strong&gt;il m&#39;en demande un&lt;/strong&gt; au hasard, le 5ème par exemple, ou le 6ème ou le ... Si je ne l&#39;écris pas correctement il m&#39;en redemande un autre, mais heureusement j&#39;ai juste au premier contrôle !&lt;/p&gt;
&lt;p&gt;En 7ème et 8ème pages le Lézard m&#39;invite à définir un &lt;strong&gt;code secret (PIN)&lt;/strong&gt; à 4 chiffres, pour protéger mes portefeuilles dans mon coffre-fort : je réfléchis bien à mes 4 chiffres, de préférence pas de date de naissance (trop facile hein !) et je les note aussi sur mon papier, car encore une fois, je suis en autonomie.
J&#39;écris mon PIN en page 9 et le Lézard me demande à nouveau de l&#39;écrire en page 10 pour vérifier qu&#39;il s&#39;agit du bon PIN choisi.&lt;/p&gt;
&lt;p&gt;Et là &lt;strong&gt;c&#39;est la fête&lt;/strong&gt; : Le Lézard me fait un joli clin d’œil au milieu des confettis ! Top! merci merci !
&lt;img alt=&quot;photo_2025-08-05_20-23-52, 50%&quot; width=&quot;375&quot; height=&quot;500&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/b/0/b007e67f4b129dca60167414aa0316ecf5aad0ed.jpeg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;3. MON PORTEFEUILLE, MON COFFRE, JE PERSONNALISE&lt;/strong&gt;
J&#39;accède donc à mon coffre, dans lequel il y a mon portefeuille que je peux personnaliser.
Au début, il est complétement vide et sans rien, juste ma clef qui &lt;strong&gt;commence par g1&lt;/strong&gt;&lt;/p&gt;
&lt;img alt=&quot;portf-gecko, 50%&quot; width=&quot;375&quot; height=&quot;500&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/8/5/85a7d763ae2ceb30134770d4fc67f94556867618.jpeg&quot; /&gt;
&lt;p&gt;J&#39;aime bien cliquer partout donc j&#39;y vais.
Je modifie le nom du portefeuille : &lt;strong&gt;italpaola-gtest&lt;/strong&gt; qui sera mon &lt;strong&gt;portefeuille par défaut&lt;/strong&gt;, c&#39;est-à-dire le principal de mon coffre, je mets mon avatar et pour le fun je crée un nouveau portefeuille dans le même coffre, que je renomme aussi. On peut créer le nombre de portefeuilles que l&#39;on veut dans un coffre, selon ses propres besoins.
Avec un simple &lt;em&gt;glisser déposer&lt;/em&gt; d&#39;un portefeuille à l&#39;autre, on peut transférer nos junes de l&#39;un à l&#39;autre.&lt;/p&gt;
&lt;p&gt;Dans &lt;strong&gt;paramétrer ce coffre&lt;/strong&gt; je &lt;strong&gt;modifie le nom&lt;/strong&gt; : &lt;strong&gt;coffre-gtest-paola&lt;/strong&gt;
Je peux même afficher à nouveau ma &lt;strong&gt;phrase de restauration&lt;/strong&gt; (vérifions encore une fois va !), je n&#39;ai pas envie de changer mon &lt;strong&gt;code secret&lt;/strong&gt; (PIN) pour l&#39;instant, pas envie d&#39;&lt;strong&gt;authentification biométrique&lt;/strong&gt; ni d&#39; &quot;&lt;em&gt;oublier mon coffre&lt;/em&gt;&quot; : bah non, je viens juste de le créer. Pas envie de tout recommencer car tout serait effacé. Mais la Gtest (Blockchain Duniter) garde en mémoire et je pourrai toujours ouvrir mon coffre après avec ma phrase de restauration en téléchargeant à nouveau Ğecko. Je préfère &lt;strong&gt;migrer mon coffre&lt;/strong&gt; si j&#39;en ai besoin plus tard.&lt;/p&gt;
&lt;p&gt;Tout en bas il me propose de &lt;strong&gt;Migrer un ancien compte Id/Mdp&lt;/strong&gt; de Cesium. J&#39;en ai pas, je suis une nouvelle utilisatrice !&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;4. CERTIFICATIONS&lt;/strong&gt;
&lt;em&gt;Je vais donc lancer ma demande de &lt;strong&gt;certifications&lt;/strong&gt; pour pouvoir rentrer dans la Toile de confiance.&lt;/em&gt;
Pour ce, préalablement, mon amie qui m&#39;a parlé de la june m&#39;a versé des junes sur ce compte. Et ma première certification arrive. J&#39;ai 2 jours normalement pour l&#39;accepter même si la Gtest affiche 2 minutes pour confirmer que j&#39;&lt;strong&gt;accepte de rentrer dans la Toile de confiance&lt;/strong&gt;. En une seconde je dis oui et ... le mot magique apparaît :&lt;/p&gt;
&lt;img alt=&quot;image&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/1/a/1a0486355b63e57224681e77fa0a8e1b4759a100.png&quot;/&gt;
&lt;p&gt;Lorsque j&#39;aurai mes 5 certifications je serai enfin créatrice de monnaie et donc &lt;strong&gt;membre validé&lt;/strong&gt;. Houppi !&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;5. JE CRÉE UN AUTRE COFFRE&lt;/strong&gt;
Je continue à faire connaissance avec ce magnifique Lézard.&lt;/p&gt;
&lt;img alt=&quot;Coffre, 50%&quot; width=&quot;230&quot; height=&quot;500&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/e/7/e74a04a278a507fdb2d11b07b3ee8fc61146787d.jpeg&quot; /&gt;
&lt;p&gt;Ces deux petites flèches en haut à droite me permettent de gérer mes coffres.
J&#39;y vais et je choisis l&#39;action &lt;strong&gt;Créer un nouveau coffre&lt;/strong&gt;. Pour l&#39;instant pas besoin d&#39;importer un coffre.
Immédiatement le Lézard m&#39;affiche une nouvelle &lt;strong&gt;phrase de restauration&lt;/strong&gt; et il me demande de choisir mon code PIN. Je note avec beaucoup de soins, pour ne rien perdre et rien oublier.&lt;/p&gt;
&lt;p&gt;Mon nouveau coffre est créé en 3 clics à la vitesse de l&#39;éclair. Je le renomme aussi car ce sera un &lt;strong&gt;coffre associatif&lt;/strong&gt;. Je donnerai la phrase de restauration aux membres de mon association juniste en qui j&#39;ai entière confiance, pour que l&#39;on puisse gérer ensemble le portefeuille de l&#39;association.
Le même coffre peut être installé sur plusieurs appareils. Quand vous choisissez un code PIN c&#39;est pour l&#39;appareil que vous utilisez.
Pour restaurer/installer un coffre j&#39;ai absolument besoin de la &lt;strong&gt;phrase de restauration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans Ğecko on peut créer autant de coffres que l&#39;on veut et chaque coffre a sa propre phrase de restauration (et son propre PIN sur l&#39;appareil où il est)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;6. MES CONTACTS&lt;/strong&gt;
Je continue le test et je reviens sur l&#39;&lt;strong&gt;accueil&lt;/strong&gt; : trois cases.&lt;/p&gt;
&lt;img alt=&quot;G1, 50%&quot; width=&quot;230&quot; height=&quot;500&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/e/c/ece4330772e736474c51377b5acbfdbcd66fd296.jpeg&quot; /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Rechercher un portefeuille&lt;/strong&gt; par la clef ou le nom. J&#39;y retrouve aussi &lt;strong&gt;Mes contacts&lt;/strong&gt; et toute l&#39;&lt;strong&gt;Activité du réseau&lt;/strong&gt; Gtest, tous les paiements faits sur la blockchain.
Ce petit bouton en haut à droite
&lt;img alt=&quot;image|38x47&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/e/8/e8210ad8b9b1b789a568c3996c5cd83306ff0841.png&quot;/&gt;
permet de rajouter/retirer la personne trouvée à &lt;strong&gt;mes contacts&lt;/strong&gt;. À coté vous avez son QRcode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scanner un QR code&lt;/strong&gt; d&#39;un autre juniste pour le trouver plus facilement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gérer mes portefeuilles&lt;/strong&gt; (et coffres) : pour y rentrer j&#39;ai besoin de mon code PIN&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;📱 &lt;strong&gt;7. PARAMÈTRES&lt;/strong&gt;
Avec les trois petites barres en haut à gauche j&#39;accède à &lt;strong&gt;Paramètres&lt;/strong&gt; et à &lt;strong&gt;Monnaie&lt;/strong&gt;&lt;/p&gt;
&lt;img alt=&quot;G2, 50%&quot; width=&quot;312&quot; height=&quot;500&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/7/b/7b7f8a0518e880c7199229ac0ae9db9af3ae6116.jpeg&quot; /&gt;
&lt;p&gt;Très intuitif n&#39;est-ce pas ? Pas vraiment besoin d&#39;explications, tout me semble clair.
J’apprécie particulièrement la case &lt;strong&gt;Effacer le cache&lt;/strong&gt;. Utile pour désencombrer mon téléphone et quand l&#39;app peut-être aura des bugs.
Quand j&#39;ai ouvert le &lt;strong&gt;Mode expert&lt;/strong&gt; il me propose de changer la connectivité réseau. J&#39;en ai pas besoin, tout me semble juste, connecté au réseau Gtest, le bon Nœud et Indexer. Le mieux est de le laisser décoché, laissons le mode expert aux développeurs.
&lt;strong&gt;Générer les phrases en anglais&lt;/strong&gt; ne sert qu’à forcer Ğecko à générer en anglais la phrase de restauration. Par défaut décoché, elle sera dans la langue de votre téléphone.
À la fin il y a encore le bouton &lt;strong&gt;Oublier tous mes coffres&lt;/strong&gt; Tu rigoles ? Le lézard tient vraiment à ma liberté, mais non merci, je l&#39;ai créé je le garde !&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;8. MONNAIE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Toutes les informations sur la &lt;strong&gt;Ğ1 : monnaie et toile de confiance&lt;/strong&gt;. En V2 rien ne change, mais pour l&#39;instant certaines informations données dans la Gtest ne sont pas exactes. Comme son nom l&#39;indique, il s&#39;agit d&#39;une monnaie de test, les mises à jour suivront avant le lancement de la V2.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;🙇‍♀️📲 2ème Test sur un autre téléphone Android : &lt;strong&gt;J&#39;importe mon compte Césium (de V1 à V2)&lt;/strong&gt; 📱&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;1. JE TÉLÉCHARGE - J&#39;INSTALLE - JE PERSONNALISE&lt;/strong&gt;
Je télécharge sur le PlayStore (Android) &lt;strong&gt;Gecko-G1Wallet&lt;/strong&gt; et je l&#39;ouvre
Pour importer un portefeuille Cesium V1 je dois d&#39;abord créer un portefeuille dans Ğecko : il sera dans un Coffre.
Je refais les dix pages en notant bien &lt;strong&gt;ma phrase de restauration&lt;/strong&gt; et mon &lt;strong&gt;code PIN&lt;/strong&gt;. Vous l&#39;entendrez tout le temps, un peu comme en V1 pour votre ID et votre mot de passe : toute personne est responsable de sa phrase et de son PIN, aucun moyen de les récupérer, Gsper n’existe pas en V2, aucun développeur ni aucune HOTLINE pour vous aider : autonomie, liberté, autogestion !&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;2. J&#39;IMPORTE MON COMPTE CESIUM EN V2&lt;/strong&gt;
Le coffre et le portefeuille créés, je mets une minute à saisir mon Id/Mdp dans la case &lt;strong&gt;Migrer un ancien compte Id/Mdp&lt;/strong&gt;
Le portefeuille que j&#39;ai créé devient celui que j&#39;avais dans Cesium, avec toutes les certifications reçues et envoyées, tous mes DU transformés en DU&lt;sup&gt;GT&lt;/sup&gt; (Gtest) et je suis &lt;strong&gt;Membre validé&lt;/strong&gt;.
Dans &lt;strong&gt;Voir l&#39;activité&lt;/strong&gt; j&#39;ai les transactions faites en Gtest et le DU (en cochant la case).&lt;/p&gt;
&lt;p&gt;📱 &lt;strong&gt;3. J&#39;UTILISE LA Ğ1&lt;/strong&gt;
Je peux créer autant de portefeuilles que je veux en cliquant sur la case&lt;/p&gt;
&lt;img alt=&quot;image&quot; width=&quot;82&quot; height=&quot;92&quot; src=&quot;https://forum.monnaie-libre.fr/uploads/default/original/3X/6/8/68fd8e1df8ae76e8d1d928d4ef75bbbf26ccee78.png&quot; /&gt;
&lt;p&gt;et autant de coffres que je veux en cliquant sur les deux flèches en haut à droite.&lt;/p&gt;
&lt;p&gt;Je peux certifier des junistes et je dois attendre 5 jours pour pouvoir certifier quelqu&#39;un d&#39;autre : &lt;strong&gt;les certifications en rafale sont terminées.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;J&#39;ai testé toutes les fonctionnalités dans mon scénario de &lt;em&gt;nouvelle utilisatrice&lt;/em&gt; : ce sont les mêmes à l&#39;import d&#39;un compte Ğ1 de Cesium en Ğecko.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abondance&lt;/strong&gt; : je distribue des DU&lt;sup&gt;GT&lt;/sup&gt; à mes connaissances pour tester les transactions. &lt;strong&gt;Tous les mouvements faits en Gtest n&#39;ont aucun impact sur la JuneV1&lt;/strong&gt; (cesium) donc je peux faire tout ce que je veux. Génial !&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;🙇‍♀️📲 &lt;strong&gt;Conclusion de mon bêtatest :&lt;/strong&gt;
Je trouve l&#39;app Ğecko très intuitive et facile d&#39;utilisation. Très complète pour tout ce dont nous avons besoin pour utiliser la June et la Toile de confiance.
Beaucoup d&#39;améliorations que l&#39;on attendait. En tout premier la vitesse des manipulations : ça ne rame plus ! Multiportefeuille et multicoffre très pratiques et utiles. On peut la trouver sur les stores Android et ios. Tout y est pour que la June circule rapidement et efficacement. Très heureuse d&#39;y retrouver aussi toutes les informations données par le &lt;a rel=&quot;external&quot; href=&quot;https://monnaie-libre.fr/maj-v2/&quot;&gt;Collectif Màj-V2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Merci à &lt;a href=&quot;https://duniter.fr/contributeurs/poka/&quot;&gt;@poka&lt;/a&gt; pour cet énorme travail sur Ğecko et à tous les devs pour DUNITERV2&lt;/p&gt;
&lt;p&gt;D&#39;autres testeurs/teuses trouveront peut-être des fonctionnalités qui m&#39;ont échappé. À vous de nous en parler. Bons bêtatests à vous : plein de découvertes !&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Temps de lecture : 5 minutes.&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Financer le projet</title>
          <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/financer-le-projet/</link>
          <guid>https://duniter.fr/wiki/contribuer/financer-le-projet/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/financer-le-projet/">&lt;p&gt;Les différentes façons de soutenir financièrement Duniter : les comptes Ğ1
dédiés au financement de l&#39;écosystème technique et à la rémunération des
forgerons, Liberapay, et les structures qui peuvent porter un financement.&lt;/p&gt;
&lt;p&gt;Cette page attend une traduction humaine plutôt qu&#39;automatique, parce qu&#39;elle
engage des adresses et des montants qu&#39;il vaut mieux relire.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter v2 alpha 🌀</title>
          <pubDate>Tue, 11 Jun 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v2-alpha/</link>
          <guid>https://duniter.fr/blog/duniter-v2-alpha/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v2-alpha/">&lt;br&gt;
&lt;br&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-info note-block note-info&quot;&gt;
&lt;p&gt;Cet article est une &lt;strong&gt;traduction automatique&lt;/strong&gt; depuis sa version en anglais. Il contient certaines opinions de l&#39;auteur qui pourraient ne pas être partagées par d&#39;autres contributeurs de Duniter. (marquées par &#39;🞰&#39; dans le texte ci-dessous)&lt;/p&gt;
&lt;/div&gt;
&lt;h1 id=&quot;duniter-v2-alpha-cyclone&quot;&gt;Duniter v2 alpha 🌀&lt;/h1&gt;
&lt;p&gt;Cela fait un moment que nous avons annoncé la version 2 de Duniter dans &lt;a href=&quot;https://duniter.fr/blog/duniter-substrate/&quot;&gt;cet article de blog&lt;/a&gt;. Depuis ce temps, beaucoup de travail a été accompli, non seulement sur &lt;a href=&quot;https://duniter.fr/logiciels/duniter-v2/&quot;&gt;Duniter v2 lui-même&lt;/a&gt;, mais sur tout l&#39;écosystème v2, y compris l&#39;&lt;a href=&quot;https://duniter.fr/logiciels/duniter-squid/&quot;&gt;indexeur Duniter Squid&lt;/a&gt; et les clients de version 2 comme &lt;a href=&quot;https://duniter.fr/logiciels/cesium-v2/&quot;&gt;Cesium v2&lt;/a&gt; et &lt;a href=&quot;https://duniter.fr/logiciels/gecko/&quot;&gt;Ğecko&lt;/a&gt;. Il est maintenant temps d&#39;annoncer la version alpha de Duniter v2, prêt pour les tests avec le réseau &lt;code&gt;gdev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;une-blockchain-toujours-autonome-dizzy&quot;&gt;Une blockchain toujours autonome 💫&lt;/h2&gt;
&lt;p&gt;Duniter v1 est une &lt;em&gt;solo chain&lt;/em&gt; gérée par les membres de la toile de confiance Ğ1. Bien que nous utilisions Substrate, le &lt;abbr title=&quot;Software Development Kit&quot;&gt;SDK&lt;/abbr&gt; de Polkadot, nous ne voulons pas être une parachain de &lt;img class=&quot;si-logo&quot; src=&quot;https://cdn.simpleicons.org/polkadot&quot; /&gt;Polkadot ou Kusama pour des raisons à la fois techniques et politiques. Du point de vue technique, la toile de confiance nécessite de stocker beaucoup de données en blockchain ce qui est incompatible avec certaines limitations des parachains. Du point de vue politique, nous voulons que les outils restent entre les mains de leurs utilisateurs pour toujours et ne pouvons pas déléguer le consensus à une &quot;chaîne relais&quot; qui coûte de la &quot;monnaie non-libre&quot;, même si ce coût est offert dans le cadre du programme &quot;&lt;a rel=&quot;external&quot; href=&quot;https://polkadot.network/blog/proposal-for-common-good-parachains/&quot;&gt;common good parachain&lt;/a&gt;&quot;. C&#39;est pourquoi nous invitons les membres de la Ğ1 qui tiennent à son indépendance à rejoindre le réseau de test &lt;code&gt;gdev&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;rejoindre-le-reseau-de-test-comet&quot;&gt;Rejoindre le réseau de test ☄&lt;/h2&gt;
&lt;p&gt;Nous avons déjà lancé plusieurs réseaux de test par le passé pour nous familiariser avec la technologie. Maintenant que le logiciel se stabilise, nous sommes prêts à accueillir plus de personnes sur notre réseau de test &lt;code&gt;gdev&lt;/code&gt;. Vous pouvez rejoindre en tant que nœud miroir si vous souhaitez simplement découvrir, et annoncer un &lt;em&gt;endpoint&lt;/em&gt; RPC public si vous voulez participer à la décentralisation. Si vous vous sentez confiant et souhaitez participer au consensus, vous pouvez même exécuter un nœud smith. La &lt;a rel=&quot;external&quot; href=&quot;https://duniter.org/wiki/duniter-v2/&quot;&gt;documentation est disponible dans la section wiki en anglais&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le réseau de test est un moyen de se familiariser avec le système d&#39;identité Duniter. Comme c&#39;est un réseau de test, vous pouvez obtenir une certification sans rencontres &lt;abbr title=&quot;In Real Life&quot;&gt;IRL&lt;/abbr&gt; simplement en fournissant une clé publique dans la &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/c/currencies/gdev/63&quot;&gt;section Ğdev&lt;/a&gt;du forum. Les clients en version bêta sont configurés pour se connecter à ce réseau de test par défaut.&lt;/p&gt;
&lt;h2 id=&quot;la-blockchain-en-tant-que-bien-commun-evergreen-tree&quot;&gt;La blockchain en tant que bien commun 🌲&lt;/h2&gt;
&lt;p&gt;Nous avons déjà mentionné l&#39;approche &quot;logiciel en tant que bien commun&quot; du projet Duniter dans &lt;a href=&quot;https://duniter.fr/blog/duniter-substrate/#la-blockchain-comme-ressource-commune-evergreen-tree&quot;&gt;l&#39;article précédent&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bien commun : &lt;em&gt;&quot;une ressource gérée collectivement par une communauté&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nous avons approfondi ce sujet avec la communauté Ğ1, en particulier pour résoudre le problème des frais, mais aussi sur les aspects de gouvernance. Plus de détails ci-dessous.&lt;/p&gt;
&lt;h3 id=&quot;une-solution-au-probleme-des-frais-money-with-wings&quot;&gt;Une solution au problème des frais 💸&lt;/h3&gt;
&lt;p&gt;La blockchain est une ressource partagée et ouverte, pas comme un système multi-utilisateurs qui limite les connexions SSH à un ensemble de clés préconfigurées connues, mais comme une machine virtuelle qui exécute le même code de manière distribuée. Elle dispose d&#39;un système de permission et doit prendre en compte le coût d&#39;exécution si elle ne veut pas être attaquée par une attaque par déni de service. Comme c&#39;est un système distribué, il n&#39;y a pas moyen de simplement se fier aux limitations par IP et d&#39;autres mesures doivent être mises en œuvre.&lt;/p&gt;
&lt;p&gt;Les utilisateurs sont identifiés par une clé publique cryptographique avec un nombre &quot;infini&quot; de possibilités dans le sens où il est extrêmement improbable que la même clé soit choisie deux fois avec une génération aléatoire correcte (IPv4 est de 32 bits, IPv6 est de 128 bits, nous utilisons des clés publiques ed25519 de 256 bits). Cela est nécessaire pour la sécurité des clés mais empêche l&#39;application d&#39;un quota par clé. Parce que nous avons une toile de confiance, nous pourrions limiter l&#39;utilisation de la blockchain à un ensemble restreint de clés, mais cela empêcherait les comptes anonymes (non liés à une partie de la TdC) d&#39;utiliser la blockchain. Toutes les blockchains publiques dont nous avons entendu parler ont adopté la même solution : les frais. Toute opération sur la blockchain coûte de l&#39;argent à l&#39;auteur, ce qui limite la quantité de ressources qu&#39;il peut utiliser. De plus, les validateurs peuvent prioriser les transactions en fonction de leur propre intérêt grâce à un mécanisme de pourboire.&lt;/p&gt;
&lt;p&gt;Cette solution a plusieurs problèmes incompatibles avec notre vision du logiciel en tant que bien commun et d&#39;une monnaie égalitaire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l&#39;utilisation de la ressource commune n&#39;est pas &lt;em&gt;vraiment&lt;/em&gt; gratuite, elle vient avec un coût&lt;/li&gt;
&lt;li&gt;ceux qui possèdent plus ont plus de droits d&#39;utiliser la blockchain (ils paient moins de frais en proportion de leur richesse totale)&lt;/li&gt;
&lt;li&gt;ceux qui possèdent plus sont privilégiés par rapport aux autres (ils peuvent payer un pourboire plus élevé au validateur pour être priorisés)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans certaines situations comme &lt;img class=&quot;si-logo&quot; src=&quot;https://cdn.simpleicons.org/ethereum&quot; /&gt;Ethereum, le coût (&quot;gaz&quot;) est devenu si prohibitif que de nombreux utilisateurs ont quitté la plateforme. Dans certaines situations comme &lt;img class=&quot;si-logo&quot; src=&quot;https://cdn.simpleicons.org/solana&quot; /&gt;Solana, le coût de base est si bas que les &lt;a href=&quot;https://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service&quot;&gt;attaques &lt;abbr title=&quot;Distributed Denial of service&quot;&gt;DDos&lt;/abbr&gt;&lt;/a&gt; ne sont pas assez chères et se produisent fréquemment, déclenchant des frais de priorisation.&lt;/p&gt;
&lt;p&gt;Dans notre recherche pour combiner le meilleur des deux mondes, nous avons trouvé une solution qui devrait permettre une utilisation totalement gratuite de la blockchain la plupart du temps, et pendant les attaques une utilisation gratuite limitée par un quota pour les humains identifiés par la toile de confiance. Cette solution est basée sur le framework de benchmark de substrate. Comme nous connaissons assez précisément le coût du pire scénario en termes de taille de stockage et de temps d&#39;exécution, ainsi que la capacité maximale de la machine de référence, nous pouvons définir un seuil d&#39;activité au-dessous duquel chaque action est gratuite. Lorsque ce seuil est dépassé — très probablement à cause d&#39;une attaque — les frais cessent d&#39;être nuls et l&#39;attaque s&#39;épuise par manque de moyens. Pendant ces attaques, les comptes non anonymes (= liés à la toile de confiance) bénéficient toujours de frais nuls (sous quota).&lt;/p&gt;
&lt;p&gt;Nous pensons que cette solution encouragera les personnes lassées des frais bancaires à essayer notre blockchain et permettra à des applications inattendues, non pertinentes en présence de frais, d&#39;émerger. Par exemple une comptabilité interne transparente basée sur un système de comptes publics au sein des organisations.&lt;/p&gt;
&lt;h3 id=&quot;gouvernance-onchain-pour-les-mises-a-jour-du-code-up&quot;&gt;Gouvernance &lt;em&gt;onchain&lt;/em&gt; pour les mises-à-jour du code 🆙&lt;/h3&gt;
&lt;p&gt;Les systèmes avancés de gouvernance sur blockchain (&quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Decentralized_autonomous_organization&quot;&gt;&lt;abbr title=&quot;Decentralized Autonomous Organization&quot;&gt;DAO&lt;/abbr&gt;&lt;/a&gt;&quot;) pour les mises-à-jour du code comme ceux utilisés par Kusama sont intéressants, mais :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cela masque le fait que le développement logiciel est fortement guidé par les financements&lt;/li&gt;
&lt;li&gt;ce n&#39;est pas bien adapté à la communauté Ğ1, de petite taille, fortement soudée, et non technique&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour le moment, nous voulons simplement rendre le fonctionnement v1 plus transparent. D&#39;abord, les développeurs ont une idée, ils l&#39;implémentent bénévolement, en discutent avec les autres développeurs, et la soumettent aux forgerons. Ces derniers ne sont pas nécessairement des techniciens, mais ils font confiance aux développeurs et installent la mise-à-jour. En v2, nous devions impérativement augmenter la sécurité du groupe forgeron par une toile de confiance forgeron (plus d&#39;informations à ce sujet plus tard) et nous devions nous doter d&#39;une capacité de mise-à-jour plus réactive, d&#39;où, un comité technique mieux informé. Nous avons d&#39;abord pensé que ce serait un problème de centralisation pour la communauté, mais nous avons constaté que : 1️⃣ c&#39;est une particularité des systèmes de consensus sans fork qu&#39;un système de vote plus sophistiqué peut aider à passer à l&#39;échelle mais pas résoudre (🞰), 2️⃣ ce n&#39;est pas ce que la communauté attend en matière de développement logiciel, d&#39;où la section suivante (🞰).&lt;/p&gt;
&lt;h3 id=&quot;un-ecosysteme-logiciel-construit-avec-la-communaute-handshake&quot;&gt;Un écosystème logiciel construit avec la communauté (🞰) 🤝&lt;/h3&gt;
&lt;p&gt;Ce que la communauté attend &lt;em&gt;vraiment&lt;/em&gt; n&#39;est pas une perfection théorique dans le processus de prise de décision, mais des évolutions de l&#39;application finale qu&#39;ils auront en main. En d&#39;autres termes, la manière dont les interfaces utilisateurs sont conçues est plus importante pour l&#39;utilisateur moyen que les fondations techniques sur lequel elles reposent. Il est plus important que leurs demandes de fonctionnalités soient implémentées dans un délai raisonnable que le processus de cette mise en œuvre. Nous concentrerons donc d&#39;abord nos efforts sur l&#39;établissement et le maintien d&#39;un lien fluide entre la volonté de la communauté et l&#39;implémentation, et mettrons en place seulement ensuite des mécanismes d&#39;auto-gouvernance plus &quot;bottom-up&quot; que &quot;top-down&quot;. Cela signifie que nous expérimenterons probablement d&#39;abord avec des systèmes d&#39;information et de vote &lt;em&gt;offchain&lt;/em&gt; avant de les implémenter &lt;em&gt;onchain&lt;/em&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter et le web3</title>
          <pubDate>Fri, 28 Apr 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-web3/</link>
          <guid>https://duniter.fr/blog/duniter-web3/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-web3/">&lt;br&gt;
&lt;br&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;Cet article est un article d&#39;opinion. Son contenu doit être compris comme le point de vue de l&#39;auteur. L&#39;article original est en anglais.&lt;/p&gt;
&lt;/div&gt;
&lt;h1 id=&quot;duniter-et-web3&quot;&gt;Duniter et Web3&lt;/h1&gt;
&lt;p&gt;Le &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Web3&quot;&gt;Web3&lt;/a&gt; est le nom donné à une vision idéale du web où la blockchain permet une gouvernance décentralisée et une économie fondée sur le &lt;em&gt;token&lt;/em&gt; ou &quot;jeton cryptographique&quot; (au lieu du modèle actuel reposant en grande partie sur la publicité). Mais actuellement, les initiatives Web3 semblent limitées à une élite férue de technologie déjà bien intégrée dans le monde en ligne et ne contribuent pas à réduire la fracture numérique. Elles n&#39;intègrent pas suffisamment la classe ouvrière et les personnes technophobes pour atteindre leurs ambitions démocratiques.&lt;/p&gt;
&lt;p&gt;Le &lt;strong&gt;logiciel Duniter&lt;/strong&gt; répond à ce problème en implémentant la &lt;abbr title=&quot;Théorie Relative de la Monnaie&quot;&gt;TRM&lt;/abbr&gt;, une théorie monétaire solide qui prouve que la seule forme de création monétaire égalitaire est un &lt;strong&gt;Dividende Universel&lt;/strong&gt; (DU) (à ne pas confondre avec un revenu universel). Sa &lt;strong&gt;toile de confiance&lt;/strong&gt; sert de base à une identité numérique décentralisée, permettant l&#39;attribution du DU.&lt;/p&gt;
&lt;p&gt;Une expérience grandeur nature nommée &lt;strong&gt;monnaie Ğ1&lt;/strong&gt; et démarrée en 2017 confirme que le DU est un moyen valable de lutter contre les inégalités sociales et de fournir une véritable unité de mesure de la valeur.  À ce stade, la toile de confiance de la Ğ1 compte 8145 individus avec une grande diversité sociale. Elle se prépare à passer à l&#39;échelle grâce à la &lt;a href=&quot;https://duniter.fr/blog/duniter-substrate/&quot;&gt;réécriture de Duniter&lt;/a&gt; dans le &lt;em&gt;framework&lt;/em&gt; blockchain Substrate, permettant de bénéficier de sa scalabilité et de son écosystème de gouvernance dit &lt;em&gt;on-chain&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/blog/web3.svg&quot; alt=&quot;duniter avec le logo web3&quot; style=&quot;max-width: 200px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Duniter et web3. Credits &lt;a rel=&quot;external&quot; href=&quot;https://www.youtube.com/@imppaofree&quot;&gt;@imppao&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;monnaie-libre&quot;&gt;Monnaie Libre&lt;/h2&gt;
&lt;p&gt;La Ğ1 est une monnaie libre (voir philosophie du &lt;a rel=&quot;external&quot; href=&quot;https://www.gnu.org/philosophy/free-sw.fr.html&quot;&gt;&lt;em&gt;logiciel libre&lt;/em&gt;&lt;/a&gt;) au sens de la TRM : une monnaie dans laquelle la création monétaire n&#39;introduit pas d&#39;inégalités. La TRM prouve qu&#39;une telle monnaie doit être émise sous la forme d&#39;un Dividende Universel (DU) distribué périodiquement aux utilisateurs en proportion de la masse monétaire totale. En conséquence, toute monnaie n&#39;implémentant pas le DU introduit des inégalités. Par exemple, le bitcoin favorise ceux qui sont arrivés tôt et ceux qui possèdent des machines puissantes, l&#39;ethereum profite aux premiers arrivés et, depuis 2022, aux stakers (ceux qui possèdent déjà beaucoup de &lt;em&gt;tokens&lt;/em&gt;), les monnaies fiduciaires profitent aux &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/White_Anglo-Saxon_Protestant&quot;&gt;&lt;em&gt;wasp&lt;/em&gt;&lt;/a&gt;, etc.&lt;/p&gt;
&lt;p&gt;Le taux de croissance d&#39;une monnaie libre peut être choisi à sa création, mais il est fixé une fois pour toutes (à démographie constante). La Ğ1 cible une population ayant une espérance de vie de ~80 ans et a fait le choix d&#39;un taux de croissance annuel de 10 % afin que la masse monétaire totale provienne à parts égales de personnes vivantes et de personnes décédées (&lt;a rel=&quot;external&quot; href=&quot;https://www.creationmonetaire.info/2019/08/c-fvx.html&quot;&gt;ref&lt;/a&gt;) dans l&#39;hypothèse d&#39;une démographie constante.&lt;/p&gt;
&lt;h2 id=&quot;toile-de-confiance-wot&quot;&gt;Toile de confiance (WoT)&lt;/h2&gt;
&lt;p&gt;Bien que la cryptographie garantisse l&#39;authenticité d&#39;un document grâce à la &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Signature_num%C3%A9rique&quot;&gt;signature numérique&lt;/a&gt;, elle n&#39;établit pas le lien entre l&#39;identité numérique et l&#39;individu. Ce problème, connu sous le nom de preuve d&#39;humanité (&lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Proof_of_personhood&quot;&gt;proof of personhood&lt;/a&gt; en anglais), est réputé difficile.
L’approche par &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Toile_de_confiance&quot;&gt;toile de confiance&lt;/a&gt; utilisée dans PGP pour tenter de résoudre ce problème (c&#39;est-à-dire l&#39;établissement d&#39;un lien entre une clé publique et son propriétaire) semble désormais à l&#39;arrêt (&lt;a rel=&quot;external&quot; href=&quot;https://inversegravity.net/2019/web-of-trust-dead/&quot;&gt;ref&lt;/a&gt; en anglais). Un séminaire intitulé &lt;em&gt;Rebooting the Web of Trust&lt;/em&gt; (&lt;a rel=&quot;external&quot; href=&quot;https://www.weboftrust.info/&quot;&gt;weboftrust.info&lt;/a&gt;) y travaille depuis 2015 par le biais d&#39;événements annuels &lt;abbr title=&quot;Rebooting the Web Of Trust&quot;&gt;RWOT&lt;/abbr&gt;, sans qu&#39;aucune mise en œuvre concrète n&#39;ait encore eu lieu.&lt;/p&gt;
&lt;p&gt;La toile de confiance de Duniter, grâce à son astucieux mélange de règles temporelles et statiques (&lt;a href=&quot;https://duniter.fr/blog/duniter-web3/2018-04-15-la-toile-de-confiance-en-detail.md&quot;&gt;en savoir plus&lt;/a&gt;), a permis à la communauté Ğ1 de se développer de manière régulière et soutenue. Sa croissance relativement lente s&#39;est révélée bénéfique à la dimension &quot;confiance&quot; de la toile de &lt;em&gt;confiance&lt;/em&gt;. Les membres &lt;a href=&quot;https://carte.monnaie-libre.fr/?members&quot;&gt; sont bien répartis sur le territoire français&lt;/a&gt;, aussi bien dans les zones urbaines que rurales, y compris dans les territoires d&#39;outre-mer. La communauté Ğ1 est impliquée dans la gouvernance de Duniter à travers de nombreuses réunions &lt;abbr title=&quot;In Real Life&quot;&gt;IRL&lt;/abbr&gt; hors chaîne.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/Hj3GpaEYLwA&quot; target=&quot;_blank&quot; class=&quot;center-content&quot;&gt;&lt;img src=&quot;/blog/wot_2022-11-22.png&quot; alt=&quot;web of trust&quot; style=&quot;max-width: 400px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;capture de la toile de confiance au 2022-11-22: 6944 membres, 61737 certifications. Animation disponible sur &lt;a rel=&quot;external&quot; href=&quot;https://youtu.be/Hj3GpaEYLwA&quot;&gt;https://youtu.be/Hj3GpaEYLwA&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;consensus-blockchain-par-preuve-d-identite&quot;&gt;Consensus blockchain par preuve d’identité&lt;/h2&gt;
&lt;p&gt;Les algorithmes de consensus de la blockchain peuvent être sans &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Consensus_(computer_science)#Permissioned_versus_permissionless_consensus&quot;&gt;permission ou avec permission&lt;/a&gt;.
Les algorithmes sans permission connus, comme la &lt;em&gt;preuve de travail&lt;/em&gt; de Bitcoin, sont lents et gourmands en énergie. C&#39;est pourquoi de nombreuses blockchains se sont orientées vers des algorithmes avec permission, comme la &lt;em&gt;preuve d&#39;enjeu&lt;/em&gt; ou la &lt;em&gt;preuve d&#39;autorité&lt;/em&gt;. Alors que Duniter v1 utilisait une preuve mixte (&lt;a href=&quot;https://duniter.fr/blog/preuve-de-travail/&quot;&gt;en savoir plus&lt;/a&gt;), Duniter v2 est maintenant prêt à utiliser le mécanisme de preuve d&#39;identité entièrement décentralisé fourni par sa toile de confiance en combinaison avec l&#39;algorithme hybride &lt;a href=&quot;https://research.web3.foundation/Polkadot/protocols/block-production/Babe&quot;&gt;&lt;abbr title=&quot;Blind Assignment for Blockchain Extension&quot;&gt;BABE&lt;/abbr&gt;&lt;/a&gt;/&lt;a href=&quot;https://research.web3.foundation/Polkadot/protocols/finality&quot;&gt;&lt;abbr title=&quot;Greedy Heaviest-Observed Sub-Tree&quot;&gt;G&lt;/abbr&gt;&lt;abbr title=&quot;GHOST-based Recursive ANcestor Deriving Prefix Agreement&quot;&gt;RANDPA&lt;/abbr&gt;&lt;/a&gt;. Alors que la toile de confiance principale est accessible à tout le monde, un sous-ensemble de celle-ci appellée &quot;toile de confiance forgeron&quot;, avec des exigences de sécurité élevées, permettra de participer à l&#39;écriture des blocs. Il s&#39;agira alors du premier consensus de blockchain utilisant une couche de permission entièrement décentralisée avec &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Proof_of_identity_(blockchain_consensus)&quot;&gt;preuve d&#39;identité&lt;/a&gt; (PoID) pour BABE. C&#39;est un autre moyen de se rapprocher d&#39;une véritable démocratie sur blockchain (le prochain moyen le plus proche étant, à mon avis, la &lt;a rel=&quot;external&quot; href=&quot;https://wiki.polkadot.network/docs/learn-consensus#nominated-proof-of-stake&quot;&gt;NPoS&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;conception-communautaire-orientee-outil&quot;&gt;Conception communautaire &quot;orientée outil&quot;&lt;/h2&gt;
&lt;p&gt;Alors que de nombreux projets Web3 appliquent une démarche de conception &quot;orientée produit&quot;, l&#39;écosystème logiciel Duniter est &quot;orienté outil&quot;. Il n&#39;essaie pas de créer des besoins avec un marketing agressif, mais répond aux différents besoins des utilisateurs. Il suffit de regarder la galaxie des logiciels libres &lt;a href=&quot;https://duniter.fr/logiciels/&quot;&gt;connectés à la blockchain de Duniter&lt;/a&gt; pour se faire une idée de la diversité d&#39;utilisation de cette monnaie par rapport à l&#39;aspect principalement financier des &lt;em&gt;crypto-tokens&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;futur-de-duniter&quot;&gt;Futur de Duniter&lt;/h2&gt;
&lt;p&gt;Jusqu&#39;à présent, Duniter était principalement confiné aux utilisateurs francophones, mais il s&#39;ouvre au monde extérieur en traduisant sa documentation en anglais et en espagnol et en &lt;a href=&quot;https://duniter.fr/blog/duniter-substrate/&quot;&gt;réécrivant son cœur&lt;/a&gt; dans le &lt;em&gt;framework&lt;/em&gt; Substrate. Cela facilitera l&#39;interopérabilité avec d&#39;autres blockchains et l&#39;extension de son réseau de confiance, l&#39;un de ses principaux atouts.&lt;/p&gt;
&lt;p&gt;Si vous souhaitez en savoir plus sur Duniter ou y contribuer, n&#39;hésitez pas à nous contacter sur notre forum technique Discourse.&lt;/p&gt;
&lt;span class=&quot;center-content&quot;&gt;
&lt;a href=&quot;https://forum.duniter.org/&quot; class=&quot;w3-round w3-button w3-blue&quot;&gt;&lt;img src=&quot;/img/duniter_forum.png&quot;/&gt; Écrivez-nous !&lt;/a&gt;
&lt;/span&gt;
</description>
      </item>
      <item>
          <title>Financement participatif - faites grandir la Ğ1</title>
          <pubDate>Fri, 30 Sep 2022 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/financement-participatif-2022/</link>
          <guid>https://duniter.fr/blog/financement-participatif-2022/</guid>
          <description xml:base="https://duniter.fr/blog/financement-participatif-2022/">&lt;h1 id=&quot;financement-participatif&quot;&gt;Financement participatif&lt;/h1&gt;
&lt;div class=&quot;note note-icon note-icon-medium note-icon-info note-block note-info&quot;&gt;
&lt;p&gt;Cette initiative de financement en &lt;abbr title=&quot;Unités Non Libres&quot;&gt;UNL&lt;/abbr&gt; vient d&#39;Axiom Team, une association qui ne représente pas l&#39;intégralité des développeurs, mais seulement une sous-partie qui admet la pertinence de ce type financement hors Ǧ1.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nous &lt;a href=&quot;https://duniter.fr/blog/financement-ademe/&quot;&gt;annoncions récemment&lt;/a&gt; le lancement prochain d&#39;un financement participatif de l&#39;écosystème Duniter v2. Nous y voilà !&lt;/p&gt;
&lt;p&gt;Jusqu’à aujourd’hui, le développement de Duniter a été &lt;strong&gt;entièrement bénévole&lt;/strong&gt;, bien qu’encouragé par une caisse de dons en Ǧ1.&lt;/p&gt;
&lt;span class=&quot;center-content&quot;&gt;
&lt;a href=&quot;https://forum.duniter.org/t/caisse-de-dons-pour-les-contributeurs-techniques-a-lecosysteme-g1/6908&quot; class=&quot;w3-round w3-button w3-blue&quot;&gt;💰 Caisse de dons en Ğ1&lt;/a&gt;
&lt;/span&gt;
&lt;p&gt;Comme vous l’avez peut-être entendu, nous préparons une version 2 de Duniter qui corrigera tous les bugs connus comme notamment :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la synchronisation des &lt;em&gt;piscines&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;le choix du &lt;em&gt;nœud&lt;/em&gt; Duniter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;et fournira un bien meilleur confort d’utilisation&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un bloc toutes les &lt;em&gt;6 secondes&lt;/em&gt; plutôt que &lt;em&gt;5 minutes&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;validation des &lt;em&gt;certifications&lt;/em&gt; dès l’émission&lt;/li&gt;
&lt;li&gt;nouveaux logiciels clients bien plus &lt;em&gt;rapides&lt;/em&gt; (Cesium v2, Ğecko)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/blog/g-pot.svg&quot; alt=&quot;g-pot&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;w3-panel w3-light-gray&quot;&gt;
&lt;p class=&quot;w3-large w3-serif&quot;&gt;&lt;i class=&quot;fa fa-quote-right w3-xxlarge w3-margin-right&quot;&gt;&lt;/i&gt;
&lt;i&gt;
Faites grandir la Ğ1 !
&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;La &lt;strong&gt;ǦDev&lt;/strong&gt;, monnaie de test de cette nouvelle version de Duniter, a été lancée en mai 2022 lors des &lt;strong&gt;RML16&lt;/strong&gt; hébergées par Philippe Guillemant. Cette seizième rencontre technique a notamment vu l’arrivée de contributeurs espagnols, un des signes que nous sommes prêts à passer à la vitesse supérieure.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;📝 &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/t/compte-rendu-des-rml-16-a-destination-des-utilisateurs-de-la-monnaie-libre/23118&quot;&gt;Compte-rendu des RML16&lt;/a&gt; / 📹 &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/t/reportage-video-des-rml16/23555&quot;&gt;Reportage vidéo des RML16&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour tenir la communauté informée des changements qui se préparent, &lt;a href=&quot;https://duniter.fr/contributeurs/elois/&quot;&gt;@Elois&lt;/a&gt; a donné une conférence lors de l’université d’été de la monnaie libre près de Toulouse : « Ğ1 v2.0 : Ce qui va changer ».&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;🎤 &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/t/conference-g1-v2-0-ce-qui-va-changer/23642&quot;&gt;Conférence &quot;Ğ1 v2.0 : Ce qui va changer&quot;&lt;/a&gt; / &lt;a rel=&quot;external&quot; href=&quot;https://tube.p2p.legal/w/eVrbpbSQB2cuhnYk7Wrhyy&quot;&gt;▶️ sur peertube&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Nous travaillons sur d’autres supports pour expliquer au mieux le nouvel écosystème, afin de préparer la transition en douceur que nous souhaitons proposer d’ici deux ans.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Le travail à accomplir d’ici la migration nécessite un effort conséquent. Les soirées et weekends consacrés bénévolement ne suffiront pas à arriver à terme, en plus d’être un régime fatigant. Heureusement, plusieurs d’entre nous sont prêts à mettre de côté leur emploi rémunéré en € pour y consacrer les précieuses heures de journée.&lt;/p&gt;
&lt;p&gt;Pour garantir que ce travail se fasse dans de bonnes conditions, il faut être en mesure de répondre aux besoins primaires des concernés (loyer, charges, alimentation) pendant une durée minimum d’un an.&lt;/p&gt;
&lt;p&gt;Ces besoins ne pouvant pour l’instant pas être comblés exclusivement en Ǧ1, nous avons décidé de lancer un appel à don en €. Les membres et utilisateurs de la Ǧ1 qui souhaitent soutenir son développement technique et peuvent se le permettre sont invités à participer à cette campagne.&lt;/p&gt;
&lt;span class=&quot;center-content&quot;&gt;
&lt;a href=&quot;https://www.helloasso.com/associations/axiom-team&quot; class=&quot;w3-round w3-button w3-deep-orange&quot;&gt;💶 Financement participatif en €&lt;/a&gt;
&lt;/span&gt;
&lt;p&gt;Cet appel à don initial doit nous donner la liberté nécessaire pour mettre en place une solution pérenne. Nous détaillerons ces solutions en temps voulu.&lt;/p&gt;
&lt;p&gt;Le montant collecté sera réparti de manière transparente entre les développeurs suivant la méthode du cercle de répartition (cf
&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/co-responsabilite-financiere/9720&quot;&gt;Co-responsabilité financière&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-info note-block note-info&quot;&gt;
&lt;p&gt;Le cercle de répartition a eu lieu, étant donné la longueur de la visio, les enregistrements sont disponibles en plusieurs parties aux liens suivants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://tube.p2p.legal/w/rQY6dr93TLDH8tcbFfeMW5&quot;&gt;Cercle de répartition vidéo n°1&lt;/a&gt; (peertube)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://tube.p2p.legal/w/n8m3JvUN2zFXdBrLdX5fXq&quot;&gt;Cercle de répartition vidéo n°2&lt;/a&gt; (peertube)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://tube.p2p.legal/w/86yvV5HgBcfoi3MgVs5fKh&quot;&gt;Cercle de répartition vidéo n°3&lt;/a&gt; (peertube)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://tube.p2p.legal/w/nT9L9TSzk6ja4e69oYHZ1N&quot;&gt;Cercle de répartition vidéo n°4&lt;/a&gt; (peertube)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</description>
      </item>
      <item>
          <title>L&#39;ADEME finance Ğecko et Duniter</title>
          <pubDate>Thu, 15 Sep 2022 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/financement-ademe/</link>
          <guid>https://duniter.fr/blog/financement-ademe/</guid>
          <description xml:base="https://duniter.fr/blog/financement-ademe/">&lt;h1 id=&quot;l-ademe-finance-gecko-et-duniter&quot;&gt;L&#39;ADEME finance Ğecko et Duniter&lt;/h1&gt;
&lt;p&gt;L&#39;&lt;abbr title=&quot;Agence De l&#39;Environnement et de la Maîtrise de l&#39;Énergie&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.ademe.fr/&quot;&gt;ADEME&lt;/a&gt;&lt;/abbr&gt; a lancé en mars 2021 un appel à projet sur le thème des communs. Son objectif est de favoriser la résilience des territoires via des projets collectifs ayant un impact à l&#39;échelle locale. La méthodologie de l&#39;appel à projet a été adaptée au thème des communs via la mise en place d&#39;un wiki (&lt;a rel=&quot;external&quot; href=&quot;https://wiki.resilience-territoire.ademe.fr/&quot;&gt;wiki.resilience-territoire.ademe.fr&lt;/a&gt;) et d&#39;un forum (&lt;a rel=&quot;external&quot; href=&quot;https://forum.resilience-territoire.ademe.fr/&quot;&gt;forum.resilience-territoire.ademe.fr&lt;/a&gt;). Cela a permis de faire émerger en toute transparence les projets suffisamment structurés qui répondaient aux critères d&#39;ancrage territorial et d&#39;impact sur leur résilience.&lt;/p&gt;
&lt;p&gt;L&#39;association &lt;a rel=&quot;external&quot; href=&quot;https://axiom-team.fr/&quot;&gt;Axiom Team&lt;/a&gt;, qui a pour but le développement technique de la Ğ1 a répondu à l&#39;appel en rédigeant un dossier centré autour de l&#39;application Ğecko &lt;a rel=&quot;external&quot; href=&quot;https://wiki.resilience-territoire.ademe.fr/wiki/%C4%9Eecko&quot;&gt;disponible sur le wiki&lt;/a&gt;. Ce dossier a été écrit avant la décision de la &lt;a href=&quot;https://duniter.fr/blog/duniter-substrate/&quot;&gt;migration Duniter Substrate&lt;/a&gt; et était donc focalisé sur la conception d&#39;une application de paiement suffisamment rapide pour répondre aux besoins des Ğmarchés. En effet, bien que Duniter soit indispensable au fonctionnement de la Ğ1, son ancrage local était moins évident que celui de Ğecko.&lt;/p&gt;
&lt;p&gt;Parmi 247 communs recensés sur le wiki, Ğecko a été sélectionné pour financement. Vous pouvez consulter le détail du dossier sur le wiki ou en lire un résumé ci-dessous.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img alt=&quot;illustration&quot; src=&quot;/blog/ademe-finance-gecko.png&quot; width=&quot;50%&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;objet&quot;&gt;Objet&lt;/h2&gt;
&lt;p&gt;Le développement impressionnant de l&#39;économie en Ğ1 mérite l&#39;évolution des outils de manière à ce que l&#39;outil numérique n&#39;en freine pas l&#39;adoption. Parmi les objectifs du projet Ğecko, il y a :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une connexion au réseau transparente : pas besoin de choisir de nœud&lt;/li&gt;
&lt;li&gt;un paiement rapide par simple scan, le montant pouvant être intégré au QR code&lt;/li&gt;
&lt;li&gt;une confirmation de paiement rapide, pas de fork ou de nœud désynchronisé&lt;/li&gt;
&lt;li&gt;une sécurité forte par code pin, pas d&#39;identifiants interminables à saisir pour payer&lt;/li&gt;
&lt;li&gt;une capacité de charge plus élevée, pas de nœud saturé&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces améliorations devraient fluidifier largement les échanges, en particulier sur les Ğmarchés. Bien entendu, cela repose toujours sur une connexion internet et en zone blanche il faudra se contenter de monnaie papier ou autre.&lt;/p&gt;
&lt;h3 id=&quot;cote-duniter&quot;&gt;Côté Duniter&lt;/h3&gt;
&lt;p&gt;Si certaines de ces améliorations peuvent avoir lieu côté client, la plupart nécessitent de grands changements côté serveur. C&#39;est pourquoi le projet Ğecko vise également à développer des fonctionnalités dans Duniter. Idéalement, nous pourrions arriver au terme du projet Ğecko au moment du lancement de la Ğ1v2, déjà annoncée lors de l&#39;université d&#39;été de la monnaie libre 2022.&lt;/p&gt;
&lt;h2 id=&quot;budget&quot;&gt;Budget&lt;/h2&gt;
&lt;p&gt;Le coût du projet a été estimé à 50 000 euros, dont une partie fléchée vers Ğecko &lt;em&gt;frontend&lt;/em&gt; au sens strict et une autre vers les fonctionnalités &lt;em&gt;backend&lt;/em&gt; nécessaires à Ğecko (Duniter, indexeurs, données hors chaîne...). L&#39;aide de l&#39;ADEME couvrira 70 % de ce budget, soit 35 000 €, le reste étant assuré par auto-financement. Cette partie d&#39;auto-financement peut être comptabilisée en monnaie ou en nature (par exemple par valorisation d&#39;heures de travail bénévoles).&lt;/p&gt;
&lt;h3 id=&quot;benevolat&quot;&gt;Bénévolat&lt;/h3&gt;
&lt;p&gt;Bien qu&#39;il nous semble important de valoriser le travail bénévole, son estimation rigoureuse est compliquée. Plusieurs milliers d&#39;heures de travail qualifié ont été nécessaires pour en arriver à l&#39;état actuel de Ğecko, soit plus que le montant total du projet, et cela sans compter les nombreuses heures d&#39;apprentissage en autodidacte ni le travail côté Duniter. De plus, le travail bénévole se fait majoritairement sur du temps libre en parallèle d&#39;une activité rémunérée, c&#39;est-à-dire en soirée et le weekend. Pour cette raison, il nous semble important de procéder à un autofinancement en monnaie dette de manière à obtenir ce que ne permet pas le bénévolat et le financement en Ğ1 : des contributeurs à plein temps.&lt;/p&gt;
&lt;h3 id=&quot;financement-participatif&quot;&gt;Financement participatif&lt;/h3&gt;
&lt;p&gt;Pour les raisons évoquées ci-dessus et parce que cela nous a été demandé à plusieurs reprises lors des derniers événements publics, nous allons lancer un financement participatif auprès de la communauté Ğ1 et à destination du collectif de développeurs. Nous espérons ainsi libérer de leur &quot;boulot euro&quot; ceux qui le souhaitent parmi nos contributeurs techniques bénévoles. La structure porteuse sera Axiom Team et la méthode de partage des dons sera décidée par la méthode des cercles de répartition. Si ce cercle alloue 15 000 € à Axiom Team, cela permettra de satisfaire la partie d&#39;autofinancement. Sinon nous aurons recours à la valorisation de bénévolat.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Pour être tenu au courant des nouvelles relatives au financement, abonnez-vous à la &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/c/associations/axiom-team/115&quot;&gt;catégorie &quot;Axiom Team&quot;&lt;/a&gt; sur le forum monnaie libre !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter v2 avec Substrate</title>
          <pubDate>Sat, 29 Jan 2022 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-substrate/</link>
          <guid>https://duniter.fr/blog/duniter-substrate/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-substrate/">&lt;h1 id=&quot;duniter-v2-construction-site&quot;&gt;Duniter v2 🏗&lt;/h1&gt;
&lt;h2 id=&quot;une-evolution-necessaire-et-benefique-1&quot;&gt;Une évolution nécessaire et bénéfique 👍&lt;/h2&gt;
&lt;p&gt;Le logiciel Duniter a connu de nombreuses évolutions depuis son baptème &lt;a href=&quot;https://duniter.fr/blog/ucoin-rename-duniter/&quot;&gt;en avril 2016&lt;/a&gt;, et les technologies de blockchain également. Alors qu&#39;à l&#39;époque une solution &quot;faite maison&quot; était pertinente, nous pensons qu&#39;il est aujourd&#39;hui préférable de nous baser sur des briques logicielles largement testées et éprouvées pour garantir le passage à l&#39;échelle. Le framework blockchain &lt;a rel=&quot;external&quot; href=&quot;https://substrate.io/&quot;&gt;Substrate&lt;/a&gt; nous semble particulièrement adapté à nos besoins. En effet, son architecture modulaire par &quot;&lt;a rel=&quot;external&quot; href=&quot;https://docs.substrate.io/v3/getting-started/glossary/#pallet&quot;&gt;pallet&lt;/a&gt;&quot; nous permettra d&#39;assembler des briques développées par des professionnels et de nous concentrer sur ce qui fait la spécificité de Duniter : sa toile de confiance et la création monétaire par Dividende Universel (DU).&lt;/p&gt;
&lt;h3 id=&quot;migration-de-la-g1-trophy&quot;&gt;Migration de la Ğ1 🏆&lt;/h3&gt;
&lt;p&gt;Le premier objectif de Duniter est de propulser la monnaie Ğ1 dont la toile de confiance comporte aujourd&#39;hui 4268 membres avec une croissance actuelle de 300 membres / mois. Nous souhaitons coordonner la communauté pour une transition vers Duniter v2 aussi douce que possible sans &quot;hard fork&quot;. Chaque membre conservera son statut, chaque compte conservera son solde, les paramètres monétaires resteront pratiquement inchangés, les wallets (anciennement &quot;clients&quot;) seront adaptés, et nous chercherons à rendre la durée d&#39;indisponibilité aussi courte que possible (idéalement inférieur à une journée).&lt;/p&gt;
&lt;h3 id=&quot;ouverture-a-l-international-earth-africa&quot;&gt;Ouverture à l&#39;international 🌍&lt;/h3&gt;
&lt;p&gt;Contrairement à la solution &quot;faite maison&quot; documentée essentiellement en français, Substrate nous ouvre vers une communauté de développeurs internationale. Duniter apportera ce qu&#39;il manque à l&#39;univers des cryptomonnaies : une théorie monétaire solide. Réciproquement, le monde des cryptomonnaies apportera à Duniter l&#39;expertise nécessaire pour passer au stade supérieur de l&#39;expérimentation d&#39;une monnaie libre. Afin de faciliter la compréhension, nous allons utiliser un &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/vocabulaire-de-base-pour-comprendre-duniter-v2s-lecture-fortement-recommandee-pour-tous/9053&quot;&gt;vocabulaire précis&lt;/a&gt; déjà bien installé.&lt;/p&gt;
&lt;h3 id=&quot;la-blockchain-comme-ressource-commune-evergreen-tree&quot;&gt;La blockchain comme ressource commune 🌲&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/comment-partager-equitablement-cette-ressource-commune-quest-la-blockchain-g1/9050/&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Duniter v1 s&#39;inscrivait déjà dans une démarche globale consistant à considérer la blockchain comme un &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Communs&quot;&gt;commun&lt;/a&gt;&lt;/strong&gt;, &lt;q&gt; une ressource gérée collectivement par une communauté &lt;/q&gt; selon la définition donnée par &lt;a rel=&quot;external&quot; href=&quot;https://lescommuns.org/&quot;&gt;https://lescommuns.org/&lt;/a&gt;. La migration vers Substrate est une occasion idéale de pousser la réflexion plus loin, en introduisant des outils de gouvernance &lt;em&gt;on-chain&lt;/em&gt; pour les décisions collectives (vote, évolution du protocole) et l&#39;attribution des ressources finies de la blockchain (ex. résistance au spam).&lt;/p&gt;
&lt;h2 id=&quot;quelques-points-techniques-woman-computer&quot;&gt;Quelques points techniques 👩‍💻&lt;/h2&gt;
&lt;p&gt;Rentrons maintenant dans une partie technique, où nous aborderons les questions concrètes posées par cette migration.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h3 id=&quot;abandon-de-la-pow-babe-grandpa-space-invader&quot;&gt;Abandon de la POW → BABE/GRANDPA 👾&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/abandon-de-la-pow-au-profit-de-babe-grandpa/8901&quot;&gt;🔗 forum&lt;/a&gt; &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/g1v2-proposition-de-passer-au-consensus-hybride-babe-grandpa/8610&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La preuve de travail (&lt;em&gt;proof of work&lt;/em&gt;, &quot;pow&quot;) était un point souvent critiqué. Bien que la &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/preuve-de-travail/#la-difficulte-personnalisee&quot;&gt;difficulté personnalisée&lt;/a&gt; de Duniter permette de réduire la consommation d&#39;énergie et de répartir l&#39;ajout de blocs entre les forgerons, les algorithmes &lt;a rel=&quot;external&quot; href=&quot;https://docs.substrate.io/v3/advanced/consensus/#babe&quot;&gt;BABE&lt;/a&gt; pour l&#39;ajout de blocs et &lt;a rel=&quot;external&quot; href=&quot;https://docs.substrate.io/v3/advanced/consensus/#grandpa&quot;&gt;GRANDPA&lt;/a&gt; pour la finalisation nous permettront d&#39;accélérer grandement la validation des données (~30 minutes → ~30 secondes) tout en limitant le &quot;gaspillage&quot; de ressources CPU.&lt;/p&gt;
&lt;h3 id=&quot;sous-toile-forgerons-volcano&quot;&gt;Sous-toile forgerons 🌋&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/la-sous-toile-forgerons/9047&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans Duniter v1, tout membre de la toile de confiance (&lt;em&gt;web of trust&lt;/em&gt;, &quot;wot&quot;) obtient d&#39;un seul coup les droits de créer le DU, certifier, et ajouter des blocs. Cela constitue une faille de sécurité importante car en s&#39;emparant d&#39;une trentaine de comptes mal sécurisés il est possible de prendre le contrôle de toute la blockchain. Avec l&#39;augmentation du nombre d&#39;utilisateurs, il est préférable de dissocier les différents droits pour n&#39;accorder l&#39;ajout de bloc que selon des conditions de sécurité non imposables au grand public.&lt;/p&gt;
&lt;h3 id=&quot;pallet-democracy-utilisations-envisagees-herb&quot;&gt;Pallet &quot;Democracy&quot;, utilisations envisagées 🌿&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;gouvernance du runtime &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/la-gouvernance-du-runtime/8899&quot;&gt;🔗 forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;frais-d-extrinsics-mesures-antispam-robot&quot;&gt;frais d&#39;extrinsics / mesures antispam 🤖&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;frais d&#39;extrinsics &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/les-frais-dextrinsics/8941&quot;&gt;🔗 forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;declaration-d-identite-via-premier-certificateur-trident&quot;&gt;déclaration d&#39;identité via premier certificateur 🔱&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/la-creation-didentite-dans-duniter-v2s/9054&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;1-bloc-6-sec-oracle-pour-calculs-couteux-ex-regle-de-distance-writing-hand&quot;&gt;1 bloc = 6 sec → oracle pour calculs coûteux (ex. règle de distance) ✍️&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/calcul-de-distance-via-oracle/9012&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;changement-de-paradigme-utxo-compte-classical-building&quot;&gt;Changement de paradigme UTXO → compte 🏛&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/les-transactions/8902&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;production-du-du-compression&quot;&gt;Production du DU 🗜&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/production-du-du/8998&quot;&gt;🔗 forum&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Choisir une instance</title>
          <pubDate>Sat, 06 Nov 2021 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/g1/instances/</link>
          <guid>https://duniter.fr/faq/g1/instances/</guid>
          <description xml:base="https://duniter.fr/faq/g1/instances/">&lt;h1 id=&quot;un-modele-decentralise&quot;&gt;Un modèle décentralisé&lt;/h1&gt;
&lt;p&gt;L&#39;écosystème de la June est construit sur un modèle décentralisé, ce qui permet une gouvernance plus libre et une meilleure résilience. Cette diversité peut être un peu déstabilisante au début, mais cette page est là pour vous guider.&lt;/p&gt;
&lt;h2 id=&quot;liste-d-instances-et-implications&quot;&gt;Liste d&#39;instances et implications&lt;/h2&gt;
&lt;h3 id=&quot;duniter&quot;&gt;Duniter&lt;/h3&gt;
&lt;p&gt;TODO expliquer les implications du choix d&#39;une instance Duniter dans les clients mono-noeuds&lt;br /&gt;
TODO mettre un lien sur comment changer son noeud Duniter dans les différents clients mono-noeuds&lt;br /&gt;
TODO expliquer où trouver une liste des instances Duniter&lt;/p&gt;
&lt;h3 id=&quot;cesium&quot;&gt;Césium+&lt;/h3&gt;
&lt;p&gt;TODO expliquer comment fonctionne Césium+ (notifications par exemple)&lt;br /&gt;
TODO expliquer comment changer de noeud Césium+&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;g1.data.presles.fr&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g1.data.e-is.pro&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g1.data.adn.life&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gchange&quot;&gt;Ğchange+&lt;/h3&gt;
&lt;p&gt;Ğchange+ est un Datapod qui partage beaucoup de similarités avec Césium+.&lt;br /&gt;
TODO expliquer davantage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;data.gchange.fr&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gchange.data.presles.fr&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;wotwizard&quot;&gt;WotWizard&lt;/h3&gt;
&lt;p&gt;WotWizard est une sorte d&#39;appendice d&#39;un noeud Duniter. Les données qu&#39;il présente sont donc celles présentes sur le noeud Duniter associé. La partie prédictive de WotWizard concerne ce qui n&#39;est pas encore écrit en blockchain, chaque instance a donc un point de vue différent.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wot-wizard.duniter.org/&quot;&gt;https://wot-wizard.duniter.org/&lt;/a&gt; -&amp;gt; noeud privé&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wotwizard.coinduf.eu/&quot;&gt;https://wotwizard.coinduf.eu/&lt;/a&gt; -&amp;gt; duniter.coinduf.eu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;g1monit&quot;&gt;Ğ1monit&lt;/h3&gt;
&lt;p&gt;Ğ1monit est aussi un module Duniter, chaque instance présente les données de son noeud. Si ces données ne sont pas à jour, c&#39;est sûrement que le noeud est désynchronisé par rapport au reste de la blockchain.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://monit.g1.nordstrom.duniter.org/&quot;&gt;https://monit.g1.nordstrom.duniter.org/&lt;/a&gt; -&amp;gt; noeud privé&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;todo-wotmap-worldwotmap-carte-monnaie-libre-g1-stats&quot;&gt;TODO wotmap / worldwotmap / carte monnaie libre / g1-stats&lt;/h3&gt;
</description>
      </item>
      <item>
          <title>Présentation de Ğecko</title>
          <pubDate>Sat, 23 Oct 2021 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/gecko-presentation/</link>
          <guid>https://duniter.fr/blog/gecko-presentation/</guid>
          <description xml:base="https://duniter.fr/blog/gecko-presentation/">&lt;h2 id=&quot;contexte-actuel-du-projet-duniter&quot;&gt;Contexte actuel du projet Duniter&lt;/h2&gt;
&lt;p&gt;Le projet Duniter est entré dans une phase un peu particulière : alors que la toile de confiance continue de grandir (3594 membres à l&#39;heure où j&#39;écris ces mots), et la blockchain de s&#39;allonger (468661 blocs), l&#39;équipe Duniter réflechit au futur de la monnaie. Les perspectives d&#39;amélioration côté serveur apportées par l&#39;&lt;a href=&quot;https://duniter.fr/blog/oxydation-duniter/&quot;&gt;oxydation de duniter&lt;/a&gt; sont contrastées : d&#39;une part, les larges gains en efficacité observés nous encouragent à continuer ce chantier, d&#39;autre part, sa difficulté et le nombre très restreint de personnes actuellement capables d&#39;y contribuer nous font douter de sa faisabilité.&lt;/p&gt;
&lt;p&gt;À bien y réfléchir, une &lt;em&gt;refonte du protocole&lt;/em&gt; ainsi qu&#39;une &lt;em&gt;ré-écriture totale du logiciel&lt;/em&gt; seraient préférables au long terme. En effet, même en menant l&#39;oxydation jusqu&#39;au bout (~4-5 ans de travail au rythme actuel), il resterait de profonds problèmes structurels dans le protocole qui menacerait le passage à l&#39;échelle. Un ré-écriture serait quant à elle l&#39;occasion de mettre à profit l&#39;expérience engrangée sur les quatre premières années de fonctionnement de la monnaie sans chercher à se mettre en conformité avec des cas limites du protocole actuel. De plus, et se basant sur les progrès fait dans les dix dernières années dans le milieu de la blockchain, la durée de développement pourrait être réduite à ~2-3 ans. Nous aborderons ce sujet en détail dans un prochain article.&lt;/p&gt;
&lt;p&gt;Il nous reste donc encore deux ans pour continuer à faire grandir la communauté Ğ1 et développer ses outils. C&#39;est là qu&#39;intervient le projet Ğecko, le premier d&#39;une nouvelle génération de clients.&lt;/p&gt;
&lt;h2 id=&quot;objectifs-de-gecko&quot;&gt;Objectifs de Ğecko&lt;/h2&gt;
&lt;p&gt;Nous avons eu l&#39;idée de Ğecko en observant la difficulté à réaliser des transactions en Ğ1 lors d&#39;événements comme les Ğmarchés. En effet, l&#39;application Césium est lente pour plusieurs raisons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nécessité de rentrer le mot de passe complet pour s&#39;identifier&lt;/li&gt;
&lt;li&gt;technologie web (ionic) gourmande en ressources (mémoire, CPU)&lt;/li&gt;
&lt;li&gt;interface peu réactive car reposant sur une API vieillissante (BMA)&lt;/li&gt;
&lt;li&gt;risque de panne du noeud duniter / cesium+ sélectionné (client mono noeud)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Césium reste un bon client pour gérer son compte membre depuis un ordinateur, mais nous avons ressenti le besoin de construire un nouvel outil pour répondre à ces cas d&#39;usage.&lt;/p&gt;
&lt;h3 id=&quot;gestion-des-cles&quot;&gt;Gestion des clés&lt;/h3&gt;
&lt;p&gt;Nous nous sommes aperçu que laisser le choix du mot de passe à l&#39;utilisateur était une mauvaise idée, d&#39;une part pour les oublis et d&#39;autre part pour la faible sécurité. La méthode diceware recommandée restait compliquée à mettre en oeuvre pour l&#39;utilisateur et peu appliquée. Pour Ğecko, nous avons choisi une nouvelle méthode d&#39;authentification qui est à la fois plus robuste et plus simple d&#39;utilisation.
La clé privée est générée aléatoirement et stockée dans un fichier protégé par un code à six lettres aléatoire. En cas de perte du téléphone, l&#39;utilisateur peut regénérer sa clé privée à l&#39;aide d&#39;une phrase de restauration composée de 12 mots aléatoires dans la langue choisie.&lt;/p&gt;
&lt;p&gt;De plus, en utilisant les techniques de HDWallet (Hierarchical Deterministic Wallet), nous pouvons dériver plusieurs portefeuilles d&#39;une même clé privée, ce qui signifie un seul mot de passe à retenir, et une seule phrase de restauration à noter pour plusieurs comptes différents (par ex pro/perso).&lt;/p&gt;
&lt;div class=&quot;embed&quot;&gt;
    &lt;iframe src=&quot;https://tube.p2p.legal/videos/embed/098d6bdf-2684-41be-b290-10bdf6f15bd4&quot; allowfullscreen sandbox=&quot;allow-same-origin allow-scripts allow-popups&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;explication de la phrase de restauration et du mot de passe&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;technologie-native&quot;&gt;Technologie native&lt;/h3&gt;
&lt;p&gt;Pour atteindre de bonnes performances pour une faible utilisation de ressources machine, nous avons choisi le framework Flutter, qui permet de compiler le code de l&#39;application pour iOS, Android, et bureau tout en incluant des bibliothèques précompilées. Par exemple, la gestion de la cryptographie sera assurée par une bibliothèque Rust à part, réutilisée dans d&#39;autres clients. Cela permettra de partager les efforts de développements avec d&#39;autres projets.&lt;/p&gt;
&lt;h3 id=&quot;nouvelle-api-client&quot;&gt;Nouvelle API client&lt;/h3&gt;
&lt;p&gt;Ğecko se base sur GVA, la nouvelle API client des noeuds Duniter introduite dans l&#39;&lt;a href=&quot;https://duniter.fr/blog/oxydation-duniter/#gva&quot;&gt;article précédent&lt;/a&gt;. Cela permet de faire des requêtes HTTP uniques comportant toutes les données nécessaires plutôt que plusieurs requêtes distinctes comportant beaucoup d&#39;information superflue. Cela permet de diminuer largement le traffic réseau et de ramener la latence en dessous du seuil perceptible, même sur des connexions réseau modestes (3G). Nous essayons d&#39;imaginer des protocoles hors ligne, mais n&#39;avons pas encore de schéma en tête.&lt;/p&gt;
&lt;p&gt;Nous travaillons également sur une bibliothèque client multi-noeud qui permettrait de s&#39;affranchir des problèmes de noeud hors ligne ou désynchronisé.&lt;/p&gt;
&lt;h2 id=&quot;moyens-mis-en-oeuvre&quot;&gt;Moyens mis en oeuvre&lt;/h2&gt;
&lt;p&gt;Ğecko existe déjà à l&#39;état de preuve de concept fonctionnelle, mais nécessite beaucoup d&#39;heures de travail pour être amené à l&#39;état de production. Il nous reste à compléter l&#39;interface (restauration de compte, écran de paiement, gestion de portefeuilles, affichage de l&#39;historique, confirmation de paiement...) mais également à amener Duniter 1.9 en production (étendre le périmètre de GVA, tester sa cohérence avec l&#39;actuel, tester la robustesse...). Pour cela, nous avons cherché des financements en euro pour salarier nos développeurs, qui pourront ainsi consacrer bien plus de temps au projet, en comparaison du pur bénévolat.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Recherche universitaire</title>
          <pubDate>Wed, 02 Jun 2021 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/recherche-universitaire/</link>
          <guid>https://duniter.fr/wiki/contribuer/recherche-universitaire/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/recherche-universitaire/">&lt;h2 id=&quot;monnaie-libre-et-recherche-universitaire&quot;&gt;Monnaie libre et recherche universitaire&lt;/h2&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h3 id=&quot;publications&quot;&gt;Publications&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gensollen and Latapy, 2019&lt;/strong&gt;, &lt;em&gt;Do you trade with your friends or become friends with your trading partners? A case study in the G1 cryptocurrency&lt;/em&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://arxiv.org/abs/1911.10792&quot;&gt;https://arxiv.org/abs/1911.10792&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Siddarth &lt;em&gt;et al&lt;/em&gt;, 2020&lt;/strong&gt;, &lt;em&gt;Who Watches the Watchmen? A Review of Subjective Approaches for Sybil-resistance in Proof of Personhood Protocols&lt;/em&gt;, &lt;a rel=&quot;external&quot; href=&quot;http://arxiv.org/abs/2008.05300&quot;&gt;http://arxiv.org/abs/2008.05300&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Malafosse, 2020&lt;/strong&gt;, &lt;em&gt;La blockchain au service de la gouvernance des communs: Le cas de l’écosystème Ğ1 / Duniter&lt;/em&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://hal.archives-ouvertes.fr/hal-02952885&quot;&gt;https://hal.archives-ouvertes.fr/hal-02952885&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Malafosse, 2021&lt;/strong&gt;, &lt;em&gt;Ğ1 : la création monétaire comme communs&lt;/em&gt; &lt;a rel=&quot;external&quot; href=&quot;https://hal.archives-ouvertes.fr/hal-03335790&quot;&gt;https://hal.archives-ouvertes.fr/hal-03335790&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;universitaires&quot;&gt;Universitaires&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/contributeurs/matthieulatapy/&quot;&gt;Matthieu Latapy&lt;/a&gt;, directeur de recherche CNRS en mathématiques au LIP6&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/contributeurs/hugotrentesaux/&quot;&gt;Hugo Trentesaux&lt;/a&gt;, doctorant en neurosciences au LJP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;g1://pubkey:Hd9MaTHj7upQGsSq7MFjChVB1ctyw8JEg9mTQye3RQxR&quot;&gt;Maxime Malafosse&lt;/a&gt;, doctorant en économie LEST / CERGAM&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;g1://pubkey:HY2nJUyxpzyrwvaYEzjNtb93ZCzV3qGSoZfbFM18S7H4&quot;&gt;Lucas&lt;/a&gt;, ATER&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;sujets-potentiels&quot;&gt;Sujets potentiels&lt;/h3&gt;
&lt;p&gt;L&#39;écosystème Monnaie libre / Duniter / Ğ1 constitue une source de sujets intéressants à étudier pour l&#39;économie, les sciences sociales, les mathématiques ou l&#39;informatique. Voici une liste de sujets de recherche potentiels.&lt;/p&gt;
&lt;h4 id=&quot;theorie-relative-de-la-monnaie&quot;&gt;Théorie relative de la monnaie&lt;/h4&gt;
&lt;p&gt;La TRM nécessiterait un travail de formalisation et de preuve sous forme de théorèmes, ainsi que son instanciation dans Duniter. Cela peut être fait dans le cadre d&#39;une recherche sur les théories monétaires.&lt;/p&gt;
&lt;h4 id=&quot;monnaie-libre&quot;&gt;Monnaie libre&lt;/h4&gt;
&lt;p&gt;Des observations réalisées dans le cadre de la monnaie libre suggèrent que les règles de création monétaire ont un impact sur les comportements.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hypothèse : une création monétaire égalitaire encourage les comportements de coopération par rapport aux logiques de compétition. (&lt;a rel=&quot;external&quot; href=&quot;https://youtu.be/g7Z-gtx3K1o&quot;&gt;interview de Sybille Saint Girons&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Expérimentation : le jeu ğeconomicus montre un changement de comportement entre la phase monnaie libre et monnaie dette.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;toile-de-confiance&quot;&gt;Toile de confiance&lt;/h4&gt;
&lt;p&gt;Plusieurs concept nouveaux ont été introduits dans Duniter sans être éclairés par des papiers de recherche. Les règles de certifications ont été définies par des critères détaillés dans l&#39;article sur &lt;a href=&quot;https://duniter.fr/wiki/toile-de-confiance/la-toile-de-confiance-en-detail/&quot;&gt;la toile de confiance en détail&lt;/a&gt; mais sans garantie théorique sur les conséquences d&#39;une attaque de grande ampleur. D&#39;autre part, la toile de confiance sert de base à un système d&#39;identité numérique distribué. Cet objet est intéressant à étudier tant du point de vue théorique que de la mise en pratique dans des systèmes de vote, ou des calculs distribués.&lt;/p&gt;
&lt;h3 id=&quot;sources&quot;&gt;Sources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/t/projets-de-recherche-autour-de-la-g1/15470&quot;&gt;Projets de recherche autour de la Ğ1&lt;/a&gt; (forum)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr/t/projets-de-recherche-autour-de-la-g1/15470/13&quot;&gt;liste de pistes de collaborations avec le monde académique&lt;/a&gt; (forum)&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Oxydation de Duniter</title>
          <pubDate>Thu, 17 Dec 2020 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/oxydation-duniter/</link>
          <guid>https://duniter.fr/blog/oxydation-duniter/</guid>
          <description xml:base="https://duniter.fr/blog/oxydation-duniter/">&lt;h1 id=&quot;oxydation-de-duniter&quot;&gt;Oxydation de Duniter&lt;/h1&gt;
&lt;p&gt;La publication de la version 1.8 de Duniter apporte de gros changements par rapport aux précédentes avec entre autres l&#39;apparition des premiers modules en Rust (&lt;a href=&quot;https://duniter.fr/blog/duniter-v1-8/&quot;&gt;cf article dédié&lt;/a&gt;). C&#39;est le premier pas d&#39;un processus à long terme visant à migrer Duniter en Rust : l&#39;oxydation. Le langage Rust offre en effet des garanties de sécurité et de performances dont l&#39;effet se ressent largement à l&#39;utilisation. Duniter 1.9 est en cours de développement et pousse l&#39;oxydation encore plus loin.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-le-mot-oxydation&quot;&gt;Pourquoi le mot &quot;oxydation&quot; ?&lt;/h2&gt;
&lt;p&gt;Oxydation vient de &lt;a rel=&quot;external&quot; href=&quot;https://wiki.mozilla.org/Oxidation&quot;&gt;oxidation&lt;/a&gt;, un mot utilisé par mozilla pour décrire le processus d&#39;intégration de code Rust dans le logiciel Firefox. C&#39;est un jeu de mot avec &lt;em&gt;rust&lt;/em&gt; qui signifie &lt;em&gt;rouille&lt;/em&gt;, littéralement l&#39;&lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Rouille_(oxyde)&quot;&gt;oxydation du métal&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;changement-d-architecture&quot;&gt;Changement d&#39;architecture&lt;/h2&gt;
&lt;p&gt;Rust facilite une architecture modulaire, elle-même facilitant grandement la maintenance à long terme et la réutilisation du code. Pour des raisons de performance, Duniter utilisait &lt;em&gt;NaClb&lt;/em&gt; et &lt;em&gt;Wotb&lt;/em&gt;, des bibliothèques C++ servant respectivement aux fonctions cryptographiques et aux calculs de graphes concernant la toile de confiance. En version 1.8, ces bibliothèques ont été remplacées par leur équivalent Rust déjà développées dans le projet Dunitrust (&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/rust/duniter-rs&quot;&gt;archive&lt;/a&gt;). Duniter stockait la blockchain dans une base de données LevelDb qui posait régulièrement des problèmes de corruption de données. La version 1.9 entreprend de se débarasser progressivement de LevelDb et de faciliter le changement d&#39;un système de base de données à un autre grâce à la couche d&#39;abstraction &lt;code&gt;kv_typed&lt;/code&gt;. Cela permet entre autres de choisir une base de données optimisée en fonction de son contexte d&#39;utilisation : lecture intensive, écriture intensive, ou équilibrée.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/oxydation_duniter.svg&quot; alt=&quot;schema&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;nouvelles-fonctionnalites&quot;&gt;Nouvelles fonctionnalités&lt;/h2&gt;
&lt;h3 id=&quot;gva&quot;&gt;GVA&lt;/h3&gt;
&lt;p&gt;Une nouvelle fonctionnalité largement attendue est l&#39;apparition de GVA (&lt;em&gt;GraphQL Verification API&lt;/em&gt;), une nouvelle API client. Cette API permet de réaliser des requêtes simples ou complexes, mais toujours précises, c&#39;est-à-dire que seul ce qui est nécessaire est demandé. Elle gère les souscriptions aux événements, par exemple la modification du nombre de membre ou du solde d&#39;un compte. Vous pouvez voir ci-dessous une vidéo d&#39;introduction pour effectuer des requêtes à travers l&#39;interface web &lt;a rel=&quot;external&quot; href=&quot;https://g1.librelois.fr/gva/playground&quot;&gt;https://g1.librelois.fr/gva/playground&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;embed&quot;&gt;
    &lt;iframe src=&quot;https://tube.p2p.legal/videos/embed/fbe29063-14fd-4a99-89fc-0893a85bfb25&quot; allowfullscreen sandbox=&quot;allow-same-origin allow-scripts allow-popups&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Cette API va permettre l&#39;émergence de nouveaux clients et l&#39;amélioration de Césium notamment en terme de rapidité.&lt;/p&gt;
&lt;h3 id=&quot;dex&quot;&gt;Dex&lt;/h3&gt;
&lt;p&gt;Dex (&lt;em&gt;Database explorer&lt;/em&gt;) est un utilitaire qui permet d&#39;explorer les bases de données de Duniter lorsque le serveur est éteint.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Migration du site francophone de Duniter</title>
          <pubDate>Sun, 26 Jul 2020 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/migration-site-duniter/</link>
          <guid>https://duniter.fr/blog/migration-site-duniter/</guid>
          <description xml:base="https://duniter.fr/blog/migration-site-duniter/">&lt;h1 id=&quot;migration-du-site-duniter-org&quot;&gt;Migration du site duniter.org&lt;/h1&gt;
&lt;p&gt;Le site de duniter a connu plusieurs évolutions successives et garde aujourd&#39;hui une trace de cette longue histoire. Tout d&#39;abord, il s&#39;agissait de OpenUDC et Ucoin (&lt;strong&gt;openudc.org&lt;/strong&gt; et &lt;strong&gt;ucoin.org&lt;/strong&gt;). Les articles les plus anciens (2015-2016) témoingnent de cette époque.&lt;/p&gt;
&lt;p&gt;En avril 2016 &lt;a href=&quot;https://duniter.fr/blog/ucoin-rename-duniter/&quot;&gt;ucoin devient duniter&lt;/a&gt; et &lt;a href=&quot;https://duniter.fr/blog/duniter-sera-aux-rml7/&quot;&gt;participe aux rml7&lt;/a&gt;. La monnaie ğ1 est officiellement lancée le &lt;a href=&quot;https://duniter.fr/blog/g1-go/&quot;&gt;8 mars 2017&lt;/a&gt; et le site connait &lt;a href=&quot;https://duniter.fr/blog/refonte-du-site/&quot;&gt;une refonte&lt;/a&gt; dans la foulée en Pelican.&lt;/p&gt;
&lt;p&gt;Il est traduit en anglais le &lt;a href=&quot;https://duniter.fr/blog/duniter-org-en/&quot;&gt;19 juin 2017&lt;/a&gt; en tant que site indépendant afin de toucher un public anglophone.&lt;/p&gt;
&lt;p&gt;La version francophone du site fait peau neuve en &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/refonte-site-web-en-francais-de-duniter/6662&quot;&gt;décembre 2019&lt;/a&gt; grâce aux talents de webdesign de &lt;a rel=&quot;external&quot; href=&quot;https://borispaing.fr/&quot;&gt;Boris&lt;/a&gt;. Il en ressort des pages d&#39;accueil bien plus lisibles et &quot;grand public&quot;.&lt;/p&gt;
&lt;p&gt;Aujourd&#39;hui je (Hugo Trentesaux) me suis proposé pour prendre la relève du site qui n&#39;avait plus de mainteneur. Le site originel était en effet devenu difficile à maintenir et fonctionnait avec un version de Pelican très ancienne. J&#39;ai donc réalisé une migration en Zola qui m&#39;a donné l&#39;occasion de ré-écrire un thème plus adapté tout en conservant les améliorations en matière de design.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/screenshot_duniter.org_2020-07.png&quot; alt=&quot;screenshot&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Capture d&#39;écran du nouveau thème montant un menu déroulant facilitant la navigation&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La palette de couleur du site est choisie pour rappeler les couleurs du logo de duniter. Une barre de navigation facilite la navigation dans le site. Certaines fonctionnalités cassées sont revues et une &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/site-web-de-duniter/7482/2&quot;&gt;feuille de route&lt;/a&gt; est adoptée.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.8</title>
          <pubDate>Fri, 12 Jun 2020 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v1-8/</link>
          <guid>https://duniter.fr/blog/duniter-v1-8/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v1-8/">&lt;h1 id=&quot;duniter-version-1-8&quot;&gt;Duniter version 1.8&lt;/h1&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;Cet article est une copie du sujet &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/nouvelle-version-stable-de-duniter-v1-8-0/7377&quot;&gt;publié sur le forum&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;telecharger-duniter-1-8-variante-server-ou-desktop&quot;&gt;Télécharger Duniter 1.8 variante &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases/v1.8.0&quot;&gt;Server&lt;/a&gt; ou &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases/v1.8.1&quot;&gt;Desktop&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;L&#39;image docker est disponible sur dockerhub : &lt;a rel=&quot;external&quot; href=&quot;https://hub.docker.com/layers/duniter/duniter/v1.8.0/images/sha256-002858836321149dce40598b81425a6aa5120bbfbc879a72152b7841f9741a60&quot;&gt;duniter/duniter:v1.8.0&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;note note-block note-warning&quot;&gt;
&lt;p&gt;&lt;strong&gt;Cette version nécessite une réinitialisation manuelle de la blockchain&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;procedure-de-mise-a-jour&quot;&gt;Procédure de mise à jour&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Télécharger et installer la nouvelle version&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stopper Duniter&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Exécuter les commandes suivantes :&lt;/p&gt;
&lt;p&gt;rm -rf ~/.config/duniter/duniter_default/data/
rm ~/.config/duniter/duniter_default/wotb.bin&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Selon votre variante :
a. Desktop: relancer Duniter, vous serez alors obligé de refaire une synchronisation.
b: Server: refaire une synchronisation (duniter sync HOST:PORT).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Remplacez HOST et PORT par le nom d&#39;hôte et le port du nœud de confiance sur lequel vous souhaitez vous synchroniser.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;dois-je-installer-cette-version&quot;&gt;Dois-je installer cette version ?&lt;/h2&gt;
&lt;p&gt;Oui, elle corrige de nombreuses vulnérabilités  de sécurité et apporte une amélioration sensible des performances de la preuve de travail (mécanisme de forgeage des blocs).&lt;/p&gt;
&lt;p&gt;@Blacksmith &lt;strong&gt;tous les membres forgerons sont invités à se mettre à jour dès que possible.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;quels-changements&quot;&gt;Quels changements ?&lt;/h2&gt;
&lt;p&gt;Cette nouvelle version majeure de Duniter cumule beaucoup de petites modifications, dont certaines ont été réalisées il y a plus d&#39;un an déjà (notamment le passage à nodejs v10); elle marque également le commencement d&#39;une &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/duniteroxyde-oxydation-de-duniter/7075&quot;&gt;&lt;strong&gt;migration progressive de Duniter en Rust&lt;/strong&gt;&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Changements principaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migration sous nodejs v10 @cgeek et @Moul&lt;/li&gt;
&lt;li&gt;Migration en Rust de module wotb @elois&lt;/li&gt;
&lt;li&gt;Migration en Rust de toutes les fonctionnalités de cryptographie (sauf scrypt) @elois&lt;/li&gt;
&lt;li&gt;Remplacement vielles dépendances qui présentaient des vulnérabilités de sécurité @elois&lt;/li&gt;
&lt;li&gt;Auto-complétion bash  @vit&lt;/li&gt;
&lt;li&gt;Amélioration du process de build et allègement des paquets @sveyret&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette version inclut de très nombreux autres petits changements, je vous invite à lire le CHANGELOG pour plus de détails :&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/blob/dev/CHANGELOG.md#v180-12th-march-2020&quot;&gt;https://git.duniter.org/nodes/typescript/duniter/-/blob/dev/CHANGELOG.md#v180-12th-march-2020&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Indemnisation des développeurs (sept − nov 2019)</title>
          <pubDate>Tue, 27 Aug 2019 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/remuneration-2019-09/</link>
          <guid>https://duniter.fr/blog/remuneration-2019-09/</guid>
          <description xml:base="https://duniter.fr/blog/remuneration-2019-09/">&lt;h1 id=&quot;indemnisation-des-developpeurs-sept-nov-2019&quot;&gt;Indemnisation des développeurs (sept − nov 2019)&lt;/h1&gt;
&lt;h2 id=&quot;changements-depuis-le-precedent-cycle&quot;&gt;Changements depuis le précédent cycle&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ajout de Vivakvo, Boris_Paing, Thatoo, Matograine et jfocher&lt;/li&gt;
&lt;li&gt;Retrait de Jytou&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;remuneration&quot;&gt;Rémunération&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Valeur : 20 DU Ğ1&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;contributeurs-remuneres&quot;&gt;Contributeurs rémunérés&lt;/h2&gt;
&lt;h3 id=&quot;noeuds&quot;&gt;Nœuds&lt;/h3&gt;
&lt;h4 id=&quot;duniter&quot;&gt;Duniter&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;@cgeek : développeur Duniter, mainteneur de la Ğ1, adminsys serveurs, Remuniter, Ğannonce, monit&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;dunitrust&quot;&gt;Dunitrust&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;@elois : développeur Dunitrust&lt;/li&gt;
&lt;li&gt;@ji_emme : développeur Dunitrust&lt;/li&gt;
&lt;li&gt;@jsprenger : développeur Dunitrust&lt;/li&gt;
&lt;li&gt;@HugoTrentesaux : développeur Dunitrust, fusion des dépôts des sites web avec le système d’internationalisation de Pelican&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;juniter&quot;&gt;Juniter&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;@junidev : &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Bertrandbenj/juniter&quot;&gt;Juniter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;clients&quot;&gt;Clients&lt;/h3&gt;
&lt;h4 id=&quot;cesium&quot;&gt;Césium&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;@kimamila : développeur Césium, Césium +, Ğchange&lt;/li&gt;
&lt;li&gt;@bpresles : développeur Césium et Duniter&lt;/li&gt;
&lt;li&gt;@Boris_Paing : UX Cesium&lt;/li&gt;
&lt;li&gt;@Vivakvo : traduction de Césium et la licence Ğ1 en espéranto&lt;/li&gt;
&lt;li&gt;@Thatoo : mainteneur application Césium pour YunoHost&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;python&quot;&gt;Python&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;@Moul : développeur Silkaj, DuniterPy, Duniter, paquets YunoHost, AdminSys&lt;/li&gt;
&lt;li&gt;@matograine : développeur Silkaj et &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/matograine/g1-cotis&quot;&gt;Ğ1cotis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@vit : développeur DuniterPy et nouvelle API cliente GVA&lt;/li&gt;
&lt;li&gt;@jonas: Debian developer, Silkaj packaging in Debian&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;ios&quot;&gt;iOS&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;@jfoucher : développeur &lt;a rel=&quot;external&quot; href=&quot;https://github.com/jfoucher/gios&quot;&gt;Gios&lt;/a&gt; client iOS&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;outils&quot;&gt;Outils&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@tuxmain : développeur de ĞMixer, &lt;a rel=&quot;external&quot; href=&quot;https://zettascript.org/tux/g1/worldwotmap.html&quot;&gt;WorldWotMap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@1000i100 : développeur Gvu, Gsper, Dunikey, g1lien, Tipăy, autŎtip, adminsys GitLab&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;wot&quot;&gt;WoT&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@gerard94 : développeur WotWizard, implémentation en Go&lt;/li&gt;
&lt;li&gt;@Paidge : développeur WotMap&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;adminsys&quot;&gt;AdminSys&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@Inso : adminsys, développeur Sakia et DuniterPy&lt;/li&gt;
&lt;li&gt;@poka : adminsys&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;dons-financements&quot;&gt;Dons − Financements&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://moul.re/cesium/#/app/wot/78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8/stats&quot;&gt;À ce rythme le projet a une visibilité sur deux mois&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le projet est en réflexion pour recevoir plus de fonds pour les futurs développements.&lt;/p&gt;
&lt;p&gt;Sujet à développer.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.7</title>
          <pubDate>Tue, 08 Jan 2019 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v1-7/</link>
          <guid>https://duniter.fr/blog/duniter-v1-7/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v1-7/">&lt;h1 id=&quot;duniter-version-1-7&quot;&gt;Duniter version 1.7&lt;/h1&gt;
&lt;p&gt;La version 1.7 de Duniter est désormais &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases&quot;&gt;disponible au téléchargement&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;arrivee-du-renouvellement-de-certifications&quot;&gt;Arrivée du renouvellement de certifications&lt;/h2&gt;
&lt;p&gt;Cette version est une avancée majeure dans la stabilité long terme de la Ğ1, puisque &lt;strong&gt;cette version de Duniter active le protocole v11&lt;/strong&gt; qui autorise le renouvellemet anticipé des certifications !&lt;/p&gt;
&lt;h3 id=&quot;qu-est-ce-que-ca-apporte&quot;&gt;Qu&#39;est-ce que ça apporte ?&lt;/h3&gt;
&lt;p&gt;Concrètement, en l&#39;état actuel de la Ğ1 en protocole v10, si vous avez émis une certification envers quelqu&#39;un alors vous devez attendre que celle-ci expire au bout de 2 ans avant de pouvoir la rejouer.&lt;/p&gt;
&lt;p&gt;Cette règle est dommageable car elle empêche de certifier en continu la même personne, que pourtant l&#39;on connaît bien. Au bout de 2 ans, cette ancienne règle peut créer des situations où le certifié perd son statut de membre temporairement, et donc ne produit plus de Ğ1 et ne peut plus certifier lui-même.&lt;/p&gt;
&lt;p&gt;Mais grâce au protocole v11, il devient désormais possible de renouveller une certification &lt;em&gt;dès 2 mois après son émission&lt;/em&gt;. Ainsi, si vous certifiez une personne le 1er janvier 2019, vous pourrez reconduire cette certification dès le 1er mars 2019. Cette reconduction repoussera d&#39;autant (2 mois dans ce cas) la durée de validité de la certification initiale.&lt;/p&gt;
&lt;p&gt;Si vous renouvelez au bout de 6 mois, la reconduction sera de 6 mois, etc.&lt;/p&gt;
&lt;h3 id=&quot;comment-activer-le-renouvellement&quot;&gt;Comment activer le renouvellement ?&lt;/h3&gt;
&lt;p&gt;Actuellement, la Ğ1 est encore en protocole v10. Actuellement, près de 50% des membres calculants du réseau ont déjà mis à jour leur nœud par anticipation : à 60%, le réseau basculera la Ğ1 en protocole v11 !&lt;/p&gt;
&lt;p&gt;Il ne reste donc plus que la participation de quelques membres pour officialiser cette bascule !&lt;/p&gt;
&lt;p&gt;Pour cela, il vous suffit donc de mettre à jour votre nœud &amp;lt;= v1.6.27 en une version plus récente :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;soit en &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/tags/v1.7.9&quot;&gt;version 1.7.9&lt;/a&gt;, compatible avec le protocole v11, apporte aussi quelques nouveautés !&lt;/li&gt;
&lt;li&gt;soit en &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/tags/v1.6.29&quot;&gt;version 1.6.29&lt;/a&gt;, ancienne version rendue aussi compatible avec le protocole v11&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Attention ! Si vous optez pour la version 1.7, &lt;strong&gt;vous devrez resynchroniser votre nœud&lt;/strong&gt;. En effet, la structure de donnée a changé. Duniter ne verra plus aucune donnée au premier démarrage en 1.7.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;changements&quot;&gt;Changements&lt;/h2&gt;
&lt;p&gt;La version 1.7 de Duniter apporte aussi d&#39;autres améliorations, notamment :&lt;/p&gt;
&lt;h3 id=&quot;synchro-plus-rapide&quot;&gt;Synchro plus rapide&lt;/h3&gt;
&lt;p&gt;Essayez ! Une machine correcte synchronise en moins de 10 minutes.&lt;/p&gt;
&lt;p&gt;En 1.6 un Raspberry PI 3 pouvait prendre une dizaine d&#39;heure à se synchroniser sur la Ğ1, il ne met plus que 30 minutes en 1.7.&lt;/p&gt;
&lt;h3 id=&quot;performances-accrues&quot;&gt;Performances accrues&lt;/h3&gt;
&lt;p&gt;Du reste, Duniter 1.7 améliore ses performances afin de &lt;strong&gt;gérer la montée en puissance de la Ğ1 qui gère désormais plus de 1500 membres&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour rappel, quelques informations de volumétrie de la Ğ1 au 24/11/2018 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1,582 devenus membres&lt;/li&gt;
&lt;li&gt;13,719 certifications&lt;/li&gt;
&lt;li&gt;354,236 sources de monnaie&lt;/li&gt;
&lt;li&gt;15,211 transactions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;amelioration-de-la-qualite&quot;&gt;Amélioration de la qualité&lt;/h3&gt;
&lt;p&gt;En interne, le logiciel connaît des refontes, abstractions, élagage de code afin de s&#39;alléger mais surtout de renforcer sa qualité et s&#39;assurer de son bon fonctionnement de version en version.&lt;/p&gt;
&lt;p&gt;Également, ces améliorations préparent le terrain pour l&#39;arrivée d&#39;une nouvelle interface graphique, bien que celle-ci n&#39;en soit encore qu&#39;au stade de prototype.&lt;/p&gt;
&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning&quot;&gt;
Resynchronisation obligatoire.
&lt;/div&gt;
&lt;h2 id=&quot;compatibilite&quot;&gt;Compatibilité&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning&quot;&gt;
Fait évoluer la Ğ1 en protocole v11 !
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mettre-a-jour-sa-version&quot;&gt;Mettre à jour sa version&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lien pour &lt;a href=&quot;https://duniter.fr/wiki/doc/installer/&quot;&gt;installer la nouvelle version&lt;/a&gt; depuis un poste vierge&lt;/li&gt;
&lt;li&gt;Lien pour &lt;a href=&quot;https://duniter.fr/wiki/doc/mettre-a-jour/&quot;&gt;mettre à jour vers la nouvelle version&lt;/a&gt; depuis une installation existante&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Indemnisation des développeurs (déc 2018 – fév 2019)</title>
          <pubDate>Fri, 30 Nov 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/remuneration-2018-12/</link>
          <guid>https://duniter.fr/blog/remuneration-2018-12/</guid>
          <description xml:base="https://duniter.fr/blog/remuneration-2018-12/">&lt;h1 id=&quot;indemnisation-des-developpeurs-dec-2018-fev-2019&quot;&gt;Indemnisation des développeurs (déc 2018 – fév 2019)&lt;/h1&gt;
&lt;p&gt;Voici les détails de rémunérations et paiements pour le prochain cycle de trois mois qui ont été décidés collectivement :&lt;/p&gt;
&lt;h2 id=&quot;remuneration&quot;&gt;Rémunération&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Valeur : 20 DU Ğ1&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;contributeurs-remuneres&quot;&gt;Contributeurs rémunérés&lt;/h2&gt;
&lt;h3 id=&quot;noeuds&quot;&gt;Nœuds&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@cgeek : développeur Duniter, mainteneur de la Ğ1, adminsys serveurs, Remuniter, Ğannonce&lt;/li&gt;
&lt;li&gt;@jytou : releases ARM de Duniter, tests de charge tx sur Ğ1-test avec &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/transaction-generator-generateur-de-transactions/4769&quot;&gt;tgen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@elois : développeur Durs, monit&lt;/li&gt;
&lt;li&gt;@junidev : &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Bertrandbenj/juniter&quot;&gt;Juniter&lt;/a&gt; – implémentation du protocole Duniter en Java.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;clients&quot;&gt;Clients&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@kimamila : développeur Césium, Césium +, Ğchange&lt;/li&gt;
&lt;li&gt;@Inso : développeur Sakia et DuniterPy&lt;/li&gt;
&lt;li&gt;@vit : développeur DuniterPy et nouvelle API cliente GVA&lt;/li&gt;
&lt;li&gt;@Moul : développeur Silkaj, adminsys serveurs : sites web, serveur Prosody, forums, mainteneur duniter_ynh&lt;/li&gt;
&lt;li&gt;@Cebash : développeur Silkaj&lt;/li&gt;
&lt;li&gt;@gerard94 : développeur WotWizard, implementation en Go&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;wot&quot;&gt;Wot&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@Paidge : développeur WotMap&lt;/li&gt;
&lt;li&gt;@tuxmain : développeur de &lt;a rel=&quot;external&quot; href=&quot;https://zettascript.org/tux/g1/worldwotmap.html&quot;&gt;WorldWotMap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;autres&quot;&gt;Autres&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;@1000i100 : développeur Gvu, Gsper, Dunikey, g1lien, Tipăy, autŎtip, adminsys GitLab&lt;/li&gt;
&lt;li&gt;@HugoTrentesaux : fusion des dépôts des sites web, utilisation système d’internationalisation de Pelican&lt;/li&gt;
&lt;li&gt;@thomasbromehead : traductions anglaises des articles du site web, développeur &lt;a rel=&quot;external&quot; href=&quot;https://github.com/thomasbromehead/g1lit/&quot;&gt;g1lit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Cross-compiler Dunitrust pour arm</title>
          <pubDate>Sat, 09 Jun 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-rust/cross-compilation-pour-arm/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-rust/cross-compilation-pour-arm/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-rust/cross-compilation-pour-arm/">&lt;h1 id=&quot;cross-compiler-dunitrust-pour-arm&quot;&gt;Cross-compiler Dunitrust pour arm&lt;/h1&gt;
&lt;p&gt;Il y a deux Méthodes différentes pour cross-compiler Dunistrust pour arm :&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;p&gt;La 1ère méthode a l&#39;inconvénient de ne pas bénéficier des optimisations  de l&#39;architecture armv7. Elle est toutefois plus propre, c&#39;est la méthode que j&#39;adopterai pour les livrables officiels.&lt;/p&gt;
&lt;p&gt;La 2ème méthode à l&#39;inconvénient de compiler Dunitrust sans OpenSSL, le noeud duniter qui en résulte ne pourra donc cas conatcter des endpoints qui exigent une couche TLS.&lt;/p&gt;
&lt;h2 id=&quot;methode-1-cross-compiler-proprement-pour-armv6-via-docker&quot;&gt;Méthode 1 : Cross-compiler proprement pour armv6 via docker&lt;/h2&gt;
&lt;p&gt;Tout d&#39;abord installez docker, pour cela suivez la documentation officielle :&lt;/p&gt;
&lt;p&gt;Ensuite cloner le dépot Dunitrust puis placez vous a sa racine :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clone https://git.duniter.org/nodes/rust/duniter-rs.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter-rs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enfin lancez l&#39;image docker qui se chargera de compiler Dunistrust pour armv6 :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; docker run&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -it --rm -v&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;pwd&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;:/source dlecan/rust-crosscompiler-arm:stable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A noter que cette image docker permet de compiler n&#39;importe quel programme rust, elle n&#39;est pas spécifique a Duniter.&lt;br /&gt;
Vous pouvez retrouver les sources de cette image et le manuel expliquant les différentes options sur le dépot github : https://github.com/dlecan/rust-crosscompiler-arm&lt;/p&gt;
&lt;p&gt;Une fois la compilation terminée, votre binaire final est le fichier &lt;code&gt;durs&lt;/code&gt; qui se trouve dans &lt;code&gt;target/arm-unknown-linux-gnueabihf/release&lt;/code&gt;.&lt;br /&gt;
C&#39;est un &quot;binaire tout en un&quot; vous pouvez le copier n&#39;importe ou sur votre raspberry pi puis vous n&#39;avez plus qu&#39;a l&#39;éxécuter dans un terminal.&lt;/p&gt;
&lt;h2 id=&quot;methode-2-cross-compiler-manuellement-pour-armv7&quot;&gt;Méthode 2 : Cross-compiler manuellement pour armv7&lt;/h2&gt;
&lt;p&gt;Fonctionne sur ubuntu 16.04.
Vous devez avoir rust d&#39;installé sur votre machine, si tel n&#39;est pas le cas installez Rust en une seule ligne de commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; https://sh.rustup.rs&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -sSf&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Une fois que vous avez Rust, ajoutez la toolchain arm :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rustup&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; target add armv7-unknown-linux-gnueabihf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Installez les paquets debian suivants :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install gcc-4.7-multilib-arm-linux-gnueabihf crossbuild-essential-armhf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Indiquez a cargo quel compilateur il doit utiliser lorsqu&#39;il compilera avec la toolchain arm, pour cela créez le fichier &lt;code&gt;~/.cargo/config&lt;/code&gt; et collez y le contenu suivant :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[target.armv7-unknown-linux-gnueabihf]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;linker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; = &amp;quot;arm-linux-gnueabihf-gcc-4.7&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rendez vous a la racine du dépot de Dunistrust puis compilez avec la toolchain arm :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter-rs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cargo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; build&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --target=armv7-unknown-linux-gnueabihf --no-default-features --release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si votre terminal vous dit que la commande &lt;code&gt;cargo&lt;/code&gt; n&#39;existe pas, c&#39;est que vous devez ajouter le chemin &lt;code&gt;~/.cargo/bin&lt;/code&gt; à votre variable d&#39;environnement &lt;code&gt;PATH&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;/.cargo/bin:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;$PATH&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Explication des options de la commande de compilation :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;target : indique a cargo la toolchain avec laquelle compiler.&lt;/li&gt;
&lt;li&gt;no-default-features : indique a cargo de ne pas inclure les features optionelles, cela permet nottament de ne pas inclure OpenSSL qui est très difficile à cross-compiler. (OpenSSl est loin d&#39;être indispensable, ça seule utilitée est de permettre a WS2P Privé de contacter des endpoints WS2P en https).&lt;/li&gt;
&lt;li&gt;release :  Permet de compiler en mode release, c&#39;est a dire avec les optimisations de code et sans les points d&#39;entrée nécessaire à un déboggeur. SI vous omettez cette option, cargo compilera en mode debug, c&#39;est adire sans optimisation de code et avec les points d&#39;entrée permetant d&#39;utiliser un déboggeur. La compilation en mode debug est plus rapide mais le binaire final est beaucoup plus gros et duniter beaucoup plus lent, a n&#39;utiliser que pour débugger donc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Votre binaire final est le fichier &lt;code&gt;durs&lt;/code&gt; qui se trouve dans &lt;code&gt;target/armv7-unknown-linux-gnueabihf/release&lt;/code&gt;. C&#39;est un &quot;binaire tout en un&quot; vous pouvez le copier n&#39;importe ou sur votre raspberry pi puis vous n&#39;avez plus qu&#39;a l&#39;éxécuter dans un terminal.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Livraisons</title>
          <pubDate>Sat, 02 Jun 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/livraisons/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/livraisons/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/livraisons/">&lt;h1 id=&quot;livraisons&quot;&gt;Livraisons&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Cette page est un guide à destination des développeurs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Duniter est livré sous la forme de différents binaires pour les environnements Linux et Windows.&lt;/p&gt;
&lt;p&gt;La réalisation de ces livrables ainsi que leur mise à disposition est :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Totalement automatisée pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Duniter Desktop (.deb et archive tar.gz)&lt;/li&gt;
&lt;li&gt;Duniter Server (.deb)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Partiellement automatisée pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Duniter Desktop Windows (.exe)&lt;/li&gt;
&lt;li&gt;Duniter Server ARM (.deb)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;livrables-automatises&quot;&gt;Livrables automatisés&lt;/h2&gt;
&lt;p&gt;Produire les livrables de Duniter Desktop et Duniter Server pour Linux (hors ARM) s&#39;effectue depuis le code source de Duniter à l&#39;aide du script :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;./release/new_version.sh&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1.6.24&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remplacer &lt;code&gt;1.6.24&lt;/code&gt; par la version à produire.&lt;/p&gt;
&lt;p&gt;Puis pousser le tag sur le dépôt GitLab :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; push origin&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --tags&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans les pipelines GitLab, une action manuelle de packaging sera disponible une fois les tests passés.&lt;/p&gt;
&lt;h2 id=&quot;livrables-semi-automatises&quot;&gt;Livrables semi-automatisés&lt;/h2&gt;
&lt;p&gt;Ces livrables possèdent un script pour produire le livrable, mais nécessitent un téléversement manuel sur le serveur GitLab pour être mis à disposition des utilisateurs.&lt;/p&gt;
&lt;h3 id=&quot;duniter-server-arm&quot;&gt;Duniter Server ARM&lt;/h3&gt;
&lt;p&gt;Suivre le tutoriel suivant : &lt;a rel=&quot;external&quot; href=&quot;https://duniter.org/wiki/duniter/create_arm_release/&quot;&gt;https://duniter.org/wiki/duniter/create_arm_release/&lt;/a&gt; (anglais)&lt;/p&gt;
&lt;h3 id=&quot;duniter-desktop-windows&quot;&gt;Duniter Desktop Windows&lt;/h3&gt;
&lt;p&gt;Produire ce livrable requiert les conditions suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disposer d&#39;une machine Linux avec :
&lt;ul&gt;
&lt;li&gt;4Go de RAM minimum&lt;/li&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;Node.js v6+&lt;/li&gt;
&lt;li&gt;VirtualBox (5.1)&lt;/li&gt;
&lt;li&gt;Vagrant (1.8.7)&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Yarn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;vagrant&quot;&gt;Vagrant&lt;/h4&gt;
&lt;p&gt;Après avoir installé &lt;code&gt;vagrant&lt;/code&gt; (version 1.9.8), il sera nécessaire d&#39;installer le plugin &lt;code&gt;winrm&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;vagrant&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; plugin install winrm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;vagrant&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; plugin install winrm-fs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;lancer-le-build&quot;&gt;Lancer le build&lt;/h4&gt;
&lt;p&gt;Le script pour réaliser le build Windows est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;./release/scripts/build.sh&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; make win&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1.6.24&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remplacer &lt;code&gt;1.6.24&lt;/code&gt; par la version à produire.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>L’écosystème logiciel de Duniter</title>
          <pubDate>Tue, 15 May 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/ecosysteme-logiciel-duniter/</link>
          <guid>https://duniter.fr/wiki/contribuer/ecosysteme-logiciel-duniter/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/ecosysteme-logiciel-duniter/">&lt;h1 id=&quot;l-ecosysteme-logiciel-de-duniter&quot;&gt;L’écosystème logiciel de Duniter&lt;/h1&gt;
&lt;p&gt;Nous allons ici vous présenter l&#39;écosystème logiciel de Duniter.&lt;/p&gt;
&lt;p&gt;Outre les logiciels historiques, vous découvrirez aussi des projets moins connus mais tout aussi fondamentaux pour l&#39;avenir de Duniter.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;topologie-du-reseau&quot;&gt;Topologie du réseau&lt;/h2&gt;
&lt;p&gt;Le réseau Duniter est un réseau pair à pair (P2P). Techniquement, ce type de réseau signifie qu&#39;il n&#39;y a pas de serveur central. Ceux-ci sont répartis, n&#39;importe qui peut démarrer un nouveau nœud et se connecter au réseau. Cependant, à la différence de bitcoin, il n&#39;existe pas de nœud dit &quot;wallet&quot; dans Duniter. Deux objectifs distincts sont définis actuellement entre les nœuds serveurs et les nœuds clients :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les nœuds serveurs ont pour objectif de faire avancer la chaîne de blocs afin de valider les transactions, faire évoluer la toile de confiance.&lt;/li&gt;
&lt;li&gt;Les nœuds clients permettent aux utilisateurs du réseau de se connecter aux nœuds serveurs afin de vérifier l&#39;état des soldes, des certifications, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y a donc deux couches dans le réseau Duniter : les serveurs, qui se synchronisent entre eux via la blockchain, et les clients, situés en périphérie, et qui se connecte aux nœuds serveurs.&lt;/p&gt;
&lt;p&gt;L&#39;exécution de nœuds serveur est anonyme. Cependant, sans associer le nœud à une identité, celui-ci ne peut pas calculer de bloc : il se comporte en simple miroir de la chaîne de blocs. Une fois associé à une identité membre, il peut participer au calcul de blocs sur la chaîne.&lt;/p&gt;
&lt;h2 id=&quot;noeuds-serveurs&quot;&gt;Nœuds serveurs&lt;/h2&gt;
&lt;p&gt;Il n&#39;existe dans Duniter qu&#39;une seule implémentation des nœuds serveurs à l&#39;heure actuelle : duniter-ts. Il est écrit en &lt;a rel=&quot;external&quot; href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;, un langage orienté-objet et typé, qui est transpilé en JavaScript. Ce langage offre l&#39;avantage de la robustesse des langages typés tout en offrant l&#39;agilité et la vitesse de développement de JavaScript.&lt;/p&gt;
&lt;p&gt;Duniter-ts est un nœud serveur qui est configurable en ligne de commande. Il est capable d&#39;automatiquement se connecter et se synchroniser au réseau, y compris derrière un NAT. Pour en simplifier l&#39;utilisation, un plugin, Duniter-UI a été développé. Il permet d&#39;avoir une interface d&#39;administration pour ce logiciel.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/duniter-ui.png&quot; width=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Duniter gère ainsi différents modules. Le plus connu étant &lt;a rel=&quot;external&quot; href=&quot;https://g1-monit.monnaielibreoccitanie.org/&quot;&gt;Duniter-Currency-monit&lt;/a&gt;. Un outil permettant d&#39;observer l&#39;évolution de la monnaie, que ce soit la toile de confiance, les adhésions, la masse monétaire, etc.&lt;/p&gt;
&lt;p&gt;Le protocole réseau des nœuds serveurs permet aux nœuds de s&#39;auto-déclarer via un message signé contenant leurs différents points d’accès (&lt;em&gt;endpoints&lt;/em&gt;). Un nœud peut héberger plusieurs types d’endpoints. Par exemple :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BMA&lt;/strong&gt; : API historique de Duniter, aujourd&#39;hui seulement utilisée par les clients. Sur un modèle REST, elle permet aux clients d&#39;obtenir des données sur la chaîne de blocs (statut d&#39;adhésion des membres, sources de monnaie disponible, etc)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WS2P&lt;/strong&gt; : API née avec la version 1.6 de duniter-ts. Elle gère la communication P2P entre les nœuds serveurs et clients. Elle offre la fonctionnalité d&#39;outrepasser les problèmes de NAT en offrant deux modes de fonctionnement : public et privé. Un nœud public a des slots de connexions disponibles pour tous les autres nœuds. Les nœuds privés se connectent sur les nœuds publics pour obtenir leurs données du réseau.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ES_API&lt;/strong&gt; : API développée pour le client Césium permettant d&#39;héberger un nœud Elastic Search en parallèle d&#39;un nœud Duniter. Ce nœud va se synchroniser sur le nœud Duniter, et permettre aux clients de faire une requête des informations très avancées et détaillées en un temps très court. Ces endpoints sont utilisés lorsque le module &lt;em&gt;Césium+&lt;/em&gt; est activé sur Césium.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;logiciels-clients&quot;&gt;Logiciels clients&lt;/h2&gt;
&lt;p&gt;La communauté de développeur a réalisé à l&#39;heure actuelle trois types de logiciels &lt;em&gt;wallets&lt;/em&gt; pour Duniter :&lt;/p&gt;
&lt;p&gt;Un client CLI, &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/clients/python/silkaj&quot;&gt;Silkaj&lt;/a&gt;. Réalisé en Python 3, il permet d&#39;automatiser facilement des tâches sur le réseau. Il offre une liste de fonctionnalité assez complète :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Affichage d&#39;information sur la monnaie, l&#39;état du réseau, la difficulté de la preuve de travail individuelle, etc&lt;/li&gt;
&lt;li&gt;Envoi de monnaie et affichage du solde des comptes&lt;/li&gt;
&lt;li&gt;État de la toile de confiance (qui est membre, certifications reçues et envoyées, etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Silkaj n&#39;utilise pas le consensus du réseau pour vérifier ses réponses. Il requête un nœud, que l&#39;utilisateur peut passer en paramètre des différentes commandes. Silkaj est multiplateforme.&lt;/p&gt;
&lt;p&gt;Un client lourd, &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/clients/python/sakia&quot;&gt;Sakia&lt;/a&gt;. Réalisé avec PyQt5 et Python 3, il offre les fonctionnalités de base d&#39;un wallet Duniter, tel que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Affichage du solde de chacun de ses comptes, envoi de monnaie&lt;/li&gt;
&lt;li&gt;Gestion de son statut d&#39;adhésion, renouvellement, émission de certifications&lt;/li&gt;
&lt;li&gt;Recherche dans l&#39;annuaire, étude des identités présentes sur le réseau&lt;/li&gt;
&lt;li&gt;Observation du réseau, des endpoints disponibles, etc
Sakia utilise le consensus réseau pour vérifier les réponses des nœuds. Lorsqu&#39;il requête une donnée, il va comparer les réponses de différents nœuds pour s&#39;assurer de leur cohérence. En conséquence, Sakia est plus lent que les autres clients. Sakia est multiplateforme.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/sakia-ui.png&quot; width=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Un client web, &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/clients/cesium/cesium&quot;&gt;Cesium&lt;/a&gt;. Réalisé avec ionic.js, c&#39;est le client le plus avancé en termes de fonctionnalités utilisateur. Il permet, de base, les fonctions suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Affichage du solde de son compte, envoi de monnaie, etc&lt;/li&gt;
&lt;li&gt;Affichage du statut WS2P du réseau&lt;/li&gt;
&lt;li&gt;Recherche dans l&#39;annuaire, étude des identités disponibles sur le réseau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cesium offre la possibilité d&#39;activer un plugin nommé Césium+. Ce plugin permet d&#39;activer des fonctionnalités supplémentaires qui n&#39;utilisent pas la blockchain mais le serveur Elastic Search &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter4j&quot;&gt;Duniter4j&lt;/a&gt;. Les fonctionnalités ajoutées par ce plugin sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Affichage d&#39;un avatar associé aux identités dans la blockchain&lt;/li&gt;
&lt;li&gt;Ajout de pages permettant aux entreprises, sociétés et associations de faire connaître leur usage de la Ğ1&lt;/li&gt;
&lt;li&gt;Affichage d&#39;une carte permettant de localiser les membres afin de simplifier les rencontres&lt;/li&gt;
&lt;li&gt;Intégration d&#39;une messagerie chiffrée avec les clés Duniter
En tant que client web, Césium est installable sur toutes les plateformes, que ce soit des ordinateurs de bureau ou des ordiphones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/cesium-ui.png&quot; width=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;places-de-marches&quot;&gt;Places de marchés&lt;/h2&gt;
&lt;p&gt;Afin de permettre à la monnaie de se développer, plusieurs places de marché ont été développées. L’outil majeur est :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.gchange.fr/#/app/home&quot;&gt;Ğchange&lt;/a&gt; est un logiciel de place de marché. Il est implémenté sous la forme d&#39;une interface ionic.js utilisant un serveur Elasticsearch en backend. Comme Cesium, il offre des fonctionnalités de création de pages pour les entreprises. Il permet de géolocaliser les différentes annonces. C&#39;est aujourd&#39;hui la place de marché la plus active de la communauté.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/gchange-ui.png&quot; width=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;autres-projets&quot;&gt;Autres projets&lt;/h2&gt;
&lt;p&gt;D&#39;autres projets existent ou sont en cours de développement. On peut noter parmi ceux existants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://remuniter.cgeek.fr/&quot;&gt;Remuniter&lt;/a&gt;, le premier service de financement des calculateurs. Il fonctionne sous la forme d&#39;une caisse commune : n&#39;importe qui peut déposer de la monnaie sur la clé publique associée au service. Il va alors automatiquement verser une petite somme (0,20 Ğ1 par bloc, à l&#39;heure actuelle) aux nœuds qui participent au réseau. Ce service est actuellement complètement centralisé et fonctionne sur la confiance faites en celui qui héberge la redistribution de Ğ1. Il est implémenté sous la forme d&#39;un plugin Duniter.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wot-wizard.duniter.org/&quot;&gt;Wot Wizard&lt;/a&gt;, un outil développé en Component-Pascal permettant de calculer les probabilités futures d’entrés d’une identité dans la toile de confiance. En effet, du fait de la forme chaotique des entrés dans la toile de confiance, il était nécessaire pour les utilisateurs de savoir quand est-ce qu&#39;ils deviendraient, de manière sûre et certaine, membre de la toile.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://g1.frama.io/gsper/&quot;&gt;Gsper&lt;/a&gt;, destiné à essayer de retrouver son identifiant et mot de passe perdu. Il permet de générer des variations des identifiants et mot de passe qu&#39;on lui donne, et de tester toutes les combinaisons pour voir si l&#39;une d&#39;elle correspond.&lt;/li&gt;
&lt;li&gt;[PaperWallet] (&lt;del&gt;broken link&lt;/del&gt;) un système d&#39;impression de wallet de stockage à froid. Ce système permet d&#39;imprimer un QRCode contenant l&#39;adresse de réception des ğ1 ainsi que la clé privée. Il permet donc de stocker chez soi des ğ1 sur une clé déconnectée du web.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du côté des prochains logiciels à venir, on ne va pas s&#39;ennuyer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/clients/gvu&quot;&gt;ĞVu&lt;/a&gt;, un outil de visualisation de la toile de confiance de Duniter. Avec les filtres disponibles dans l&#39;interface, il est possible d&#39;étudier la toile de confiance, sa topologie, etc.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/rust/duniter-rs&quot;&gt;Duniter-rs&lt;/a&gt;, une implémentation du nœud Duniter en Rust. L&#39;objectif de cette seconde implémentation est de renforcer la sécurité de l&#39;écosystème Duniter. Une faille ou un bug dans la version TypeScript pourrait aujourd&#39;hui être très dommageable pour le réseau. Avec une implémentation en Rust qui fonctionnerait en parallèle, la résilience de la monnaie serait bien meilleure ! Ce logiciel pourra aussi fonctionner sur des configurations plus légères que duniter-ts. Pour le moment, ce nœud n&#39;est pas utilisable pour fonctionner sur le réseau Duniter. Cependant, les travaux avancent rapidement, et les RML11 seront l&#39;occasion pour Éloïs de nous présenter tout le travail réalisé jusqu&#39;à présent !&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/tools/g1billet&quot;&gt;Ğ1Billet&lt;/a&gt;, un système complet de génération de billets Ğ1. Ce système repose sur plusieurs mécanismes, dont notamment :
&lt;ul&gt;
&lt;li&gt;Impression d&#39;un visage sur un billet, pour rendre plus difficile les doublons de billets&lt;/li&gt;
&lt;li&gt;Utilisation d&#39;un système où le billet doit être détruit pour être consommé et transférer les ğ1 sur son compte&lt;/li&gt;
&lt;li&gt;Implémentation d&#39;un service web qui référence l&#39;utilisation des billets existants, dans l&#39;espace et dans le temps, afin de pouvoir vérifier qu&#39;un billet reçu n&#39;a pas été utilisé en même temps dans une distance lointaine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/g1billet.png&quot; width=&quot;400&quot;/&gt;&lt;/span&gt;
&lt;span class=&quot;center-content&quot;&gt;&lt;i&gt;Exemple de billet envisagé&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Enfin, les développeurs s&#39;intéressent aujourd&#39;hui aux idées du projet &lt;a rel=&quot;external&quot; href=&quot;https://framagit.org/fygg&quot;&gt;FYgg&lt;/a&gt; développé par nanocryk. Certains concepts utilisés dans ce framework de chaîne de blocs permettraient de décentraliser davantage Duniter, de fiabiliser et accélérer les données retournée par le réseau aux clients. En parallèle de ces recherches, les développeurs réfléchissent à l&#39;implémentation d&#39;une &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/common/doc/merge_requests/3&quot;&gt;nouvelle API clients&lt;/a&gt;, qui s&#39;appuierait sur GraphQL.&lt;/p&gt;
&lt;p&gt;Si vous voulez en découvrir plus, nous vous invitons à vous rendre aux &lt;a rel=&quot;external&quot; href=&quot;https://rml11.duniter.org/&quot;&gt;onzième rencontres de la monnaie libre&lt;/a&gt;, à Douarnenez, en Bretagne ! Ce sont quatre jours intenses où les développeurs et informaticiens peuvent échanger sur les différents projets tournant autour de cette monnaie, et où les utilisateurs peuvent découvrir de nouveaux usages !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Installer son environnement Rust</title>
          <pubDate>Fri, 11 May 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-rust/installer-son-environnement-rust/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-rust/installer-son-environnement-rust/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-rust/installer-son-environnement-rust/">&lt;h1 id=&quot;installer-son-environnement-rust&quot;&gt;Installer son environnement Rust&lt;/h1&gt;
&lt;p&gt;Dans ce tutoriel nous allons voir comment installer un environnement &lt;a rel=&quot;external&quot; href=&quot;https://www.rust-lang.org&quot;&gt;Rust&lt;/a&gt; complet.&lt;/p&gt;
&lt;p&gt;Cela vous servira pour vos propres projets Rust, ou pour contribuer a Duniter-rs, ou pour faire du binding NodeJS-Rust.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;installation-de-la-toolchain-stable&quot;&gt;Installation de la toolchain stable&lt;/h2&gt;
&lt;p&gt;Installez la toolchain stable de Rust :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; https://sh.rustup.rs&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -sSf&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ajoutez ~/.cargo/bin a votre variable d&#39;environnement PATH :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;/.cargo/bin:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;$PATH&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Je vous recommande vivement d&#39;ajouter cette ligne dans le fichier de configuration de votre terminal pour ne pas avoir a la recopier a chaque fois, si vous ne savez pas de quoi je parle alors vous utilisez très probablement le shell par défaut (bash) et le fichier auquel vous devez ajouter cette ligne est &lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Vous aurez aussi besoin d&#39;un environnement de développement intégré, je vous recommande vscode car il supporte a la fois NodeJs et Rust :)
Vous trouverez les instructions d&#39;installation de vscode pour votre système sur internet.&lt;/p&gt;
&lt;h2 id=&quot;fmt-le-formateur-de-code&quot;&gt;Fmt : le formateur de code&lt;/h2&gt;
&lt;p&gt;Je vous recommande vivement d&#39;installer l&#39;indispensable formateur automatique de code, d&#39;autant qu&#39;il est maintenue par l&#39;équipe officielle du langage Rust donc vous avez la garantie que votre code compilera toujours (et aura toujours le même comportement) après le passage du formateur.
Pour l&#39;installer vous aurez besoin de la toolchain nightly:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rustup&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install nightly&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enfin installez &lt;code&gt;fmt&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rustup&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; component add rustfmt-preview&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --toolchain&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; nightly&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour formater automatiquement votre code, placez vous a la racine de votre projet et éxécutez la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cargo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; +nightly fmt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Je vous recommande fortement de créer un alias dans la configuration de votre shell (~/.bashrc si vous utilisez bash). a titre d&#39;exemple j&#39;ai créer l&#39;alias &lt;code&gt;fmt=&quot;cargo +nightly fmt&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;clippy-le-linteur&quot;&gt;Clippy : le linteur&lt;/h2&gt;
&lt;p&gt;Si vous contribuez à l&#39;implémentation Rust de Duniter vous devrez également utiliser le linteur Clippy. Et dans tout les cas il est vivement recommandé aux débutants en Rust de l&#39;utiliser, en effet clippy est très pédagogique et vas beaucoup vous aider a apprendre comment il conviens de coder en Rust.&lt;/p&gt;
&lt;p&gt;Il y a deux façons d&#39;installer clippy :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Le compiler en local : c&#39;est long mais il s&#39;éxécutera plus vite, ça pose cependant un problème majeur : il faut le recompiler en nightly a chaque mise a jours de la toolchain rust et il arrive fréquemment que clippy ne compile plus après une mise à jours. Je déconseille donc fortement cette méthode.&lt;/li&gt;
&lt;li&gt;Éxécuter Clippy dans docker : c&#39;est la méthode que je préconise et que j&#39;utilise, cela rend l&#39;éxécution de clippy un peu plus lente mais permet d&#39;avoir toujours un clippy fonctionnel et de ne pas a voir besoin de le recompiler a chaque mise à jours.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;clippy-methode-1&quot;&gt;Clippy : méthode 1&lt;/h3&gt;
&lt;p&gt;Éxécutez la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rustup&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; component add clippy-preview&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Attention c&#39;est long, et vous devez impérativement attendre que la compilation soit terminée avant de lancer Clippy.
Pour lancer clippy, rendez-vous a la racine de votre projet puis éxécutez la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cargo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clippy&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clippy vas alors vous signaler de façopn très pédagogique tout ce qu&#39;il conviens de modifier dans votre code pour être plus dans &quot;l&#39;esprit rust&quot;.&lt;/p&gt;
&lt;h3 id=&quot;clippy-methode-2&quot;&gt;Clippy méthode 2&lt;/h3&gt;
&lt;p&gt;Il vous faut installer docker sur votre poste de développement. Ensuite, rendez-vous a la racine de votre projet puis éxécutez la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --rm -v&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;$(&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;)&amp;quot;:/app&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -w&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; /app instrumentisto/clippy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;instrumentisto/clippy&lt;/code&gt; est une image docker qui est automatiquement rebuiltée et republiée à chaque mise a jours de Clippy, le gros avantage c&#39;est que l&#39;image n&#39;est republiée que si Clippy s&#39;est compilé avec succès, vous avez donc la garantie de toujours pouvoir éxécuter la dernière version fonctionnelle de clippy.&lt;/p&gt;
&lt;h3 id=&quot;vscode&quot;&gt;Vscode&lt;/h3&gt;
&lt;p&gt;Rust étant un langage très récent, il n&#39;a pas d&#39;Environnement de Développement Intégré (IDE) dédié.&lt;br /&gt;
Heureusement, plusieurs IDE existants intègrent Rust via des plugins, nous vous recommandons vscode.&lt;/p&gt;
&lt;p&gt;https://code.visualstudio.com/docs/setup/linux#_debian-and-ubuntu-based-distributions&lt;/p&gt;
&lt;p&gt;Une fois vscode installé nous aurons besoin des 3 plugins suivants :
BetterTOML
CodeLLDB
Rust (rls)&lt;/p&gt;
&lt;h2 id=&quot;rls-et-lldb&quot;&gt;RLS et LLDB&lt;/h2&gt;
&lt;p&gt;Il reste encore a installer RLS (Rust Language Server) et LLDB (debugger), le 1er permet de compiler votre code à la volée pour souligner en rouge les erreurs directement dans l’éditeur de vscode, le second est un débogueur.&lt;/p&gt;
&lt;p&gt;Instructions d&#39;installation de LLDB : https://github.com/vadimcn/vscode-lldb/wiki/Installing-on-Linux&lt;/p&gt;
&lt;p&gt;Ensuite relancez vscode (après avoir installer les plugins indiquez si dessus), il devrait vous proposer spontanément d&#39;installer RLS, dites oui.&lt;br /&gt;
Si cela échoue pour RLS, vous devrez l&#39;installer manuellement avec la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rustup&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; component add rls-preview rust-analysis rust-src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;paquets-supplementaires-pour-compiler-duniter-rs&quot;&gt;Paquets supplémentaires pour compiler duniter-rs&lt;/h2&gt;
&lt;p&gt;Bien que cela soit de plus en plus rare, certaines crates rust dépendent encore de bibliothèques C/C++ et celles-ci doivent être installer sur votre ordinateur lors de la compilation. Sous Debian et dérivés, vous devez avoir &lt;code&gt;pkg-config&lt;/code&gt; d&#39;installé car le compilateur rust s&#39;en sert pour trouver les bibliothèques C/C++ installés sur votre système.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install pkg-config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans le cas de Duniter-rs vous aurez besoin de la bibliothèque openssl pour développeurs :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install libssl-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;tester-son-environnement-avec-un-hello-world&quot;&gt;Tester son environnement avec un &quot;Hello, World !&quot;&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;mkdir&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; hello-world&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; hello-world&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cargo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; init&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L&#39;option &lt;code&gt;--bin&lt;/code&gt; indique que vous souhaitez créer un binaire, par défaut c&#39;est une bibliothèque qui sera créée.&lt;/p&gt;
&lt;p&gt;Vous devriez avoir le contenu suivant dans le dossier hello-world :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tree&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;├──&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; Cargo.toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;├──&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; src&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;   └── main.rs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&#39;est le contenu minimal de tout projets binaire, le code source ce trouve dans &lt;code&gt;main.rs&lt;/code&gt;.
Tout projets Rust (binaire ou bibliothèque) doit contenir un fichier nommé Cargo.toml a la racine du projet, c&#39;est on quelque sorte l&#39;équivalent du &lt;code&gt;package.json&lt;/code&gt; de NodeJs.&lt;/p&gt;
&lt;p&gt;Le fichier &lt;code&gt;main.rs&lt;/code&gt; contient déjà par défaut un code permettant de réaliser le traditionnel &quot;Hello, world!&quot; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;	println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;Hello, world!&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette syntaxe doit vous rappeler furieusement le C/C++ pour ceux qui connaissent, et c&#39;est bien normal car Rust est conçu pour être l&#39;un des successeurs potentiel du C++. On peut toutefois déjà noter trois différences majeures avec le C/C++ :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;La fonction main() de prend aucun paramètre en entrée. Les arguments cli sont capturés d&#39;une autre façon via une utilisation de la bibliothèque standard.&lt;/li&gt;
&lt;li&gt;println! n&#39;est pas une fonction, c&#39;est une macro. En Rust toutes les macros sont de la forme &lt;code&gt;macro_name!(params)&lt;/code&gt;, c&#39;est donc au &lt;code&gt;!&lt;/code&gt; qu&#39;on les reconnaît. Alors pourquoi une macro juste pour printer une chaîne de caractères ? Et bien parce que en Rust toute fonction doit avoir a un nombre fini de paramètres et chaque paramètre doit avoir un type explicitement défini. Pour outrepasser cette limite on utilise une macro qui vas créer la fonction souhaitée lors de la compilation.&lt;/li&gt;
&lt;li&gt;La fonction main() ne retourne aucune valeur, lorsque votre programme se termine, Rust envoi par défaut le code EXIT_SUCCESS a l&#39;OS. Pour interrompre votre programme en envoyant un autre code de sortie, il existe des macro comme par exemple &lt;code&gt;panic!(err_message)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Avant de modifier le code, assurez vous déjà que le code par défaut compile correctement :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; cargo build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Compiling&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; hello-world v0.1.0&lt;/span&gt;&lt;span&gt; (file:///home/elois/dev/hello-world)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Finished&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; dev&lt;/span&gt;&lt;span&gt; [unoptimized&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; + debuginfo] target&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0.91&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; secs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cargo est l&#39;équivalent de npm pour Rust, il vas chercher toutes les dépendances des crates (=bibliothèques) que vous installez. Oui en Rust on parle de crates pour désigner une dépendance, ça peut etre une bibliothèque ou un paquet.&lt;/p&gt;
&lt;p&gt;Si vous obtenez bien un &lt;code&gt;Finished dev [unoptimized + debuginfo] target(s) in x.xx secs&lt;/code&gt;, félicitations vous venez de compiler votre premier programme Rust :)&lt;/p&gt;
&lt;p&gt;Si vous obtenez une erreur c&#39;est que votre environnement Rust n&#39;est pas correctement installé, dans ce cas je vous invite à tout désinstaller et à reprendre ce tutoriel de zéro.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Chez moi ça compile, Comment j’exécute mon programme maintenant ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Comme ça :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; cargo run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Finished&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; dev&lt;/span&gt;&lt;span&gt; [unoptimized&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; + debuginfo] target&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0.0&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; secs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;target/debug/hello-world&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Hello,&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; world!&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Comme indiqué, cargo run exécute votre binaire qui se trouve en réalité dans &lt;code&gt;target/debug/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Il existe plusieurs profils de compilation, et vous pouvez même créer les vôtres, deux profils pré-configuré sont a connaître absolument :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Le profil &lt;code&gt;debug&lt;/code&gt; : c&#39;est le profil par défaut, le compilateur n&#39;effectue aucune optimisation et intègre au binaire les points d&#39;entrée permettant à un débogueur de fonctionner.&lt;/li&gt;
&lt;li&gt;Le profil &lt;code&gt;release&lt;/code&gt; : le compilateur effectue le maximum d&#39;optimisation possibles et n&#39;intègre aucun point d&#39;entrée pour le débogueur.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rust est réputé pour être ultra-rapide, c&#39;est en grande partie grâce aux optimisations poussés effectués lors d&#39;une compilation en profil &lt;code&gt;release&lt;/code&gt;, mais réaliser ces optimisations demande du temps, la compilation en mode &lt;code&gt;release&lt;/code&gt; est donc bien plus longue qu&#39;en mode &lt;code&gt;debug&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;pour compiler en mode &lt;code&gt;release&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cargo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; build&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Votre binaire final se trouve alors dans &lt;code&gt;target/release/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour aller plus loin, je vous invite a lire l&#39;excellent &lt;a rel=&quot;external&quot; href=&quot;https://blog.guillaume-gomez.fr/Rust&quot;&gt;tutoriel Rust de Guillaume Gomez&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Et si vous savez lire l&#39;anglais, la référence des références que vous devez absolument lire c&#39;est évidemment le sacro-sain &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/book/&quot;&gt;Rust Book&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le Rust Book par vraiment de zéro et se lit très facilement même avec un faible niveau en anglais.&lt;/p&gt;
&lt;h3 id=&quot;vscode-1&quot;&gt;VSCode&lt;/h3&gt;
&lt;p&gt;Un exemple de fichier &lt;code&gt;launch.conf&lt;/code&gt; pour VSCode :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;    // Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;    // Pointez pour afficher la description des attributs existants.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;    // Pour plus d&amp;#39;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;version&amp;quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;0.2.0&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;configurations&amp;quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;Debug&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;lldb&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;request&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;launch&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;program&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;${workspaceFolder}/target/debug/durs&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;cwd&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;${workspaceRoot}&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;terminal&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;integrated&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;args&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;start&amp;quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;            &amp;quot;env&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;                &amp;quot;RUST_BACKTRACE&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;1&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      </item>
      <item>
          <title>Du Rust dans NodeJs graçe a Neon</title>
          <pubDate>Fri, 04 May 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/binding-node-rust/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/binding-node-rust/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/binding-node-rust/">&lt;h1 id=&quot;du-rust-dans-nodejs-grace-a-neon&quot;&gt;Du Rust dans NodeJs graçe a Neon&lt;/h1&gt;
&lt;h1 id=&quot;binding-node-rust&quot;&gt;Binding Node Rust&lt;/h1&gt;
&lt;p&gt;Dans ce tutoriel nous allons voir comment intégrer du code &lt;a rel=&quot;external&quot; href=&quot;https://www.rust-lang.org&quot;&gt;Rust&lt;/a&gt; dans un module NodeJs graçe a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/neon-bindings/neon&quot;&gt;Neon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il existe plusieurs façon de faire du bingind Node-Rust, mais la seule qui permet de bénéficier des garanties du Rust dans le binding c&#39;est Neon :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Neon permet a Rust de manipuler directement des types JS et de caster d’un type JS vers un type Rust et vice versa dans une macro try dont les exceptions sont captés par la VM Node !!!&lt;/li&gt;
&lt;li&gt;Les variables de type JS créer par le code Rust et fournies en sortie sont gérés par le GC de Node, donc le binding ne peut pas causer de fuite mémoire.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les deux autrés méthodes sont passer par une 3ème language intermédiare (le C++) ou utiliser la FFI native de Rust. Mais les deux font perdre les garanties du Rust car dans las deux cas V8 manipule le binaire finale comme si c&#39;était du C/C++. Neon est donc une révolution dans le sens ou les garanties du Rust sont conservées.&lt;/p&gt;
&lt;p&gt;Vous aurez besoin des outils de développement pour Rust et pour NodeJS, les indications d&#39;installation sont valable pour les systèmes gnu/linux basés sur debain ou dérivés :&lt;/p&gt;
&lt;h2 id=&quot;1-installation-votre-enviromment-rust&quot;&gt;1. Installation votre enviromment Rust&lt;/h2&gt;
&lt;p&gt;Suivez ce tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-rust/installer-son-environnement-rust/&quot;&gt;Installer son environnement Rust&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-installez-nodejs&quot;&gt;2. Installez NodeJS&lt;/h2&gt;
&lt;p&gt;Installez nvm :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -o-&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis installez la version de NodeJs que vous souhaitez utiliser :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;nvm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install VERSION&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;3-installez-neon&quot;&gt;3. Installez Neon&lt;/h2&gt;
&lt;p&gt;Installez l&#39;utilitaire neon-cli, c&#39;est indispensable :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -g&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; neon-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;votre-hello-word-en-rust-appele-par-node&quot;&gt;Votre Hello Word en Rust appelé par Node&lt;/h2&gt;
&lt;p&gt;(en cours de rédaction...)&lt;/p&gt;
</description>
      </item>
      <item>
          <title>La toile de confiance en détail</title>
          <pubDate>Sun, 15 Apr 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/la-toile-de-confiance-en-detail/</link>
          <guid>https://duniter.fr/blog/la-toile-de-confiance-en-detail/</guid>
          <description xml:base="https://duniter.fr/blog/la-toile-de-confiance-en-detail/">&lt;h1 id=&quot;la-toile-de-confiance-en-detail&quot;&gt;La toile de confiance en détail&lt;/h1&gt;
&lt;p&gt;L&#39;objet de cet article est de détailler le fonctionnement des différents paramètres d&#39;une toile de confiance duniter ainsi que d&#39;expliquer comment ont été choisies les valeurs de ces paramètres dans le cas de la monnaie Ğ1.&lt;/p&gt;
&lt;p&gt;Aucune connaissance particulière n&#39;est requise pour comprendre ce qui suit, car je vais à chaque fois bien définir toutes les notions abordées et tous les termes utilisés. :)
Cependant nous irons assez loin, nous rentrerons notamment dans le détail du protocole duniter (uniquement sur les parties toile de confiance bien sûr) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tous les rouages d&#39;une toile de confiance duniter.
Rassurez-vous, nous allons y aller progressivement, nous commencerons par une vision d&#39;ensemble puis nous détaillerons graduellement. :)&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;prerequis&quot;&gt;Prérequis&lt;/h2&gt;
&lt;p&gt;Avant de lire cet article, il est vivement recommandé d&#39;étudier la &lt;a href=&quot;https://duniter.fr/wiki/g1/licence-g1/&quot;&gt;licence Ğ1&lt;/a&gt; et de lire les pages suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/&quot;&gt;Certifier de nouveaux membres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/&quot;&gt;Question Fréquentes sur la toile de confiance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;pourquoi-a-t-on-besoin-d-une-toile-de-confiance&quot;&gt;Pourquoi a-t-on besoin d’une toile de confiance ?&lt;/h2&gt;
&lt;p&gt;Nous avons besoin d&#39;une toile de confiance pour répondre à deux objectifs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;S&#39;assurer que chaque être humain membre de la monnaie co-crée bien le même nombre de Dividendes Universel par intervalle de création (dans le cas de la Ğ1 cet intervalle est &lt;code&gt;86400&lt;/code&gt; (=1 jour exprimé en secondes), c&#39;est le &lt;em&gt;paramètre monétaire&lt;/em&gt; &lt;code&gt;dt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Identifier les calculateurs de blocs pour leur affecter une difficulté personnalisée. Cela est nécessaire afin d&#39;éviter que le mécanisme de &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/preuve-de-travail/&quot;&gt;preuve de travail&lt;/a&gt; ne permette une centralisation du support de la monnaie (la blockchain) comme c&#39;est hélas le cas dans de nombreuses crypto-monnaies non-libres.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Attends c&#39;est quoi un « paramètre monétaire » ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Chaque monnaie Duniter possède sa propre blockchain au sein de laquelle sont définis ses propres paramètres monétaires (dans le bloc zéro), il s&#39;agit d&#39;un ensemble de « curseurs » qu&#39;il faut ajuster en fonction des objectifs visés. À l&#39;heure où j&#39;écris ces lignes le protocole Duniter (noté DUP) comporte vingt-et-un paramètres monétaires dont dix concernent la toile de confiance !
Nous décrirons en détail les dix paramètres qui concernent la toile de confiance, nous n&#39;aborderons pas les autres.
Sachez simplement que dans le cas de la monnaie Ğ1, le DU est créé toutes les 24 h (86 400 secondes) mais que cet intervalle de temps régi par le paramètre &lt;code&gt;dt&lt;/code&gt; peut très bien être fixé à d&#39;autres valeurs pour d&#39;autres monnaies.&lt;/p&gt;
&lt;p&gt;Nous ne traiterons pas ici le deuxième objectif relatif à la preuve de travail, car ce n&#39;est pas l&#39;objet de cet article, la seule chose à comprendre est que la toile de confiance nous permet &lt;strong&gt;d&#39;identifier&lt;/strong&gt; les membres qui calculent des blocs, et que cette identification nous permet d&#39;imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d&#39;identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géantes pour prendre le contrôle de la blockchain et paralyser toute la communauté !&lt;/p&gt;
&lt;p&gt;Revenons donc au premier objectif, s&#39;assurer que chaque humain n&#39;ait qu&#39;un seul compte membre.
En pratique, le risque zéro n&#39;existe pas, notre objectif n&#39;est donc pas de concevoir une toile de confiance au sein de laquelle la fraude serait impossible (ce qui est de toute manière impossible).
Voici donc une reformulation plus réaliste en quatre sous-objectifs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rendre l’acte de certification suffisamment lourd pour obliger les membres à un minimum de vigilance.&lt;/li&gt;
&lt;li&gt;Rendre la fraude suffisamment difficile pour qu&#39;elle soit marginale.&lt;/li&gt;
&lt;li&gt;Éviter que les éventuelles attaques Sybil aient un impact significatif sur la monnaie. (&lt;em&gt;que les faux DU créés aient un poids négligeable par rapport à la masse monétaire légitime.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Rendre la croissance de régions Sybil suffisamment lente pour que la communauté ait le temps de réagir.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Attends, une attaque quoi ?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Attaque_Sybil&quot;&gt;&lt;strong&gt;attaque Sybil&lt;/strong&gt;&lt;/a&gt;, c&#39;est le nom que l&#39;on donne à une attaque d&#39;un système de réputation par la création de fausses identités.
Une toile de confiance est un cas particulier de &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Reputation_system&quot;&gt;&lt;strong&gt;système de réputation&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il y a beaucoup de stratégies de scénarios d&#39;attaques Sybil possibles ainsi que de mobiles différents.
Notre objectif est que la toile de confiance nous prémunisse contre les attaques Sybil susceptibles de compromettre le bon fonctionnement de la monnaie ou/et du réseau informatique qui la porte.
Ce qui veut dire que les micro-attaques Sybil orchestrées par un petit groupe dont l&#39;objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n&#39;est pas à la toile de confiance de nous prémunir de ces micro-attaques, mais à la justice de la communauté concernée, tout comme ce n&#39;est pas à la commune de vous prémunir d&#39;un cambriolage chez vous, mais la commune va vous garantir le fonctionnement des réseaux d&#39;eau, le nettoyage de la voirie, etc…
De la même façon, la toile de confiance Duniter nous garantit collectivement le bon fonctionnement de notre monnaie et du réseau informatique qui la porte, et c&#39;est déjà énorme !&lt;/p&gt;
&lt;h3 id=&quot;l-importance-de-l-independance-de-tout-autre-systeme-d-identification&quot;&gt;L’importance de l’indépendance de tout autre système d’identification&lt;/h3&gt;
&lt;p&gt;Il nous est très régulièrement proposé de nous baser sur des systèmes d&#39;identification centralisés et alimentés par des monnaies non-libres dépendant d&#39;un état ou d&#39;un autre.
Mais nous serions alors dépendants de ces systèmes d&#39;identification centralisés pour le bon fonctionnement de notre toile de confiance, ça n&#39;a pas de sens.
De plus, les membres d&#39;une monnaie libre peuvent être de n&#39;importe quelle nationalité ou culture, nous perdrions cette universalité en dépendant d&#39;un système d&#39;identification étatique. De plus, cela exclurait les sans-papiers et les apatrides.
Il est essentiel pour nous de ne dépendre d&#39;aucun état ni d&#39;aucune institution. Nous ne dépendons que du réseau internet, et encore, il existe d&#39;autres réseaux, si internet venait à s&#39;éteindre, les humains membres d&#39;une monnaie libre pourraient très bien créer leur propre réseau d&#39;information, c&#39;est déjà ce que font certaines associations en créant leur propre bout de réseau, donc c&#39;est possible.&lt;/p&gt;
&lt;h2 id=&quot;quelques-bases-en-theorie-des-graphes&quot;&gt;Quelques bases en théorie des graphes&lt;/h2&gt;
&lt;h3 id=&quot;un-peu-de-vocabulaire&quot;&gt;Un peu de vocabulaire&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;graphe : ensemble de points (nommés sommets) reliés entre eux par des flèches (nommées arcs).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;graphe simple : graphe sans boucle (arc reliant un sommet à lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;graphe orienté : graphe dont les arcs ont un sens, l&#39;arc A –&amp;gt; B est donc différent de l&#39;arc B –&amp;gt; A.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;extrémité initiale et finale d&#39;un arc : l&#39;arc A –&amp;gt; B a pour extrémité initiale A et pour extrémité finale B.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;sommet isolé : sommet n&#39;étant lié à aucun arc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;degré d&#39;un sommet : nombre d&#39;arcs reliant ce sommet (dans les deux sens).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;demi-degré extérieur d&#39;un sommet A : nombre d&#39;arcs ayant pour extrémité initiale le sommet A&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;demi-degré intérieur d&#39;un sommet A : nombre d&#39;arcs ayant pour extrémité finale le sommet A&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/degres.jpg&quot; alt=&quot;visualisation des degrés d&amp;#39;un sommet&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;chemin : trajet qu&#39;il faut suivre pour se rendre d&#39;un sommet A à un sommet B en respectant le sens des arcs. Le nombre d&#39;arcs traversés est la longueur du chemin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;definition-d-une-toile-de-confiance-duniter&quot;&gt;Définition d’une toile de confiance Duniter&lt;/h3&gt;
&lt;p&gt;Les toiles de confiance Duniter (une par monnaie) sont des graphes simples orientés et sans sommets isolés.
Les sommets en sont les membres et les arcs les certifications.&lt;/p&gt;
&lt;p&gt;Pourquoi orientés ?
Certifier est un acte personnel qui n&#39;engage que l&#39;émetteur de la certification, la confiance qu&#39;il accorde au récepteur n&#39;est pas forcément réciproque dans tous les cas (elle l&#39;est souvent), mais on ne peut pas imposer au récepteur de faire confiance à l&#39;émetteur.&lt;/p&gt;
&lt;p&gt;De plus, tous les sommets sont des identités membres ou ayant déjà été membres par le passé, les sommets correspondant aux anciens membres sont dans un état particulier dit « désactivé ». Les sommets désactivés ne peuvent plus émettre ou recevoir de nouvelles certifications, mais les certifications qu&#39;ils ont émises et reçues avant de perdre leurs statuts de membre restent actives vers les autres membres jusqu’à leur date d&#39;expiration dans le but d&#39;éviter un effondrement en cascade de la toile de confiance. Si ces anciens membres ne redeviennent pas membres alors les certifications qu&#39;ils avaient émises et reçues finiront par expirer, et les sommets &quot;désactivés&quot; en question finiront donc par devenir des sommets isolés.&lt;/p&gt;
&lt;p&gt;Pour finir sur cette histoire d&#39;ancien membre, au bout d&#39;un certain délai qui dépend d&#39;un paramètre monétaire, le sommet désactivé est supprimé et l&#39;identité associée passe à l&#39;état révoqué, c&#39;est-à-dire que cette identité ne pourra plus jamais redevenir membre. L’humain qui possédait cette identité reste toutefois libre de redemander son adhésion dans la toile sous une nouvelle identité. :)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Qu’entends-tu par identité ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une identité est un groupe de trois informations : une clé publique, un nom, et un blockstamp.
Un blockstamp est une référence à un bloc précis d&#39;une blockchain. Ça permet de dater le moment auquel l&#39;identité a été créée, et de relier l&#39;identité à une blockchain particulière, donc à une monnaie particulière (car chaque monnaie a sa propre blockchain).&lt;/p&gt;
&lt;p&gt;Une identité peut être dans cinq états différents : en attente, membre, ancien membre, révoquée ou exclue.
Nous reviendrons plus en détail sur chacun de ces états.&lt;/p&gt;
&lt;p&gt;Résumons tout cela avec un exemple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A -&amp;gt; B -&amp;gt; C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     \--&amp;gt; D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si pour une raison x ou y, A perd son statut de membre, alors la toile s&#39;effondre et tous les autres membres perdent aussi leur statut de membre en cascade. Pour éviter cela, la certification A –&amp;gt; B restera valide jusqu&#39;à sa date d&#39;expiration, laissant à B le temps de se faire certifier par C ou D par exemple.&lt;/p&gt;
&lt;p&gt;L&#39;absence de sommet isolé implique également que lorsqu&#39;un nouveau membre est ajouté à la toile de confiance il faut ajouter en même temps (c&#39;est-à-dire dans le même bloc) l&#39;ensemble des certifications qui lui permettent de devenir membre.
C&#39;est pourquoi nous avons besoin d&#39;un espace de stockage intermédiaire qui contient les identités &lt;strong&gt;en attente&lt;/strong&gt; de devenir membre ainsi que les certifications émises par des membres envers ces identités, cet espace c&#39;est la fameuse « piscine » des nœuds Duniter (que l&#39;on aurait aussi pu nommer « bac à sable » puisque dans le code de Duniter c&#39;est le terme &lt;code&gt;sandbox&lt;/code&gt; qui est utilisé). Notons que ces « piscines » contiennent également d&#39;autres types de documents non mentionnés ici.&lt;/p&gt;
&lt;h2 id=&quot;definition-des-regles-d-une-toile-de-confiance-duniter&quot;&gt;Définition des règles d’une toile de confiance Duniter&lt;/h2&gt;
&lt;p&gt;Les toiles de confiance Duniter (une par monnaie) sont régies par huit règles présentées ci-après.
L&#39;application de ces règles dépend de onze paramètres variables d&#39;une monnaie à l&#39;autre. La valeur de dix d&#39;entre eux est fixée dans le bloc zéro, le onzième paramètre &lt;code&gt;msPeriod&lt;/code&gt; est écrit en dur dans le code, car il a été ajouté après l&#39;écriture du bloc zéro de la Ğ1.
Cette partie ne présente que les définitions des règles, les raisons d&#39;être de ces règles sont présentées dans le cadre de l&#39;historicité de leur apparition dans la partie « Origine des règles et cas de la  Ğ1 ».&lt;/p&gt;
&lt;h3 id=&quot;1-regle-de-distance-et-membres-referents&quot;&gt;1. Règle de distance et membres référents&lt;/h3&gt;
&lt;p&gt;Paramètres : &lt;strong&gt;StepMax&lt;/strong&gt; et &lt;strong&gt;xPercent&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ces deux paramètres sont très fortement liés et définissent ensemble une seule et même règle : la règle de distance.
Pour définir la règle de distance, nous devons au préalable définir ce qu&#39;est un membre référent :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Membre référent&lt;/strong&gt; : un membre A est référent si et seulement si ses deux demi-degrés sont supérieurs ou égaux à &lt;code&gt;CEIl(N^(1/stepMax))&lt;/code&gt; où N est le nombre total de membres.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nous pouvons maintenant définir la règle de distance :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Règle de distance&lt;/strong&gt; : un membre A respecte la règle de distance si et seulement si pour plus de xPercent % des membres référents R il existe un chemin de R vers A d&#39;une longueur inférieure ou égale à &lt;code&gt;stepMax&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La notion de membre référent ne sert qu&#39;à l&#39;application de la règle de distance, les membres référents n&#39;ont aucun privilège sur les membres non-référents.
Dans une toile aboutie, c&#39;est-à-dire dans une toile ou chaque membre a certifié tous les membres qu&#39;il est en mesure de certifier légitimement, tous les membres devraient être référents, mais de part la croissance progressive de la toile d&#39;une part et le remplacement générationnel d&#39;autre part, il existe à tout instant &lt;code&gt;t&lt;/code&gt; des membres qui n&#39;ont pas encore certifié tous les membres qu&#39;ils sont en mesure de certifier légitimement. Ces membres seraient bloquants s&#39;ils étaient pris en compte dans la règle de distance, et la toile de confiance ne pourrait jamais accueillir de nouveaux membres.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quand s&#39;applique la règle de distance ?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La vérification de la règle de distance étant coûteuse en calcul, elle ne s&#39;applique que lors de l&#39;obtention et du renouvellement du statut de membre. (Voir partie « renouvellement du statut de membre »).
&lt;em&gt;Cas particulier : la règle de distance ne s&#39;applique pas au bloc zéro (écriture de la toile initiale).&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-regle-du-nombre-minimal-de-certifications-recus&quot;&gt;2. Règle du nombre minimal de certifications reçus&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigQty&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C&#39;est la règle la plus simple, elle stipule que tout membre doit à tout moment (comprendre à tout bloc) être le destinataire d&#39;au moins &lt;code&gt;sigQty&lt;/code&gt; certifications actives.
Si, ne serait-ce que pour le temps d&#39;un seul bloc, un membre A se retrouve avec moins de &lt;code&gt;sigQty&lt;/code&gt; certifications actives reçues, alors il perd le statut de membre à ce bloc. Il doit alors publier une demande de renouvellement de son adhésion.&lt;/p&gt;
&lt;h3 id=&quot;3-regle-de-renouvellement-de-l-adhesion&quot;&gt;3. Règle de renouvellement de l’adhésion&lt;/h3&gt;
&lt;p&gt;Paramètres : &lt;strong&gt;msValidity&lt;/strong&gt;, &lt;strong&gt;msPeriod&lt;/strong&gt; et &lt;strong&gt;msWindow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L&#39;obtention du statut de membre n&#39;est pas un acquis pour la vie, mais pour une durée de &lt;code&gt;msValidity&lt;/code&gt; secondes.&lt;/p&gt;
&lt;p&gt;Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut à tout moment émettre une demande de renouvellement de son adhésion à condition que son dernier renouvellement date de plus de &lt;code&gt;msPeriod&lt;/code&gt; secondes (lorsqu&#39;un membre ne s&#39;est jamais renouvelé, la date du dernier renouvellement correspond à la date d&#39;obtention du statut de membre).
Lorsqu&#39;une demande de renouvellement d&#39;adhésion est émise, elle est stockée en « piscine » pour une durée maximale de &lt;code&gt;msWindow&lt;/code&gt; secondes, puis elle sera inscrite en blockchain dès que le membre en question respectera la règle de distance &lt;strong&gt;et&lt;/strong&gt; la règle &lt;code&gt;sigQty&lt;/code&gt; (s’il les respecte déjà, dès qu&#39;un nœud ayant reçu la demande de renouvellement trouve un bloc).&lt;/p&gt;
&lt;p&gt;Tout membre dont le dernier renouvellement date de plus de &lt;code&gt;msValidity&lt;/code&gt; secondes perd le statut de membre au premier bloc où cette durée est atteinte. Dans ce cas, l&#39;ancien membre dispose à nouveau d&#39;une durée de &lt;code&gt;msValidity&lt;/code&gt; secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc &lt;code&gt;2 × msValidity&lt;/code&gt; après le dernier renouvellement, l&#39;ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S&#39;il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro.&lt;/p&gt;
&lt;h3 id=&quot;4-regle-d-expiration-des-certifications&quot;&gt;4. Règle d’expiration des certifications&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigValidity&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Toute certification inscrite en blockchain expire &lt;strong&gt;sigValidity&lt;/strong&gt; secondes après son &lt;strong&gt;émission&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;L&#39;émission et l&#39;écriture d&#39;une certification ont lieu à des instants différents. Lorsque le membre &lt;em&gt;A&lt;/em&gt; émet une certification à un instant &lt;em&gt;t1&lt;/em&gt;, elle est d&#39;abord stockée en piscine à cet instant &lt;em&gt;t1&lt;/em&gt;, puis sera écrite en blockchain à un instant &lt;em&gt;t2&lt;/em&gt;, dès que les règles de la toile le permettent, il peut y avoir plusieurs semaines d&#39;écart entre &lt;em&gt;t1&lt;/em&gt; et &lt;em&gt;t2&lt;/em&gt; !!&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&quot;5-regle-du-stock-limite-de-certifications-actives&quot;&gt;5. Règle du stock limité de certifications actives&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigStock&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Par certification active nous entendons certification inscrite en blockchain et qui n&#39;a pas encore expiré.&lt;/p&gt;
&lt;p&gt;À tout bloc et pour tout membre, l&#39;ensemble des certifications émises par ce membre et actives doit être inférieur ou égal à &lt;code&gt;sigStock&lt;/code&gt;. Lorsque ce quota est atteint, le membre en question devra attendre qu&#39;une certification active dont il est l&#39;émetteur expire pour pouvoir en écrire une autre.&lt;/p&gt;
&lt;h3 id=&quot;6-regle-de-l-intervalle-d-ecriture-entre-deux-certifications&quot;&gt;6. Règle de l’intervalle d’écriture entre deux certifications&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigPeriod&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;une certification émise par un membre A est écrite en blockchain, aucune autre certification émise par A ne pourra être écrite en blockchain avant &lt;code&gt;sigPeriod&lt;/code&gt; secondes.&lt;/p&gt;
&lt;h3 id=&quot;7-regle-de-la-fenetre-d-ecriture-d-une-certification&quot;&gt;7. Règle de la fenêtre d’écriture d’une certification&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigWindow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;une certification est émise par un membre A, elle restera stockée en « piscine » pour au plus &lt;code&gt;sigWindow&lt;/code&gt; secondes. Si la certification en question n&#39;a toujours pas été écrite en blockchain passé ce délai, elle est simplement supprimée.&lt;/p&gt;
&lt;h3 id=&quot;8-regle-de-la-fenetre-d-ecriture-d-une-identite&quot;&gt;8. Règle de la fenêtre d’écriture d&#39;une identité&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;idtyWindow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;une identité est émise, elle restera stockée en « piscine » pour au plus &lt;code&gt;idtyWindow&lt;/code&gt; secondes. Si l&#39;identité en question n&#39;a toujours pas été écrite en blockchain passé ce délai, elle est simplement supprimée.&lt;/p&gt;
&lt;h2 id=&quot;le-cas-particulier-de-la-toile-initiale-au-bloc-zero&quot;&gt;Le cas particulier de la toile initiale au bloc zéro&lt;/h2&gt;
&lt;p&gt;L&#39;application des règles présentées ne rend l&#39;expansion d&#39;une toile possible qu’à partir d&#39;une toile pré-existante, il y a donc un cas particulier où certaines règles ne s&#39;appliquent pas : l&#39;écriture du bloc zéro.&lt;/p&gt;
&lt;p&gt;Seules les règles 2 et 5 s&#39;appliquent lors de l&#39;écriture du bloc zéro.&lt;/p&gt;
&lt;p&gt;Dans la pratique, c&#39;est l&#39;humain qui génère le bloc zéro qui choisit manuellement quelles identités sont écrites dans le bloc zéro, mais toutes les identités et certifications écrites dans le bloc zéro doivent respecter les règles 2 et 5 et de plus le bloc zéro doit être signé avec la clé privée d&#39;une des identités écrites.
Dès lors qu&#39;un bloc zéro correct a été généré, toute identité inscrite dans le bloc zéro peut soumettre le bloc suivant, de fait l&#39;auteur du bloc zéro n&#39;a donc plus la main.&lt;/p&gt;
&lt;h2 id=&quot;origine-des-regles-et-cas-de-la-g1&quot;&gt;Origine des règles et cas de la Ğ1&lt;/h2&gt;
&lt;h3 id=&quot;1-distance-et-taille-limite&quot;&gt;1. Distance et taille limite&lt;/h3&gt;
&lt;p&gt;La règle de distance a pour objectif de limiter la taille maximale d&#39;une région Sybil ainsi que la taille maximale de la communauté monétaire.
&lt;code&gt;xpercent&lt;/code&gt; permet d&#39;éviter une minorité de blocage (membres trop peu actifs).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/wot-sybil.jpg&quot; alt=&quot;zone Sybil&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Les régions Sybil sont isolées du reste du graphe, car les comptes Sybil ne recevront de certifications que de la part d&#39;autres comptes Sybil ou de la part des auteurs de l&#39;attaque. Ainsi, tout plus court chemin entre un membre légitime et un compte Sybil passe forcément par un auteur de l&#39;attaque. La limite de la profondeur de la région Sybil dépend donc de la distance maximum entre les auteurs de l&#39;attaque et les xpercent% membres référents les plus proches, cette distance caractéristique est nommée &lt;code&gt;stepAttackers&lt;/code&gt;.
La taille maximale d&#39;une région Sybil créée par &lt;code&gt;sigQty&lt;/code&gt; membres malveillants dépend du levier L=sigQty/sigStock :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;taille max région Sybil = (sigStock-sigQty)*(1-L^(stepMax-stepAttackers))/(1-L)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et de même la taille maximale théorique de la toile de confiance est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WoTmax = (sigStock)*L^(stepMax-1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sauf que dans les faits, la plupart des membres ne consommeront pas tout leur stock de certifications. De nombreuses études sociologiques montrent qu&#39;un humain connaît en moyenne cinquante personnes, remplaçons donc sigStock par 50 :&lt;/p&gt;
&lt;p&gt;WoTmoy= (50)*(sigQty/50)^(stepMax-1)&lt;/p&gt;
&lt;p&gt;Notre toile de confiance peut donc être dimensionnée avec seulement deux paramètres, notre objectif avec la Ğ1 est de créer une zone économique libre de l&#39;ordre du million d&#39;utilisateurs, voyons donc quelles combinaisons du couple (sigQty;stepMax) permettent d&#39;attendre le million :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/wot-moy.png&quot; alt=&quot;graphe WoTmoy en fonction de sigQty et stepMax&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La taille maximale d&#39;une région Sybil croît linéairement par rapport à &lt;code&gt;sigQty&lt;/code&gt; mais exponentiellement par rapport à &lt;code&gt;stepMax&lt;/code&gt;, donc pour avoir une toile la plus solide possible, nous devons minimiser la valeur de &lt;code&gt;stepMax&lt;/code&gt;. Le graphe ci-dessus nous montre que la valeur de &lt;code&gt;stepMax&lt;/code&gt; la plus faible permettant d&#39;atteindre le million de membres est de cinq.
Pour la valeur de &lt;code&gt;sigQty&lt;/code&gt;, nous avons le choix entre quatre pour atteindre 1,2 million ou cinq pour atteindre le demi-million.
Sachant que la formule &lt;code&gt;WoTmoy&lt;/code&gt; nous donne un ordre de grandeur et qu&#39;elle considère tous les comptes comme référents (ce qui n&#39;est pas le cas en réalité), la taille maximale réelle que nous pourrons atteindre est certainement plus élevée, un demi-million est donc suffisant d&#39;autant que plus &lt;code&gt;sigQty&lt;/code&gt; est faible, plus il est facile de lancer une attaque Sybil (c&#39;est plus simple d&#39;être quatre complices que d&#39;être cinq). Par mesure de sécurité nous avons donc choisi cinq, ce qui nous donne déjà :&lt;/p&gt;
&lt;p&gt;stepMax = 5
sigQty = 5
sigStock &amp;gt;= 50&lt;/p&gt;
&lt;p&gt;la taille max d&#39;une région Sybil est donc : &lt;code&gt;(sigStock-sigQty)*(1-(sigStock/5)^(5-stepAttackers))/(1-(sigStock/5))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;avec sigStock = 50 cela fait une région Sybil de : &lt;code&gt;45*(1-10^(5-stepAttackers))/(-9)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Une bonne façon de nous protéger est donc de maximiser &lt;code&gt;stepAttackers&lt;/code&gt;. C&#39;est pour cela que nous avons fait en sorte que dans la toile initiale Ğ1 beaucoup de membres référents soient déjà à quatre de distance les uns des autres.&lt;/p&gt;
&lt;p&gt;Autre moyen de nous prémunir d&#39;une attaque Sybil, si elle était suffisamment lente pour que nous ayons le temps de la détecter alors les membres référents pourraient tendre volontairement la toile pour stopper l&#39;élargissement de la zone Sybil le temps que les auteurs de l&#39;attaque soient déchus de leur statut de membre par non renouvellement des certifications légitimes dont ils avaient bénéficié pour devenir membre.
Le problème c&#39;est qu&#39;une attaque Sybil peut être propagée par des comptes robots qui se certifieront très rapidement et de manière optimale, comment donc pourrions-nous les ralentir de force ?
En imposant un délai minimal entre deux certifications !&lt;/p&gt;
&lt;h3 id=&quot;2-une-question-de-temps&quot;&gt;2. Une question de temps&lt;/h3&gt;
&lt;p&gt;Nous venons de voir que pour ralentir le déploiement d&#39;une attaque Sybil afin d&#39;avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. C’est la raison pour laquelle nous avons créé le paramètre &lt;code&gt;sigPeriod&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Voici un graphe d&#39;évolution de la taille d&#39;une région Sybil en fonction de &lt;code&gt;sigPeriod&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/impact_sig_period.png&quot; alt=&quot;graphe taille Sybil en fonction de sigPeriod et stepAttackers&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On constate que le paramètre &lt;code&gt;sigPeriod&lt;/code&gt; a une influence très forte sur la vitesse de propagation d&#39;une région Sybil, il nous faut donc choisir un &lt;code&gt;sigPeriod&lt;/code&gt; suffisamment élevé pour que les zones légitimes de la toile puissent croître au moins aussi vite que les régions Sybil.&lt;/p&gt;
&lt;p&gt;De plus, un &lt;code&gt;sigPeriod&lt;/code&gt; élevé rend l&#39;acte de certification plus coûteux, et plus cet acte est coûteux, plus cela incite l&#39;utilisateur à certifier avec parcimonie.
Il y a donc beaucoup d&#39;avantages à choisir un &lt;code&gt;sigPeriod&lt;/code&gt; élevé, et pas d&#39;inconvénients techniques, nous sommes donc partis sur 5 jours.&lt;/p&gt;
&lt;p&gt;Nous aurions aussi pu choisir 7 jours (=1 semaine) par souci de simplicité, mais une autre idée sous-tendait le choix de 5 jours plutôt que 7 : les rythmes de nos sociétés. Certifier demande de prendre du temps pour s&#39;assurer du bon respect de la licence Ğ1, et la plupart des humains ont davantage de temps le week-end, l&#39;idée était donc de permettre à un utilisateur qui émettrait 1 certification par week-end de ne pas être contraint par &lt;code&gt;sigPeriod&lt;/code&gt;, nous nous sommes donc calés sur la durée d&#39;une semaine ouvrée (5 jours), plutôt qu&#39;une semaine complète (7 jours).&lt;/p&gt;
&lt;h3 id=&quot;3-une-confiance-eternelle-sigvalidity-msvalidity&quot;&gt;3. Une confiance éternelle ? (sigValidity, msValidity)&lt;/h3&gt;
&lt;p&gt;Si toute certification restait valable &lt;em&gt;ad vitam æternam&lt;/em&gt;, cela serait problématique pour au moins deux raisons :
d&#39;une part il est important que les membres qui décèdent cessent de créer des DU ;
d&#39;autre part, il est important que les faux comptes détectés par la communauté puissent ne pas rester membre indéfiniment.&lt;/p&gt;
&lt;p&gt;Pour ce faire, il est nécessaire que les certifications aient une durée de vie limitée et qu&#39;il faille donc renouveler sa confiance envers ses pairs régulièrement.
D&#39;un autre côté, il ne faut pas non plus que les membres passent leur temps à renouveler leurs certifications au lieu de participer à des échanges économiques.
De plus, une certification à durée de vie trop courte rendrait l&#39;acte de certification trop léger. L&#39;acte de certification doit rester conséquent pour être pris au sérieux.
Enfin, nous souhaitons également que la durée de vie d&#39;une certification soit une durée simple à retenir pour que le plus grand nombre s’en souvienne.&lt;/p&gt;
&lt;p&gt;Une fois tous ces critères pris en compte, nous hésitions entre un, deux ou trois ans.
Historiquement, nous avons d&#39;abord tranché sur les valeurs de &lt;code&gt;sigPeriod&lt;/code&gt; et &lt;code&gt;sigStock&lt;/code&gt;, ce qui impliquait qu&#39;il fallait a minima 495 jours pour épuiser tout son stock de certifications, un an n&#39;est donc pas possible.
Trois ans nous semblait trop long, nous avons donc choisi deux ans.&lt;/p&gt;
&lt;p&gt;Mais considérer qu&#39;un mort va continuer à créer des DU dont personne ne pourra bénéficier pendant une durée pouvant aller jusqu&#39;à deux ans, cela nous semblait trop. C&#39;est pourquoi nous avons opté pour une durée de vie plus faible concernant le renouvellement de l&#39;adhésion.
Nous avons donc choisi un an. Mais, nous aurions aussi pu choisir six mois. La valeur de &lt;strong&gt;msValidity&lt;/strong&gt; est au final assez secondaire et pourrait facilement être modifiée dans le futur si la communauté le souhaite.&lt;/p&gt;
&lt;h3 id=&quot;4-eviter-que-les-piscines-ne-deviennent-des-depots-sedimentaires-idtywindow-sigwindow-mswindow&quot;&gt;4. Éviter que les piscines ne deviennent des dépôts sédimentaires (&lt;code&gt;idtyWindow&lt;/code&gt;, &lt;code&gt;sigWindow&lt;/code&gt;, &lt;code&gt;msWindow&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Il faut nettoyer régulièrement les piscines pour éviter qu&#39;elles n&#39;atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent exécuter un nœud Duniter.
Pour ce faire il faut que les identités et certifications en attente restent le moins longtemps possible en piscine, elles doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d&#39;être inscrites en blockchain.
Pour la Ğ1, nous avons estimé que deux mois était un minimum pour que tous les certificateurs potentiels d&#39;une nouvelle identité aient le temps de se synchroniser. Nous voulions aussi que cette durée corresponde à un faible nombre d&#39;unités d&#39;une grandeur usuelle, afin d&#39;être facilement intégrée et mémorisée par le plus grand nombre.
Typiquement, choisir sept semaines aurait été plus compliqué à intégrer et à retenir. Nous voulions que les durées à connaître restent le plus facilement intégrables et mémorisables.
Un mois nous semblait trop court, la valeur de deux mois s&#39;est donc imposée. Et par souci de simplicité, nous avons appliqué cette même valeur de deux mois aux trois paramètres &lt;code&gt;idtyWindow&lt;/code&gt;, &lt;code&gt;sigWindow&lt;/code&gt; et &lt;code&gt;msWindow&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;5-limiter-les-membres-connaissant-beaucoup-de-monde-sigstock&quot;&gt;5. Limiter les membres connaissant beaucoup de monde (&lt;code&gt;sigStock&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;De nombreuses études sociologiques montrent qu&#39;un humain connaît en moyenne cinquante personnes. Bien entendu, c&#39;est une moyenne. Certains humains en connaissent beaucoup plus, d&#39;autres beaucoup moins.
Là encore, nous avons tranché par le critère « nombre facile à retenir ».
Bien que l&#39;impact de &lt;code&gt;sigStock&lt;/code&gt; sur la taille maximale des régions Sybil soit secondaire, il convient tout de même de ne pas choisir un &lt;code&gt;sigStock&lt;/code&gt; trop grand !
150 nous semblait trop élevé, nous avons donc choisi 100.&lt;/p&gt;
&lt;h3 id=&quot;6-se-premunir-des-minorites-de-blocage-xpercent&quot;&gt;6. Se prémunir des minorités de blocage (&lt;code&gt;xpercent&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Il est très facile de devenir membre référent, ainsi une attaque possible pourrait consister à créer une région Sybil de membres référents. Une telle région Sybil croîtrait beaucoup plus lentement, mais elle pourrait permettre de bloquer le reste de la toile légitime en jouant sur la règle de distance. C&#39;est la raison pour laquelle la règle de distance ne doit pas se baser sur 100% des membres référents. Nous avons donc décidé de créer un paramètre &lt;code&gt;xpercent&lt;/code&gt; qui définit quelle proportion des membres référents doit être à moins de 5 pas de chacun.&lt;/p&gt;
&lt;p&gt;Cette proportion doit être suffisamment faible pour empêcher une minorité de blocage (des Sybil référents qui seraient trop loin des membres légitimes). Mais paradoxalement cette proportion doit également être suffisamment élevée pour que la règle de distance limite bien la taille maximale des régions Sybil. Le paramètre &lt;code&gt;xpercent&lt;/code&gt; fut l&#39;un des plus difficiles à définir, nous nous autorisons donc à ajuster sa valeur au fil de l&#39;expérience Ğ1 si nous constatons que cela est nécessaire.&lt;/p&gt;
&lt;p&gt;Nous nous sommes inspirés du &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Principe_de_Pareto&quot;&gt;principe des 80-20&lt;/a&gt; : si au moins 20% des membres s&#39;assurent de bien densifier les zones légitimes de la toile alors 80% des référents devraient se trouver à moins de 5 pas de chaque membre. 80% est donc une valeur maximale pour &lt;code&gt;xpercent&lt;/code&gt;, au-dessus la règle de distance pourrait être trop contraignante sur les usages légitimes. Par souci de sécurité, nous avons opté pour la valeur maximale possible.&lt;/p&gt;
&lt;h3 id=&quot;7-l-ajout-de-msperiod-une-protection-anti-spam&quot;&gt;7. L&#39;ajout de &lt;code&gt;msPeriod&lt;/code&gt;, une protection anti-spam&lt;/h3&gt;
&lt;p&gt;Ce paramètre un peu à part, rajouté après le bloc zéro, ne sert pas à réguler la toile de confiance mais à protéger le réseau informatique qui porte la monnaie contre les attaques de type « spam ».
En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourraient demander leur renouvellement à chaque bloc (toutes les cinq minutes), ou pire encore, envoyer des centaines de requêtes de renouvellement par minute pour submerger les nœuds Duniter. En l&#39;absence de limitation, les nœuds Duniter sont censés traiter toutes les requêtes de renouvellement, même si l’adhésion a été renouvelée il y a cinq minutes !
Pour nous prémunir de cette possibilité d&#39;attaque nous avons ajouté le paramètre &lt;code&gt;msPeriod&lt;/code&gt;.
Par souci de simplicité, nous avons choisi de lui attribuer la même valeur qu&#39;aux paramètres &lt;code&gt;idtyWindow&lt;/code&gt;, &lt;code&gt;sigWindow&lt;/code&gt; et &lt;code&gt;msWindow&lt;/code&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>La toile de confiance en détail</title>
          <pubDate>Sun, 15 Apr 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/toile-de-confiance/la-toile-de-confiance-en-detail/</link>
          <guid>https://duniter.fr/wiki/toile-de-confiance/la-toile-de-confiance-en-detail/</guid>
          <description xml:base="https://duniter.fr/wiki/toile-de-confiance/la-toile-de-confiance-en-detail/">&lt;h1 id=&quot;la-toile-de-confiance-en-detail&quot;&gt;La toile de confiance en détail&lt;/h1&gt;
&lt;p&gt;L&#39;objet de cet article est de détailler le fonctionnement des différents paramètres d&#39;une toile de confiance duniter ainsi que d&#39;expliquer comment ont été choisies les valeurs de ces paramètres dans le cas de la monnaie Ğ1.&lt;/p&gt;
&lt;p&gt;Aucune connaissance particulière n&#39;est requise pour comprendre ce qui suit, car je vais à chaque fois bien définir toutes les notions abordées et tous les termes utilisés. :)
Cependant nous irons assez loin, nous rentrerons notamment dans le détail du protocole duniter (uniquement sur les parties toile de confiance bien sûr) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tous les rouages d&#39;une toile de confiance duniter.
Rassurez-vous, nous allons y aller progressivement, nous commencerons par une vision d&#39;ensemble puis nous détaillerons graduellement. :)&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;prerequis&quot;&gt;Prérequis&lt;/h2&gt;
&lt;p&gt;Avant de lire cet article, il est vivement recommandé d&#39;étudier la &lt;a href=&quot;https://duniter.fr/wiki/g1/licence-g1/&quot;&gt;licence Ğ1&lt;/a&gt; et de lire les pages suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/&quot;&gt;Certifier de nouveaux membres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/&quot;&gt;Question Fréquentes sur la toile de confiance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;pourquoi-a-t-on-besoin-d-une-toile-de-confiance&quot;&gt;Pourquoi a-t-on besoin d’une toile de confiance ?&lt;/h2&gt;
&lt;p&gt;Nous avons besoin d&#39;une toile de confiance pour répondre à deux objectifs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;S&#39;assurer que chaque être humain membre de la monnaie co-crée bien le même nombre de Dividendes Universel par intervalle de création (dans le cas de la Ğ1 cet intervalle est &lt;code&gt;86400&lt;/code&gt; (=1 jour exprimé en secondes), c&#39;est le &lt;em&gt;paramètre monétaire&lt;/em&gt; &lt;code&gt;dt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Identifier les calculateurs de blocs pour leur affecter une difficulté personnalisée. Cela est nécessaire afin d&#39;éviter que le mécanisme de &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/preuve-de-travail/&quot;&gt;preuve de travail&lt;/a&gt; ne permette une centralisation du support de la monnaie (la blockchain) comme c&#39;est hélas le cas dans de nombreuses crypto-monnaies non-libres.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Attends c&#39;est quoi un « paramètre monétaire » ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Chaque monnaie Duniter possède sa propre blockchain au sein de laquelle sont définis ses propres paramètres monétaires (dans le bloc zéro), il s&#39;agit d&#39;un ensemble de « curseurs » qu&#39;il faut ajuster en fonction des objectifs visés. À l&#39;heure où j&#39;écris ces lignes le protocole Duniter (noté DUP) comporte vingt-et-un paramètres monétaires dont dix concernent la toile de confiance !
Nous décrirons en détail les dix paramètres qui concernent la toile de confiance, nous n&#39;aborderons pas les autres.
Sachez simplement que dans le cas de la monnaie Ğ1, le DU est créé toutes les 24 h (86 400 secondes) mais que cet intervalle de temps régi par le paramètre &lt;code&gt;dt&lt;/code&gt; peut très bien être fixé à d&#39;autres valeurs pour d&#39;autres monnaies.&lt;/p&gt;
&lt;p&gt;Nous ne traiterons pas ici le deuxième objectif relatif à la preuve de travail, car ce n&#39;est pas l&#39;objet de cet article, la seule chose à comprendre est que la toile de confiance nous permet &lt;strong&gt;d&#39;identifier&lt;/strong&gt; les membres qui calculent des blocs, et que cette identification nous permet d&#39;imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d&#39;identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géantes pour prendre le contrôle de la blockchain et paralyser toute la communauté !&lt;/p&gt;
&lt;p&gt;Revenons donc au premier objectif, s&#39;assurer que chaque humain n&#39;ait qu&#39;un seul compte membre.
En pratique, le risque zéro n&#39;existe pas, notre objectif n&#39;est donc pas de concevoir une toile de confiance au sein de laquelle la fraude serait impossible (ce qui est de toute manière impossible).
Voici donc une reformulation plus réaliste en quatre sous-objectifs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rendre l’acte de certification suffisamment lourd pour obliger les membres à un minimum de vigilance.&lt;/li&gt;
&lt;li&gt;Rendre la fraude suffisamment difficile pour qu&#39;elle soit marginale.&lt;/li&gt;
&lt;li&gt;Éviter que les éventuelles attaques Sybil aient un impact significatif sur la monnaie. (&lt;em&gt;que les faux DU créés aient un poids négligeable par rapport à la masse monétaire légitime.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Rendre la croissance de régions Sybil suffisamment lente pour que la communauté ait le temps de réagir.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Attends, une attaque quoi ?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Attaque_Sybil&quot;&gt;&lt;strong&gt;attaque Sybil&lt;/strong&gt;&lt;/a&gt;, c&#39;est le nom que l&#39;on donne à une attaque d&#39;un système de réputation par la création de fausses identités.
Une toile de confiance est un cas particulier de &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Reputation_system&quot;&gt;&lt;strong&gt;système de réputation&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il y a beaucoup de stratégies de scénarios d&#39;attaques Sybil possibles ainsi que de mobiles différents.
Notre objectif est que la toile de confiance nous prémunisse contre les attaques Sybil susceptibles de compromettre le bon fonctionnement de la monnaie ou/et du réseau informatique qui la porte.
Ce qui veut dire que les micro-attaques Sybil orchestrées par un petit groupe dont l&#39;objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n&#39;est pas à la toile de confiance de nous prémunir de ces micro-attaques, mais à la justice de la communauté concernée, tout comme ce n&#39;est pas à la commune de vous prémunir d&#39;un cambriolage chez vous, mais la commune va vous garantir le fonctionnement des réseaux d&#39;eau, le nettoyage de la voirie, etc…
De la même façon, la toile de confiance Duniter nous garantit collectivement le bon fonctionnement de notre monnaie et du réseau informatique qui la porte, et c&#39;est déjà énorme !&lt;/p&gt;
&lt;h3 id=&quot;l-importance-de-l-independance-de-tout-autre-systeme-d-identification&quot;&gt;L’importance de l’indépendance de tout autre système d’identification&lt;/h3&gt;
&lt;p&gt;Il nous est très régulièrement proposé de nous baser sur des systèmes d&#39;identification centralisés et alimentés par des monnaies non-libres dépendant d&#39;un état ou d&#39;un autre.
Mais nous serions alors dépendants de ces systèmes d&#39;identification centralisés pour le bon fonctionnement de notre toile de confiance, ça n&#39;a pas de sens.
De plus, les membres d&#39;une monnaie libre peuvent être de n&#39;importe quelle nationalité ou culture, nous perdrions cette universalité en dépendant d&#39;un système d&#39;identification étatique. De plus, cela exclurait les sans-papiers et les apatrides.
Il est essentiel pour nous de ne dépendre d&#39;aucun état ni d&#39;aucune institution. Nous ne dépendons que du réseau internet, et encore, il existe d&#39;autres réseaux, si internet venait à s&#39;éteindre, les humains membres d&#39;une monnaie libre pourraient très bien créer leur propre réseau d&#39;information, c&#39;est déjà ce que font certaines associations en créant leur propre bout de réseau, donc c&#39;est possible.&lt;/p&gt;
&lt;h2 id=&quot;quelques-bases-en-theorie-des-graphes&quot;&gt;Quelques bases en théorie des graphes&lt;/h2&gt;
&lt;h3 id=&quot;un-peu-de-vocabulaire&quot;&gt;Un peu de vocabulaire&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;graphe : ensemble de points (nommés sommets) reliés entre eux par des flèches (nommées arcs).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;graphe simple : graphe sans boucle (arc reliant un sommet à lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;graphe orienté : graphe dont les arcs ont un sens, l&#39;arc A –&amp;gt; B est donc différent de l&#39;arc B –&amp;gt; A.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;extrémité initiale et finale d&#39;un arc : l&#39;arc A –&amp;gt; B a pour extrémité initiale A et pour extrémité finale B.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;sommet isolé : sommet n&#39;étant lié à aucun arc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;degré d&#39;un sommet : nombre d&#39;arcs reliant ce sommet (dans les deux sens).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;demi-degré extérieur d&#39;un sommet A : nombre d&#39;arcs ayant pour extrémité initiale le sommet A&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;demi-degré intérieur d&#39;un sommet A : nombre d&#39;arcs ayant pour extrémité finale le sommet A&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/degres.jpg&quot; alt=&quot;visualisation des degrés d&amp;#39;un sommet&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;chemin : trajet qu&#39;il faut suivre pour se rendre d&#39;un sommet A à un sommet B en respectant le sens des arcs. Le nombre d&#39;arcs traversés est la longueur du chemin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;definition-d-une-toile-de-confiance-duniter&quot;&gt;Définition d’une toile de confiance Duniter&lt;/h3&gt;
&lt;p&gt;Les toiles de confiance Duniter (une par monnaie) sont des graphes simples orientés et sans sommets isolés.
Les sommets en sont les membres et les arcs les certifications.&lt;/p&gt;
&lt;p&gt;Pourquoi orientés ?
Certifier est un acte personnel qui n&#39;engage que l&#39;émetteur de la certification, la confiance qu&#39;il accorde au récepteur n&#39;est pas forcément réciproque dans tous les cas (elle l&#39;est souvent), mais on ne peut pas imposer au récepteur de faire confiance à l&#39;émetteur.&lt;/p&gt;
&lt;p&gt;De plus, tous les sommets sont des identités membres ou ayant déjà été membres par le passé, les sommets correspondant aux anciens membres sont dans un état particulier dit « désactivé ». Les sommets désactivés ne peuvent plus émettre ou recevoir de nouvelles certifications, mais les certifications qu&#39;ils ont émises et reçues avant de perdre leurs statuts de membre restent actives vers les autres membres jusqu’à leur date d&#39;expiration dans le but d&#39;éviter un effondrement en cascade de la toile de confiance. Si ces anciens membres ne redeviennent pas membres alors les certifications qu&#39;ils avaient émises et reçues finiront par expirer, et les sommets &quot;désactivés&quot; en question finiront donc par devenir des sommets isolés.&lt;/p&gt;
&lt;p&gt;Pour finir sur cette histoire d&#39;ancien membre, au bout d&#39;un certain délai qui dépend d&#39;un paramètre monétaire, le sommet désactivé est supprimé et l&#39;identité associée passe à l&#39;état révoqué, c&#39;est-à-dire que cette identité ne pourra plus jamais redevenir membre. L’humain qui possédait cette identité reste toutefois libre de redemander son adhésion dans la toile sous une nouvelle identité. :)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Qu’entends-tu par identité ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une identité est un groupe de trois informations : une clé publique, un nom, et un blockstamp.
Un blockstamp est une référence à un bloc précis d&#39;une blockchain. Ça permet de dater le moment auquel l&#39;identité a été créée, et de relier l&#39;identité à une blockchain particulière, donc à une monnaie particulière (car chaque monnaie a sa propre blockchain).&lt;/p&gt;
&lt;p&gt;Une identité peut être dans cinq états différents : en attente, membre, ancien membre, révoquée ou exclue.
Nous reviendrons plus en détail sur chacun de ces états.&lt;/p&gt;
&lt;p&gt;Résumons tout cela avec un exemple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A -&amp;gt; B -&amp;gt; C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     \--&amp;gt; D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si pour une raison x ou y, A perd son statut de membre, alors la toile s&#39;effondre et tous les autres membres perdent aussi leur statut de membre en cascade. Pour éviter cela, la certification A –&amp;gt; B restera valide jusqu&#39;à sa date d&#39;expiration, laissant à B le temps de se faire certifier par C ou D par exemple.&lt;/p&gt;
&lt;p&gt;L&#39;absence de sommet isolé implique également que lorsqu&#39;un nouveau membre est ajouté à la toile de confiance il faut ajouter en même temps (c&#39;est-à-dire dans le même bloc) l&#39;ensemble des certifications qui lui permettent de devenir membre.
C&#39;est pourquoi nous avons besoin d&#39;un espace de stockage intermédiaire qui contient les identités &lt;strong&gt;en attente&lt;/strong&gt; de devenir membre ainsi que les certifications émises par des membres envers ces identités, cet espace c&#39;est la fameuse « piscine » des nœuds Duniter (que l&#39;on aurait aussi pu nommer « bac à sable » puisque dans le code de Duniter c&#39;est le terme &lt;code&gt;sandbox&lt;/code&gt; qui est utilisé). Notons que ces « piscines » contiennent également d&#39;autres types de documents non mentionnés ici.&lt;/p&gt;
&lt;h2 id=&quot;definition-des-regles-d-une-toile-de-confiance-duniter&quot;&gt;Définition des règles d’une toile de confiance Duniter&lt;/h2&gt;
&lt;p&gt;Les toiles de confiance Duniter (une par monnaie) sont régies par huit règles présentées ci-après.
L&#39;application de ces règles dépend de onze paramètres variables d&#39;une monnaie à l&#39;autre. La valeur de dix d&#39;entre eux est fixée dans le bloc zéro, le onzième paramètre &lt;code&gt;msPeriod&lt;/code&gt; est écrit en dur dans le code, car il a été ajouté après l&#39;écriture du bloc zéro de la Ğ1.
Cette partie ne présente que les définitions des règles, les raisons d&#39;être de ces règles sont présentées dans le cadre de l&#39;historicité de leur apparition dans la partie « Origine des règles et cas de la  Ğ1 ».&lt;/p&gt;
&lt;h3 id=&quot;1-regle-de-distance-et-membres-referents&quot;&gt;1. Règle de distance et membres référents&lt;/h3&gt;
&lt;p&gt;Paramètres : &lt;strong&gt;StepMax&lt;/strong&gt; et &lt;strong&gt;xPercent&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ces deux paramètres sont très fortement liés et définissent ensemble une seule et même règle : la règle de distance.
Pour définir la règle de distance, nous devons au préalable définir ce qu&#39;est un membre référent :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Membre référent&lt;/strong&gt; : un membre A est référent si et seulement si ses deux demi-degrés sont supérieurs ou égaux à &lt;code&gt;CEIl(N^(1/stepMax))&lt;/code&gt; où N est le nombre total de membres.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nous pouvons maintenant définir la règle de distance :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Règle de distance&lt;/strong&gt; : un membre A respecte la règle de distance si et seulement si pour plus de xPercent % des membres référents R il existe un chemin de R vers A d&#39;une longueur inférieure ou égale à &lt;code&gt;stepMax&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La notion de membre référent ne sert qu&#39;à l&#39;application de la règle de distance, les membres référents n&#39;ont aucun privilège sur les membres non-référents.
Dans une toile aboutie, c&#39;est-à-dire dans une toile ou chaque membre a certifié tous les membres qu&#39;il est en mesure de certifier légitimement, tous les membres devraient être référents, mais de part la croissance progressive de la toile d&#39;une part et le remplacement générationnel d&#39;autre part, il existe à tout instant &lt;code&gt;t&lt;/code&gt; des membres qui n&#39;ont pas encore certifié tous les membres qu&#39;ils sont en mesure de certifier légitimement. Ces membres seraient bloquants s&#39;ils étaient pris en compte dans la règle de distance, et la toile de confiance ne pourrait jamais accueillir de nouveaux membres.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quand s&#39;applique la règle de distance ?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La vérification de la règle de distance étant coûteuse en calcul, elle ne s&#39;applique que lors de l&#39;obtention et du renouvellement du statut de membre. (Voir partie « renouvellement du statut de membre »).
&lt;em&gt;Cas particulier : la règle de distance ne s&#39;applique pas au bloc zéro (écriture de la toile initiale).&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-regle-du-nombre-minimal-de-certifications-recus&quot;&gt;2. Règle du nombre minimal de certifications reçus&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigQty&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C&#39;est la règle la plus simple, elle stipule que tout membre doit à tout moment (comprendre à tout bloc) être le destinataire d&#39;au moins &lt;code&gt;sigQty&lt;/code&gt; certifications actives.
Si, ne serait-ce que pour le temps d&#39;un seul bloc, un membre A se retrouve avec moins de &lt;code&gt;sigQty&lt;/code&gt; certifications actives reçues, alors il perd le statut de membre à ce bloc. Il doit alors publier une demande de renouvellement de son adhésion.&lt;/p&gt;
&lt;h3 id=&quot;3-regle-de-renouvellement-de-l-adhesion&quot;&gt;3. Règle de renouvellement de l’adhésion&lt;/h3&gt;
&lt;p&gt;Paramètres : &lt;strong&gt;msValidity&lt;/strong&gt;, &lt;strong&gt;msPeriod&lt;/strong&gt; et &lt;strong&gt;msWindow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L&#39;obtention du statut de membre n&#39;est pas un acquis pour la vie, mais pour une durée de &lt;code&gt;msValidity&lt;/code&gt; secondes.&lt;/p&gt;
&lt;p&gt;Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut à tout moment émettre une demande de renouvellement de son adhésion à condition que son dernier renouvellement date de plus de &lt;code&gt;msPeriod&lt;/code&gt; secondes (lorsqu&#39;un membre ne s&#39;est jamais renouvelé, la date du dernier renouvellement correspond à la date d&#39;obtention du statut de membre).
Lorsqu&#39;une demande de renouvellement d&#39;adhésion est émise, elle est stockée en « piscine » pour une durée maximale de &lt;code&gt;msWindow&lt;/code&gt; secondes, puis elle sera inscrite en blockchain dès que le membre en question respectera la règle de distance &lt;strong&gt;et&lt;/strong&gt; la règle &lt;code&gt;sigQty&lt;/code&gt; (s’il les respecte déjà, dès qu&#39;un nœud ayant reçu la demande de renouvellement trouve un bloc).&lt;/p&gt;
&lt;p&gt;Tout membre dont le dernier renouvellement date de plus de &lt;code&gt;msValidity&lt;/code&gt; secondes perd le statut de membre au premier bloc où cette durée est atteinte. Dans ce cas, l&#39;ancien membre dispose à nouveau d&#39;une durée de &lt;code&gt;msValidity&lt;/code&gt; secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc &lt;code&gt;2 × msValidity&lt;/code&gt; après le dernier renouvellement, l&#39;ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S&#39;il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro.&lt;/p&gt;
&lt;h3 id=&quot;4-regle-d-expiration-des-certifications&quot;&gt;4. Règle d’expiration des certifications&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigValidity&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Toute certification inscrite en blockchain expire &lt;strong&gt;sigValidity&lt;/strong&gt; secondes après son &lt;strong&gt;émission&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;L&#39;émission et l&#39;écriture d&#39;une certification ont lieu à des instants différents. Lorsque le membre &lt;em&gt;A&lt;/em&gt; émet une certification à un instant &lt;em&gt;t1&lt;/em&gt;, elle est d&#39;abord stockée en piscine à cet instant &lt;em&gt;t1&lt;/em&gt;, puis sera écrite en blockchain à un instant &lt;em&gt;t2&lt;/em&gt;, dès que les règles de la toile le permettent, il peut y avoir plusieurs semaines d&#39;écart entre &lt;em&gt;t1&lt;/em&gt; et &lt;em&gt;t2&lt;/em&gt; !!&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&quot;5-regle-du-stock-limite-de-certifications-actives&quot;&gt;5. Règle du stock limité de certifications actives&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigStock&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Par certification active nous entendons certification inscrite en blockchain et qui n&#39;a pas encore expiré.&lt;/p&gt;
&lt;p&gt;À tout bloc et pour tout membre, l&#39;ensemble des certifications émises par ce membre et actives doit être inférieur ou égal à &lt;code&gt;sigStock&lt;/code&gt;. Lorsque ce quota est atteint, le membre en question devra attendre qu&#39;une certification active dont il est l&#39;émetteur expire pour pouvoir en écrire une autre.&lt;/p&gt;
&lt;h3 id=&quot;6-regle-de-l-intervalle-d-ecriture-entre-deux-certifications&quot;&gt;6. Règle de l’intervalle d’écriture entre deux certifications&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigPeriod&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;une certification émise par un membre A est écrite en blockchain, aucune autre certification émise par A ne pourra être écrite en blockchain avant &lt;code&gt;sigPeriod&lt;/code&gt; secondes.&lt;/p&gt;
&lt;h3 id=&quot;7-regle-de-la-fenetre-d-ecriture-d-une-certification&quot;&gt;7. Règle de la fenêtre d’écriture d’une certification&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;sigWindow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;une certification est émise par un membre A, elle restera stockée en « piscine » pour au plus &lt;code&gt;sigWindow&lt;/code&gt; secondes. Si la certification en question n&#39;a toujours pas été écrite en blockchain passé ce délai, elle est simplement supprimée.&lt;/p&gt;
&lt;h3 id=&quot;8-regle-de-la-fenetre-d-ecriture-d-une-identite&quot;&gt;8. Règle de la fenêtre d’écriture d&#39;une identité&lt;/h3&gt;
&lt;p&gt;Paramètre : &lt;strong&gt;idtyWindow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;une identité est émise, elle restera stockée en « piscine » pour au plus &lt;code&gt;idtyWindow&lt;/code&gt; secondes. Si l&#39;identité en question n&#39;a toujours pas été écrite en blockchain passé ce délai, elle est simplement supprimée.&lt;/p&gt;
&lt;h2 id=&quot;le-cas-particulier-de-la-toile-initiale-au-bloc-zero&quot;&gt;Le cas particulier de la toile initiale au bloc zéro&lt;/h2&gt;
&lt;p&gt;L&#39;application des règles présentées ne rend l&#39;expansion d&#39;une toile possible qu’à partir d&#39;une toile pré-existante, il y a donc un cas particulier où certaines règles ne s&#39;appliquent pas : l&#39;écriture du bloc zéro.&lt;/p&gt;
&lt;p&gt;Seules les règles 2 et 5 s&#39;appliquent lors de l&#39;écriture du bloc zéro.&lt;/p&gt;
&lt;p&gt;Dans la pratique, c&#39;est l&#39;humain qui génère le bloc zéro qui choisit manuellement quelles identités sont écrites dans le bloc zéro, mais toutes les identités et certifications écrites dans le bloc zéro doivent respecter les règles 2 et 5 et de plus le bloc zéro doit être signé avec la clé privée d&#39;une des identités écrites.
Dès lors qu&#39;un bloc zéro correct a été généré, toute identité inscrite dans le bloc zéro peut soumettre le bloc suivant, de fait l&#39;auteur du bloc zéro n&#39;a donc plus la main.&lt;/p&gt;
&lt;h2 id=&quot;origine-des-regles-et-cas-de-la-g1&quot;&gt;Origine des règles et cas de la Ğ1&lt;/h2&gt;
&lt;h3 id=&quot;1-distance-et-taille-limite&quot;&gt;1. Distance et taille limite&lt;/h3&gt;
&lt;p&gt;La règle de distance a pour objectif de limiter la taille maximale d&#39;une région Sybil ainsi que la taille maximale de la communauté monétaire.
&lt;code&gt;xpercent&lt;/code&gt; permet d&#39;éviter une minorité de blocage (membres trop peu actifs).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/wot-sybil.jpg&quot; alt=&quot;zone Sybil&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Les régions Sybil sont isolées du reste du graphe, car les comptes Sybil ne recevront de certifications que de la part d&#39;autres comptes Sybil ou de la part des auteurs de l&#39;attaque. Ainsi, tout plus court chemin entre un membre légitime et un compte Sybil passe forcément par un auteur de l&#39;attaque. La limite de la profondeur de la région Sybil dépend donc de la distance maximum entre les auteurs de l&#39;attaque et les xpercent% membres référents les plus proches, cette distance caractéristique est nommée &lt;code&gt;stepAttackers&lt;/code&gt;.
La taille maximale d&#39;une région Sybil créée par &lt;code&gt;sigQty&lt;/code&gt; membres malveillants dépend du levier L=sigQty/sigStock :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;taille max région Sybil = (sigStock-sigQty)*(1-L^(stepMax-stepAttackers))/(1-L)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et de même la taille maximale théorique de la toile de confiance est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WoTmax = (sigStock)*L^(stepMax-1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sauf que dans les faits, la plupart des membres ne consommeront pas tout leur stock de certifications. De nombreuses études sociologiques montrent qu&#39;un humain connaît en moyenne cinquante personnes, remplaçons donc sigStock par 50 :&lt;/p&gt;
&lt;p&gt;WoTmoy= (50)*(sigQty/50)^(stepMax-1)&lt;/p&gt;
&lt;p&gt;Notre toile de confiance peut donc être dimensionnée avec seulement deux paramètres, notre objectif avec la Ğ1 est de créer une zone économique libre de l&#39;ordre du million d&#39;utilisateurs, voyons donc quelles combinaisons du couple (sigQty;stepMax) permettent d&#39;attendre le million :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/wot-moy.png&quot; alt=&quot;graphe WoTmoy en fonction de sigQty et stepMax&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La taille maximale d&#39;une région Sybil croît linéairement par rapport à &lt;code&gt;sigQty&lt;/code&gt; mais exponentiellement par rapport à &lt;code&gt;stepMax&lt;/code&gt;, donc pour avoir une toile la plus solide possible, nous devons minimiser la valeur de &lt;code&gt;stepMax&lt;/code&gt;. Le graphe ci-dessus nous montre que la valeur de &lt;code&gt;stepMax&lt;/code&gt; la plus faible permettant d&#39;atteindre le million de membres est de cinq.
Pour la valeur de &lt;code&gt;sigQty&lt;/code&gt;, nous avons le choix entre quatre pour atteindre 1,2 million ou cinq pour atteindre le demi-million.
Sachant que la formule &lt;code&gt;WoTmoy&lt;/code&gt; nous donne un ordre de grandeur et qu&#39;elle considère tous les comptes comme référents (ce qui n&#39;est pas le cas en réalité), la taille maximale réelle que nous pourrons atteindre est certainement plus élevée, un demi-million est donc suffisant d&#39;autant que plus &lt;code&gt;sigQty&lt;/code&gt; est faible, plus il est facile de lancer une attaque Sybil (c&#39;est plus simple d&#39;être quatre complices que d&#39;être cinq). Par mesure de sécurité nous avons donc choisi cinq, ce qui nous donne déjà :&lt;/p&gt;
&lt;p&gt;stepMax = 5
sigQty = 5
sigStock &amp;gt;= 50&lt;/p&gt;
&lt;p&gt;la taille max d&#39;une région Sybil est donc : &lt;code&gt;(sigStock-sigQty)*(1-(sigStock/5)^(5-stepAttackers))/(1-(sigStock/5))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;avec sigStock = 50 cela fait une région Sybil de : &lt;code&gt;45*(1-10^(5-stepAttackers))/(-9)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Une bonne façon de nous protéger est donc de maximiser &lt;code&gt;stepAttackers&lt;/code&gt;. C&#39;est pour cela que nous avons fait en sorte que dans la toile initiale Ğ1 beaucoup de membres référents soient déjà à quatre de distance les uns des autres.&lt;/p&gt;
&lt;p&gt;Autre moyen de nous prémunir d&#39;une attaque Sybil, si elle était suffisamment lente pour que nous ayons le temps de la détecter alors les membres référents pourraient tendre volontairement la toile pour stopper l&#39;élargissement de la zone Sybil le temps que les auteurs de l&#39;attaque soient déchus de leur statut de membre par non renouvellement des certifications légitimes dont ils avaient bénéficié pour devenir membre.
Le problème c&#39;est qu&#39;une attaque Sybil peut être propagée par des comptes robots qui se certifieront très rapidement et de manière optimale, comment donc pourrions-nous les ralentir de force ?
En imposant un délai minimal entre deux certifications !&lt;/p&gt;
&lt;h3 id=&quot;2-une-question-de-temps&quot;&gt;2. Une question de temps&lt;/h3&gt;
&lt;p&gt;Nous venons de voir que pour ralentir le déploiement d&#39;une attaque Sybil afin d&#39;avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. C’est la raison pour laquelle nous avons créé le paramètre &lt;code&gt;sigPeriod&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Voici un graphe d&#39;évolution de la taille d&#39;une région Sybil en fonction de &lt;code&gt;sigPeriod&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/toile-de-confiance/impact_sig_period.png&quot; alt=&quot;graphe taille Sybil en fonction de sigPeriod et stepAttackers&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On constate que le paramètre &lt;code&gt;sigPeriod&lt;/code&gt; a une influence très forte sur la vitesse de propagation d&#39;une région Sybil, il nous faut donc choisir un &lt;code&gt;sigPeriod&lt;/code&gt; suffisamment élevé pour que les zones légitimes de la toile puissent croître au moins aussi vite que les régions Sybil.&lt;/p&gt;
&lt;p&gt;De plus, un &lt;code&gt;sigPeriod&lt;/code&gt; élevé rend l&#39;acte de certification plus coûteux, et plus cet acte est coûteux, plus cela incite l&#39;utilisateur à certifier avec parcimonie.
Il y a donc beaucoup d&#39;avantages à choisir un &lt;code&gt;sigPeriod&lt;/code&gt; élevé, et pas d&#39;inconvénients techniques, nous sommes donc partis sur 5 jours.&lt;/p&gt;
&lt;p&gt;Nous aurions aussi pu choisir 7 jours (=1 semaine) par souci de simplicité, mais une autre idée sous-tendait le choix de 5 jours plutôt que 7 : les rythmes de nos sociétés. Certifier demande de prendre du temps pour s&#39;assurer du bon respect de la licence Ğ1, et la plupart des humains ont davantage de temps le week-end, l&#39;idée était donc de permettre à un utilisateur qui émettrait 1 certification par week-end de ne pas être contraint par &lt;code&gt;sigPeriod&lt;/code&gt;, nous nous sommes donc calés sur la durée d&#39;une semaine ouvrée (5 jours), plutôt qu&#39;une semaine complète (7 jours).&lt;/p&gt;
&lt;h3 id=&quot;3-une-confiance-eternelle-sigvalidity-msvalidity&quot;&gt;3. Une confiance éternelle ? (sigValidity, msValidity)&lt;/h3&gt;
&lt;p&gt;Si toute certification restait valable &lt;em&gt;ad vitam æternam&lt;/em&gt;, cela serait problématique pour au moins deux raisons :
d&#39;une part il est important que les membres qui décèdent cessent de créer des DU ;
d&#39;autre part, il est important que les faux comptes détectés par la communauté puissent ne pas rester membre indéfiniment.&lt;/p&gt;
&lt;p&gt;Pour ce faire, il est nécessaire que les certifications aient une durée de vie limitée et qu&#39;il faille donc renouveler sa confiance envers ses pairs régulièrement.
D&#39;un autre côté, il ne faut pas non plus que les membres passent leur temps à renouveler leurs certifications au lieu de participer à des échanges économiques.
De plus, une certification à durée de vie trop courte rendrait l&#39;acte de certification trop léger. L&#39;acte de certification doit rester conséquent pour être pris au sérieux.
Enfin, nous souhaitons également que la durée de vie d&#39;une certification soit une durée simple à retenir pour que le plus grand nombre s’en souvienne.&lt;/p&gt;
&lt;p&gt;Une fois tous ces critères pris en compte, nous hésitions entre un, deux ou trois ans.
Historiquement, nous avons d&#39;abord tranché sur les valeurs de &lt;code&gt;sigPeriod&lt;/code&gt; et &lt;code&gt;sigStock&lt;/code&gt;, ce qui impliquait qu&#39;il fallait a minima 495 jours pour épuiser tout son stock de certifications, un an n&#39;est donc pas possible.
Trois ans nous semblait trop long, nous avons donc choisi deux ans.&lt;/p&gt;
&lt;p&gt;Mais considérer qu&#39;un mort va continuer à créer des DU dont personne ne pourra bénéficier pendant une durée pouvant aller jusqu&#39;à deux ans, cela nous semblait trop. C&#39;est pourquoi nous avons opté pour une durée de vie plus faible concernant le renouvellement de l&#39;adhésion.
Nous avons donc choisi un an. Mais, nous aurions aussi pu choisir six mois. La valeur de &lt;strong&gt;msValidity&lt;/strong&gt; est au final assez secondaire et pourrait facilement être modifiée dans le futur si la communauté le souhaite.&lt;/p&gt;
&lt;h3 id=&quot;4-eviter-que-les-piscines-ne-deviennent-des-depots-sedimentaires-idtywindow-sigwindow-mswindow&quot;&gt;4. Éviter que les piscines ne deviennent des dépôts sédimentaires (&lt;code&gt;idtyWindow&lt;/code&gt;, &lt;code&gt;sigWindow&lt;/code&gt;, &lt;code&gt;msWindow&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Il faut nettoyer régulièrement les piscines pour éviter qu&#39;elles n&#39;atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent exécuter un nœud Duniter.
Pour ce faire il faut que les identités et certifications en attente restent le moins longtemps possible en piscine, elles doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d&#39;être inscrites en blockchain.
Pour la Ğ1, nous avons estimé que deux mois était un minimum pour que tous les certificateurs potentiels d&#39;une nouvelle identité aient le temps de se synchroniser. Nous voulions aussi que cette durée corresponde à un faible nombre d&#39;unités d&#39;une grandeur usuelle, afin d&#39;être facilement intégrée et mémorisée par le plus grand nombre.
Typiquement, choisir sept semaines aurait été plus compliqué à intégrer et à retenir. Nous voulions que les durées à connaître restent le plus facilement intégrables et mémorisables.
Un mois nous semblait trop court, la valeur de deux mois s&#39;est donc imposée. Et par souci de simplicité, nous avons appliqué cette même valeur de deux mois aux trois paramètres &lt;code&gt;idtyWindow&lt;/code&gt;, &lt;code&gt;sigWindow&lt;/code&gt; et &lt;code&gt;msWindow&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;5-limiter-les-membres-connaissant-beaucoup-de-monde-sigstock&quot;&gt;5. Limiter les membres connaissant beaucoup de monde (&lt;code&gt;sigStock&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;De nombreuses études sociologiques montrent qu&#39;un humain connaît en moyenne cinquante personnes. Bien entendu, c&#39;est une moyenne. Certains humains en connaissent beaucoup plus, d&#39;autres beaucoup moins.
Là encore, nous avons tranché par le critère « nombre facile à retenir ».
Bien que l&#39;impact de &lt;code&gt;sigStock&lt;/code&gt; sur la taille maximale des régions Sybil soit secondaire, il convient tout de même de ne pas choisir un &lt;code&gt;sigStock&lt;/code&gt; trop grand !
150 nous semblait trop élevé, nous avons donc choisi 100.&lt;/p&gt;
&lt;h3 id=&quot;6-se-premunir-des-minorites-de-blocage-xpercent&quot;&gt;6. Se prémunir des minorités de blocage (&lt;code&gt;xpercent&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Il est très facile de devenir membre référent, ainsi une attaque possible pourrait consister à créer une région Sybil de membres référents. Une telle région Sybil croîtrait beaucoup plus lentement, mais elle pourrait permettre de bloquer le reste de la toile légitime en jouant sur la règle de distance. C&#39;est la raison pour laquelle la règle de distance ne doit pas se baser sur 100% des membres référents. Nous avons donc décidé de créer un paramètre &lt;code&gt;xpercent&lt;/code&gt; qui définit quelle proportion des membres référents doit être à moins de 5 pas de chacun.&lt;/p&gt;
&lt;p&gt;Cette proportion doit être suffisamment faible pour empêcher une minorité de blocage (des Sybil référents qui seraient trop loin des membres légitimes). Mais paradoxalement cette proportion doit également être suffisamment élevée pour que la règle de distance limite bien la taille maximale des régions Sybil. Le paramètre &lt;code&gt;xpercent&lt;/code&gt; fut l&#39;un des plus difficiles à définir, nous nous autorisons donc à ajuster sa valeur au fil de l&#39;expérience Ğ1 si nous constatons que cela est nécessaire.&lt;/p&gt;
&lt;p&gt;Nous nous sommes inspirés du &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Principe_de_Pareto&quot;&gt;principe des 80-20&lt;/a&gt; : si au moins 20% des membres s&#39;assurent de bien densifier les zones légitimes de la toile alors 80% des référents devraient se trouver à moins de 5 pas de chaque membre. 80% est donc une valeur maximale pour &lt;code&gt;xpercent&lt;/code&gt;, au-dessus la règle de distance pourrait être trop contraignante sur les usages légitimes. Par souci de sécurité, nous avons opté pour la valeur maximale possible.&lt;/p&gt;
&lt;h3 id=&quot;7-l-ajout-de-msperiod-une-protection-anti-spam&quot;&gt;7. L&#39;ajout de &lt;code&gt;msPeriod&lt;/code&gt;, une protection anti-spam&lt;/h3&gt;
&lt;p&gt;Ce paramètre un peu à part, rajouté après le bloc zéro, ne sert pas à réguler la toile de confiance mais à protéger le réseau informatique qui porte la monnaie contre les attaques de type « spam ».
En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourraient demander leur renouvellement à chaque bloc (toutes les cinq minutes), ou pire encore, envoyer des centaines de requêtes de renouvellement par minute pour submerger les nœuds Duniter. En l&#39;absence de limitation, les nœuds Duniter sont censés traiter toutes les requêtes de renouvellement, même si l’adhésion a été renouvelée il y a cinq minutes !
Pour nous prémunir de cette possibilité d&#39;attaque nous avons ajouté le paramètre &lt;code&gt;msPeriod&lt;/code&gt;.
Par souci de simplicité, nous avons choisi de lui attribuer la même valeur qu&#39;aux paramètres &lt;code&gt;idtyWindow&lt;/code&gt;, &lt;code&gt;sigWindow&lt;/code&gt; et &lt;code&gt;msWindow&lt;/code&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Architecture de Dunitrust</title>
          <pubDate>Thu, 29 Mar 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-rust/architecture-dunitrust/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-rust/architecture-dunitrust/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-rust/architecture-dunitrust/">&lt;h1 id=&quot;architecture-de-dunitrust&quot;&gt;Architecture de Dunitrust&lt;/h1&gt;
&lt;p&gt;Dunitrust est composé de 3 types de crates :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les bibliothèques&lt;/li&gt;
&lt;li&gt;Les plugins&lt;/li&gt;
&lt;li&gt;la crate duniter-core&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;arbre-des-dependances&quot;&gt;Arbre des dépendances&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/d01b3686.png&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Rémunération des développeurs (mars 2018)</title>
          <pubDate>Tue, 06 Mar 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/remuneration-03-18/</link>
          <guid>https://duniter.fr/blog/remuneration-03-18/</guid>
          <description xml:base="https://duniter.fr/blog/remuneration-03-18/">&lt;h1 id=&quot;remuneration-des-developpeurs-mars-2018&quot;&gt;Rémunération des développeurs (mars 2018)&lt;/h1&gt;
&lt;p&gt;Depuis fin janvier 2018, nous avons mis en place &lt;a href=&quot;https://duniter.fr/faq/duniter/financements/&quot;&gt;un compte public pour financer les développements de Duniter&lt;/a&gt;. En un peu plus d&#39;un mois nous avons déjà récolté 9 062,92 Ğ1 et, à ce titre, nous remercions bien chaleureusement tous les donateurs :-)&lt;/p&gt;
&lt;p&gt;Grâce à ces dons, nous pouvons officiellement débuter un projet de longue date : la rémunération des développeurs.&lt;/p&gt;
&lt;h2 id=&quot;trois-modes-de-remuneration&quot;&gt;Trois modes de rémunération&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Avant toute chose il est important de donner le sens de la rémunération : l&#39;idée est de &lt;em&gt;reconnaître&lt;/em&gt; les contributions, pas de payer une prestation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;un-salaire-en-g1-aux-developpeurs&quot;&gt;Un « salaire » en Ğ1 aux développeurs&lt;/h3&gt;
&lt;p&gt;En tout premier lieu, l&#39;idée a été soumise de rémunérer un ensemble de développeurs du projet Duniter &lt;strong&gt;à hauteur de 100,00 Ğ1 par mois et par développeur&lt;/strong&gt;, les reconnaissant de ce fait comme contributeurs actifs au développement des logiciels.&lt;/p&gt;
&lt;p&gt;Cette rémunération est réévaluée tous les 3 mois, afin de ne maintenir la rémunération de chaque développeur que s&#39;il continue effectivement à contribuer.&lt;/p&gt;
&lt;h3 id=&quot;une-part-variable-auto-estimee&quot;&gt;Une part variable auto-estimée&lt;/h3&gt;
&lt;p&gt;Sur le modèle de Liberapay, nous souhaitons qu&#39;&lt;em&gt;en plus de cette base de 100,00 Ğ1&lt;/em&gt; chaque développeur puisse prendre une part supplémentaire en fonction de ses propres estimations de son investissement personnel, ses contributions.&lt;/p&gt;
&lt;p&gt;Cette part variable est toutefois &lt;em&gt;à demander&lt;/em&gt; et doit être validée par au moins 2 parmi 3 des développeurs suivants : Inso, Eloïs, cgeek. Cette règle de validation peut évoluer dans le futur, il s&#39;agit seulement d&#39;une première étape dans la volonté de rémunérer chaque développeur à hauteur de son implication &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info/formalisaton.html#c-liberte-d-echange-dans-la-monnaie&quot;&gt;tout en en laissant suffisamment pour les autres&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;une-part-exceptionnelle&quot;&gt;Une part exceptionnelle&lt;/h3&gt;
&lt;p&gt;Enfin, et selon les mêmes règles que la part variable, il est possible de ponctuellement rémunérer tout contributeur (pas seulement un développeur) pour un travail particulier.&lt;/p&gt;
&lt;p&gt;À une différence près : la part exceptionnelle n&#39;est pas forcément demandée par son bénéficiaire potentiel, l&#39;idée pouvant être soumise par n&#39;importe qui.&lt;/p&gt;
&lt;h2 id=&quot;publication-des-remunerations&quot;&gt;Publication des rémunérations&lt;/h2&gt;
&lt;p&gt;Toute rémunération est publiquement vérifiable, tous les dons seront consignés &lt;a href=&quot;https://duniter.fr/faq/duniter/financements/&quot;&gt;sur la page des financements&lt;/a&gt;. De plus le compte étant public, tout intéressé peut vérifier la véracité des transactions en blockchain.&lt;/p&gt;
&lt;p&gt;Enfin, vous pourrez retracer l&#39;ensemble des décisions de rémunération dans la série de posts taggués « rémunération » ou dans la catégorie « Soutien ».&lt;/p&gt;
&lt;h2 id=&quot;decisions-de-remuneration&quot;&gt;Décisions de rémunération&lt;/h2&gt;
&lt;p&gt;Les développeurs ci-dessous bénéficieront désormais, sauf refus de leur part, de 100,00 Ğ1 les 5 mars, 5 avril et 5 mai 2018 :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Au titre des développements sur &lt;a rel=&quot;external&quot; href=&quot;https://duniter.org&quot;&gt;Duniter&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nanocryk&lt;/li&gt;
&lt;li&gt;elois&lt;/li&gt;
&lt;li&gt;cgeek&lt;/li&gt;
&lt;li&gt;sveyret&lt;/li&gt;
&lt;li&gt;jytou&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Au titre des développements sur &lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org/&quot;&gt;Sakia&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Au titre des développements sur &lt;a rel=&quot;external&quot; href=&quot;https://cesium.app/&quot;&gt;Cesium&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kimamila&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Au titre des développements sur &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/silkaj&quot;&gt;Silkaj&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Moul&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Au titre des développements sur &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/wotwizard&quot;&gt;WotWizard&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gerard94&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Au titre des développements sur &lt;a rel=&quot;external&quot; href=&quot;http://gvu.g1.1000i100.fr&quot;&gt;Gvu&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1000i100&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.6</title>
          <pubDate>Thu, 01 Mar 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v1-6/</link>
          <guid>https://duniter.fr/blog/duniter-v1-6/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v1-6/">&lt;h1 id=&quot;duniter-version-1-6&quot;&gt;Duniter version 1.6&lt;/h1&gt;
&lt;p&gt;La version 1.6 de Duniter est désormais &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases&quot;&gt;disponible au téléchargement&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;changements&quot;&gt;Changements&lt;/h2&gt;
&lt;p&gt;Cette nouvelle version apporte une nouvelle couche réseau nommée WS2P ayant pour vocation de remplacer la couche réseau historique (BMA) pour les connexions inter-nœuds !&lt;/p&gt;
&lt;p&gt;La couche réseau historique BMA ne servira plus que pour répondre aux requêtes des clients et programmes tiers, ce qui permettra de la remplacer à terme par une nouvelle api 100 % orientée client dès sa conception !&lt;/p&gt;
&lt;p&gt;La nouvelle couche réseau est séparée en deux parties distinctes : WS2P Public et WS2P Privé&lt;/p&gt;
&lt;p&gt;WS2P Privé est activé par défaut et ne nécessite aucune configuration.
WS2P Public nécessite la configuration d&#39;un point d&#39;accès pour être joigniable (cela reste automatique pour les utilisateurs d&#39;UPnP).&lt;/p&gt;
&lt;p&gt;Seul les nœuds avec WS2P Public contribuent réellement au réseau P2P, nous vous invitons donc à configurer un point d&#39;accès WS2P Public si vous le pouvez.&lt;/p&gt;
&lt;p&gt;Nous vous invitons aussi à vous référer au nouveau &lt;a href=&quot;https://duniter.fr/wiki/doc/configurer/&quot;&gt;&lt;strong&gt;tutoriel officiel de configuration&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il est important de passer cette mise à jour&lt;/strong&gt; si vous êtes en version 1.5 ou inférieure, car ces anciennes versions ne pourront pas communiquer avec les nœuds en 1.6 et vont donc s&#39;isoler du réseau ! Pour assurer la stabilité du réseau Ğ1 nous gardons pour l&#39;instant la possibilité de réactiver manuellement les fonctions de crawling et de routage de la couche réseau historique en attendant que les nœuds 1.5 se mettent à jour. Mais, nous désactiverons cette fonction dans les prochaines versions de Duniter !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il est également important de passer cette mise à jour&lt;/strong&gt; si vous étiez en version 1.6.20 on inférieure, car la version 1.6.21 corrige un bug important détecté sur le réseau Ğ1-Test et qui se produira vers le 8 Mars 2018 sur la Ğ1 pour les nœuds non mis à jour.&lt;/p&gt;
&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Pas besoin de resynchroniser.
&lt;/div&gt;
&lt;h2 id=&quot;compatibilite&quot;&gt;Compatibilité&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Compatible avec la Ğ1.
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mettre-a-jour-sa-version&quot;&gt;Mettre à jour sa version&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lien pour &lt;a href=&quot;https://duniter.fr/wiki/doc/installer/&quot;&gt;installer la nouvelle version&lt;/a&gt; depuis un poste vierge&lt;/li&gt;
&lt;li&gt;Lien pour &lt;a href=&quot;https://duniter.fr/wiki/doc/mettre-a-jour/&quot;&gt;mettre à jour vers la nouvelle version&lt;/a&gt; depuis une installation existante&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Duniter, pourquoi, comment ?</title>
          <pubDate>Wed, 24 Jan 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-pourquoi-comment/</link>
          <guid>https://duniter.fr/blog/duniter-pourquoi-comment/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-pourquoi-comment/">&lt;h1 id=&quot;duniter-pourquoi-comment&quot;&gt;Duniter, pourquoi, comment ?&lt;/h1&gt;
&lt;p&gt;L’année 2017 a vu le projet Duniter démarrer sa première monnaie en production, la &lt;strong&gt;ğ1&lt;/strong&gt;. Jusqu’à présent, les efforts étaient donc réalisés autour d’un objectif : la mise en production de la première cryptomonnaie libre 100% P2P (pair à pair). L’année s’est écoulée, et nous sommes passés de 59 membres à plus de 600 membres. Des réseaux locaux de la ğ1 se développent, le projet commence à se faire connaître de plus en plus largement.&lt;/p&gt;
&lt;p&gt;Durant l’année 2017, on entendait régulièrement la même conversation autour du projet :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;C’est quoi cette cryptomonnaie Duniter ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;C’est un générateur de monnaie libre (où chacun est égal face à la création monétaire), avec une toile de confiance, une blockchain sans course à la puissance...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Ah wow, ça a l’air pas mal, mais du coup ça marche comment ? Comment est-ce que vous vous défendez contre les attaques sibylles ? Comment fonctionne la blockchain  ? C’est compliqué de devenir membre ? ...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il est temps pour l’année 2018 d’expliquer en détail et plus largement le fonctionnement de Duniter. Nous démarrons donc une série d’articles en 12 épisodes qui permettra à chacun d’avoir une vision d’ensemble complète du pourquoi et du comment de Duniter.&lt;/p&gt;
&lt;h2 id=&quot;une-monnaie-libre&quot;&gt;Une monnaie « libre » ?&lt;/h2&gt;
&lt;p&gt;Duniter cherche donc à émettre une monnaie libre &lt;strong&gt;au sens de &lt;a rel=&quot;external&quot; href=&quot;https://trm.creationmonetaire.info&quot;&gt;la théorie relative de la monnaie&lt;/a&gt;&lt;/strong&gt;. Elle est émise par un Dividende Universel (DU) quotidien, de manière symétrique entre ses membres, passés, présents et futurs.&lt;br /&gt;
Concrètement, chacun co-crée le même pourcentage de la masse monétaire en un temps donné (40 ans dans la ğ1). Il existe plein d’arguments en faveur d’une telle forme d’émission monétaire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La monnaie est co-créée par chacun, et est assimilable à &lt;strong&gt;une forme de revenu de base financé par la création monétaire&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;L’émission monétaire ne privilégie personne, que ce soit en différents endroits à un instant t, ou entre des périodes séparées dans le temps&lt;/li&gt;
&lt;li&gt;L’outil monétaire étant co-créé, il permet de &lt;strong&gt;mesurer les échanges à égalité&lt;/strong&gt; entre chaque individu, créant une véritable « monnaie commune »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce type de monnaie a des propriétés très particulières du fait du Dividende Universel :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La monnaie « tourne », celle &lt;strong&gt;émise par les morts est remplacée petit à petit par la monnaie émise par les vivants&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;La masse monétaire converge (vers un nombre total d’environ 3800 DU pour la ğ1) pour chaque membre émettant de la monnaie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous aurons l’occasion d’aborder tout ceci plus en détail dans les épisodes suivants.&lt;/p&gt;
&lt;h2 id=&quot;une-toile-de-confiance&quot;&gt;Une « Toile de confiance » ?&lt;/h2&gt;
&lt;p&gt;Afin d’identifier qui crée de la monnaie, et de s’assurer que chacun ne crée sa part qu’une seule fois, une toile de confiance est mise en œuvre. Ce terme a été repris de &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Pretty_Good_Privacy&quot;&gt;PGP&lt;/a&gt;, un logiciel de chiffrement cryptographique, mais est finalement très différent dans Duniter. La toile de confiance y atteste &lt;strong&gt;de la correspondance entre une personne physique et un compte&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La toile de confiance de Duniter est construite par ses membres. A l’initialisation, elle a été construite à partir de 59 membres qui se sont reconnus entre eux. Puis, chaque membre a pu reconnaître de nouveaux individus à travers l’émission de « certifications ». Lorsqu’un nouveau membre « entre » dans la toile, il peut à son tour en faire entrer de nouveaux.&lt;/p&gt;
&lt;p&gt;Ce processus &lt;strong&gt;ne peut pas s’étendre à l’infini&lt;/strong&gt; : la toile a &lt;strong&gt;un diamètre maximum&lt;/strong&gt;. En effet, chacun a un nombre limité de certifications à émettre, et ne peut pas être trop « loin » des autres membres de la toile.
Pour en aborder le fonctionnement, et en attendant les articles de la série qui décriront de manière précise toute cette mécanique, je vous invite à lire l’article écrit en 2016, « &lt;a href=&quot;https://duniter.fr/wiki/toile-de-confiance/introduction-a-la-toile-de-confiance/&quot;&gt;Introduction à la gestion des membres&lt;/a&gt; »&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;la toile de confiance c&#39;est l&#39;ensemble des liens qui relient des êtres humains à d&#39;autres être humains. Je connais qqu&#39;un qui connaît qqu&#39;un qui connaît qqu&#39;un. Le bruit courrait que nous serions tous à 5 pas les uns des autres&lt;/em&gt;&lt;br /&gt;
-- &lt;a rel=&quot;external&quot; href=&quot;https://www.youtube.com/watch?v=coFgDw2yH0g&quot;&gt;@paidge&lt;/a&gt;  --&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;une-blockchain-sans-minage&quot;&gt;Une blockchain sans « minage » ?&lt;/h2&gt;
&lt;p&gt;La blockchain de Duniter avance grâce aux nœuds mis à disposition par les membres pour faire fonctionner le réseau. Ces nœuds &lt;strong&gt;calculent des blocs valides&lt;/strong&gt;, mais &lt;strong&gt;ne minent rien&lt;/strong&gt;. Évidemment, puisque la monnaie est créée par le Dividende Universel !&lt;/p&gt;
&lt;p&gt;Qu’un membre ait un nœud actif ou non, &lt;strong&gt;il participe toujours à la co-création monétaire.&lt;/strong&gt; Les membres sont incités à faire tourner un nœud simplement pour sécuriser le réseau et faire fonctionner la monnaie créée par leur dividende, qui est leur moyen d’échange.&lt;/p&gt;
&lt;p&gt;Pour contribuer aux coûts, un service de redistribution a été développé. De la monnaie peut être envoyée à un &lt;a rel=&quot;external&quot; href=&quot;https://remuniter.cgeek.fr/&quot;&gt;service&lt;/a&gt;, qui va automatiquement redistribuer de la monnaie aux membres calculant des blocs. Mais la monnaie est ici redistribuée, pas créée. De plus, ce service ne fait pas partie du cœur de la monnaie, et fonctionne uniquement par les dons.&lt;/p&gt;
&lt;p&gt;Plus il y a de membres calculant, plus la blockchain est robuste et difficile à corrompre. Il faut donc que le logiciel coûte &lt;strong&gt;le moins cher possible en terme d’énergie&lt;/strong&gt; pour le faire fonctionner.&lt;br /&gt;
Pour limiter le coût énergétique du calcul, l’algorithme utilise un système de &lt;strong&gt;personnalisation de la difficulté de calcul.&lt;/strong&gt; Ceux qui ont un ordinateur plus rapide que les autres sont ralentis. L’objectif étant que même un raspberry pi puisse participer au calcul de blocs.
Nous aurons là encore l’occasion d’aborder plus en détail le fonctionnement de la blockchain dans un article ultérieur !&lt;/p&gt;
&lt;h2 id=&quot;la-vue-d-ensemble-est-posee&quot;&gt;La vue d’ensemble est posée&lt;/h2&gt;
&lt;p&gt;Vous l’aurez compris, &lt;strong&gt;Duniter se différencie sur le plan humain.&lt;/strong&gt; La création monétaire est réalisée par les humains, et non pas par les machines, ni les entreprises. Ce sont les humains qui, en pair à pair, se reconnaissent et valident le droit de co-créer le DU.&lt;/p&gt;
&lt;p&gt;La situation idéale en termes de répartition réseau serait une machine calculante par humain. Une telle répartition permettrait à chacun de participer au calcul de la blockchain et de faire valoir son droit sur l&#39;évolution du réseau.&lt;/p&gt;
&lt;p&gt;Vous noterez que la monnaie générée par Duniter ne s’appelle pas le Duniter, mais &lt;strong&gt;la ğ1&lt;/strong&gt;. C’est pour différencier le protocole de la monnaie. &lt;strong&gt;La technique et l’économie sont deux sujets distincts !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Duniter (DU – unit – er) est une manière de dire « &lt;strong&gt;Machine à calculer des DU&lt;/strong&gt; ». Le logiciel permet d’instancier la blockchain d’une monnaie, ici la ğ1. Il permet aux humains qui se sont reconnus via la toile de confiance sur cette blockchain de calculer la génération des DU des humains.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C&#39;est bien l’action humaine de reconnaissance de ses pairs et de mise en œuvre de nœuds qui permet de co-créer la monnaie.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;la-suite&quot;&gt;La suite...&lt;/h2&gt;
&lt;p&gt;Nous espérons que vous suivrez avec attention les prochains articles qui sortiront permettant d&#39;expliquer Duniter dans le détail.&lt;/p&gt;
&lt;p&gt;Nous vous retrouverons le mois prochain pour un second article, qui vous présentera les logiciels existants et compatibles avec la ğ1 !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Comment est financé Duniter ?</title>
          <pubDate>Sun, 21 Jan 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/duniter/financements/</link>
          <guid>https://duniter.fr/faq/duniter/financements/</guid>
          <description xml:base="https://duniter.fr/faq/duniter/financements/">&lt;h1 id=&quot;comment-est-finance-duniter&quot;&gt;Comment est financé Duniter ?&lt;/h1&gt;
&lt;p&gt;Duniter/Ğ1 (le logiciel et sa monnaie) sont des projets long terme dont les développements
ont débuté en été 2013 et sont perpétuels : chaque jour de nouvelles idées apparaissent,
qu&#39;il s&#39;agisse d&#39;améliorations en termes de sécurité, d&#39;ergonomie ou de fonctionnalités nouvelles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Développer prend du temps et demande un travail non-négligeable.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Afin de pérenniser ce projet, financer ces développements en rémunérant leurs auteurs est primordial.&lt;/p&gt;
&lt;h2 id=&quot;qui-finance-duniter&quot;&gt;Qui finance Duniter ?&lt;/h2&gt;
&lt;p&gt;Pour pérenniser le projet Duniter, nous comptons sur les &lt;strong&gt;dons&lt;/strong&gt; des utilisateurs de la monnaie.&lt;/p&gt;
&lt;p&gt;Bien évidemment, &lt;strong&gt;ces dons se font en Ğ1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ainsi les développements sont financés dans la monnaie qu&#39;ils concrétisent.&lt;/p&gt;
&lt;h2 id=&quot;comment-vous-pouvez-aider-a-financer-duniter&quot;&gt;Comment vous pouvez aider à financer Duniter&lt;/h2&gt;
&lt;p&gt;Il vous faut d&#39;abord des Ğ1. Si vous ne savez pas comment faire, consultez la page &lt;a href=&quot;https://duniter.fr/faq/g1/obtenir-des-g1/&quot;&gt;Obtenir des Ğ1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour le moment&lt;/strong&gt;, nous nous reposons sur un compte central qui réceptionne les dons et dont la clé est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce compte est géré par moi-même (cgeek), et l&#39;attribution de sommes pour chaque développement sera décidée cas par cas, en fonction de ce que chacun estime juste pour les travaux qu&#39;il entreprend.&lt;/p&gt;
&lt;p&gt;Toutes les décisions d&#39;attribution de financement seront publiquement consultables sur cette page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans le futur&lt;/strong&gt;, nous espérons disposer d&#39;outils évitant que les dons ne soient gérés que par une seule personne.&lt;/p&gt;
&lt;h2 id=&quot;ou-partent-les-dons&quot;&gt;Où partent les dons ?&lt;/h2&gt;
&lt;p&gt;Pour vérifier les versements, vous pouvez consulter
&lt;a rel=&quot;external&quot; href=&quot;https://g1.duniter.fr/#/app/wot/78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8/&quot;&gt;les mouvements du portefeuille&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les contributeur indemnisés à chaque cycle sont listés dans &lt;a href=&quot;/category/financement-participatif/&quot;&gt;la catégorie Financements&lt;/a&gt; du blog.&lt;/p&gt;
&lt;p&gt;Les dernières transactions effectuées sont listées sur le forum technique dans le sujet
&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/&quot;&gt;Rémunération des contributeurs au projet Duniter&lt;/a&gt;.
Ci-dessous, vous trouverez, pour chaque mois, le lien d&#39;accès direct au message idoine, suivi de l&#39;indémnisation reçu par
chaque contributeur :&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Indemnisation&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/71&quot;&gt;janvier 2020&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 19 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/54&quot;&gt;décembre 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 19 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/52&quot;&gt;novembre 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 22 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/51&quot;&gt;octobtre 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 22 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/49&quot;&gt;septembre 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 22 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/45&quot;&gt;août 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 18 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/36&quot;&gt;juillet 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 18 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/22&quot;&gt;juin 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 18 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/20&quot;&gt;mai 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 16 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/19&quot;&gt;avril 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 16 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/17&quot;&gt;mars 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 16 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/16&quot;&gt;février 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 15 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/15&quot;&gt;janvier 2019&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 15 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/12&quot;&gt;décembre 2018&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 15 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/7&quot;&gt;novembre 2018&lt;/a&gt;&lt;/td&gt;&lt;td&gt;20 DU&lt;sub&gt;Ğ1&lt;/sub&gt; à 13 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/3&quot;&gt;octobre 2018&lt;/a&gt;&lt;/td&gt;&lt;td&gt;200 Ğ1 à 13 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;septembre 2018&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/2&quot;&gt;août 2018&lt;/a&gt;&lt;/td&gt;&lt;td&gt;200 Ğ1 à 13 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995&quot;&gt;juillet 2018&lt;/a&gt;&lt;/td&gt;&lt;td&gt;200 Ğ1 à 13 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/silkaj-installation-virements-automatiques-et-multi-destinataires/4836/6&quot;&gt;juin 2018&lt;/a&gt;&lt;/td&gt;&lt;td&gt;200 Ğ1 à 13 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;mai 2018&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;avril 2018&lt;/td&gt;&lt;td&gt;100,00 Ğ1 à 10 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;mars 2018&lt;/td&gt;&lt;td&gt;100,00 Ğ1 à 10 contributeurs&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</description>
      </item>
      <item>
          <title>Migration sous gitlab</title>
          <pubDate>Wed, 10 Jan 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/migration-gitlab/</link>
          <guid>https://duniter.fr/blog/migration-gitlab/</guid>
          <description xml:base="https://duniter.fr/blog/migration-gitlab/">&lt;h1 id=&quot;migration-sous-gitlab&quot;&gt;Migration sous gitlab&lt;/h1&gt;
&lt;p&gt;En 2018, nous migrons nos dépôts de code Duniter sous &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org&quot;&gt;Gitlab&lt;/a&gt;.
Dorénavant, nous ne dépendons plus d&#39;une plateforme privatrice pour publier nos releases et maintenir nos issues.&lt;/p&gt;
&lt;p&gt;Tout a été migré : les issues, les dépôts Git, et même les comptes utilisateurs !
Il est par ailleurs possible de se connecter en utilisant ses logins Github.&lt;/p&gt;
&lt;p&gt;Vous retrouverez notamment les dépôts suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le dépôt de &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/&quot;&gt;Duniter Typescript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Le dépôt de &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/rust/&quot;&gt;Duniter Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Le dépôt de &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/clients/cesium&quot;&gt;Cesium&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme sur Github, si vous souhaitez contribuer, vous pouvez fourcher le projet, créer des issues, etc.&lt;/p&gt;
&lt;p&gt;Nous profitons également de cette migration pour &lt;strong&gt;changer notre manière de faire évoluer le protocole.&lt;/strong&gt;
Nous avons mis en place un &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/common/doc&quot;&gt;dépot dédié aux RFC du protocole&lt;/a&gt;.
Les propositions d&#39;améliorations et d&#39;évolution du protocole sont gérées à travers des &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/common/doc/merge_requests&quot;&gt;merge request&lt;/a&gt;
sur le dépôt.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Lancement au démarrage de la machine</title>
          <pubDate>Sun, 07 Jan 2018 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/lancement-au-boot/</link>
          <guid>https://duniter.fr/wiki/doc/lancement-au-boot/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/lancement-au-boot/">&lt;h1 id=&quot;lancement-au-demarrage-de-la-machine&quot;&gt;Lancement au démarrage de la machine&lt;/h1&gt;
&lt;p&gt;Scripts de lancement au démarrage de la machine.&lt;/p&gt;
&lt;h2 id=&quot;systemd&quot;&gt;Systemd&lt;/h2&gt;
&lt;h3 id=&quot;version-simple&quot;&gt;Version simple&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Testée sur Lubuntu 16.04 32bits.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Cette version est destinée à une installation manuelle d&#39;après les sources Duniter.
Avec nodejs installé et géré par NVM.&lt;/p&gt;
&lt;p&gt;Créer un fichier de service pour systemd :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; nano /etc/systemd/system/duniter-g1-test.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et y mettre le script suivant :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Unit]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Description=Duniter g1-test node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;After=network.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Should be set to web in order to start with web GUI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;DUNITER_WEB=web&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Config path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;DUNITER_HOME=/home/your_user/.config/duniter&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Database name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;DUNITER_DATA=duniter_default&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# If using a key file, DUNITER_OPTS can be defined like so:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#Environment=&amp;quot;DUNITER_OPTS=--keyfile /etc/duniter/keys.yml&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;DUNITER_OPTS=&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# NVM and NODEJS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=NODE_VERSION=6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=NODE_ENV=production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=PATH=/home/your_user/.nvm/versions/node/v6.11.4/bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Group=your_group&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;User=your_user&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type=forking&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Duniter install path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WorkingDirectory=/home/your_user/Logiciels/duniter-g1-test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Commands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ExecStart=/home/your_user/Logiciels/duniter-g1-test/bin/duniter ${DUNITER_WEB}start --home ${DUNITER_HOME} --mdb ${DUNITER_DATA} $DUNITER_OPTS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ExecReload=/home/your_user/Logiciels/duniter-g1-test/bin/duniter ${DUNITER_WEB}restart --home ${DUNITER_HOME} --mdb ${DUNITER_DATA} $DUNITER_OPTS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ExecStop=/home/your_user/Logiciels/duniter-g1-test/bin/duniter stop --home ${DUNITER_HOME} --mdb ${DUNITER_DATA}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Restart=on-failure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WantedBy=multi-user.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remplacer &lt;code&gt;your_group&lt;/code&gt; et &lt;code&gt;your_user&lt;/code&gt; par l&#39;utilisateur et le groupe qui lance le processus.
Adapter les chemins selon votre installation.&lt;/p&gt;
&lt;p&gt;A chaque modification du fichier, vous devez avertir systemd avec cette commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; systemctl daemon-reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tester le lancement du service :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; systemctl start duniter-g1-test.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stopper le service :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; systemctl stop duniter-g1-test.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Activer le lancement du service au démarrage de la machine :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; systemctl enable duniter-g1-test.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Redémarrer la machine pour vérifier que Duniter se lance correctement.&lt;/p&gt;
&lt;p&gt;En cas de problème, vérifier les logs de Duniter et ceux de systemd :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;journalctl&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -xe&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;version-avec-scripts-shell&quot;&gt;Version avec scripts shell&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://diaspora-fr.org/posts/2703333&quot;&gt;Version avec gestion plus avancée de NVM&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter est-il énergivore ?</title>
          <pubDate>Sat, 18 Nov 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/duniter/duniter-est-il-energivore/</link>
          <guid>https://duniter.fr/faq/duniter/duniter-est-il-energivore/</guid>
          <description xml:base="https://duniter.fr/faq/duniter/duniter-est-il-energivore/">&lt;br/&gt;
&lt;br/&gt;
&lt;h1 id=&quot;duniter-est-il-energivore&quot;&gt;Duniter est-il énergivore ?&lt;/h1&gt;
&lt;p&gt;Le Bitcoin a la réputation d&#39;être « énergivore ».&lt;/p&gt;
&lt;p&gt;Or Duniter hérite de certaines propriétés du Bitcoin comme la preuve de travail et la blockchain.&lt;/p&gt;
&lt;p&gt;Dès lors, des individus se posent légitimement cette question :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Duniter est-il également énergivore ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;un-peu-de-definitions&quot;&gt;Un peu de définitions&lt;/h2&gt;
&lt;p&gt;D&#39;abord, il convient de s&#39;arrêter sur le terme &lt;em&gt;énergivore&lt;/em&gt; qui signifie « qui consomme de l&#39;énergie ». Or à peu près n&#39;importe quel système est énergivore, par exemple nos cellules humaines. Ce n&#39;est pas cette définition qui pose problème, car on conçoit volontiers que Bitcoin ou Duniter requiert de l&#39;énergie pour fonctionner.&lt;/p&gt;
&lt;p&gt;On pourrait par contre penser qu&#39;il s&#39;agit d&#39;un problème de quantité : par exemple, 10 Wh est inférieur à 10 kWh d&#39;un facteur 1000. Oui mais, est-ce que 10 kWh c&#39;est beaucoup ?&lt;/p&gt;
&lt;h2 id=&quot;un-rapport-a-d-autres-utilisations&quot;&gt;Un rapport à d&#39;autres utilisations&lt;/h2&gt;
&lt;p&gt;En tant que tel, on est bien incapable de dire que « 10 kWh c&#39;est beaucoup ». Par contre, on saurait dire « 10 kWh c&#39;est beaucoup d&#39;énergie si c&#39;est juste pour produire de la lumière pendant 1h dans mon salon ». En effet, aujourd&#39;hui une ampoule de 100 W (même de vieille génération) suffirait largement à illuminer un salon de 50m² et ne consommerait que 100 Wh en une heure (par définition), et donc on est loin de 10 kWh : c&#39;est 100 fois moins !&lt;/p&gt;
&lt;p&gt;C&#39;est là que je souhaite en venir : on dit d&#39;un système qu&#39;il est « énergivore » &lt;strong&gt;en rapport au service fourni&lt;/strong&gt;, et donc en comparaison à d&#39;autres utilisations de cette même quantité d&#39;énergie.&lt;/p&gt;
&lt;p&gt;Par exemple dans le cas de Bitcoin, il apparaît que &lt;a rel=&quot;external&quot; href=&quot;https://mrmondialisation.org/le-bitcoin-est-devenu-un-enfer-energetique/&quot;&gt;chaque transaction consomme 682 kWh&lt;/a&gt;. Que peut-on faire avec une telle quantité d&#39;énergie ? On peut fournir l&#39;équivalent de 55 jours de consommation électrique d&#39;un français moyen. Cela peut en effet paraître élevé pour simplement effectuer &lt;em&gt;un unique transfert de bitcoins&lt;/em&gt;. Or Bitcoin réalise 300000 transactions &lt;em&gt;par jour&lt;/em&gt;. Je vous laisse faire vos calculs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oui, c&#39;est &lt;em&gt;beaucoup&lt;/em&gt; ! En rapport à d&#39;autres utilisations possible de cette même quantité d&#39;énergie.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;et-duniter-dans-tout-cela&quot;&gt;Et Duniter dans tout cela ?&lt;/h2&gt;
&lt;p&gt;Un premier point à comprendre est qu&#39;il n&#39;y a pas de course à la puissance dans Duniter, &lt;strong&gt;pour la simple et bonne raison qu&#39;il n&#39;y a pas de récompense particulière à calculer des blocs&lt;/strong&gt; contrairement au Bitcoin. Cette simple mesure coupe l&#39;herbe sous le pied d&#39;une éventuelle course.&lt;/p&gt;
&lt;p&gt;Toutefois, Duniter possède bien un mécanisme de preuve de travail pour permettre aux nœuds du réseau de parler de façon synchrone. Or cette tâche est la source de la consommation énergétique du Bitcoin. Mais là encore, Duniter bénéficie de mécanismes uniques du fait de sa toile de confiance : d&#39;abord, seuls les membres de la monnaie peuvent calculer des blocs, ce qui limite le nombre de participants potentiels. Mais aussi, Duniter possède un mécanisme qui exclut &lt;em&gt;en permanence 1/3 du réseau de calculateurs de la preuve de travail&lt;/em&gt;. Cela signifie qu&#39;à chaque bloc, il existe 1/3 des calculateurs qui se tournent les pouces. Et donc, seuls 2/3 réalisent effectivement des calculs. Ce 1/3 exclu peut alors ajuster sa consommation électrique pour réaliser uniquement des opérations simples, comme réceptionner des transactions sur le réseau.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/networking.svg&quot; width=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Est-ce que pour autant la consommation électrique des 2/3 restants est élevée ? Contrairement au Bitcoin, les machines utilisées pour le calcul sont des ordinateurs domestiques, éventuellement des serveurs ou plus simplement des Raspberry PI. Et tout cela suffit. D&#39;ailleurs, les machines ultra-efficace de Bitcoin (les fameux &lt;a rel=&quot;external&quot; href=&quot;https://en.bitcoin.it/wiki/ASIC&quot;&gt;ASIC&lt;/a&gt;) sont totalement inutiles dans Duniter car le mécanisme de preuve de travail n&#39;est pas le même.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Et donc dans les faits, chaque nœud Duniter consomme autant qu&#39;une ampoule de 10 W à 100W et qui tourne en permanence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/light.svg&quot; width=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;ca-fait-combien-pour-la-g1&quot;&gt;Ça fait combien pour la Ğ1 ?&lt;/h2&gt;
&lt;p&gt;Aujourd&#39;hui la Ğ1 compte environ 30 nœuds membres qui calculent des blocs. Si l&#39;on compte une moyenne de 55 W de consommation instantannée par nœud, alors on obtient &lt;code&gt;55*24 = 1,32 kWh&lt;/code&gt; de consommation électrique par jour et par nœud, soit &lt;code&gt;1,32*30 = 39,6 kWh&lt;/code&gt; de consommation totale du réseau par jour.&lt;/p&gt;
&lt;p&gt;Est-ce beaucoup ? Nous avons aujourd&#39;hui environ 12 transactions par jour. Il peut paraître élevé d&#39;avoir 30 ampoules de 55 W allumées en permanence juste pour réaliser 12 transactions par jour.&lt;/p&gt;
&lt;p&gt;Oui mais : rien n&#39;empêche de monter à 120 transactions par jour avec la même taille de réseau. Duniter est actuellement en sous-régime, 120 transactions, c&#39;est tout à fait faisable ! De même que 1200 ou 12000 transactions par jour (40 transactions par bloc). Dans ce cas, est-ce que 30 ampoules serait beaucoup d&#39;énergie au regard de ce nombre de transactions ?&lt;/p&gt;
&lt;p&gt;Je vous laisse répondre à cette question par vous-même. :-)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;image src=&quot;/PELICAN/images/duniter-logo.png&quot; width=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Archives</title>
          <pubDate>Thu, 16 Nov 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/archives/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/archives/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/archives/">&lt;h1 id=&quot;archives&quot;&gt;Archives&lt;/h1&gt;
&lt;p&gt;Cette page a pour objectif de référencer les différentes réflexions techniques et philosophiques qui ont amené à l&#39;état actuel de Duniter.&lt;/p&gt;
&lt;h3 id=&quot;reflexion-sur-les-grands-nombres&quot;&gt;Réflexion sur les grands nombres&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/thought-about-big-numbers/691?u=inso&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; :  Duniter génère de la monnaie exponentiellement. Comme gérer ces unités de monnaie de façon à limiter la taille des nombres gérés par le code ? Quelles sont les réflexions qui ont abouties à la mise en place du nettoyage des sources de monnaie inférieures à 1.00 Ğ1 ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;nombres-de-chiffres-composant-le-du-et-generation-a-chaque-equinoxe&quot;&gt;Nombres de chiffres composant le DU et génération à chaque équinoxe&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/nombre-de-chiffres-requis-pour-le-du/1498&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; : Une monnaie doit être suffisamment sécable de manière à pouvoir mesurer des petites valeurs comme de très grandes valeurs. Usuellement, les unités monétaires descendent jusqu&#39;au centime. Comment est-ce que cette réflexion impacte-t-elle le nombre de chiffres du Dividende Universel ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;taille-de-la-toile-de-confiance&quot;&gt;Taille de la Toile de confiance&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/etude-de-la-wot/977&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; : Il existe de nombreux paramètres à la toile de confiance. Comment définir leur valeur de la manière la plus cohérente et rigoureuse possible ? Quels sont les paramètres optimums permettant de construire une toile de confiance à taille humaine, mais la plus large possible ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;reflexion-sur-les-anti-certifications&quot;&gt;Réflexion sur les anti-certifications&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/some-suggestion-for-finetuning-the-certification-parameters/644&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; : Les anti-certifications ont été évoquées plusieurs fois comme possibilité de se défendre contre les attaques sybilles. Elles n&#39;ont jamais été implémentées : considérées comme un outil agressif, elles auraient permis de menacer un membre donné de perdre son statut de membre. Les certifications sont donc comme les paroles : une fois données, elles ne peuvent être reprises, mais oubliées avec le temps (par leur expiration).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;formules-pour-le-du&quot;&gt;Formules pour le DU&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/formule-alternative-pour-le-du/762/95&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; : A l&#39;origine, Duniter utilisait la formule de la TRM pour calculer le Dividende Universel. Ce topic montre la réflexion qui a poussé à la découverte de la formule d&#39;ordre 2 du calcul du DU : &lt;code&gt;DU(t) + c² (M/N)(t)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;equilibrage-du-calcul-des-blocs&quot;&gt;Equilibrage du calcul des blocs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/block-issuance-distribution/1312&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; : Duniter cherche à équilibrer entre les membres la répartition des blocs calculés, en distribuant des pénalités à ceux qui calculent trop vite. Différentes méthodes sont possibles, et elles n&#39;ont pas toutes le même impact en terme de stabilité du réseau et d&#39;équité entre membres.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;cle-deleguee-au-calcul-de-blocs&quot;&gt;Clé déléguée au calcul de blocs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/idee-cle-deleguee-au-calcul-de-blocs/2698&quot;&gt;Topic original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLDR&lt;/strong&gt; : L’idée de la clé déléguée consiste à pouvoir déléguer le calcul des blocs à une sous-clé, afin de mettre le trousseau principal en sécurité. Mais si un membre est capable de créer une clé qui calcule sans risque pour son propre compte, alors il peux très bien la céder à uen Organisation qui s’occupera de calculer à ma place. Et cette même Organisation de réitérer l’opération avec plein d’autres membres (moyennant quelques UNL), qui dispose alors d’une armée de clés et de machines pour calculer tous les blocs, et donc prendre le contrôle de la blockchain Ğ1. Autant dire qu’il a pouvoir de vie ou de mort sur la monnaie. Pour éviter cela, une clé déléguée pourra révoquer le compte membre qui lui est associé.&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>7. Base de données - Tutoriel de développement</title>
          <pubDate>Tue, 07 Nov 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-7-bdd/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-7-bdd/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-7-bdd/">&lt;h1 id=&quot;7-base-de-donnees-tutoriel-de-developpement&quot;&gt;7. Base de données - Tutoriel de développement&lt;/h1&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Ce chapitre s&#39;attarde à décrire la structure, les champs et les relations de la base de données de Duniter. Il s&#39;agit d&#39;une base de données SQLite, en un seul fichier.&lt;/p&gt;
&lt;p&gt;Ainsi vous pourrez vous-même extraire des informations de la blockchain Duniter et de sa toile de confiance en rédigeant les requêtes SQL qui vous intéressent.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;vue-generale&quot;&gt;Vue générale&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/02158de0.png&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;table-block&quot;&gt;Table &lt;code&gt;block&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Contient les blocs soumis par le réseau, aussi bien les blocs acceptés en blockchain par le nœud local que les blocs de fork. C&#39;est une table d&#39;archive, les données qu&#39;elle contient ne sont pas directement exploitées.&lt;/p&gt;
&lt;p&gt;Éventuellement en cas de résolution de fork, Duniter vient piocher parmi les blocs avec &lt;code&gt;fork = 1&lt;/code&gt; pour rejoindre une autre chaîne présente dans sa base de données.&lt;/p&gt;
&lt;h5 id=&quot;fork-boolean-not-null&quot;&gt;fork (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Indique si le bloc est dans la blockchain courante ou s&#39;il s&#39;agit d&#39;un fork.&lt;/p&gt;
&lt;h5 id=&quot;hash-varchar-64-not-null&quot;&gt;hash (&lt;code&gt;VARCHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 du bloc.&lt;/p&gt;
&lt;h5 id=&quot;inner-hash-varchar-64-not-null&quot;&gt;inner_hash (&lt;code&gt;VARCHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 de la partie interne bloc, c&#39;est-à-dire jusqu&#39;à &lt;code&gt;InnerHash: &lt;/code&gt; exclu.&lt;/p&gt;
&lt;h5 id=&quot;signature-varchar-100-not-null&quot;&gt;signature (&lt;code&gt;VARCHAR(100) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature de l&#39;émetteur du bloc.&lt;/p&gt;
&lt;h5 id=&quot;currency-varchar-50-not-null&quot;&gt;currency (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Nom de code de la monnaie.&lt;/p&gt;
&lt;h5 id=&quot;issuer-varchar-50-not-null&quot;&gt;issuer (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique émettrice du bloc.&lt;/p&gt;
&lt;h5 id=&quot;parameters-varchar-255&quot;&gt;parameters (&lt;code&gt;VARCHAR(255)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Uniquement pour le bloc#0 : paramètres initiaux de la monnaie.&lt;/p&gt;
&lt;h5 id=&quot;previoushash-varchar-64&quot;&gt;previousHash (&lt;code&gt;VARCHAR(64)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 du bloc précédent (hash).&lt;/p&gt;
&lt;h5 id=&quot;previousissuer-varchar-50&quot;&gt;previousIssuer (&lt;code&gt;VARCHAR(50)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique de l&#39;émetteur du bloc précédent (issuer).&lt;/p&gt;
&lt;h5 id=&quot;version-integer-not-null&quot;&gt;version (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de version du bloc.&lt;/p&gt;
&lt;h5 id=&quot;memberscount-integer-not-null&quot;&gt;membersCount (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Nombre de membres calculés pour ce bloc.&lt;/p&gt;
&lt;h5 id=&quot;monetarymass-varchar-100-default-0&quot;&gt;monetaryMass (&lt;code&gt;VARCHAR(100) DEFAULT &#39;0&#39;&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Masse monétaire calculée pour ce bloc.&lt;/p&gt;
&lt;h5 id=&quot;udtime-datetime&quot;&gt;UDTime (&lt;code&gt;DATETIME&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;mediantime-datetime-not-null&quot;&gt;medianTime (&lt;code&gt;DATETIME NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Temps moyen des 12 derniers blocs (pour la Ğ1).&lt;/p&gt;
&lt;h5 id=&quot;dividend-integer-default-0&quot;&gt;dividend (&lt;code&gt;INTEGER DEFAULT &#39;0&#39;&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Montant du Dividende Universel pour ce bloc, ou null si pas de dividende.&lt;/p&gt;
&lt;h5 id=&quot;unitbase-integer-null&quot;&gt;unitbase (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Unité relative du dividende en puissance de 10. Le montant absolu du dividende est dividende*PUISSANCE(10, unitbase).&lt;/p&gt;
&lt;h5 id=&quot;time-datetime-not-null&quot;&gt;time (&lt;code&gt;DATETIME NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Temps instantané pour ce bloc.&lt;/p&gt;
&lt;h5 id=&quot;powmin-integer-not-null&quot;&gt;powMin (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Difficulté commune minimale calculée pour ce bloc.&lt;/p&gt;
&lt;h5 id=&quot;number-integer-not-null&quot;&gt;number (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro du bloc.&lt;/p&gt;
&lt;h5 id=&quot;nonce-integer-not-null&quot;&gt;nonce (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Valeur du champ incrémental permettant de faire varier la preuve de travail.&lt;/p&gt;
&lt;h5 id=&quot;transactions-text&quot;&gt;transactions (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des transactions du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;certifications-text&quot;&gt;certifications (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des certifications du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;identities-text&quot;&gt;identities (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des identités du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;joiners-text&quot;&gt;joiners (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des adhésions du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;actives-text&quot;&gt;actives (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des adhésions de renouvellement du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;leavers-text&quot;&gt;leavers (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des adhésions de sortie du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;revoked-text&quot;&gt;revoked (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des révocations du bloc (format compact).&lt;/p&gt;
&lt;h5 id=&quot;excluded-text&quot;&gt;excluded (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des clés publiques exclues du bloc.&lt;/p&gt;
&lt;h5 id=&quot;created-datetime-default-null&quot;&gt;created (&lt;code&gt;DATETIME DEFAULT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;updated-datetime-default-null&quot;&gt;updated (&lt;code&gt;DATETIME DEFAULT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;issuersframe-integer-null&quot;&gt;issuersFrame (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Taille de la fenêtre d&#39;émetteurs calculée du bloc.&lt;/p&gt;
&lt;h5 id=&quot;issuersframevar-integer-null&quot;&gt;issuersFrameVar (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Variation de la taille de la fenêtre calculée du bloc.&lt;/p&gt;
&lt;h5 id=&quot;issuerscount-integer-null&quot;&gt;issuersCount (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Nombre d&#39;émetteurs différents dans la fenêtre, calculé du bloc.&lt;/p&gt;
&lt;h5 id=&quot;len-integer-null&quot;&gt;len (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Taille du bloc.&lt;/p&gt;
&lt;h3 id=&quot;table-idty&quot;&gt;Table &lt;code&gt;idty&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Piscine des identités : table où les identités en attente d&#39;inscription dans la blockchain sont répertoriées. Lorsqu&#39;une identité est finalement inscrite en blockchain, elle disparaît de la table &lt;code&gt;idty&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;revoked-boolean-not-null&quot;&gt;revoked (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;currentmsn-integer-null&quot;&gt;currentMSN (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;currentinn-integer-null&quot;&gt;currentINN (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;buid-varchar-100-not-null&quot;&gt;buid (&lt;code&gt;VARCHAR(100) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp attaché à l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;member-boolean-not-null&quot;&gt;member (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;kick-boolean-not-null&quot;&gt;kick (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;leaving-boolean-null&quot;&gt;leaving (&lt;code&gt;BOOLEAN NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;wasmember-boolean-not-null&quot;&gt;wasMember (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;pubkey-varchar-50-not-null&quot;&gt;pubkey (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique gérant l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;uid-varchar-255-not-null&quot;&gt;uid (&lt;code&gt;VARCHAR(255) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Pseudonyme attaché à l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;sig-varchar-100-not-null&quot;&gt;sig (&lt;code&gt;VARCHAR(100) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature du document d&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;revocation-sig-varchar-100-null&quot;&gt;revocation_sig (&lt;code&gt;VARCHAR(100) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature de révocation. Champ à &lt;code&gt;null&lt;/code&gt; si pas de révocation attachée.&lt;/p&gt;
&lt;h5 id=&quot;hash-varchar-64-not-null-1&quot;&gt;hash (&lt;code&gt;VARCHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;SHA256(uid ++ buid ++ pubkey)&lt;/code&gt;&lt;/p&gt;
&lt;h5 id=&quot;written-boolean-null&quot;&gt;written (&lt;code&gt;BOOLEAN NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;wotb-id-integer-null&quot;&gt;wotb_id (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;expires-on-integer-null&quot;&gt;expires_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où l&#39;identité périmera hors blockchain.&lt;/p&gt;
&lt;h5 id=&quot;expired-integer-null&quot;&gt;expired (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;revoked-on-integer-null&quot;&gt;revoked_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;removed-boolean-null-default-0&quot;&gt;removed (&lt;code&gt;BOOLEAN NULL DEFAULT 0&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;table-cert&quot;&gt;Table &lt;code&gt;cert&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Piscine des certifications : table où les certifications en attente d&#39;inscription dans la blockchain sont répertoriées. Lorsqu&#39;une certification est finalement incluse dans un bloc, elle disparaît de la table &lt;code&gt;cert&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;to-varchar-50-not-null&quot;&gt;to (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique ciblée par la certification.&lt;/p&gt;
&lt;h5 id=&quot;target-char-64-not-null&quot;&gt;target (&lt;code&gt;CHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 de l&#39;identité ciblée par la certification, calculée selon le format suivant :
&lt;code&gt;SHA256(idty.uid ++ idty.buid ++ idty.pubkey)&lt;/code&gt;&lt;br /&gt;
Utile quand une identité n&#39;est pas encore membre, car la clé publique peut encore créer autant d&#39;identités qu&#39;elle le souhaite. Le champ &lt;code&gt;target&lt;/code&gt; permet de cibler de façon unique l&#39;identité certifiée, même si la clé publique &lt;code&gt;to&lt;/code&gt; est la même pour plusieurs identités.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : &lt;code&gt;idty.hash = cert.target&lt;/code&gt; permet d&#39;obtenir les certifications reçues par une identité.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;sig-varchar-100-not-null-1&quot;&gt;sig (&lt;code&gt;VARCHAR(100) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature du document de certification.&lt;/p&gt;
&lt;h5 id=&quot;block-number-integer-not-null&quot;&gt;block_number (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de bloc du blockstamp.&lt;/p&gt;
&lt;h5 id=&quot;block-hash-varchar-64&quot;&gt;block_hash (&lt;code&gt;VARCHAR(64)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Hash de bloc du blockstamp.&lt;/p&gt;
&lt;h5 id=&quot;block-integer-not-null&quot;&gt;block (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Alias de &lt;code&gt;block_number&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;linked-boolean-not-null&quot;&gt;linked (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;written-boolean-not-null&quot;&gt;written (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;written-block-integer&quot;&gt;written_block (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;written-hash-varchar-64&quot;&gt;written_hash (&lt;code&gt;VARCHAR(64)&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;expires-on-integer-null-1&quot;&gt;expires_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où la certification périmera hors blockchain.&lt;/p&gt;
&lt;h5 id=&quot;expired-integer-null-1&quot;&gt;expired (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;table-membership&quot;&gt;Table &lt;code&gt;membership&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Piscine des adhésions : table où les adhésions en attente d&#39;inscription dans la blockchain sont répertoriées. Lorsqu&#39;une adhésion est finalement incluse dans un bloc, elle disparaît de la table &lt;code&gt;membership&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;membership-char-3-not-null&quot;&gt;membership (&lt;code&gt;CHAR(3) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Type d&#39;adhésion : &lt;code&gt;IN&lt;/code&gt; ou &lt;code&gt;OUT&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;issuer-varchar-50-not-null-1&quot;&gt;issuer (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique de l&#39;émetteur de l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;number-integer-not-null-1&quot;&gt;number (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de bloc du blockstamp pour l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;blocknumber-integer&quot;&gt;blockNumber (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Alias de &lt;code&gt;number&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;blockhash-varchar-64-not-null&quot;&gt;blockHash (&lt;code&gt;VARCHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Hash du blockstamp pour l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;userid-varchar-255-not-null&quot;&gt;userid (&lt;code&gt;VARCHAR(255) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Pseudonyme de l&#39;identité concernée par l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;certts-varchar-100-not-null&quot;&gt;certts (&lt;code&gt;VARCHAR(100) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de l&#39;identité concernée par l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;block-integer&quot;&gt;block (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;fpr-varchar-64&quot;&gt;fpr (&lt;code&gt;VARCHAR(64)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Alias de &lt;code&gt;blockHash&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;idtyhash-varchar-64&quot;&gt;idtyHash (&lt;code&gt;VARCHAR(64)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 de l&#39;identité concernée par l&#39;adhésion.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : &lt;code&gt;membership.idtyHash = idty.hash = cert.target&lt;/code&gt; permet d&#39;obtenir les documents d&#39;un dossier d&#39;identité.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;written-boolean-not-null-1&quot;&gt;written (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;written-number-integer&quot;&gt;written_number (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;expires-on-integer-null-2&quot;&gt;expires_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où l&#39;adhésion périmera hors blockchain.&lt;/p&gt;
&lt;h5 id=&quot;signature-varchar-50&quot;&gt;signature (&lt;code&gt;VARCHAR(50)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature du document d&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;expired-integer-null-2&quot;&gt;expired (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;table-txs&quot;&gt;Table &lt;code&gt;txs&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Registre des transactions. Contient à la fois les transactions en piscine et les transactions incluses dans un bloc. Lorsqu&#39;une transaction de piscine est finalement incluse dans un bloc, le champ &lt;code&gt;written&lt;/code&gt; est valorisé à &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;hash-char-64-not-null&quot;&gt;hash (&lt;code&gt;CHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 du document de transaction brut (non compact).&lt;/p&gt;
&lt;h5 id=&quot;block-number-integer&quot;&gt;block_number (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de bloc du blockstamp.&lt;/p&gt;
&lt;h5 id=&quot;locktime-integer-not-null&quot;&gt;locktime (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Variable &lt;code&gt;locktime&lt;/code&gt; de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;version-integer-not-null-1&quot;&gt;version (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de version de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;currency-varchar-50-not-null-1&quot;&gt;currency (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Monnaie concernée par la transaction.&lt;/p&gt;
&lt;h5 id=&quot;comment-varchar-255-not-null&quot;&gt;comment (&lt;code&gt;VARCHAR(255) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Commentaire éventuel pour la transaction.&lt;/p&gt;
&lt;h5 id=&quot;time-datetime&quot;&gt;time (&lt;code&gt;DATETIME&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du&lt;/p&gt;
&lt;h5 id=&quot;inputs-text-not-null&quot;&gt;inputs (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Tableau JSON des sources consommées par la transaction.&lt;/p&gt;
&lt;h5 id=&quot;unlocks-text-not-null&quot;&gt;unlocks (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Tableau JSON des clés de déverrouillage des &lt;code&gt;inputs&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;outputs-text-not-null&quot;&gt;outputs (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Tableau JSON des sources créées par la transaction.&lt;/p&gt;
&lt;h5 id=&quot;issuers-text-not-null&quot;&gt;issuers (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Tableau JSON des émetteurs (ckés publiques) de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;signatures-text-not-null&quot;&gt;signatures (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Tableau JSON des signatures de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;recipients-text-not-null&quot;&gt;recipients (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Tableau JSON des destinataires (clés publiques) de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;written-boolean-not-null-2&quot;&gt;written (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Booléen indiquant si la transaction a été écrite ou non.&lt;/p&gt;
&lt;h5 id=&quot;removed-boolean-not-null&quot;&gt;removed (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;received-integer-null&quot;&gt;received (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Champ historique non utilisé&lt;/em&gt;. Vaut toujours &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;output-base-integer-null&quot;&gt;output_base (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Champ calculé : base du montant de sortie de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;output-amount-integer-null&quot;&gt;output_amount (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Champ calculé : montant de sortie de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;blockstamp-varchar-200-null&quot;&gt;blockstamp (&lt;code&gt;VARCHAR(200) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;len-integer-null-1&quot;&gt;len (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Longueur compacte de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;blockstamptime-integer-null&quot;&gt;blockstampTime (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;medianTime&lt;/code&gt; du bloc référencé par le blockstamp de la transaction.&lt;/p&gt;
&lt;h3 id=&quot;table-peer&quot;&gt;Table &lt;code&gt;peer&lt;/code&gt;&lt;/h3&gt;
&lt;h5 id=&quot;version-integer-not-null-2&quot;&gt;version (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de version de la fiche de pair.&lt;/p&gt;
&lt;h5 id=&quot;currency-varchar-50-not-null-2&quot;&gt;currency (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Nom de la monnaie ciblée par la fiche de pair.&lt;/p&gt;
&lt;h5 id=&quot;status-varchar-10&quot;&gt;status (&lt;code&gt;VARCHAR(10)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Statut du pair : &#39;UP&#39; ou &#39;DOWN&#39;.&lt;/p&gt;
&lt;h5 id=&quot;statusts-integer-not-null&quot;&gt;statusTS (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du statut.&lt;/p&gt;
&lt;h5 id=&quot;hash-char-64&quot;&gt;hash (&lt;code&gt;CHAR(64)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 du document de fiche de pair.&lt;/p&gt;
&lt;h5 id=&quot;first-down-integer&quot;&gt;first_down (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage de la 1ère occurrence du statut &#39;DOWN&#39; si le statut courant est &#39;DOWN&#39;.&lt;/p&gt;
&lt;h5 id=&quot;last-try-integer&quot;&gt;last_try (&lt;code&gt;INTEGER&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodagate de la dernière tentative de connexion au pair.&lt;/p&gt;
&lt;h5 id=&quot;pubkey-varchar-50-not-null-1&quot;&gt;pubkey (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique du nœud inscrit dans la fiche de pair.&lt;/p&gt;
&lt;h5 id=&quot;block-varchar-60-not-null&quot;&gt;block (&lt;code&gt;VARCHAR(60) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de la fiche de pair.&lt;/p&gt;
&lt;h5 id=&quot;signature-varchar-100&quot;&gt;signature (&lt;code&gt;VARCHAR(100)&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature du document de fiche de pair.&lt;/p&gt;
&lt;h5 id=&quot;endpoints-text-not-null&quot;&gt;endpoints (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Liste des points d&#39;accès du nœud.&lt;/p&gt;
&lt;h5 id=&quot;raw-text&quot;&gt;raw (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Document en version brute.&lt;/p&gt;
&lt;h3 id=&quot;table-wallet&quot;&gt;Table &lt;code&gt;wallet&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table stockant la balance courante de chaque compte.&lt;/p&gt;
&lt;h5 id=&quot;conditions-text-not-null&quot;&gt;conditions (&lt;code&gt;TEXT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identifiant du compte.&lt;/p&gt;
&lt;h5 id=&quot;balance-integer-not-null&quot;&gt;balance (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Balance courante, positive ou nulle.&lt;/p&gt;
&lt;h3 id=&quot;table-meta&quot;&gt;Table &lt;code&gt;meta&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table de méta-informations sur la base de données. Ne contient qu&#39;une seule ligne.&lt;/p&gt;
&lt;h5 id=&quot;id-integer-not-null&quot;&gt;id (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Valeur &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;version-integer-not-null-3&quot;&gt;version (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro de version.&lt;/p&gt;
&lt;h3 id=&quot;table-b-index&quot;&gt;Table &lt;code&gt;b_index&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table d&#39;index pour les blocs. Enregistre une ligne calculée par bloc.&lt;/p&gt;
&lt;h5 id=&quot;version-integer-not-null-4&quot;&gt;version (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.version&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;bsize-integer-not-null&quot;&gt;bsize (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Taille du bloc.&lt;/p&gt;
&lt;h5 id=&quot;hash-varchar-64-not-null-2&quot;&gt;hash (&lt;code&gt;VARCHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.hash&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;issuer-varchar-50-not-null-2&quot;&gt;issuer (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.issuer&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;time-integer-not-null&quot;&gt;time (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.time&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;number-integer-not-null-2&quot;&gt;number (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.number&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;memberscount-integer-not-null-1&quot;&gt;membersCount (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.membersCount&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;issuerscount-integer-not-null&quot;&gt;issuersCount (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.issuersCount&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;issuersframe-integer-not-null&quot;&gt;issuersFrame (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.issuersFrame&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;issuersframevar-integer-not-null&quot;&gt;issuersFrameVar (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.issuersFrameVar&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;issuerdiff-integer-null&quot;&gt;issuerDiff (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Difficulté associée à l&#39;émetteur du bloc (issuer).&lt;/p&gt;
&lt;h5 id=&quot;avgblocksize-integer-not-null&quot;&gt;avgBlockSize (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Taille moyenne des blocs précédents.&lt;/p&gt;
&lt;h5 id=&quot;mediantime-integer-not-null&quot;&gt;medianTime (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.medianTime&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;dividend-integer-not-null&quot;&gt;dividend (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.dividend&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;mass-varchar-100-not-null&quot;&gt;mass (&lt;code&gt;VARCHAR(100) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Masse monétaire calculée pour ce bloc.&lt;/p&gt;
&lt;h5 id=&quot;unitbase-integer-not-null&quot;&gt;unitBase (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.unitBase&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;powmin-integer-not-null-1&quot;&gt;powMin (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identique à &lt;code&gt;block.powMin&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;udtime-integer-not-null&quot;&gt;udTime (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du prochain Dividende Universel.&lt;/p&gt;
&lt;h5 id=&quot;udreevaltime-integer-not-null&quot;&gt;udReevalTime (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage de la prochaine réévaluation du Dividende Universel.&lt;/p&gt;
&lt;h5 id=&quot;diffnumber-integer-not-null&quot;&gt;diffNumber (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro du prochain bloc où la difficulté commune sera réévaluée.&lt;/p&gt;
&lt;h5 id=&quot;speed-float-not-null&quot;&gt;speed (&lt;code&gt;FLOAT NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Vitesse actuelle d&#39;évolution de la blockchain (blocs/seconde).&lt;/p&gt;
&lt;h5 id=&quot;massreeval-varchar-100-not-null-default-0&quot;&gt;massReeval (&lt;code&gt;VARCHAR(100) NOT NULL DEFAULT &#39;0&#39;&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Masse monétaire lors de la dernière réévaluation du Dividende Universel.&lt;/p&gt;
&lt;h3 id=&quot;table-i-index&quot;&gt;Table &lt;code&gt;i_index&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table d&#39;index concernant les identités. Enregistre de zéro à plusieurs lignes par bloc.&lt;/p&gt;
&lt;h5 id=&quot;op-varchar-10-not-null&quot;&gt;op (&lt;code&gt;VARCHAR(10) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Type d&#39;opération : &#39;CREATE&#39; ou &#39;UPDATE&#39;.&lt;/p&gt;
&lt;h5 id=&quot;uid-varchar-100-null&quot;&gt;uid (&lt;code&gt;VARCHAR(100) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Pseudonyme de l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;pub-varchar-50-not-null&quot;&gt;pub (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique de l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;hash-varchar-80-null&quot;&gt;hash (&lt;code&gt;VARCHAR(80) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 du document d&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;sig-varchar-80-null&quot;&gt;sig (&lt;code&gt;VARCHAR(80) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature du document d&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;created-on-varchar-80-null&quot;&gt;created_on (&lt;code&gt;VARCHAR(80) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;written-on-varchar-80-not-null&quot;&gt;written_on (&lt;code&gt;VARCHAR(80) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp du bloc où est écrite l&#39;identité.&lt;/p&gt;
&lt;h5 id=&quot;member-boolean-null&quot;&gt;member (&lt;code&gt;BOOLEAN NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;L&#39;identité est-elle membre ou non.&lt;/p&gt;
&lt;h5 id=&quot;wasmember-boolean-null&quot;&gt;wasMember (&lt;code&gt;BOOLEAN NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;L&#39;identité a-t-elle été membre ou non (note : champ inutile, sinon il n&#39;y aurait pas d&#39;enregistrement). Valeur &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&quot;kick-boolean-null&quot;&gt;kick (&lt;code&gt;BOOLEAN NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;L&#39;identité doit-elle être exclue au prochain bloc ?&lt;/p&gt;
&lt;h5 id=&quot;wotb-id-integer-null-1&quot;&gt;wotb_id (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identifiant interne de WoT. Alias pour la clé publique, sous forme d&#39;entier.&lt;/p&gt;
&lt;h5 id=&quot;writtenon-integer-not-null-default-0&quot;&gt;writtenOn (&lt;code&gt;INTEGER NOT NULL DEFAULT 0&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro du bloc d&#39;écriture.&lt;/p&gt;
&lt;h3 id=&quot;table-c-index&quot;&gt;Table &lt;code&gt;c_index&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table d&#39;index pour les certifications. Enregistre zéro à plusieurs lignes par bloc.&lt;/p&gt;
&lt;h5 id=&quot;op-varchar-10-not-null-1&quot;&gt;op (&lt;code&gt;VARCHAR(10) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Type d&#39;opération : &#39;CREATE&#39; ou &#39;UPDATE&#39;.&lt;/p&gt;
&lt;h5 id=&quot;issuer-varchar-50-not-null-3&quot;&gt;issuer (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique de l&#39;émetteur de la certification.&lt;/p&gt;
&lt;h5 id=&quot;receiver-varchar-50-not-null&quot;&gt;receiver (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique du receveur de la certification.&lt;/p&gt;
&lt;h5 id=&quot;created-on-varchar-80-not-null&quot;&gt;created_on (&lt;code&gt;VARCHAR(80) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de la certification.&lt;/p&gt;
&lt;h5 id=&quot;written-on-varchar-80-not-null-1&quot;&gt;written_on (&lt;code&gt;VARCHAR(80) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp du bloc contenant la certification.&lt;/p&gt;
&lt;h5 id=&quot;sig-varchar-100-null&quot;&gt;sig (&lt;code&gt;VARCHAR(100) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature du document de certification.&lt;/p&gt;
&lt;h5 id=&quot;expires-on-integer-null-3&quot;&gt;expires_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage déterminant la date d&#39;expiration de la certification une fois écrite en blockchain.&lt;/p&gt;
&lt;h5 id=&quot;expired-on-integer-null&quot;&gt;expired_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où a expiré la certification en blockchain.&lt;/p&gt;
&lt;h5 id=&quot;chainable-on-integer-null&quot;&gt;chainable_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où la certification pourra être rejouée.&lt;/p&gt;
&lt;h5 id=&quot;from-wid-integer-null&quot;&gt;from_wid (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identifiant interne WoT de l&#39;émetteur.&lt;/p&gt;
&lt;h5 id=&quot;to-wid-integer-null&quot;&gt;to_wid (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identifiant interne WoT du receveur.&lt;/p&gt;
&lt;h5 id=&quot;writtenon-integer-not-null-default-0-1&quot;&gt;writtenOn (&lt;code&gt;INTEGER NOT NULL DEFAULT 0&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro du bloc d&#39;écriture.&lt;/p&gt;
&lt;h3 id=&quot;table-m-index&quot;&gt;Table &lt;code&gt;m_index&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table d&#39;index des adhésions. Enregistre zéro à plusieurs enregistrements par bloc.&lt;/p&gt;
&lt;h5 id=&quot;op-varchar-10-not-null-2&quot;&gt;op (&lt;code&gt;VARCHAR(10) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Type d&#39;opération : &#39;CREATE&#39; ou &#39;UPDATE&#39;.&lt;/p&gt;
&lt;h5 id=&quot;pub-varchar-50-not-null-1&quot;&gt;pub (&lt;code&gt;VARCHAR(50) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Clé publique de l&#39;émetteur de l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;created-on-varchar-80-not-null-1&quot;&gt;created_on (&lt;code&gt;VARCHAR(80) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;written-on-varchar-80-not-null-2&quot;&gt;written_on (&lt;code&gt;VARCHAR(80) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp du bloc d&#39;écriture.&lt;/p&gt;
&lt;h5 id=&quot;expires-on-integer-null-4&quot;&gt;expires_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où expirera l&#39;adhésion.&lt;/p&gt;
&lt;h5 id=&quot;expired-on-integer-null-1&quot;&gt;expired_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où a expiré l&#39;adhésion, ou &lt;code&gt;null&lt;/code&gt; si l&#39;adhésion n&#39;a pas encore expiré.&lt;/p&gt;
&lt;h5 id=&quot;revokes-on-integer-null&quot;&gt;revokes_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où l&#39;adhésion sera implicitement révoquée.&lt;/p&gt;
&lt;h5 id=&quot;revoked-on-integer-null-1&quot;&gt;revoked_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où l&#39;adhésion a implicitement été révoquée, ou &lt;code&gt;null&lt;/code&gt; si l&#39;adhésion n&#39;a pas encore été implicitement révoquée.&lt;/p&gt;
&lt;h5 id=&quot;leaving-boolean-null-1&quot;&gt;leaving (&lt;code&gt;BOOLEAN NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;La dernière adhésion est-elle de type « quitter » ?&lt;/p&gt;
&lt;h5 id=&quot;revocation-varchar-80-null&quot;&gt;revocation (&lt;code&gt;VARCHAR(80) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Signature de la révocation d&#39;identité, ou &lt;code&gt;null&lt;/code&gt; sinon.&lt;/p&gt;
&lt;h5 id=&quot;chainable-on-integer-null-1&quot;&gt;chainable_on (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du moment où l&#39;adhésion pourra être rejouée.&lt;/p&gt;
&lt;h5 id=&quot;writtenon-integer-not-null-default-0-2&quot;&gt;writtenOn (&lt;code&gt;INTEGER NOT NULL DEFAULT 0&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro du bloc d&#39;écriture.&lt;/p&gt;
&lt;h3 id=&quot;table-s-index&quot;&gt;Table &lt;code&gt;s_index&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Table d&#39;index pour les sources de transactions. Enregistre zéro à plusieurs lignes par bloc.&lt;/p&gt;
&lt;h5 id=&quot;op-varchar-10-not-null-3&quot;&gt;op (&lt;code&gt;VARCHAR(10) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Type d&#39;opération : &#39;CREATE&#39; ou &#39;UPDATE&#39;.&lt;/p&gt;
&lt;h5 id=&quot;tx-varchar-80-null&quot;&gt;tx (&lt;code&gt;VARCHAR(80) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Empreinte SHA256 de la transaction source, ou &lt;code&gt;null&lt;/code&gt; pour un dividende.&lt;/p&gt;
&lt;h5 id=&quot;identifier-varchar-64-not-null&quot;&gt;identifier (&lt;code&gt;VARCHAR(64) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Identifiant de la source : soit une empreinte SHA256 de transaction, soit une clé publique de membre.&lt;/p&gt;
&lt;h5 id=&quot;pos-integer-not-null&quot;&gt;pos (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Position de la source.&lt;/p&gt;
&lt;h5 id=&quot;created-on-varchar-80-null-1&quot;&gt;created_on (&lt;code&gt;VARCHAR(80) NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;written-on-varchar-80-not-null-3&quot;&gt;written_on (&lt;code&gt;VARCHAR(80) NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Blockstamp du bloc d&#39;écriture.&lt;/p&gt;
&lt;h5 id=&quot;written-time-integer-not-null&quot;&gt;written_time (&lt;code&gt;INTEGER NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Horodatage du bloc d&#39;écriture (champ &lt;code&gt;medianTime&lt;/code&gt;).&lt;/p&gt;
&lt;h5 id=&quot;amount-integer-null&quot;&gt;amount (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Montant de la source, dans la base de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;base-integer-null&quot;&gt;base (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Base de la transaction (puissance de 10).&lt;/p&gt;
&lt;h5 id=&quot;locktime-integer-null&quot;&gt;locktime (&lt;code&gt;INTEGER NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Durée de verrouillage de la transaction.&lt;/p&gt;
&lt;h5 id=&quot;consumed-boolean-not-null&quot;&gt;consumed (&lt;code&gt;BOOLEAN NOT NULL&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Indique si la source a été consommée.&lt;/p&gt;
&lt;h5 id=&quot;conditions-text&quot;&gt;conditions (&lt;code&gt;TEXT&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Conditions de déverrouillage de la source.&lt;/p&gt;
&lt;h5 id=&quot;writtenon-integer-not-null-default-0-3&quot;&gt;writtenOn (&lt;code&gt;INTEGER NOT NULL DEFAULT 0&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;Numéro du bloc d&#39;écriture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-8-addons/&quot;&gt;Chapitre 8 : Addons C/C++&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>1. Présentation générale - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-1-presentation/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-1-presentation/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-1-presentation/">&lt;h1 id=&quot;1-presentation-generale-tutoriel-de-developpement&quot;&gt;1. Présentation générale - Tutoriel de développement&lt;/h1&gt;
&lt;p&gt;Duniter est &lt;em&gt;un logiciel&lt;/em&gt;. Ce logiciel donne vie à la première crypto-monnaie libre appelée &lt;strong&gt;Ğ1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La Ğ1 est une crypto-monnaie semblable au Bitcoin : elle utilise une blockchain que n&#39;importe quel agent économique peut utiliser pour recevoir et envoyer des Ğ1 quand il le souhaite, sans demander d&#39;autorisation à qui que soit et sans restriction sur le fait qu&#39;il soit un individu, une association, une entreprise, un État ou autre chose. Par ailleurs, les transferts d’unités Ğ1 sont sant frais contrairement au Bitcoin. Il n&#39;y a pas on non plus de limite sur le nombre d&#39;utilisateurs ou de comptes.&lt;/p&gt;
&lt;p&gt;La Ğ1 a aussi la particularité d&#39;être &lt;strong&gt;une monnaie libre&lt;/strong&gt; : ses nouvelles unités sont émises par chaque individu membre du réseau Ğ1, à parts égales, à la fois pour les membres actuels et les générations futures. La Ğ1 a été conçue de telle façon que chaque individu soit égal aux autres quant à son pouvoir de création monétaire en Ğ1, peu importe qu&#39;il adopte la monnaie maintenant ou dans 20, 40, 80 ou 160 ans.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;objectifs-de-duniter-g1&quot;&gt;Objectifs de Duniter Ğ1&lt;/h2&gt;
&lt;p&gt;Le but est de faire la démonstration qu&#39;il est possible de réaliser et d&#39;adopter dès maintenant une monnaie libre numérique, portée par un réseau informatique décentralisé. À notre connaissance, il s&#39;agit d&#39;une première.&lt;/p&gt;
&lt;p&gt;Aussi, bien que la Ğ1 n&#39;ait pas de limite géographique, le but &lt;em&gt;n&#39;est pas&lt;/em&gt; que tout individu vivant sur Terre puisse produire des Ğ1 ni de réaliser une monnaie remplaçant toutes les monnaies mondiales.&lt;/p&gt;
&lt;p&gt;L&#39;humble but de la Ğ1 est de faire une démonstration limitée dans l&#39;espace (mais pas dans le temps !) du fait que la réalisation d&#39;une monnaie libre numérique décentralisée est à notre portée.&lt;/p&gt;
&lt;h2 id=&quot;comparaison-bitcoin-duniter&quot;&gt;Comparaison Bitcoin/Duniter&lt;/h2&gt;
&lt;p&gt;Sachez que Bitcoin autorise au maximum à 144 utilisateurs quotidiens de produire de la monnaie par le mécanisme du « minage ». C&#39;est-à-dire que parmi les centaines de milliers d&#39;utilisateurs du Bitcoin, seuls 144 ont le privilège de créer de nouveaux bitcoins chaque jour. Tandis que la Ğ1 à travers Duniter autorise un maximum d&#39;environ 10 millions de producteurs quotidiens, et que tous produisent systématiquement la même part en même temps. Il n&#39;y a pas de privilégiés au sein du système monétaire.&lt;/p&gt;
&lt;p&gt;Duniter est donc un Bitcoin qui améliore fortement la partie création monétaire. Duniter fait donc &lt;em&gt;plus&lt;/em&gt; que Bitcoin, pas moins.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il n&#39;y a pas besoin d&#39;être « membre » de la Ğ1 pour posséder un portefeuille Ğ1 : il est possible de créer &lt;em&gt;immédiatement&lt;/em&gt; son portefeuille pour recevoir puis envoyer de la monnaie.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;multi-monnaies&quot;&gt;Multi-monnaies&lt;/h2&gt;
&lt;p&gt;Duniter est capable de faire fonctionner d&#39;autres monnaies que la Ğ1, et fait notamment tourner une monnaie de test appelée Ğ1-Test. Toutefois le projet Duniter, qui donne naissance au logiciel du même nom, n&#39;a pas vocation à soutenir d&#39;autres monnaies que la Ğ1 et la Ğ1-Test pour des raisons d&#39;efficacité et de moyens. Pour ceux qui souhaiteraient créer leur propre monnaie libre sur la base du logiciel Duniter, il leur faudra forker le projet et trouver leurs propres développeurs, puis adapter le logiciel en fonction de leurs propres buts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Toutefois la monnaie Ğ1 ayant à peine huit mois d&#39;existence (06/11/2017), nous ne vous conseillons pas de réaliser votre propre monnaie basée sur Duniter aujourd&#39;hui. Le logiciel va fortement évoluer au cours des deux-trois prochaines années pour répondre aux faits expérimentaux qui valideront ou invalideront les décisions techniques prises pour ce projet.&lt;/p&gt;
&lt;p&gt;Attendre quelques années avant de lancer votre propre monnaie semble une sage décision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;taille-maximale-de-la-g1&quot;&gt;Taille maximale de la Ğ1&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Producteurs&lt;/strong&gt; : Duniter connaît aujourd&#39;hui (2017) un maximum technique pour le nombre de &lt;em&gt;producteurs&lt;/em&gt; simultanés d&#39;unités Ğ1 d&#39;environ dix millions. Ce maximum volontaire repose sur des données empiriques de graphes sociaux et n&#39;empêche pas que celui-ci soit augmenté dans le futur.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilisateurs&lt;/strong&gt; : le nombre maximum de producteurs est à différencier du nombre maximum d&#39;&lt;em&gt;utilisateurs&lt;/em&gt; de la monnaie (individus, entreprises…). Ce maximum n&#39;est pour le moment pas connu, bien que très largement supérieur au nombre de membres, et dépend largement des évolutions techniques à venir.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;particularites-du-projet&quot;&gt;Particularités du projet&lt;/h2&gt;
&lt;p&gt;Duniter a vu le jour dans le but de démontrer la possibilité de réaliser une monnaie libre à travers l&#39;outil informatique. C&#39;est son seul et unique but : une démonstration de faisabilité. Il n&#39;est donc pas ici de question de réaliser un énième Altcoin (dérivé de Bitcoin) qui ne se distinguerait que par le déplacement d&#39;un point-virgule dans le code.&lt;/p&gt;
&lt;h3 id=&quot;pourquoi-pas-une-monnaie-papier&quot;&gt;Pourquoi pas une monnaie papier ?&lt;/h3&gt;
&lt;p&gt;Il est tout à fait possible de réaliser une monnaie libre papier. Toutefois si l&#39;on souhaite atteindre un nombre conséquent d&#39;utilisateurs, mettons plusieurs milliers, alors l&#39;outil informatique devient indispensable pour des raisons de coûts et d&#39;efficacité. Si en plus on souhaite rendre cette monnaie robuste, alors il convient de décentraliser sa gestion informatique : d&#39;où le fonctionnement P2P du réseau.&lt;/p&gt;
&lt;h3 id=&quot;la-toile-de-confiance&quot;&gt;La toile de confiance&lt;/h3&gt;
&lt;p&gt;Une monnaie libre suppose de pouvoir identifier les producteurs de la monnaie, et surtout de s&#39;assurer 1 producteur = 1 &lt;strong&gt;humain&lt;/strong&gt; unique et vivant. À cette fin, Duniter implémente un mécanisme d&#39;identification des individus souhaitant produire la monnaie.&lt;/p&gt;
&lt;p&gt;Ce mécanisme est appelé &lt;em&gt;toile de confiance&lt;/em&gt;, concept largement inspiré par &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/OpenPGP&quot;&gt;OpenPGP&lt;/a&gt;. Il s&#39;agit d&#39;un système d&#39;identification décentralisé semblable à un système de cooptation pourvu de nombreuses règles pour éviter les abus. Cette mécanique est la partie la plus complexe du projet Duniter, car c&#39;est aussi sur elle que repose entièrement sa sécurité.&lt;/p&gt;
&lt;h2 id=&quot;caracteristiques-techniques&quot;&gt;Caractéristiques techniques&lt;/h2&gt;
&lt;h3 id=&quot;code&quot;&gt;Code&lt;/h3&gt;
&lt;p&gt;Duniter est un logiciel libre sous licence AGPL, écrit à 97 % en TypeScript, qui après transpilation en JavaScript est interprété par NodeJS.&lt;/p&gt;
&lt;h3 id=&quot;topologie&quot;&gt;Topologie&lt;/h3&gt;
&lt;p&gt;Le réseau Duniter Ğ1 fonctionne sur la base de &lt;em&gt;nœuds&lt;/em&gt; en pair-à-pair, donc sans entité centrale. Il est possible d&#39;interagir avec ces nœuds via des programmes &lt;em&gt;clients&lt;/em&gt; tels Sakia, Cesium ou Silkaj :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/topologie.png&quot; alt=&quot;image|690x467&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;securite&quot;&gt;Sécurité&lt;/h3&gt;
&lt;p&gt;Duniter utilise des fonctions de cryptographie basées sur le schéma &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/EdDSA&quot;&gt;Ed25519&lt;/a&gt;, et réutilise des librairies écrites en C de &lt;a rel=&quot;external&quot; href=&quot;http://nacl.cr.yp.to/&quot;&gt;NaCl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Duniter utilise aussi des fonctions de hachage. Aujourd&#39;hui la seule utilisée est &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/SHA-2&quot;&gt;SHA256&lt;/a&gt;, toutefois la fonction &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/RIPEMD-160&quot;&gt;RIPEMD-160&lt;/a&gt; est envisagée pour permettre le paiement par adresse à l&#39;instar du Bitcoin. Aujourd&#39;hui, tout transfert de Ğ1 se fait à destination d&#39;une clé publique Ed25519.&lt;/p&gt;
&lt;p&gt;Duniter &lt;em&gt;ne manipule pas de nombres flottants&lt;/em&gt; pour les montants. Uniquement des nombres entiers.&lt;/p&gt;
&lt;h3 id=&quot;blockchain&quot;&gt;Blockchain&lt;/h3&gt;
&lt;p&gt;La blockchain de Duniter repose sur deux principes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tout bloc est signé par son auteur qui ne peut être qu&#39;un membre de la toile de confiance&lt;/li&gt;
&lt;li&gt;chaque nouveau bloc est émis par preuve de travail dont la difficulté est propre à chaque membre&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;performances&quot;&gt;Performances&lt;/h3&gt;
&lt;p&gt;Le JavaScript n&#39;étant pas adapté aux fonctions gourmandes en puissance de calcul comme la signature numérique, la vérification de signature, le hachage ou les calculs de distance de la toile de confiance, Duniter réalise donc ces opérations en C/C++.&lt;/p&gt;
&lt;h2 id=&quot;un-dernier-mot&quot;&gt;Un dernier mot&lt;/h2&gt;
&lt;p&gt;Duniter n&#39;impressionnera pas par le côté incroyablement pointu ou abscons de son code : le logiciel ressemble à s&#39;y méprendre à n&#39;importe quelle application de gestion, avec un code relativement lisible et aux noms de variables explicites (quand nous avons le temps).&lt;/p&gt;
&lt;p&gt;Bien sûr, Duniter n&#39;est pas une application centralisée et opère sur une blockchain en P2P, avec de la cryptographie asymétrique, de la preuve de travail à niveau personnalisé et de la toile de confiance. Des concepts pas manipulés tous les jours dans l&#39;industrie logicielle, néanmoins tout à fait compréhensibles.&lt;/p&gt;
&lt;p&gt;Avec un peu d&#39;investissement personnel, il n&#39;y a rien d&#39;insurmontable. De plus, les développeurs répondent toujours présents sur le &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;Forum Duniter&lt;/a&gt;, section Dev, pour vous aider.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-2-outils/&quot;&gt;Chapitre 2. Installation des outils&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>2. Installation des outils - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-2-outils/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-2-outils/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-2-outils/">&lt;h1 id=&quot;2-installation-des-outils-tutoriel-de-developpement&quot;&gt;2. Installation des outils - Tutoriel de développement&lt;/h1&gt;
&lt;p&gt;Nous n&#39;utiliserons ici que des logiciels libres afin que n&#39;importe qui puisse réaliser ce tutoriel sans contraintes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git-scm.com/&quot;&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://nodejs.org&quot;&gt;NodeJS v8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://yarnpkg.com/lang/en/docs/install/&quot;&gt;Yarn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://code.visualstudio.com/&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà, c&#39;est tout. Nous vous laissons le soin d&#39;installer ces logiciels par vous-même en suivant les liens.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Si vous utilisez un Linux/Mac, nous vous conseillons d&#39;installer NodeJS via &lt;a rel=&quot;external&quot; href=&quot;https://github.com/creationix/nvm#installation&quot;&gt;NVM&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;outils-de-compilation&quot;&gt;Outils de compilation&lt;/h2&gt;
&lt;p&gt;Il reste toutefois à installer quelques outils de compilation propres à votre système d&#39;exploitation.&lt;/p&gt;
&lt;h3 id=&quot;linux&quot;&gt;Linux&lt;/h3&gt;
&lt;p&gt;Sous Ubuntu :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install build-essential&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sous Debian :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install build-essentials&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Autre distribution : installer &lt;code&gt;gcc&lt;/code&gt;, &lt;code&gt;g++&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt; et &lt;code&gt;python2&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;windows&quot;&gt;Windows&lt;/h3&gt;
&lt;h4 id=&quot;net-framework-4-5&quot;&gt;.NET Framework 4.5&lt;/h4&gt;
&lt;p&gt;Rendez-vous à l&#39;adresse : &lt;a rel=&quot;external&quot; href=&quot;https://www.microsoft.com/fr-fr/download/details.aspx?id=30653&quot;&gt;https://www.microsoft.com/fr-fr/download/details.aspx?id=30653&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;outils-de-compilation-1&quot;&gt;Outils de compilation&lt;/h4&gt;
&lt;p&gt;Lancez un invité de commande &lt;strong&gt;avec les droits administrateur&lt;/strong&gt; puis lancez la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --global --production&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; windows-build-tools&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande peut durer 1h ou plus en fonction des composants déjà installés sur votre système.&lt;/p&gt;
&lt;h2 id=&quot;fin-de-l-installation&quot;&gt;Fin de l&#39;installation&lt;/h2&gt;
&lt;p&gt;Pour terminer correctement l&#39;installation, nous vous conseillons de &lt;em&gt;fermer vos terminaux et relancer VSCode&lt;/em&gt; si vous l&#39;aviez ouvert. En effet certaines variables d&#39;environnement ont été mises à jour par les installations précédentes, et ne seront disponbiles qu&#39;après redémarrage des logiciels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-3-source/&quot;&gt;Chapitre 3. Récupération du code source&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>3. Récupération du code source - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-3-source/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-3-source/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-3-source/">&lt;h1 id=&quot;3-recuperation-du-code-source-tutoriel-de-developpement&quot;&gt;3. Récupération du code source - Tutoriel de développement&lt;/h1&gt;
&lt;p&gt;Duniter est un logiciel libre, son code source est donc librement disponible.&lt;/p&gt;
&lt;p&gt;L&#39;objectif de ce chapitre est de récupérer ce code afin de pouvoir l&#39;exécuter puis le modifier.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;copie-des-sources&quot;&gt;Copie des sources&lt;/h2&gt;
&lt;p&gt;À l&#39;aide d&#39;un terminal (celui de votre système ou celui présent dans VSCode &amp;gt; Afficher &amp;gt; Terminal intégré), récupérez le code source de Duniter présent sur la branche de développement :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clone https://github.com/duniter/duniter.git&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -b&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Comme vous pouvez le remarquer, nous utilisons ici la branche &lt;code&gt;dev&lt;/code&gt;. En effet la branche &lt;code&gt;master&lt;/code&gt; constitue plutôt la branche stable sur laquelle sont basées les versions de production du logiciel, tandis que la branche &lt;code&gt;dev&lt;/code&gt; est utilisée pour les développements en cours.&lt;/p&gt;
&lt;h2 id=&quot;installation-des-dependances&quot;&gt;Installation des dépendances&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning&quot;&gt;
 Assurez vous d&#39;utiliser la bonne version de nodejs : 8.9.1 
&lt;/div&gt;
&lt;p&gt;Duniter repose sur plusieurs bibliothèques de code tierces, ou &lt;em&gt;dépendances&lt;/em&gt;. Pour que le code fonctionne il faut donc les installer :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;note note-block note-warning&quot;&gt;
&lt;p&gt;Attention pour les habitués de NodeJS : &lt;strong&gt;ne remplacez pas &lt;code&gt;yarn&lt;/code&gt; par &lt;code&gt;npm&lt;/code&gt;&lt;/strong&gt;, car ce dernier ne permet pas d&#39;avoir rigoureusement les mêmes versions des dépendances d&#39;un poste à l&#39;autre, or sans cette assurance nous ne pouvons pas garantir que le code fonctionnera comme attendu sur votre poste.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;executer-les-tests-automatises&quot;&gt;Exécuter les tests automatisés&lt;/h2&gt;
&lt;p&gt;À ce stade, les tests automatisés devraient passer avec succès :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patientez, les tests peuvent prendre jusqu&#39;à 2-3 minutes. Finalement, vous obtenez :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;687&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; passing&lt;/span&gt;&lt;span&gt; (2m)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Done&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; in 119.39s.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il se peut que quelques tests échouent en fonction des performances de votre machine, certains tests y étant sensibles. S&#39;il n&#39;y en a qu&#39;une dizaine ou moins qui échouent, vous pouvez considérer que Duniter fonctionne sur votre machine et que le code source est correctement récupéré.&lt;/p&gt;
&lt;h3 id=&quot;couverture-du-code&quot;&gt;Couverture du code&lt;/h3&gt;
&lt;p&gt;La commande que nous venons d&#39;exécuter a créé un dossier &lt;code&gt;coverage&lt;/code&gt;, qui contient des informations très importantes : celles de la &lt;em&gt;couverture du code&lt;/em&gt;, c&#39;est-à-dire une information sur les lignes qui ont été exécutées durant les tests automatisés. Ainsi une ligne est dite &lt;em&gt;couverte&lt;/em&gt; si au moins une exécution a été réalisée par l&#39;un des tests automatisés. Cela permet d&#39;être un peu plus confiant dans le fait que cette ligne de code s&#39;exécute correctement.&lt;/p&gt;
&lt;p&gt;Vous pouvez visualiser et étudier la couverture du code est ouvrant le fichier &lt;code&gt;coverage/index.html&lt;/code&gt; dans votre navigateur :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/coverage.png&quot; alt=&quot;coverage&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-4-demarrage/&quot;&gt;Chapitre 4. Démarrage&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>4. Démarrage - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-4-demarrage/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-4-demarrage/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-4-demarrage/">&lt;h1 id=&quot;4-demarrage-tutoriel-de-developpement&quot;&gt;4. Démarrage - Tutoriel de développement&lt;/h1&gt;
&lt;p&gt;Maintenant que les sources de Duniter sont installées, nous allons exécuter quelques commandes afin de mettre votre nœud local de développement sur pied :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;initialiser les données en se synchronisant sur le réseau Ğ1&lt;/li&gt;
&lt;li&gt;démarrer le nœud&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notez qu&#39;il n&#39;y a aucun danger à connecter votre nœud de développement sur le réseau Ğ1, vous ne perturberez en rien le réseau si vous faites de mauvaises manipulations avec votre nœud suite à une modification du code par exemple. Le réseau est robuste et, en cas d&#39;anomalie avec votre nœud, les communications seront simplement coupées avec lui.&lt;/p&gt;
&lt;p&gt;Ensuite, nous expérimenterons le démarrage du nœud dans l&#39;éditeur VSCode en mode debug afin de voir le lien avec le code source.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;p&gt;Pour initialiser votre nœud, il vous suffit de télécharger et d&#39;appliquer la blockchain Ğ1 :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; bin/duniter sync g1.duniter.org:443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nous initions ici le téléchargement de la blockchain depuis le nœud &lt;code&gt;g1.duniter.org&lt;/code&gt;, mais en réalité le téléchargement se fera en P2P depuis l&#39;ensemble du réseau Ğ1 afin d&#39;optimiser la procédure. Indiquer le nœud &lt;code&gt;g1.duniter.org&lt;/code&gt; permet juste de donner un point d&#39;entrée sur le réseau, mais aussi d&#39;indiquer que l&#39;on souhaite la blockchain dont le bloc courant est celui de &lt;code&gt;g1.duniter.org&lt;/code&gt;, ce qui permet d&#39;identifier l&#39;intégralité du reste de la blockchain.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En effet, chaque bloc référençant son précédant par une fonction de hachage, à partir d&#39;un bloc donné on est capable de s&#39;assurer du contenu de tous les blocs précédents. Ainsi il est possible de télécharger les blocs de la blockchain sur n&#39;importe quel nœud du réseau tout en étant assuré de son contenu, une fois précisé le bloc le plus haut (aussi appelé &lt;code&gt;HEAD&lt;/code&gt;) ! Ici, nous demandons à avoir le même &lt;code&gt;HEAD&lt;/code&gt; que celui possédé par le nœud &lt;code&gt;g1.duniter.org&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;lancez-votre-noeud&quot;&gt;Lancez votre nœud&lt;/h2&gt;
&lt;p&gt;À ce stade, votre nœud devrait pouvoir se lancer et se connecter au réseau Ğ1 et agir en tant que miroir (nœud passif du réseau) :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; bin/duniter direct_start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour arrêter Duniter, terminez le processus (Ctrl+C).&lt;/p&gt;
&lt;p&gt;Vous avez désormais un nœud prêt à fonctionner, et que vous pouvez même modifier ! Soit pour changer un comportement existant, ou ajouter une nouvelle fonctionnalité. Mais avant cela, voyons comment « déboguer » le code source.&lt;/p&gt;
&lt;h2 id=&quot;debogage-dans-vscode&quot;&gt;Débogage dans VSCode&lt;/h2&gt;
&lt;p&gt;Le débogage nécessite une configuration de VSCode pour le projet. Afin de faciliter la prise en main initiale, un dossier « de base » a été initié, que vous pouvez copier pour votre utilisation :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cp&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -r&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; doc/.vscode .vscode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;À partir de là, à l&#39;aide de la combinaison de touches Ctrl+Shift+D, vous pouvez sélectionne la configuration de débogage souhaitée :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/debug_selection.png&quot; alt=&quot;debug_selection&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez sélectionner la configuration &lt;code&gt;MOCHA ALL TESTS&lt;/code&gt; dans un premier temps, puis appuyer sur la touche &lt;code&gt;F5&lt;/code&gt;. VSCode devrait alors lancer les tests automatisés de Duniter, ce qui peut durer plusieurs minutes :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/debug_tests_done.png&quot; alt=&quot;debug_tests_done&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;point-d-arret&quot;&gt;Point d&#39;arrêt&lt;/h3&gt;
&lt;p&gt;À tout moment, vous pouvez placer un point d&#39;arrêt dans le code. &lt;strong&gt;C&#39;est votre meilleure arme pour étudier et comprendre le fonctionnement du code&lt;/strong&gt;, apprenez à placer des points d&#39;arrêt aux endroits qui vous intéressent.&lt;/p&gt;
&lt;p&gt;Par exemple, plaçons un point d&#39;arrêt dans le fichier &lt;code&gt;app/modules/daemon.ts&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/debug_direct_start.png&quot; alt=&quot;debug_direct_start&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Puis lançons le débogage sur &lt;code&gt;direct_start&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/debug_direct_start_launcher.png&quot; alt=&quot;debug_direct_start_launcher&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Alors, VSCode lance &lt;code&gt;node bin/duniter direct_start&lt;/code&gt; en mode debug, et nous permet d&#39;atterir dans le code dont l&#39;exécution est suspendue au point d&#39;arrêt :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/tuto-dev/debug_point_suspendu.png&quot; alt=&quot;debug_point_suspendu&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Nous avons ici une foule d&#39;informations disponibles ! Nous pouvons placer le curseur de la souris sur une variable pour avoir son contenu, nous déplacer dans la pile des appels, ajouter des espions, etc. Ce sont là des informations extrêmement précieuses, notamment quand le code devient plus complexe.&lt;/p&gt;
&lt;h3 id=&quot;modifier-le-code&quot;&gt;Modifier le code&lt;/h3&gt;
&lt;p&gt;Une subtilité à retenir est que le code source est écrit en TypeScript, mais l&#39;exécution se fait en JavaScript via NodeJS. Donc, si l&#39;on modifie un fichier de code source comme &lt;code&gt;daemon.ts&lt;/code&gt; par exemple, il nous faut réaliser une étape de &lt;em&gt;transpilation&lt;/em&gt; de TypeScript vers JavaScript.&lt;/p&gt;
&lt;p&gt;La façon manuelle de le faire dans Duniter est avec yarn :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tsc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tsc v1.0.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tsc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Done&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; in 6.59s.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;tsc&lt;/code&gt; est la commande « TypeScript Compiler », c&#39;est notre transpilation. Quand la commande est terminée, &lt;code&gt;tsc&lt;/code&gt; nous indique si l&#39;opération s&#39;est bien passée ou si des erreurs de transpilation sont apparues.&lt;/p&gt;
&lt;p&gt;Toutefois cette opération est fastidieuse à la longue. Nous disposons d&#39;une commande de « surveillance » des fichiers TypeScript et qui lance automatiquement la transpilation pour tout fichier &lt;code&gt;.ts&lt;/code&gt; modifié :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tscw&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce qui signifie « TypeScript Compiler Watch ». Dès lors, nous pouvons modifier n&#39;importe quel fichier et la modification sera impactée à l&#39;exécution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sans &lt;code&gt;yarn tsc&lt;/code&gt; ou &lt;code&gt;yarn tscw&lt;/code&gt;, vous tomberez sur des erreurs de point d&#39;arrêt refusant de suspendre le code ou d&#39;obtenir un comportement de Duniter différent du code source&lt;/strong&gt;. Le plus simple est d&#39;avoir un terminal à part, où &lt;code&gt;yarn tscw&lt;/code&gt; s&#39;exécute tranquillement. Ainsi, il est possible de modifier le code source sans se soucier de la transpilation suite à une modification du code.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-5-architecture/&quot;&gt;Chapitre 5 : Architecture&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>5. Architecture de Duniter - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-5-architecture/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-5-architecture/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-5-architecture/">&lt;h1 id=&quot;5-architecture-de-duniter-tutoriel-de-developpement&quot;&gt;5. Architecture de Duniter - Tutoriel de développement&lt;/h1&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Ce chapitre a pour but de visualiser l&#39;architecture de Duniter sous différents angles, afin d&#39;apporter une vue multidimensionnelle du code qui s&#39;organise selon plusieurs axes principaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le cycle d&#39;exécution d&#39;une commande&lt;/li&gt;
&lt;li&gt;l&#39;organisation en modules&lt;/li&gt;
&lt;li&gt;le fonctionnement global pour un nœud « démarré »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous ferons également le lien avec les fichiers concernés.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce chapitre est plutôt théorique. Toutefois, des exemples de code sont donnés et nous vons encourageons à les reproduire en modifiant le fichier &lt;code&gt;app/modules/reset.ts&lt;/code&gt;, quitte à en retirer le contenu pour vos essais.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;cycle-d-execution&quot;&gt;Cycle d&#39;exécution&lt;/h2&gt;
&lt;p&gt;Commençons par l&#39;exécution de Duniter, par exemple la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; bin/duniter reset data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ici, nous exécutons Duniter en faisant appel à NodeJS (&lt;code&gt;node&lt;/code&gt;) et demandons d&#39;interpréter le fichier &lt;code&gt;bin/duniter&lt;/code&gt; (un fichier JavaScript, sans extension) et passons les arguments &lt;code&gt;reset data&lt;/code&gt; qui sont des chaînes de caractères.&lt;/p&gt;
&lt;p&gt;Le fichier &lt;code&gt;bin/duniter&lt;/code&gt; est le point de départ de toute commande Duniter. C&#39;est l&#39;unique fichier d&#39;entrée pour tout appel au logiciel. Voyons ce qu&#39;il se passe alors :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/76825ea4.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Nous pouvons voir ici que tout appel à Duniter déclenche 3 procédures dans le code : le chargement des modules, le chargement de la configuration et enfin l&#39;exécution de la commande. Mais aussi d&#39;un autre point de vue, déclenche 3 phases : l&#39;initialisation, l&#39;exécution, puis la fin (le retour) de la commande.&lt;/p&gt;
&lt;p&gt;Dans notre exemple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; bin/duniter reset data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le code finalement exécuté est celui de la commande &lt;code&gt;reset data&lt;/code&gt; présent dans le fichier &lt;code&gt;app/modules/reset.ts&lt;/code&gt;. Ce code est en charge de supprimer toutes les données du nœud, afin de le remettre à neuf par exemple.&lt;/p&gt;
&lt;p&gt;Si l&#39;on avait appelé une autre commande, comme :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; bin/duniter sync g1.duniter.org:443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alors le code appelé aurait été celui de la commande de synchronisation présent dans le fichier &lt;code&gt;app/modules/crawler/index.ts&lt;/code&gt;. On aurait pu penser qu&#39;il s&#39;agirait du fichier sync.ts, mais ici le module crawler gère plusieurs commandes dont celle qui permet la synchronisation au réseau : or il est possible de regrouper plusieurs commandes dans un même fichier, pourquoi pas nommé de façon générique &lt;code&gt;index.ts&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Enfin, la commande &lt;code&gt;node bin/duniter blabla&lt;/code&gt; aurait retourné une erreur, car cette commande n&#39;existe pas.&lt;/p&gt;
&lt;h2 id=&quot;organisation-en-modules&quot;&gt;Organisation en modules&lt;/h2&gt;
&lt;p&gt;Afin d&#39;isoler au mieux chaque logique spécifique du code et de permettre d&#39;ajouter des fonctionnalités à Duniter, ce dernier a été pensé pour intégrer une logique de &lt;em&gt;modules&lt;/em&gt;. Ainsi, toutes les commandes et options disponibles sur Duniter le sont via la définition d&#39;un module.&lt;/p&gt;
&lt;p&gt;Un module peut agir à plusieurs niveaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configuration&lt;/strong&gt; : le module peut charger des informations supplémentaires ou même redéfinir la configuration générale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commandes&lt;/strong&gt; : le module peut définir une ou plusieurs commandes exécutables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Options&lt;/strong&gt; : le module peut définir de nouvelles options dans la ligne de commande (--option-m1, -O…)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service&lt;/strong&gt; : le module peut définir un service, c&#39;est-à-dire une portion de code utilisée quand une commande décide d&#39;activer les services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un module peut agir aussi bien n&#39;agir à aucun comme à tous les niveaux à la fois : les champs &lt;code&gt;config&lt;/code&gt;, &lt;code&gt;cliOptions&lt;/code&gt;, &lt;code&gt;cli&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt; sont tous facultatifs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/b2204531.png&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;exemples&quot;&gt;Exemples&lt;/h2&gt;
&lt;h3 id=&quot;configuration&quot;&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Un module de configuration pourrait par exemple permettre de mettre à jour une configuration ancienne. Imaginons que la variable de configuration &lt;code&gt;keyring&lt;/code&gt; ait été renommée en &lt;code&gt;keypair&lt;/code&gt;, alors on pourrait définir en module s&#39;occupant de migrer une ancienne configuration vers la nouvelle :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../lib/dto/ConfDTO&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;module&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  duniter&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;    config&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;      onLoading&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; async&lt;/span&gt;&lt;span&gt; (conf&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (conf.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;keyring&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;          // Migrate to `keypair`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          conf.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;keypair&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; conf.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;keyring&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;      beforeSave&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; async&lt;/span&gt;&lt;span&gt; (conf&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;        // Remove old `keyring` name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (conf.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;keyring&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; conf.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;keypair&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;          delete&lt;/span&gt;&lt;span&gt; conf.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;keyring&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;commande&quot;&gt;Commande&lt;/h3&gt;
&lt;p&gt;Un module pourrait définr la commande &lt;code&gt;nb-membres&lt;/code&gt; qui affiche le nombre de membres actuels de la toile de confiance :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../lib/dto/ConfDTO&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;Server&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../../server&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;module&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  duniter&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;    cli&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; [{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;      name&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;nb-membres&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;      desc&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;Affiche le nombre de membres approximatif de la toile&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;      logs&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;      onDatabaseExecute&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; async&lt;/span&gt;&lt;span&gt; (server&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;Server&lt;/span&gt;&lt;span&gt;, conf&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        const&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; resultat&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; await&lt;/span&gt;&lt;span&gt; server.&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;dal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;iindexDAL&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;query&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;          &amp;#39;SELECT COUNT(*) as compte FROM i_index WHERE member&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        console.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;Nombre de membres : %s&amp;#39;&lt;/span&gt;&lt;span&gt;, resultat[&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;compte&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Exécution de la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;bin/duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; nb-membres&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Nombre&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; de membres :&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 402&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notez ici l&#39;utilisation de &lt;code&gt;onDatabaseExecute:&lt;/code&gt; : il s&#39;agit d&#39;une des deux phases possibles pour l&#39;exécution d&#39;une commande. L&#39;autre est &lt;code&gt;onConfiguredExecute&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/aaeb825a.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Comment choisir s&#39;il vaut mieux utiliser &lt;code&gt;onConfiguredExecute&lt;/code&gt; ou &lt;code&gt;onDatabaseExecute&lt;/code&gt; ? La règle est simple : si vous avez besoin de réaliser des accès à la base de données, alors utilisez &lt;code&gt;onDatabaseExecute&lt;/code&gt;. Sinon, préférez &lt;code&gt;onConfiguredExecute&lt;/code&gt; car cela évitera d&#39;attendre la connexion à la base de données et permettra donc une exécution plus rapide.&lt;/p&gt;
&lt;h3 id=&quot;options&quot;&gt;Options&lt;/h3&gt;
&lt;p&gt;Un module peut ajouter de nouvelles options à la ligne de commande. Toutefois il n&#39;y a d&#39;intérêt que si ces options se conjugent à une utilisation dans les autres niveaux (&lt;em&gt;Configuration&lt;/em&gt;, &lt;em&gt;Commandes&lt;/em&gt; et &lt;em&gt;Services&lt;/em&gt;) car une option ne fait rien en elle-même, si ce n&#39;est se rendre disponible.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../lib/dto/ConfDTO&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;Server&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../../server&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;module&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  duniter&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;    // Options du module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;    cliOptions&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; value&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;--tres-certifies&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; desc&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;Ne compter que les membres avec plus de 10 certifications vers eux.&amp;#39;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;    cli&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; [{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;      name&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;nb-membres&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;      desc&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;Affiche le nombre de membres de la toile&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;      logs&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;      onDatabaseExecute&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; async&lt;/span&gt;&lt;span&gt; (server&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;Server&lt;/span&gt;&lt;span&gt;, conf&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;, program&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:any&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        const&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; requeteSQL&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; program.&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;tresCertifies&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; ?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;          // Compter les membres avec plus de 10 certifications&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;          &amp;#39;SELECT COUNT(*) as compte FROM i_index i WHERE member AND 10 &amp;lt; (&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;          &amp;#39; SELECT COUNT(*) FROM c_index c WHERE c.receiver = i.pub&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;          &amp;#39;)&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;          :&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;          // Compter tous les membres&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;          &amp;#39;SELECT COUNT(*) as compte FROM i_index WHERE member&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        const&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; resultat&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; await&lt;/span&gt;&lt;span&gt; server.&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;dal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;iindexDAL&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;query&lt;/span&gt;&lt;span&gt;(requeteSQL)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        console.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;Nombre de membres : %s&amp;#39;&lt;/span&gt;&lt;span&gt;, resultat[&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;compte&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Exécution de la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;bin/duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; nb-membres&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --tres-certifies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Nombre&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; de membres :&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 402&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;service&quot;&gt;Service&lt;/h3&gt;
&lt;p&gt;Un module peut également fournir un &lt;em&gt;service&lt;/em&gt;. C&#39;est une entité qui fonctionne sans fin, et qui ne sera utilisé que si les services sont activés explicitement par une commande, comme la commande &lt;code&gt;direct_webstart&lt;/code&gt; le fait :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  name:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;direct_start&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  desc:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;Start Duniter node with direct output, non-daemonized.&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  onDatabaseExecute:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; async&lt;/span&gt;&lt;span&gt; (server&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;Server&lt;/span&gt;&lt;span&gt;, conf&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;, program&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:any&lt;/span&gt;&lt;span&gt;, params&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:any&lt;/span&gt;&lt;span&gt;, startServices&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:any&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    const&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; logger&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; server.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;logger&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    logger.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;&amp;gt;&amp;gt; Server starting...&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    await&lt;/span&gt;&lt;span&gt; server.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;checkConfig&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;    // Add signing &amp;amp; public key functions to PeeringService&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    logger.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;Node version: &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; +&lt;/span&gt;&lt;span&gt; server.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;version&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    logger.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;Node pubkey: &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; +&lt;/span&gt;&lt;span&gt; server.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;conf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;pair&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;pub&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;    // Services&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    await&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; startServices&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    logger.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;&amp;gt;&amp;gt; Server ready!&amp;#39;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    return new&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; Promise&lt;/span&gt;&lt;span&gt;(()&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; null&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt; // Never ending&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ainsi &lt;strong&gt;tous les services déclarés&lt;/strong&gt; par les modules seront démarrés simultanément lors de l&#39;appel à &lt;code&gt;startServices()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Exemple de service :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../lib/dto/ConfDTO&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;Server&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;../../server&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; *&lt;/span&gt;&lt;span&gt; as&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; stream&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;stream&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;module&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  duniter&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;    service&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;      neutral&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span&gt; (server&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;Server&lt;/span&gt;&lt;span&gt;, conf&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;ConfDTO&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        return new&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; MyService&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;* Service d&amp;#39;exemple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; MyService&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; stream&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;Readable&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;  constructor&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;    super&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; objectMode&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; true&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    let&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;    setInterval&lt;/span&gt;&lt;span&gt;(()&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; console.&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;quot;Le service tourne! (message#%s)&amp;quot;&lt;/span&gt;&lt;span&gt;, i&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;++&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 5000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;  _read&lt;/span&gt;&lt;span&gt;(){}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et l&#39;on pourra alors constater si l&#39;on lance &lt;code&gt;node bin/duniter direct_start&lt;/code&gt; des messages de log toutes les 5 secondes (5000 millisecondes) :&lt;/p&gt;
&lt;p&gt;&lt;samp&gt;Le service tourne ! (message#1)
Le service tourne ! (message#2)
Le service tourne ! (message#3)&lt;/samp&gt;&lt;/p&gt;
&lt;h2 id=&quot;fonctionnement-general&quot;&gt;Fonctionnement général&lt;/h2&gt;
&lt;p&gt;Pour un nœud démarré par la commande &lt;code&gt;direct_start&lt;/code&gt;, alors &lt;strong&gt;tous les services de modules&lt;/strong&gt; fonctionnent de concert. Voici un petit aperçu :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/389f1bc9.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Comme on peut le voir, l&#39;élément central est &lt;code&gt;server&lt;/code&gt;. En effet, tous ces modules soient s&#39;appuient sur, soit alimentent &lt;code&gt;server&lt;/code&gt; d&#39;une façon ou d&#39;une autre.&lt;/p&gt;
&lt;p&gt;Cela est tout à fait normal, puisqu&#39;il s&#39;agit de l&#39;élément central qui contient toute la logique de la blockchain et l&#39;accès aux données qu&#39;elle contient (transactions, unités de monnaie, identités, certifications, ...).&lt;/p&gt;
&lt;p&gt;Exemple de flux observables dans Duniter :&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Réception, traitement puis retransmission d&#39;un document via BMA&lt;/em&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/e4ab1d12.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Réception, traitement puis retransmission d&#39;un document via WS2P&lt;/em&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/123b3f7a.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Partage d&#39;un signal de bloc empilé sur la blockchain&lt;/em&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/a9e91571.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ce signal permet de notifier au module &lt;code&gt;prover&lt;/code&gt; qu&#39;un nouveau bloc a été ajouté, et donc de lui permettre de changer de stratégie : s&#39;il était en train de réaliser la preuve de travail sur ce bloc, le signal lui permet d&#39;arrêter son travail en cours et redémarrer une preuve sur un nouveau bloc. S&#39;il était en attente et que ce bloc permet de débloquer l&#39;attente (sortie de la fenêtre d&#39;exclusion), même idée : le signal lui permet de démarrer une nouvelle preuve.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Partage d&#39;un signal de déconnexion&lt;/em&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/1cc722d6.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ce signal, émis par l&#39;une des connexions WS2P présentes, utilise l&#39;objet &lt;code&gt;server&lt;/code&gt; comme support pour partager ce signal avec tous les modules qui pourraient en avoir besoin, dont lui-même ! En effet, le module WS2P peut se servir de ce signal pour détecter un manque de connectivité (on vient de perdre une connexion !) et décider d&#39;agir pour améliorer cette situation.&lt;/p&gt;
&lt;p&gt;Il est à noter que seul &lt;code&gt;server&lt;/code&gt; réalise de l&#39;écho, ainsi le signal ne rebondira pas sur WS2P à nouveau en direction du serveur, menant à une boucle infinie.&lt;/p&gt;
&lt;h3 id=&quot;demarrage-du-serveur&quot;&gt;Démarrage du serveur&lt;/h3&gt;
&lt;p&gt;Et donc, quand on « démarre » Duniter, que se passe-t-il ?&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; bin/duniter direct_start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alors, Duniter passe par les phases décrites plus tôt :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chargement des modules&lt;/li&gt;
&lt;li&gt;Chargement de la configuration&lt;/li&gt;
&lt;li&gt;Sur connexion de la base de données (&lt;code&gt;onDatabaseExecute&lt;/code&gt;), lancement des services :
&lt;ul&gt;
&lt;li&gt;Démarrage de l&#39;écoute BMA&lt;/li&gt;
&lt;li&gt;Établissement de connexions WS2P&lt;/li&gt;
&lt;li&gt;Démarrage du service &lt;code&gt;prover&lt;/code&gt; :
&lt;ul&gt;
&lt;li&gt;Si le nœud n&#39;est pas exclu de la preuve de travail, il commence la preuve d&#39;un nouveau bloc&lt;/li&gt;
&lt;li&gt;Sinon, le nœud attend qu&#39;un bloc arrive par BMA ou WS2P&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà donc comment on obtient un nœud Duniter fonctionnel à ce jour.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-6-code/&quot;&gt;Chapitre 6 : Code&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>6. Code - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-6-code/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-6-code/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-6-code/">&lt;h1 id=&quot;6-code-tutoriel-de-developpement&quot;&gt;6. Code - Tutoriel de développement&lt;/h1&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Dans ce chapitre, nous allons visualiser et commenter les éléments importants du code de Duniter afin que vous puissiez mieux vous repérer dans le rôle de chaque élément.&lt;/p&gt;
&lt;p&gt;Le but &lt;em&gt;n&#39;est pas&lt;/em&gt; de décrire chaque élément du code, mais juste ses grandes lignes. Les éléments non décrits sont jugés périphériques, et peuvent être étudiés ultérieurement par vos soins en lisant directement le code.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce chapitre est théorique. Toutefois, vous pouvez placer des points d&#39;arrêt dans les fichiers de code pour explorer ce qui est décrit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;le-fichier-server-ts&quot;&gt;Le fichier &lt;code&gt;server.ts&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;C&#39;est &lt;strong&gt;LE&lt;/strong&gt; fichier central de Duniter, d&#39;où sont accessibles toutes les données et toutes les logiques propres au protocole Duniter.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/e426bada.png&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L&#39;objet &lt;code&gt;server&lt;/code&gt; est transmis à tout module, aussi bien pour une exécution de commande que pour un fonctionnement en mode service.&lt;/p&gt;
&lt;p&gt;Cet objet est donc disponible partout dans l&#39;application, ainsi que les sous-objets portés par celui-ci (&lt;code&gt;dal&lt;/code&gt;, &lt;code&gt;conf&lt;/code&gt;, &lt;code&gt;BlockchainService&lt;/code&gt;…).&lt;/p&gt;
&lt;h3 id=&quot;propriete-server-conf&quot;&gt;Propriété &lt;code&gt;server.conf&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette propriété contient la configuration chargée au démarrage de Duniter, puis éventuellement modifiée au cours de l&#39;exécution par n&#39;importe quel module. Toute partie de l&#39;application a en général accès à cette configuration.&lt;/p&gt;
&lt;h3 id=&quot;propriete-server-dal&quot;&gt;Propriété &lt;code&gt;server.dal&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Une instance de &lt;code&gt;fileDAL.ts&lt;/code&gt;. Permet l&#39;accès à l&#39;intégralité de la base de données de Duniter.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il s&#39;agit de la propriété la plus utilisée de l&#39;application.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;proprietes-de-service&quot;&gt;Propriétés de service&lt;/h3&gt;
&lt;h4 id=&quot;server-blockchainservice&quot;&gt;&lt;code&gt;server.BlockchainService&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Accès au service de gestion de la blockchain, afin d&#39;ajouter ou retirer des blocs. C&#39;est ce service qui s&#39;assure du respect du protocole Duniter lors de l&#39;ajout d&#39;un bloc en contrôlant sa forme et son contenu.&lt;/p&gt;
&lt;h4 id=&quot;server-identityservice&quot;&gt;&lt;code&gt;server.IdentityService&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Accès au service de gestion des identités et certifications en piscine.&lt;/p&gt;
&lt;h4 id=&quot;server-membershipservice&quot;&gt;&lt;code&gt;server.MembershipService&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Accès au service de gestion des adhésions en piscine.&lt;/p&gt;
&lt;h4 id=&quot;server-transactionservice&quot;&gt;&lt;code&gt;server.TransactionService&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Accès au service de gestion des transactions en piscine.&lt;/p&gt;
&lt;h2 id=&quot;le-fichier-filedal-ts&quot;&gt;Le fichier &lt;code&gt;fileDAL.ts&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Contient la classe centralisant l&#39;accès à toutes les données de l&#39;application.&lt;/p&gt;
&lt;h3 id=&quot;des-methodes-pour-l-acces-aux-donnees&quot;&gt;Des méthodes pour l&#39;accès aux données&lt;/h3&gt;
&lt;p&gt;Cette classe contient des méthodes facilitatrices pour accéder à des données précises.&lt;/p&gt;
&lt;p&gt;Par exemple la méthode &lt;code&gt;getMembers()&lt;/code&gt; renvoie la liste des membres contenus dans la base de données. Mais obtenir cette information n&#39;est pas si triviale étant donné qu&#39;il faut explorer la blockchain et faire quelques jointures en base de données. Cette méthode masque toute cette complexité.&lt;/p&gt;
&lt;h3 id=&quot;des-objets-pour-un-acces-libre&quot;&gt;Des objets pour un accès libre&lt;/h3&gt;
&lt;p&gt;Mais afin de permettre à tout module (même encore inconnu) d&#39;avoir accès à la base de données, la classe du fichier &lt;code&gt;fileDAL.ts&lt;/code&gt; contient également des membres permettant d&#39;exécuter directement des requêtes sur la base de données :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bindexDAL&lt;/code&gt; : accès à la table &lt;code&gt;b_index&lt;/code&gt; (données blockchain)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iindexDAL&lt;/code&gt; : accès à la table &lt;code&gt;i_index&lt;/code&gt; (données blockchain)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mindexDAL&lt;/code&gt; : accès à la table &lt;code&gt;m_index&lt;/code&gt; (données blockchain)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sindexDAL&lt;/code&gt; : accès à la table &lt;code&gt;s_index&lt;/code&gt; (données blockchain)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cindexDAL&lt;/code&gt; : accès à la table &lt;code&gt;c_index&lt;/code&gt; (données blockchain)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blockDAL&lt;/code&gt; : accès à la table &lt;code&gt;block&lt;/code&gt; (blockchain complète)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;metaDAL&lt;/code&gt; : accès à la table &lt;code&gt;meta&lt;/code&gt; (méta-données de la base de données)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idtyDAL&lt;/code&gt; : accès à la table &lt;code&gt;idty&lt;/code&gt; (piscine des identités)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;certDAL&lt;/code&gt; : accès à la table &lt;code&gt;cert&lt;/code&gt; (piscine des certifications)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;msDAL&lt;/code&gt; : accès à la table &lt;code&gt;membership&lt;/code&gt; (piscine des adhésions)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;txsDAL&lt;/code&gt; : accès à la table &lt;code&gt;txs&lt;/code&gt; (piscine des transactions)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;peerDAL&lt;/code&gt; : accès à la table &lt;code&gt;peer&lt;/code&gt; (fiches de pair)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;walletDAL&lt;/code&gt; : accès à la table &lt;code&gt;wallet&lt;/code&gt; (table calculée des comptes monétaires)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;statDAL&lt;/code&gt; : accès au fichier de statistiques &lt;code&gt;stats.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;confDAL&lt;/code&gt; : accès au fichier de configuration &lt;code&gt;conf.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;les-services&quot;&gt;Les services&lt;/h2&gt;
&lt;h3 id=&quot;le-fichier-blockchainservice-ts&quot;&gt;Le fichier &lt;code&gt;BlockchainService.ts&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;C&#39;est le fichier central d&#39;accès à la blockchain. Ce fichier permet d&#39;ajouter des blocs et d&#39;en retirer (utile pour la résolution de forks).&lt;/p&gt;
&lt;p&gt;Le service &lt;code&gt;BlockchainService&lt;/code&gt; manipule lui-même un autre objet &lt;code&gt;BlockchainContext&lt;/code&gt;, une sorte de cache pour l&#39;objet fondamental manipulé : la &lt;code&gt;DuniterBlockchain&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/81be22b2.png&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L&#39;objet &lt;code&gt;DuniterBlockchain&lt;/code&gt; est celui qui implémente &lt;em&gt;in-fine&lt;/em&gt; le &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/Protocol.md&quot;&gt;protocole Duniter&lt;/a&gt;, en s&#39;assurant du respect des règles lorsqu&#39;il reçoit un nouveau bloc mais aussi en générant les données exploitables (les INDEX) lors de l&#39;analyse, puis de l&#39;ajout du bloc au sein de la blockchain complète.&lt;/p&gt;
&lt;h3 id=&quot;les-autres-fichiers-de-service&quot;&gt;Les autres fichiers de service&lt;/h3&gt;
&lt;p&gt;Les fichiers &lt;code&gt;IdentityService.ts&lt;/code&gt;, &lt;code&gt;MembershipService.ts&lt;/code&gt;, &lt;code&gt;TransactionService.ts&lt;/code&gt; et &lt;code&gt;PeeringService.ts&lt;/code&gt; servent pour leur part à vérifier et accepter en piscine les nouveaux documents respectivement d&#39;identité et certification, d&#39;adhésion, de transaction et de fiches de pair.&lt;/p&gt;
&lt;p&gt;Aucun de ces services n&#39;écrit dans la blockchain directement, mais en piscine : c&#39;est une zone temporaire pour les données en attente d&#39;être inscrites officiellement dans un bloc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Passer à la suite du tutoriel : &lt;a href=&quot;https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-7-bdd/&quot;&gt;Chapitre 7 : Base de données&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>8. Addons - Tutoriel de développement</title>
          <pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-8-addons/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-8-addons/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/tutoriel-dev/chapitre-8-addons/">&lt;h1 id=&quot;8-addons-tutoriel-de-developpement&quot;&gt;8. Addons - Tutoriel de développement&lt;/h1&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning&quot;&gt;
 Page en cours de rédaction !
&lt;/div&gt;
</description>
      </item>
      <item>
          <title>Architecture</title>
          <pubDate>Mon, 09 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/architecture-duniter/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/architecture-duniter/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/architecture-duniter/">&lt;h1 id=&quot;architecture&quot;&gt;Architecture&lt;/h1&gt;
&lt;h2 id=&quot;architecture-reseau-des-clients&quot;&gt;Architecture réseau des clients&lt;/h2&gt;
&lt;p&gt;Voici un aperçu de l&#39;architecture de Duniter entre les clients et un serveur.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/uml/00182988.svg&quot; alt=&quot;uml&quot; /&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Licence Ğ1</title>
          <pubDate>Wed, 04 Oct 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/g1/licence-g1/</link>
          <guid>https://duniter.fr/wiki/g1/licence-g1/</guid>
          <description xml:base="https://duniter.fr/wiki/g1/licence-g1/">&lt;h1 id=&quot;licence-g1&quot;&gt;Licence Ğ1&lt;/h1&gt;
&lt;div class=&quot;note note-icon note-icon-large note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;&lt;strong&gt;L&#39;utilisation de la la monnaie Ğ1 suppose l&#39;acceptation de sa licence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/documents/g1_monetary_license/-/blob/master/g1_monetary_license_fr.rst&quot;&gt;Télécharger la Licence Ğ1 (format texte)&lt;/a&gt;
ou
&lt;a href=&quot;/wiki/g1/licence-txt/&quot;&gt;Consulter sur ce site (page web)&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;commentaire&quot;&gt;Commentaire&lt;/h2&gt;
&lt;div class=&quot;note note-block note-info&quot;&gt;
&lt;p&gt;Une fois la licence reçue, lue et acceptée, le processus pour devenir membre de la TdC Ğ1 passe par la création d&#39;un ID (votre identifiant / pseudo) et d&#39;une paire (clé privée / clé publique) &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/recommandations-de-securite-a-lire-avant-de-creer-votre-compte-g1/1829&quot;&gt;de façon sécurisée&lt;/a&gt;. La clé publique devient un numéro de compte utilisable uniquement par celui qui possède la clé privée, laquelle se construit par une autre paire (phrase secrète / password) = clé privée, qu&#39;il faut précieusement garder pour soi.&lt;/p&gt;
&lt;p&gt;Le plus efficace pour réaliser cela consiste à utiliser l&#39;un des clients Duniter Ğ1 officiels :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Silkaj &lt;a rel=&quot;external&quot; href=&quot;https://silkaj.duniter.org/&quot;&gt;https://silkaj.duniter.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sakia &lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org/&quot;&gt;http://sakia-wallet.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cesium &lt;a rel=&quot;external&quot; href=&quot;https://cesium.app/fr/&quot;&gt;https://cesium.app/fr/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour des raisons de sécurité il sera préférable de générer votre paire de clés en étant offline et il est conseillé de ne jamais saisir votre clé privée membre (qui est la source de votre Dividende Universel Ğ1) sur une application connectée ou un site web externe (Cesium qui apparaît sous la forme de pages web peut parfaitement être installé et utilisé sur votre propre PC, il est d&#39;ailleurs embarqué nativement avec le serveur Duniter dans ce but, proposant ainsi une application 100% client / serveur).&lt;/p&gt;
&lt;p&gt;Une fois votre paire de clés créée, vous devez générer un document Duniter de révocation, qui vous assure de pouvoir annuler votre compte en cas de problème futur que vous devrez garder précieusement.&lt;/p&gt;
&lt;p&gt;Ensuite vous générez un document Duniter de demande pour devenir membre, lequel devra être certifié par des personnes qui vous connaissent suffisamment bien (voir impérativement la licence de la monnaie Ğ1 à ce propos) et qui sont déjà membres de la TdC Ğ1. Il est donc plus efficace de s&#39;assurer préalablement que au moins 5 membres de la TdC Ğ1 vous connaissent suffisamment bien et accepteront ainsi de certifier votre clé publique, avant de commencer le processus d&#39;inscription.&lt;/p&gt;
&lt;p&gt;Il faudra 5 certifications pour que votre inscription puisse être inscrite dans la blockchain Ğ1. Toutefois à cause des règles de temps (1 signature par personne tous les 5 jours), et de calcul (calculs des blocs par le réseau Duniter Ğ1) cette opération finale pourra prendre du temps (plusieurs jours, voire plusieurs semaines selon les cas). Si votre opération n&#39;est pas validée au bout de 2 mois il faudra la recommencer.&lt;/p&gt;
&lt;p&gt;Note : Duniter vous permet de générer autant de comptes non-membres que voulu. Un conseil de gestion est donc de faire de petits virements sur ces comptes d&#39;appoint (ou portes-monnaie), possédant leur propre clé privée, ce qui limitera les risques d&#39;utilisation à la quantité de monnaie Ğ1 qui s&#39;y trouvera. Vous pourrez ainsi utiliser ce porte monnaie sur des applications online en lesquelles vous avez confiance tout en limitant les risques associés à la connexion.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;suivi-de-l-inscription&quot;&gt;Suivi de l&#39;inscription&lt;/h2&gt;
&lt;p&gt;Une fois le processus d&#39;inscription démarré, il est possible de suivre son avancement via deux outils :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://g1-monit.librelois.fr/willMembers?lg=fr&quot;&gt;g1-monit&lt;/a&gt; : visualisation de l&#39;état des inscriptions en attente&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wot-wizard.duniter.org&quot;&gt;WotWizard&lt;/a&gt; : prévisions des dates d&#39;entrée de chaque inscription&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La combinaison des ces deux outils suffit à savoir si votre dossier d&#39;inscription est complet et valide, ainsi que de connaître votre date d&#39;entrée probable dans la toile de confiance.&lt;/p&gt;
&lt;p&gt;À noter que seuls les dossiers complets sont répertoriés par WotWizard.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Fonctionnement des branches du dépot git Duniter</title>
          <pubDate>Fri, 22 Sep 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/git-branches/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/git-branches/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/git-branches/">&lt;h1 id=&quot;fonctionnement-des-branches-du-depot-git-duniter&quot;&gt;Fonctionnement des branches du dépot git Duniter&lt;/h1&gt;
&lt;p&gt;Le &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter&quot;&gt;dépot git duniter&lt;/a&gt; a de nombreuses branches, voici comment savoir sur quel branche vous devez contribuer en fonction de ce que vous voulez faire :&lt;/p&gt;
&lt;h2 id=&quot;master-uniquement-pour-la-doc&quot;&gt;Master : uniquement pour la doc&lt;/h2&gt;
&lt;p&gt;La branche master correspond a une veille version oldstable, seule la partie doc est mise à jours car c&#39;est la doc de cette branche qui est généralement consultée par ceux qui ne connaissent pas le projet.&lt;/p&gt;
&lt;h2 id=&quot;pour-contribuer-au-code-hors-protocole-dup&quot;&gt;Pour contribuer au code (hors protocole DUP)&lt;/h2&gt;
&lt;p&gt;Créez une nouvelle branche a partir de la branche &lt;code&gt;dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Développez, puis soumettez une PR &lt;code&gt;from&lt;/code&gt; votre branche into &lt;code&gt;dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si vous faîte parti de l&#39;organisation Duniter, que votre contribution est mineure (type et petits correctifs) et que vous êtes sûr de vous, vous pouvez pusher votre correctif directement sur la branche dev.&lt;/p&gt;
&lt;h2 id=&quot;pour-contribuer-au-protocole-dup-correctif-ou-evolution&quot;&gt;Pour contribuer au protocole DUP (correctif ou évolution)&lt;/h2&gt;
&lt;p&gt;Discutez en dabord avec nous &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;sur le forum&lt;/a&gt;, le protocole DUP ne peut pas être modifié comme ça !
En tout les cas de telles contributions ne se feront pas sur la branche dev mais sur une branche dédiée a la prochaine version majeure. Actuellement (novembre 2017) il s&#39;agit de la branche &lt;code&gt;2.0-dev&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;les-branches-de-version-1-6-par-exemple&quot;&gt;Les branches de version (&lt;code&gt;1.6&lt;/code&gt; par exemple)&lt;/h2&gt;
&lt;p&gt;Les branches de version permettent d&#39;apporter un éventuel path a une version stable si cela est nécessaire et ne peut attendre la version stable suivante. Nous pouvons ainsi librement expérimenter sans risquer de casser les versions stables déjà publiés !&lt;/p&gt;
&lt;h2 id=&quot;les-autres-branches&quot;&gt;Les autres branches&lt;/h2&gt;
&lt;p&gt;Vous pouvez les ignorer, il s&#39;agit de travaux en cours de développeurs membres de l&#39;organisation duniter.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Configurer un nœud Duniter</title>
          <pubDate>Fri, 22 Sep 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/configurer/</link>
          <guid>https://duniter.fr/wiki/doc/configurer/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/configurer/">&lt;h1 id=&quot;configurer-un-noeud-duniter&quot;&gt;Configurer un nœud Duniter&lt;/h1&gt;
&lt;p&gt;Ce document est un petit tutoriel pour configurer votre nœud Duniter fraichement installé,  c&#39;est la suite logique du &lt;a href=&quot;https://duniter.fr/wiki/doc/installer/&quot;&gt;tutoriel d&#39;installation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;en-ligne-de-commande&quot;&gt;En ligne de commande&lt;/h2&gt;
&lt;h3 id=&quot;configurer-le-trousseau-de-cles-cryptographiques&quot;&gt;Configurer le trousseau de clés cryptographiques&lt;/h3&gt;
&lt;p&gt;Tous les nœuds duniter ont un trousseau de clés cryptographiques, qu&#39;ils utilisent pour signer les informations qu&#39;ils transmettent sur le réseau. Il y a deux types de nœuds duniter :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. les nœuds membres :&lt;/strong&gt; Si le trousseau de clé du nœud correspond a une identité membre, alors le nœud est de type &quot;membre&quot;, et
va automatiquement prendre part au calcul des blocs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. les nœuds miroir :&lt;/strong&gt; Si le trousseau de clé du nœud ne correspond pas à une identité membre, alors le nœud est de type &quot;miroir&quot;, il ne pourra pas écrire de bloc, mais sera quand même utile pour la résilience du réseau ainsi que pour répondre aux requêtes des clients.&lt;/p&gt;
&lt;p&gt;Par défaut ce trousseau est aléatoire, et le nœud duniter est donc un nœud miroir. Vous pouvez modifier le trousseau de clés du nœud avec cette commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; wizard key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Attention le trousseau de clés renseigné via cette commande sera stocké en clair sur le disque !
Pour éviter cela vous pouvez choisir de ne renseigner le trousseau de clés à utiliser qu&#39;au lancement du nœud afin que votre trousseau de clés reste seulement en mémoire vive, pour cela ajoutez l&#39;option &lt;code&gt;--keyprompt&lt;/code&gt; à la commande de lancement du nœud.&lt;/p&gt;
&lt;h4 id=&quot;avoir-plusieurs-noeuds-avec-le-meme-trousseau-de-cles&quot;&gt;Avoir plusieurs nœuds avec le même trousseau de clés&lt;/h4&gt;
&lt;p&gt;Il est possible d&#39;avoir plusieurs nœuds membres avec votre trousseau de clés membre mais dans ce cas vous devez attribuer un identifiant unique a chacun de vos nœuds, cet identifiant unique est nommé &lt;strong&gt;préfixe&lt;/strong&gt; car son unique rôle est de préfixer le nonce des blocs que vous calculez afin d&#39;éviter que deux de vos nœuds ne calculent la même preuve.&lt;/p&gt;
&lt;p&gt;Sur votre 1er nœud : Vous n&#39;avez rien à faire, le préfixe vaut &lt;code&gt;1&lt;/code&gt; par défaut.&lt;/p&gt;
&lt;p&gt;Sur votre 2ème nœud :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --prefix 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sur votre 3ème nœud :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --prefix 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;etc&lt;/p&gt;
&lt;p&gt;Le préfixe doit être un entier compris entre &lt;code&gt;1&lt;/code&gt; et &lt;code&gt;899&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;configurer-le-reseau&quot;&gt;Configurer le réseau&lt;/h3&gt;
&lt;h4 id=&quot;les-api&quot;&gt;Les API&lt;/h4&gt;
&lt;p&gt;En version &lt;code&gt;1.6.x&lt;/code&gt; il existe deux API (Application Programming Interface) permettant a votre nœud duniter de communiquer avec d&#39;autres programmes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;WS2P (WebSocketToPeer) : cette API est dédiée à la communication inter-nœuds, c&#39;est-a-dire entre votre nœud duniter et les autres nœuds de la même monnaie. &lt;strong&gt;WS2P est activée par défaut&lt;/strong&gt; sur votre nœud duniter.&lt;/li&gt;
&lt;li&gt;BMA  (Basic Merkled Api) : cette vielle API est dédiée à la communication avec les logiciels clients (Cesium, Sakia, Silkaj), elle peut également être utilisée par n&#39;importe quel programme externe souhaitant requêter le réseau (un site web qui voudrait vérifier la présence d&#39;une transaction en blockchain par exemple). BMA est veillissante, nous projettons de développer une nouvelle API client qui la remplacera. &lt;strong&gt;BMA est désactivée par défaut&lt;/strong&gt;  sur votre nœud duniter.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;configurer-ws2p&quot;&gt;Configurer WS2P&lt;/h4&gt;
&lt;h5 id=&quot;notion-de-ws2p-public-et-ws2p-privee&quot;&gt;notion de WS2P Public et WS2P Privée&lt;/h5&gt;
&lt;p&gt;WS2P Privé = connexions WS2P sortantes.&lt;br /&gt;
WS2P public = connexions WS2P entrantes.&lt;/p&gt;
&lt;p&gt;Une connexion WS2P entre deux nœuds duniter a toujours un sens, elle est initiée par l&#39;un des nœuds qui est donc l&#39;initiateur et l&#39;autre l&#39;accepteur. Les connexions que votre nœud duniter initie avec d&#39;autres nœuds duniter sont sortantes, elles dépendent de votre configuration WS2p privée. En revanche, les connexions que votre nœud duniter accepte d&#39;un autre nœud sont entrantes, elles dépendent de votre configuration WS2P publique.&lt;/p&gt;
&lt;h5 id=&quot;ws2p-prive&quot;&gt;WS2P privé&lt;/h5&gt;
&lt;p&gt;Ce mode est activé par défaut et configuré automatiquement. Vous pouvez le désactiver avez la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-noprivate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et pour le réactiver :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-private&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les seules configurations possibles sont de définir un nombre maximal de connexions WS2P sortantes et une liste de clés préférés, votre nœud se connectera en priorité aux nœuds duniter dont la clé publique fait partie de votre liste de clés préférés.&lt;/p&gt;
&lt;p&gt;pour modifier le nombre maximal de connexions WS2p sortantes :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-max-private&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;coun&lt;/span&gt;&lt;span&gt;t&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour ajouter une clé a votre liste de clés préférés :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-prefered-add&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;pubke&lt;/span&gt;&lt;span&gt;y&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour supprimer une clé de votre liste de clés préférés :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-prefered-rm&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;pubke&lt;/span&gt;&lt;span&gt;y&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour consulter la liste de vos clés préférés :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; ws2p list-prefered&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&quot;ws2ptor-prive&quot;&gt;WS2PTOR Privé&lt;/h6&gt;
&lt;p&gt;Pour demander à votre nœud duniter de passer par Tor dans les connexions privées qu&#39;il établit avec d&#39;autres nœuds il vous suffit de définir un proxy Tor et de choisir la politique à adopter vis-à-vis des points d&#39;accès ws2p normaux (option &lt;code&gt;--reaching-clear-ep&lt;/code&gt;) :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --tor-proxy&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; localhost:9050&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --reaching-clear-ep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous devrez en plus installer le &lt;em&gt;Tor Browser&lt;/em&gt; ou &lt;em&gt;Tor Standalone&lt;/em&gt; sur la même machine. Par défaut, Tor écoute sur localhost sur le port 9050. Si vous changez votre configuration Tor vous devrez évidemment mofidier la configuration de Duniter en conséquence.&lt;/p&gt;
&lt;p&gt;Vous pouvez également opter pour un nœud mixte, qui contactera en clair les points d&#39;accès classiques et qui ne se servira donc de Tor que pour contacter les point d&#39;accès en .onion :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --tor-proxy&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; localhost:9050&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --reaching-clear-ep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clear&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enfin 3ème choix, vous pouvez décider de ne contacter que les points d&#39;accès en .onion, les points d&#39;accès en clair ne seront jamais contactés :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --tor-proxy&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; localhost:9050&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --reaching-clear-ep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; none&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;note note-icon note-icon-small note-icon-warning&quot;&gt;
Chaque fois que vous modifiez l&#39;une de ses deux options vous devez répéter l&#39;autre en même temps sinon elle est réinitialisée !
&lt;/div&gt;
&lt;p&gt;Enfin pour réinitialiser votre configuration Tor et revenir à un nœud parfaitement classique :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --rm-proxies&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous pouvez aussi décider d&#39;encapsuler Duniter dans une VM Tor comme whonix, dans ce cas vous devrez informer duniter qu&#39;il sera capable de contacter les points d&#39;accès en .onion en activant l&#39;option &lt;code&gt;--force-tor&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --force-tor --reaching-clear-ep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tor&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;none&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;ws2p-public&quot;&gt;WS2P Public&lt;/h5&gt;
&lt;p&gt;Ce mode est désactivé par défaut, pour qu&#39;il fonctionne vous devez configurer un point d&#39;accès que les autres nœuds duniter pourront utiliser pour vous joindre.&lt;/p&gt;
&lt;p&gt;Tout d&#39;abord activez le mode WS2p public&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-public&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&quot;point-d-acces&quot;&gt;Point d&#39;accès&lt;/h6&gt;
&lt;p&gt;Pour que le WS2P Public fonctionne vous devez configurer un point d&#39;accès que les autres nœuds duniter pourront utiliser pour vous joindre. Il y a deux cas possibles :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Vous souhaitez utiliser l&#39;UPnP (activé par défaut) et alors vous n&#39;avez rien à faire, duniter va commander automatiquement votre box pour configurer un point d&#39;accès.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Vous n&#39;avez pas l&#39;UPnP ou ne souhaitez pas l&#39;utiliser, vous devez alors configurer manuellement un point d&#39;accès :&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-noupnp --ws2p-port&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; PORT&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-host&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; HOST&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-remote-port&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; REMOTE_PORT&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-remote-host&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; REMOTE_HOST&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Les options “remote” correspondent par exemple à une box qui ferait un NAT vers votre machine, ou à un nginx/apache qui ferait un reverse proxy vers votre instance Duniter.&lt;/em&gt;
Si votre nœud duniter est connecté à internet par l&#39;intermédiaire d&#39;une box, vous devrez configurer une redirection de port sur votre box en redirigeant le port de votre choix vers la machine qui éxécute votre nœud duniter. De plus, afin que l&#39;ip locale de cette machine ne change pas, vous devez demander à votre box de lui attribuer un bail DHCP permanent.&lt;/p&gt;
&lt;h6 id=&quot;point-d-acces-ws2ptor&quot;&gt;Point d&#39;accès WS2PTOR&lt;/h6&gt;
&lt;p&gt;Il vous suffit d&#39;indiquer l&#39;adresse .onion de votre hidden service dans l&#39;option &lt;code&gt;--ws2p-remote-port&lt;/code&gt; et Duniter se configurera automatiquement en mode WS2PTOR.&lt;/p&gt;
&lt;h6 id=&quot;nombre-maximal-de-connexions-ws2p-publiques&quot;&gt;Nombre maximal de connexions WS2P publiques&lt;/h6&gt;
&lt;p&gt;Pour modifier le nombre maximal de connexions WS2p entrantes :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-max-public&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;coun&lt;/span&gt;&lt;span&gt;t&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&quot;liste-des-cles-invitees-privilegiees&quot;&gt;Liste des clés invitées/privilégiées&lt;/h6&gt;
&lt;p&gt;De la même façon que vous pouvez définir des clés préférées pour vos connexions WS2p sortantes, vous pouvez définir des clés invitées qui seront alors privilégiées. C&#39;est-à-dire que si vous recevez plus de demandes de connexion que le nombre maximal que vous avez configuré, les connexions initiées par des nœuds dont la clé publique fait partie de vos clés privilégiées seront prioritaires.&lt;/p&gt;
&lt;p&gt;Pour ajouter une clé à votre liste de clés privilégiées  :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-privileged-add&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;pubke&lt;/span&gt;&lt;span&gt;y&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour supprimer une clé de votre liste de clés privilégiées :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-privileged-rm&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;pubke&lt;/span&gt;&lt;span&gt;y&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour consulter la liste de vos clés privilégiées :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; ws2p list-privileged&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;verifier-votre-configuration-ws2p&quot;&gt;Vérifier votre configuration WS2P&lt;/h5&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; ws2p show-conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;definir-un-path-pour-votre-point-d-acces-ws2p&quot;&gt;Définir un path pour votre point d&#39;accès ws2p&lt;/h5&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ws2p-remote-path&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;pat&lt;/span&gt;&lt;span&gt;h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;À n&#39;utiliser que si vous souhaitez placer votre nœud duniter derrière un reverse proxy.
Cette option vous permet de rajouter un chemin pour votre point d&#39;accès ws2p public.
Votre point d&#39;accès ws2p sera alors : &lt;code&gt;ws://host:port/path&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Notez que ws:// est à remplacer par wws:// si vous réglez le remote port sur 443.&lt;/p&gt;
&lt;h4 id=&quot;configurer-bma&quot;&gt;Configurer BMA&lt;/h4&gt;
&lt;p&gt;La seule chose que vous devez configurer c&#39;est un point d&#39;accès. Répondez aux questions de la commande interactive suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; wizard network&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Voici un exemple avec ma propre configuration chez moi :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2017-10-01T19:02:09+02:00 - debug: Plugging file system...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2017-10-01T19:02:09+02:00 - debug: Loading conf...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2017-10-01T19:02:10+02:00 - debug: Configuration saved.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? IPv4 interface eth0 192.168.0.11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? IPv6 interface None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Port 10901&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Remote IPv4 81.64.137.147&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Remote port 10901&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Does this server has a DNS name? No&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2017-10-01T19:02:33+02:00 - debug: Configuration saved.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Je suis en filaire, sinon en wifi il faut choisir l&#39;option wlan0.
Ma box ne supporte hélas pas l&#39;IPv6, donc pas d&#39;interface IPv6 : None
Je n&#39;utilise pas l&#39;UPnP donc je définis manuellement un port (ici 10901).
Remote IPv4 correspond a l&#39;ip publique de ma box, vous pouvez la connaitre en visitant le site https://www.monip.org/
Ici je n&#39;ai pas configuré de domaine DNS pointant sur mon nœud duniter.&lt;/p&gt;
&lt;p&gt;Si comme moi vous n&#39;utilisez pas UPnP, vous devez configurer manuellement une redirection de port sur votre box.&lt;/p&gt;
&lt;h4 id=&quot;qu-est-ce-que-l-upnp&quot;&gt;Qu&#39;est-ce que l&#39;UPnP ?&lt;/h4&gt;
&lt;p&gt;L’Universal Plug and Play (UPnP) est un protocole qui, s&#39;il est activé sur votre box internet, permet aux programmes que vous utilisez de configurer eux même le réseau en &quot;commandant&quot; votre box.&lt;br /&gt;
L&#39;UPnP a l’avantage d&#39;être pratique, car il vous évite d&#39;avoir à configurer vous-même le réseau, mais en contrepartie vous devez faire confiance aux programmes que vous utilisez car un programme malveillant peut utiliser l&#39;UPnP pour ouvrir votre réseau de manière non désirée.&lt;br /&gt;
Si vous n&#39;avez pas peur de la ligne de commande et que vous êtes exigeant sur la sécurité de votre réseau local, nous vous recommendons de désactiver l&#39;UPnP.&lt;br /&gt;
Si vous installez duniter sur un VPS ou un serveur dédié vous devrez de toute façon faire sans UPnP.&lt;/p&gt;
&lt;h4 id=&quot;note-sur-le-ws2p-public-recommande&quot;&gt;Note sur le WS2P public (recommandé)&lt;/h4&gt;
&lt;p&gt;Il faut nécessairement des nœuds avec ws2p public pour que le réseau duniter fonctionne, et plus il y a de nœuds avec ws2p public, plus le réseau est décentralisé.&lt;br /&gt;
Ce mode est facultatif ne serait-ce parce que techniquement il est parfois difficile, voire impossible d&#39;être accessible par l&#39;extérieur (nœud derrière un routeur 4G par exemple).&lt;/p&gt;
&lt;h3 id=&quot;checker-votre-configuration&quot;&gt;Checker votre configuration&lt;/h3&gt;
&lt;p&gt;Pour vérifier que votre configuration ne comporte pas d&#39;erreur logique vous pouvez utiliser la commande &lt;code&gt;check-config&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter check-config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-09-28T23:24:19+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - debug: Plugging file system...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-09-28T23:24:19+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - debug: Loading conf...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-09-28T23:24:19+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - debug: Configuration saved.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-09-28T23:24:19+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - warn: Configuration seems correct.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SI vous obtenez le résultat &lt;strong&gt;Configuration seems correct&lt;/strong&gt; c&#39;est que votre configuration semble correcte.&lt;/p&gt;
&lt;h3 id=&quot;synchroniser-votre-noeud&quot;&gt;Synchroniser votre nœud&lt;/h3&gt;
&lt;p&gt;Pour rejoindre le réseau d&#39;une monnaie vous devez vous synchroniser avec un nœud déjà sur ce réseau :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync DUNITER_NODE_HOST:DUNITER_NODE_PORT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour la Ğ1, si vous ne connaissez aucun nœud vous pouvez choisir le nœud officiel &lt;code&gt;g1.duniter.org:443&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;lancement&quot;&gt;Lancement&lt;/h3&gt;
&lt;p&gt;Il existe quatre commandes différentes selon que vous voulez daémoniser ou pas votre instance Duniter et selon que vous voulez ou pas utiliser la web-ui :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; direct_start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; webstart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; direct_webstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;le préfixe &lt;code&gt;direct_&lt;/code&gt; annule la daémonisation, mais vous devrez alors laisser votre terminal ouvert ou utiliser nohup ou screen ou similaire.&lt;/p&gt;
&lt;p&gt;De plus les commandes &lt;code&gt;direct_start&lt;/code&gt; et &lt;code&gt;direct_webstart&lt;/code&gt; acceptent l&#39;option &lt;code&gt;--keyprompt&lt;/code&gt; (cf. partie trousseau de clés).&lt;/p&gt;
&lt;h3 id=&quot;suivre-les-logs&quot;&gt;Suivre les logs&lt;/h3&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; logs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Équivaut à :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;tail&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -f&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; ~/.config/duniter/duniter-default/duniter.log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;aller-plus-loin&quot;&gt;Aller plus loin&lt;/h3&gt;
&lt;p&gt;Consultez le guide des &lt;a href=&quot;https://duniter.fr/wiki/doc/commandes/&quot;&gt;commandes duniter&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;via-l-interface-d-administration-web&quot;&gt;Via l&#39;interface d&#39;administration web&lt;/h2&gt;
&lt;p&gt;(en cours de rédaction…)&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Rapport toile de confiance Ğ1 au 2 Septembre 2017</title>
          <pubDate>Sat, 02 Sep 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/rapport-etat-toile/</link>
          <guid>https://duniter.fr/blog/rapport-etat-toile/</guid>
          <description xml:base="https://duniter.fr/blog/rapport-etat-toile/">&lt;h1 id=&quot;rapport-toile-de-confiance-g1-au-2-septembre-2017&quot;&gt;Rapport toile de confiance Ğ1 au 2 Septembre 2017&lt;/h1&gt;
&lt;p&gt;Depuis le &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/currency-monit-monitoring-dune-monnaie-et-de-sa-toile-de-confiance/2770/17?u=elois&quot;&gt;4 juillet 2017&lt;/a&gt; je tiens des statistiques détaillées sur l&#39;état de la toile de confiance que vous pouvez visualiser sur &lt;a rel=&quot;external&quot; href=&quot;https://g1-monit.librelois.fr&quot;&gt;g1-monit.librelois.fr&lt;/a&gt;.
&lt;em&gt;Ces statistiques sont produites par le &lt;a href=&quot;https://duniter.fr/wiki/doc/modules/&quot;&gt;module duniter&lt;/a&gt; &lt;code&gt;duniter-currency-monit&lt;/code&gt; qui se sert directement dans la blockchain locale du noeud duniter sur lequel il est installé.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;J&#39;ai décidé de profiter de ces statistiques pour publier régulièrement un court rapport sur l&#39;état global de la toile de confiance Ğ1.&lt;/p&gt;
&lt;h2 id=&quot;l-esprit-de-ces-courts-rapports-reguliers&quot;&gt;L&#39;esprit de ces courts rapports réguliers&lt;/h2&gt;
&lt;p&gt;L&#39;objectif de ces courts rapports réguliers n&#39;est pas d&#39;être exhaustif mais au contraire de mettre en avant certains indicateurs qui me semblent pertinents à un moment donné pour visualiser un phénomène donné. Il n&#39;y a pas de fréquence définie, je publierai un rapport chaque fois qu&#39;il me semblera y avoir quelque chose de pertinent à décrire et que j&#39;aurai le temps pour.
Si vous lisez régulièrement mes rapports, que vous consultez très régulièrement &lt;em&gt;g1-monit&lt;/em&gt; et qu&#39;il vous vient l&#39;envie de rédiger vous aussi des rapports, vous pouvez &lt;a rel=&quot;external&quot; href=&quot;https://librelois.fr/contact/&quot;&gt;me contacter&lt;/a&gt; pour qu&#39;on en discute :)&lt;/p&gt;
&lt;h2 id=&quot;prerequis&quot;&gt;Prérequis&lt;/h2&gt;
&lt;p&gt;Avant de lire ces rapports, il est vivement recommandé d&#39;étudier la &lt;a href=&quot;/PELICAN/files/licence_g1.txt&quot;&gt;licence Ğ1&lt;/a&gt; et de lire toutes les pages suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/&quot;&gt;Certifier de nouveaux membres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/&quot;&gt;Question Fréquentes sur la toile de confiance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/wiki/toile-de-confiance/introduction-a-la-toile-de-confiance/&quot;&gt;&lt;strong&gt;Fonctionnement de la toile de confiance&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En particulier la lecture de l&#39;article &lt;a href=&quot;https://duniter.fr/wiki/toile-de-confiance/introduction-a-la-toile-de-confiance/&quot;&gt;&lt;strong&gt;Fonctionnement de la toile de confiance&lt;/strong&gt;&lt;/a&gt; est indispensable pour bien connaitre le fonctionnement de chacune des règles de la toile.&lt;/p&gt;
&lt;p&gt;Je ferai également appel à des notions de théorie des graphes mais je m&#39;attellerai à définir à chaque fois les termes utilisés.&lt;/p&gt;
&lt;p&gt;Enfin, vous devez connaitre une grandeur spécifique aux toiles de confiance duniter, &lt;strong&gt;la qualité d&#39;un membre&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;qualite-d-un-membre&quot;&gt;Qualité d&#39;un membre&lt;/h2&gt;
&lt;p&gt;Ce que je nomme qualité d&#39;un membre est le rapport entre le taux de membres référents rendus atteignables par une certification de ce membre et le taux de membres référents qu&#39;il faut atteindre pour respecter la règle de distance.&lt;/p&gt;
&lt;p&gt;Je vais donner un exemple pour que ce soit plus clair : prenons une toile avec 10 membres référents et xpercent=0.8.&lt;br /&gt;
Et bien la qualité d&#39;un membre dans une telle toile est le rapport du nombre de membres référents qu&#39;il permet de joindre en moins de 5 pas (numérateur) sur le nombre 8 (dénominateur).&lt;br /&gt;
Donc si un membre Bob permet de joindre 4 référents il aura une qualité de 0.5.&lt;br /&gt;
Et si Bob permet de joindre 10 référents il aura une qualité de 10/8=1.25.&lt;/p&gt;
&lt;p&gt;Qu&#39;entends-je par &quot;permet de joindre&quot; ? Quand je dis que Bob permet de joindre x membres référents j&#39;entends que si Bob certifie une nouvelle identité (qui n&#39;est certifiée que par Bob) alors il y aura x membres référents pour lequels il existera un chemin de moins de 5 pas de eux vers la nouvelle identité.&lt;/p&gt;
&lt;p&gt;Ainsi, un membre ayant une qualité supérieure ou égale à 1 pourrait faire rentrer un nouveau membre à lui seul si la règle sigQty n&#39;existait pas.&lt;/p&gt;
&lt;p&gt;Lorsque la qualité moyenne est supérieure à 1, c&#39;est que la règle de distance n&#39;est pas contraignante. Lorsque la qualité moyenne s&#39;approche de 1, la règle de distance va devenir contraignante pour quelques cas minoritaires. Et lorsque la qualité moyenne devient inférieure à 1, alors la règle de distance devient contraignante pour la majorité des identités (par identités j&#39;entends nouveaux + membres souhaitant se renouveler !)&lt;/p&gt;
&lt;p&gt;Actuellement la qualité moyenne est de &lt;strong&gt;1.04&lt;/strong&gt;, ce qui signifie que la règle de distance n&#39;est pas contraignante, donc la toile n&#39;est pas &quot;trop&quot; tendue, mais 1.04 c&#39;est proche de 1, donc si tous les membres ne certifient que vers l&#39;extérieur à partir de maintenant alors la règle de distance pourrait devenir contraignante rapidement (ce qui peut être une situation souhaitable et voulue dans certains cas, c&#39;est aussi une liberté des membres que de tendre ou détendre la toile).&lt;/p&gt;
&lt;h2 id=&quot;rapport-toile-g1-au-2-septembre-2017&quot;&gt;Rapport toile Ğ1 au 2 septembre 2017&lt;/h2&gt;
&lt;h3 id=&quot;observations&quot;&gt;Observations&lt;/h3&gt;
&lt;p&gt;Nous sommes deux semaines après le passage du palier Y[n]=4, rappel sur l&#39;effet qu&#39;avait eu ce palier :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La qualité de la toile va légèrement augmenter après ce palier, environ 88% de membres auront une qualité &amp;gt;= 1 contre 83.75% actuellement. Soit un gain de 4%. La règle de distance sera donc globalement moins contraignante mais pas de beaucoup, et au rythme actuel de croissance du nombre de membres, la toile va rapidement se tendre de nouveau ! Le nombre de référents va passer de 150 à 140, cela montre bien que les membres ne s’arrêtent pas à 3 certifications émises, ils continuent d’en émettre.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L&#39;effet de densification du palier s&#39;est déjà dissipé, la toile de confiance est de nouveau aussi tendue qu&#39;avant le passage du palier, voire légèrement davantage :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La proportion de membres ayant une qualité &amp;gt;=1 à chuté à &lt;strong&gt;82%&lt;/strong&gt; soit environ le même niveau, qu&#39;avant le palier (83%)&lt;/li&gt;
&lt;li&gt;De plus, une dizaine de membres commencent à chuter à des niveaux de qualité très faibles (inférieurs à 0.9), ce qui veut dire qu&#39;ils commencent à être trop distants des membres référents, zones en noir sur ce graphique de la page &lt;a rel=&quot;external&quot; href=&quot;https://g1-monit.librelois.fr/gaussianWotQuality?lg=fr&quot;&gt;qualité toile&lt;/a&gt; : &lt;br/&gt;&lt;img src=&quot;https://librelois.fr/public/qualite-toile-020917.png&quot; width=&quot;690&quot; height=&quot;339&quot; /&gt;&lt;/li&gt;
&lt;li&gt;D&#39;ailleurs sur les 79 futurs membres ayant reçu au moins 1 certification, 7 d&#39;entre eux ne respectent pas la règle de distance, 3 ont été certifiés par le même membre mais cela fait quand même &lt;strong&gt;4 cas différents de non-respect de la règle de distance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Un autre indicateur nous montre bien la tension de la toile, &lt;strong&gt;l&#39;augmentation de la longueur moyenne du plus court chemin entre deux membres&lt;/strong&gt; qui est désormais de &lt;strong&gt;4.13&lt;/strong&gt;. Cette valeur a continuellement augmenté même lors du passage du palier car elle est indépendante de la notion de membre référent, elle montre l&#39;état de tension de la toile entière là où la qualité ne montre que l&#39;état de tension d&#39;un sous ensemble de la toile (le sous-ensemble des liens référent-&amp;gt;membre).&lt;/li&gt;
&lt;li&gt;Enfin le nombre de membres référents est quant à lui repassé au-dessus de sa valeur d&#39;avant le palier (153) :
&lt;img src=&quot;https://librelois.fr/public/fin-effet-palier-yn-4.png&quot; width=&quot;690&quot; height=&quot;339&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;interpretations&quot;&gt;Interprétations&lt;/h3&gt;
&lt;p&gt;La règle de distance est encore très loin d&#39;être bloquante, mais la toile n&#39;a jamais été aussi tendue depuis que je tiens des statistiques très détaillés sur son état, c&#39;est-à-dire depuis le 4 juillet 2017.&lt;/p&gt;
&lt;p&gt;La toile de confiance Ğ1 est en train de se tendre car le flux de nouveaux entrants va plus vite que la reconnaissance interne entre les membres déjà membres. Ce phénomène est parfaitement normal en début de monnaie et va d&#39;autant s&#39;accélérer que la Ğ1 gagnera en popularité. La toile va donc très probablement continuer à se tendre jusqu&#39;à ce que la règle de distance devienne bloquante.&lt;/p&gt;
&lt;p&gt;À ce moment-là, le flux d&#39;entrée de nouveaux va ralentir et les membres qui étaient alors très actifs vers l&#39;extérieur devront se mettre à certifier vers l&#39;intérieur pour densifier un peu la toile afin que celle-ci puisse de nouveau acceuillir.
Là encore c&#39;est un phénomène normal en début de monnaie et même souhaitable car cette contrainte sur les entrées limitera également les éventuelles micro-attaques sybil en cours (les petites fraudes) de sorte qu&#39;elles restent microscopiques par rapport à la taille de la toile.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Aparté : je rapelle qu&#39;il est impossible d&#39;empêcher les petites fraudes, il y en aura forcément, peut-être même qu&#39;il y en a déjà, la seule chose que l&#39;on peut et que l&#39;on doit faire c&#39;est contraindre ces petites fraudes à rester marginales pour que la globalité de la toile reste de confiance et c&#39;est précisement le rôle de la règle de distance.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voila pourquoi il est important d&#39;insister auprès des autres membres de la Ğ1 que vous rencontrez sur le fait qu&#39;il doivent certifier les membres qu&#39;ils connaissent personnellement même s&#39;ils sont déjà membres et qu&#39;il doivent le faire sans attendre.
Ce point-là n&#39;est pas toujours bien expliqué et encore moins compris, et c&#39;est bien compréhensible vu la quantité de nouveaux concepts à intégrer par ailleurs, mais si nous n&#39;insistons pas suffisamment sur l&#39;importance des certifications internes alors il y aura peut-être beaucoups d&#39;incompréhensions lorsque la règle de distance deviendra bloquante, et cette incompréhension pourrait provoquer de la méfiance et freiner la popularité de la Ğ1.&lt;/p&gt;
&lt;p&gt;Il convient de nuancer ce propos global en précisant que la toile se régionalise, ainsi la règle de distance ne deviendra contraignantes que dans certaines régions et pas du tout dans d&#39;autres, il suffit pour anticiper cela de surveiller les membres à la qualité la plus faible, et s&#39;il commence à s&#39;en concentrer beaucoup dans une même région, nous pouvons très bien contacter directement les groupes locaux de cette région, et par la même occassion leur apprendre à utiliser g1-monit pour surveiller eux-mêmes leur propre situation à l&#39;avenir.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Les différents indicateurs de l&#39;état de tension de la toile nous permettront de voir venir de loin, et c&#39;est tout l&#39;objectif du développement de g1-monit et de la rédaction de ces rapports : éveiller votre vigilance afin que vous surveilliez vous-même votre toile de confiance, après tout c&#39;est un bien commun :)&lt;/p&gt;
&lt;p&gt;Certains sont d&#39;avis que la règle de distance est trop contraignante et qu&#39;il faudra l&#39;assouplir, d&#39;autres que les règles actuelles conviennent parfaitement et que les membres de la Ğ1 sont capables de réguler d&#39;eux-mêmes l&#39;équilibre entre leurs  certifications internes et externes. Les membres de la Ğ1 seront-ils suffisamment vigilants pour réguler la toile d&#39;eux-mêmes ? J&#39;espère que la réponse est oui, le suivi des statistiques détaillés de la toile nous le dira :)&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.5</title>
          <pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v1-5/</link>
          <guid>https://duniter.fr/blog/duniter-v1-5/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v1-5/">&lt;h1 id=&quot;duniter-version-1-5&quot;&gt;Duniter version 1.5&lt;/h1&gt;
&lt;p&gt;La version 1.5 de Duniter est désormais &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/releases/tag/v1.5.4&quot;&gt;disponible au téléchargement&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;changements&quot;&gt;Changements&lt;/h2&gt;
&lt;p&gt;Cette nouvelle version apporte principalement un lot de correctifs importants pour la stabilité de la monnaie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les nœuds sous architecture ARM fonctionnaient anormalement (puissance CPU divisée par 2 à chaque preuve de travail, désynchronisations intempestives)&lt;/li&gt;
&lt;li&gt;un nœud pouvait facilement s&#39;isoler dans un fork&lt;/li&gt;
&lt;li&gt;les nœuds en version 1.4 étaient indiqués en gris dans Sakia (nœuds en erreur)&lt;/li&gt;
&lt;li&gt;Duniter renvoyait des informations erronnées à Cesium+&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Il est important de passer cette mise à jour&lt;/strong&gt; si vous êtes en version 1.3 ou inférieure, car ces anciennes versions comportent une ancienne version du protocole et provoquent régulièrement des forks sur le réseau. Bientôt, ces nœuds vont d&#39;ailleurs s&#39;isoler et ne seront plus d&#39;aucune utilité.&lt;/p&gt;
&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Pas besoin de resynchroniser.
&lt;/div&gt;
&lt;h2 id=&quot;compatibilite&quot;&gt;Compatibilité&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Compatible avec la Ğ1.
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mettre-a-jour-sa-version&quot;&gt;Mettre à jour sa version&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lien pour &lt;a href=&quot;https://duniter.fr/wiki/doc/installer/&quot;&gt;installer la nouvelle version&lt;/a&gt; depuis un poste vierge&lt;/li&gt;
&lt;li&gt;Lien pour &lt;a href=&quot;https://duniter.fr/wiki/doc/mettre-a-jour/&quot;&gt;mettre à jour vers la nouvelle version&lt;/a&gt; depuis une installation existante&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.4</title>
          <pubDate>Fri, 11 Aug 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-v1-4/</link>
          <guid>https://duniter.fr/blog/duniter-v1-4/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-v1-4/">&lt;h1 id=&quot;duniter-version-1-4&quot;&gt;Duniter version 1.4&lt;/h1&gt;
&lt;p&gt;La version 1.4 de Duniter est désormais &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/releases/tag/v1.4.15&quot;&gt;disponible au téléchargement&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;changements&quot;&gt;Changements&lt;/h2&gt;
&lt;p&gt;Cette version apporte plusieurs améliorations de stabilité du réseau, notamment à travers une résolution plus rapide des embranchements (&lt;em&gt;forks&lt;/em&gt;) de la chaîne de blocs. Aussi, les identités et certifications en piscine sont désormais plus régulièrement resynchronisés.&lt;/p&gt;
&lt;p&gt;Mais le changement majeur de cette version est &lt;strong&gt;la migration du code source JavaScript vers TypeScript&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour plus de détails sur tous ces changments, consulter &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/releases/tag/v1.4.13&quot;&gt;les notes de version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img class=&quot;screenshot&quot; src=&quot;/PELICAN/images/duniter-1.4/typescript.png&quot; width=&quot;32&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Pas besoin de resynchroniser.
&lt;/div&gt;
&lt;h2 id=&quot;compatibilite&quot;&gt;Compatibilité&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Compatible avec la Ğ1.
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mettre-a-jour-sa-version&quot;&gt;Mettre à jour sa version&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lien pour &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/install-a-node.md&quot;&gt;installer la nouvelle version&lt;/a&gt; depuis un poste vierge&lt;/li&gt;
&lt;li&gt;Lien pour &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/update-a-node.md&quot;&gt;mettre à jour vers la nouvelle version&lt;/a&gt; depuis une installation existante&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Préconisations pour développer un client Duniter</title>
          <pubDate>Wed, 19 Jul 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/preconisations-client-duniter/</link>
          <guid>https://duniter.fr/wiki/contribuer/preconisations-client-duniter/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/preconisations-client-duniter/">&lt;h1 id=&quot;preconisations-pour-developper-un-client-duniter&quot;&gt;Préconisations pour développer un client Duniter&lt;/h1&gt;
&lt;h2 id=&quot;consultation-generale&quot;&gt;Consultation générale&lt;/h2&gt;
&lt;p&gt;Un client Duniter devrait par défaut proposer la consultation au minimum des paramètres théoriques et calculés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Paramètres de la monnaie (M, M/N, c, formule du Dividende, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paramètres de la Toile de Confiance (Nombre de signatures pour devenir membre, membre référent, temps, limites etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paramètres de la blockchain (temps moyen de calcul de blocs, difficultés etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consultation de la monnaie (y compris transactions en piscine)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consultation de la TdC (y compris certifications / adhésions / renouvellements en piscine)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consultation de la blockchain (noeuds, blocs...)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;consultation-de-compte&quot;&gt;Consultation de compte&lt;/h2&gt;
&lt;p&gt;La consultation de tout compte ne nécessitant que la clé publique du compte (ou l&#39;ID unique) la consultation devrait pouvoir s&#39;effectuer concernant tout compte sous les formats possibles, au choix et dans l&#39;ordre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Par clé publique&lt;/li&gt;
&lt;li&gt;Par ID&lt;/li&gt;
&lt;li&gt;Par clé privée&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;emissions-de-documents-duniter&quot;&gt;Emissions de documents Duniter&lt;/h2&gt;
&lt;p&gt;L&#39;émission de documents Duniter, nécessitant toujours la saisie de la clé privée, ne devrait jamais par défaut se faire via un enregistrement de la clé privée, et devrait dans l&#39;ordre toujours présenter des avertissements avant la signature (et surtout pas après !) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Présentation systématique de la licence Ğ1&lt;/li&gt;
&lt;li&gt;Présentation d&#39;un avertissement rappelant le type de documents en cours de signature (demande d&#39;adhésion, renouvellement, certification, transaction)&lt;/li&gt;
&lt;li&gt;Signature demandée + effacer toute trace de la clé privée de la mémoire une fois le document généré.&lt;/li&gt;
&lt;li&gt;Récapitulatif complet (ex : tel compte pubkey/ID certifie tel compte pubkey/ID, rappel des avertissements)&lt;/li&gt;
&lt;li&gt;Temps de latence minimum (ex : 10 secondes)&lt;/li&gt;
&lt;li&gt;Envoi définitif du document (ou annulation)&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.3.14</title>
          <pubDate>Wed, 05 Jul 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-correctif-version-1-3-14/</link>
          <guid>https://duniter.fr/blog/duniter-correctif-version-1-3-14/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-correctif-version-1-3-14/">&lt;h1 id=&quot;duniter-version-1-3-14&quot;&gt;Duniter version 1.3.14&lt;/h1&gt;
&lt;p&gt;La version 1.3.14 de Duniter est désormais &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/releases/tag/v1.3.14&quot;&gt;disponible au téléchargement&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;correctifs&quot;&gt;Correctifs&lt;/h2&gt;
&lt;p&gt;Cette version compile les correctifs jusqu&#39;à la version 1.3.13, et apporte une touche finale concernant le réseau Duniter qui avait tendance à forker régulièrement ces dernières semaines.&lt;/p&gt;
&lt;p&gt;Il semble qu&#39;un bug au niveau du contact en IPv6 soit à l&#39;origine du problème. L&#39;IPv6 est donc désormais mise en dernier choix pour contacter un nœud, l&#39;ordre de préférence est maintenant : DNS, IPv4, IPv6.&lt;/p&gt;
&lt;p&gt;Ce correctif a été testé sur un nœud du réseau Ğ1, qui révèle immédiatement des nœuds considérés éteints de longue date du point de vue de ce nœud, qui les considère à nouveau &lt;em&gt;allumés et disponibles&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Pas besoin de resynchroniser.
&lt;/div&gt;
&lt;h2 id=&quot;compatibilite&quot;&gt;Compatibilité&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Compatible avec la Ğ1.
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mettre-a-jour-sa-version&quot;&gt;Mettre à jour sa version&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lien pour &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/install-a-node.md&quot;&gt;installer la nouvelle version&lt;/a&gt; depuis un poste vierge&lt;/li&gt;
&lt;li&gt;Lien pour &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/update-a-node.md&quot;&gt;mettre à jour vers la nouvelle version&lt;/a&gt; depuis une installation existante&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>duniter.org en anglais !</title>
          <pubDate>Mon, 19 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-org-en/</link>
          <guid>https://duniter.fr/blog/duniter-org-en/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-org-en/">&lt;h1 id=&quot;duniter-org-en-anglais&quot;&gt;duniter.org en anglais !&lt;/h1&gt;
&lt;p&gt;Nous sommes heureux de vous présenter la version anglaise du site duniter.org : &lt;a rel=&quot;external&quot; href=&quot;https://duniter.org/en&quot;&gt;https://duniter.org/en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ce site va vivre sa propre vie, indépendamment de la version française duniter.org/fr. Le but est de pouvoir aiguiller des anglophones sur des ressources dans leur langue, sans avoir à traduire de façon systématique chaque article.&lt;/p&gt;
&lt;p&gt;Si vous souhaitez traduire un article d&#39;une langue vers l&#39;autre, vous pouvez le faire grâce au bouton &quot;Modifier cet article&quot;, qui vous permet de récupérer l&#39;article original dans son format brut : vous pouvez alors le traduire et nous le fournir, nous nous occuperons de le publier.&lt;/p&gt;
&lt;p&gt;Bonne visite et bonne traduction !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Installer un nœud Duniter</title>
          <pubDate>Mon, 19 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/installer/</link>
          <guid>https://duniter.fr/wiki/doc/installer/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/installer/">&lt;h1 id=&quot;installer-un-noeud-duniter&quot;&gt;Installer un nœud Duniter&lt;/h1&gt;
&lt;p&gt;Ce document est un petit guide pour installer et déployer votre propre instance Duniter pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;soit participer à l&#39;écriture de la blockchain (vous devez être membre)&lt;/li&gt;
&lt;li&gt;soit avoir un nœud miroir, qui réplique la blockchain et en conserve une copie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;bureau-ou-serveur&quot;&gt;Bureau ou serveur&lt;/h2&gt;
&lt;p&gt;Il existe deux versions de Duniter. Choisissez celle qui vous convient le mieux.&lt;/p&gt;
&lt;h3 id=&quot;version-bureau&quot;&gt;Version bureau&lt;/h3&gt;
&lt;p&gt;Une machine de bureau vous facilitera la tâche pour gérer votre instance Duniter grâce à son interface graphique.&lt;/p&gt;
&lt;p&gt;Votre instance fonctionnera tant que votre machine et que le logiciel ne sont pas éteints. Si vous fermez le logiciel ou éteignez votre machine, Duniter sera en mesure de se resynchroniser avec le réseau une fois la machine et Duniter redémarrés.&lt;/p&gt;
&lt;h3 id=&quot;version-serveur&quot;&gt;Version serveur&lt;/h3&gt;
&lt;p&gt;Pour les utilisateurs les plus avancés, une version &lt;em&gt;serveur&lt;/em&gt; vous permet d&#39;avoir un nœud allumé 100% du temps, en l&#39;installant sur une machine elle-même toujours allumée.&lt;/p&gt;
&lt;p&gt;Vous pourrez contrôler votre instance à l&#39;aide d&#39;outils en ligne de commande, mais vous aurez également accès à l&#39;interface graphique via un navigateur web.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lorsque vous en aurez fini avec l&#39;installation, vous pourrez consulter &lt;a href=&quot;https://duniter.fr/wiki/doc/commandes/&quot;&gt;la documentation des commandes Duniter&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;gnu-linux&quot;&gt;GNU/Linux&lt;/h2&gt;
&lt;h3 id=&quot;ubuntu-debian-64-bits&quot;&gt;Ubuntu/Debian 64 bits&lt;/h3&gt;
&lt;h4 id=&quot;telechargez-le-paquet&quot;&gt;Téléchargez le paquet&lt;/h4&gt;
&lt;p&gt;Allez sur la &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases&quot;&gt;page des publications&lt;/a&gt; pour obtenir le lien vers la dernière version stable.&lt;/p&gt;
&lt;p&gt;Choisissez le fichier qui vous concerne :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;les fichiers pour Ubuntu et Debian sont ceux qui se terminent par l&#39;extension &lt;code&gt;.deb&lt;/code&gt; ;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pour la version &lt;em&gt;bureau&lt;/em&gt;, choisissez un fichier contenant &lt;code&gt;desktop&lt;/code&gt; dans son nom, pour la version &lt;em&gt;serveur&lt;/em&gt;, choisissez &lt;code&gt;server&lt;/code&gt; ;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;le fichier dépend également de l&#39;architecture (ARM ou x64) ; si vous ne savez pas de quoi il s&#39;agit, vous avez probablement besoin de la version x64.&lt;/p&gt;
 &lt;img src=&quot;./ubuntu_file.png&quot; width=&quot;500&quot; height=&quot;106&quot;&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;installez-duniter&quot;&gt;Installez Duniter&lt;/h4&gt;
&lt;p&gt;Pour procéder à l&#39;installation :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si vous êtes avec Ubuntu, double-cliquez sur le fichier téléchargé ;&lt;/li&gt;
&lt;li&gt;si vous êtes avec Debian, faites un clic droit sur le fichier téléchargé, option &lt;code&gt;GDebi&lt;/code&gt;.
&lt;br&gt;
&lt;img src=&quot;./deb_gdebi.png&quot; width=&quot;460&quot; height=&quot;202&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : vous pouvez également installer le paquet en ligne de commande avec &lt;code&gt;dpkg&lt;/code&gt;. Exemple :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; dpkg&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -i&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter-&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;-linux-x64.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;demarrez-l-application&quot;&gt;Démarrez l&#39;application&lt;/h4&gt;
&lt;p&gt;Pour démarrer la version &lt;em&gt;bureau&lt;/em&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;avec Ubuntu, utilisez le &lt;em&gt;Dash&lt;/em&gt; et cherchez &lt;em&gt;Duniter&lt;/em&gt;, puis cliquez sur l&#39;icône Duniter pour lancer le logiciel :
&lt;br&gt;
&lt;img src=&quot;./ubuntu_dash.png&quot; width=&quot;536&quot; height=&quot;246&quot;&gt;&lt;/li&gt;
&lt;li&gt;avec Debian, utilisez &lt;em&gt;Gnome Shell&lt;/em&gt; et cherchez &lt;em&gt;Duniter&lt;/em&gt; puis cliquez sur son icône pour le lancer :
&lt;br&gt;
&lt;img src=&quot;./deb_gnome.png&quot; width=&quot;690&quot; height=&quot;428&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : vous pouvez aussi lancer la version &lt;em&gt;bureau&lt;/em&gt; de Duniter avec la commande &lt;code&gt;duniter-desktop&lt;/code&gt;. Lancer via cette commande ou via l&#39;icône est équivalent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour démarrer votre nœud en tâche de fond (version &lt;em&gt;serveur&lt;/em&gt;), exécutez la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Consultez &lt;a href=&quot;https://duniter.fr/wiki/doc/commandes/&quot;&gt;les commandes Duniter&lt;/a&gt; pour manipuler votre nœud serveur.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le nœud en version &lt;em&gt;serveur&lt;/em&gt; pour Ubuntu/Debian est éligible au &lt;a href=&quot;https://duniter.fr/wiki/doc/installer/#demarrage-automatique&quot;&gt;démarrage automatique&lt;/a&gt; (&lt;em&gt;Systemd&lt;/em&gt;).&lt;/p&gt;
&lt;h3 id=&quot;gentoo-64-bits&quot;&gt;Gentoo 64 bits&lt;/h3&gt;
&lt;p&gt;Pour installer Duniter sur Gentoo, il existe un paquet dans la surcouche &lt;a rel=&quot;external&quot; href=&quot;https://github.com/sveyret/sveyret-overlay&quot;&gt;sveyret-overlay&lt;/a&gt;. Un fichier &lt;em&gt;README&lt;/em&gt; se trouve dans cette surcouche pour vous aider à l&#39;ajouter à l&#39;arbre &lt;em&gt;Portage&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Vous pourrez ensuite installer le paquet &lt;code&gt;net-p2p/duniter&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;emerge&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -av&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; net-p2p/duniter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les &lt;em&gt;USE flags&lt;/em&gt; suivants permettent de contrôler ce qui va être généré :&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;em&gt;Flag&lt;/em&gt;&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;desktop&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Génère et installe la version &lt;em&gt;bureau&lt;/em&gt; au lieu de la version &lt;em&gt;serveur&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;gui&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Ajoute une interface graphique (obligatoire pour la version &lt;em&gt;bureau&lt;/em&gt;, ajoute l&#39;interface web en version &lt;em&gt;serveur&lt;/em&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Le nœud en version &lt;em&gt;serveur&lt;/em&gt; pour Gentoo peut également être &lt;a href=&quot;https://duniter.fr/wiki/doc/installer/#demarrage-automatique&quot;&gt;démarré automatiquement&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;yunohost&quot;&gt;YunoHost&lt;/h3&gt;
&lt;p&gt;Un &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter_ynh&quot;&gt;paquet YunoHost&lt;/a&gt; est disponible (version &lt;em&gt;serveur&lt;/em&gt; uniquement).&lt;/p&gt;
&lt;h3 id=&quot;autres-distributions&quot;&gt;Autres distributions&lt;/h3&gt;
&lt;p&gt;Pour les autres distributions, il existe un fichier contenant la version &lt;em&gt;bureau&lt;/em&gt; compilée.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Allez sur la &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases&quot;&gt;page des publications&lt;/a&gt; pour obtenir le lien vers la dernière version stable et téléchargez le fichier &lt;code&gt;duniter-desktop&lt;/code&gt; qui se termine par l&#39;extension &lt;code&gt;.tar.gz&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Décompressez le fichier téléchargé, par exemple avec la commande : &lt;code&gt;tar zxvf duniter-*.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Placez-vous dans le répertoire décompressé&lt;/strong&gt;, puis lancez Duniter avec la commande &lt;code&gt;./nw&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;docker&quot;&gt;Docker&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : vous devez avoir installé Docker sur votre machine pour créer un conteneur Duniter.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : seule la version &lt;em&gt;serveur&lt;/em&gt; de Duniter existe sous Docker.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour récupérer une image de la dernière version :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; pull duniter/duniter:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous pouvez ensuite créer le conteneur par la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -d -p127.0.0.1:9220:9220 -p10901:10901 -p20901:20901 --name&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter duniter/duniter:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sans autre option, le conteneur va automatiquement exécuter &lt;code&gt;duniter direct_webstart&lt;/code&gt;. Le &lt;code&gt;-d&lt;/code&gt; dans la commande permet d&#39;exécuter l&#39;image en tâche de fond (démon). L&#39;option &lt;code&gt;--name&lt;/code&gt; permet de donner un nom unique au conteneur qui sera ainsi plus facile à utiliser pour les commandes suivantes. Les différentes options &lt;code&gt;-p&lt;/code&gt; permettent de connecter les ports du conteneur et ceux de l&#39;hôte :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le port 9220 est le port de l&#39;IHM web ; préciser l&#39;adresse IP 127.0.0.1 (localhost) permet d&#39;empêcher un ordinateur extérieur d&#39;accéder au paramétrage du nœud ;&lt;/li&gt;
&lt;li&gt;le port 10901 est utilisé pour l&#39;accès BMA, l&#39;export de ce port n&#39;est donc pas nécessaire si vous n&#39;activez pas le BMA ;&lt;/li&gt;
&lt;li&gt;le port 20901 est utilisé pour l&#39;accès WS2P.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : n&#39;utilisez pas à la fois les options de démonisation de Duniter et de Docker (par exemple &lt;code&gt;docker run -d duniter/duniter:latest webstart&lt;/code&gt;) sinon le conteneur s&#39;arrêtera immédiatement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une fois le nœud démarré, vous pouvez y accéder soit par l&#39;IHM web en vous connectant à l&#39;adresse http://localhost:9220, soit en ligne de commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; exec&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -it&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter duniter sync g1.duniter.fr&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans la commande ci-dessus, le premier &lt;code&gt;duniter&lt;/code&gt; est le nom donné au conteneur lors de son démarrage, tandis que le deuxième est la commande qui sera exécutée.&lt;/p&gt;
&lt;p&gt;Vous pouvez arrêter ou redémarrer le conteneur avec les commandes Docker standards :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; stop duniter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; start duniter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;utilisation-d-un-fichier-trousseau&quot;&gt;Utilisation d&#39;un fichier trousseau&lt;/h4&gt;
&lt;p&gt;Si un fichier est trouvé dans le conteneur à l&#39;emplacement &lt;code&gt;/etc/duniter/keys.yml&lt;/code&gt;, il est utilisé comme fichier de trousseau pour l&#39;identité du nœud. Pour que ce fichier soit visible par Duniter, il faut lui mettre les bons droits d&#39;accès. Si votre fichier &lt;code&gt;keys.yml&lt;/code&gt; se trouve par exemple dans le répertoire &lt;code&gt;~/duniter/conf&lt;/code&gt;, voici les commandes à exécuter pour qu&#39;il soit pris en compte :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;chown&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -R&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; 1111:1111 ~/duniter/conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -R 644&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; ~/duniter/conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -d -p127.0.0.1:9220:9220 -p10901:10901 -p20901:20901 --mount&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; src=~/duniter/conf,dst=/etc/duniter&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --name&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter duniter/duniter:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : certaines des commandes ci-dessus nécessitent des droits « administrateur », l&#39;usage de &lt;code&gt;sudo&lt;/code&gt; pourra être nécessaire.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;stockage-externe-de-la-configuration&quot;&gt;Stockage externe de la configuration&lt;/h4&gt;
&lt;p&gt;Normalement, la configuration et la base de données sont stockées dans le conteneur. Il est cependant possible de les stocker sur la machine hôte. Pour cela, il faut partager le répertoire &lt;code&gt;/var/lib/duniter&lt;/code&gt;, en donnant les bons droits d&#39;accès. Par exemple, pour que les données soient enregistrées dans le répertoire &lt;code&gt;~/duniter/data&lt;/code&gt;, voici les commandes à exécuter :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;chown&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -R&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; 1111:1111 ~/duniter/data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -d -p127.0.0.1:9220:9220 -p10901:10901 -p20901:20901 --mount&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; src=~/duniter/data,dst=/var/lib/duniter&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --name&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter duniter/duniter:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : certaines des commandes ci-dessus nécessitent des droits « administrateur », l&#39;usage de &lt;code&gt;sudo&lt;/code&gt; pourra être nécessaire.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;compilation-manuelle&quot;&gt;Compilation manuelle&lt;/h3&gt;
&lt;p&gt;La version &lt;em&gt;serveur&lt;/em&gt; de Duniter peut être compilée sur la majorité des machines Linux (32 bits ou 64 bits) en cinq étapes (les deux premières ne sont à réaliser qu&#39;une seule fois) :&lt;/p&gt;
&lt;p&gt;** Prérequis **&lt;/p&gt;
&lt;p&gt;Vous devez disposer a minima de &lt;code&gt;git&lt;/code&gt; et &lt;code&gt;build-essential&lt;/code&gt;, pour les installer :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install git build-essential&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;1. Installation de Node.js&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un outil vous permet d&#39;installer la version de Node.js que vous souhaitez, en changer quand vous voulez et sans conflit avec une version précédente : il s&#39;agit de &lt;a rel=&quot;external&quot; href=&quot;https://github.com/creationix/nvm&quot;&gt;nvm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez installer nvm avec la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -o-&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fermez puis rouvrez votre terminal, comme indiqué. Puis, installez Node.js :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;nvm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 8.9.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : pour les versions antérieures à Duniter 1.6, la version de Node.js à installer est la 6.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;2. Installation de &lt;a rel=&quot;external&quot; href=&quot;https://yarnpkg.com/&quot;&gt;yarn&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yarn est un gestionnaire de dépendances plus rapide et plus fiable que celui intégré de base dans npm, cela vous évitera des erreurs dues a des conflits de version par exemple. Le plus propre est d&#39;ajouter leur dépôt puis d&#39;installer le paquet &lt;code&gt;yarn&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -sS&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; https://dl.yarnpkg.com/debian/pubkey.gpg&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-key add -&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;deb https://dl.yarnpkg.com/debian/ stable main&amp;quot;&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; tee /etc/apt/sources.list.d/yarn.list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; apt-get install yarn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. Téléchargement de Duniter&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Allez sur la &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases&quot;&gt;page des publications&lt;/a&gt; pour obtenir le lien vers la dernière version stable et téléchargez le fichier &lt;code&gt;Source code (tar.gz)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Lancer l&#39;installation depuis le dossier décompressé &lt;code&gt;duniter/&lt;/code&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : &lt;strong&gt;ne lancez pas ces commandes en tant que &lt;code&gt;root&lt;/code&gt;.&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/412&quot;&gt;Cela ne fonctionnera pas, nous le savons&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;5. Utiliser &lt;a href=&quot;https://duniter.fr/wiki/doc/commandes/&quot;&gt;les commandes Duniter&lt;/a&gt;&lt;/strong&gt; en préfixant &lt;code&gt;duniter&lt;/code&gt; par &lt;code&gt;bin/&lt;/code&gt;. Exemple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;bin/duniter&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;6. Rajouter l&#39;interface web&lt;/strong&gt; (non présente par défaut), qui ajoute les commandes &lt;code&gt;direct_webstart&lt;/code&gt; et &lt;code&gt;webstart&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;bin/duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; plug duniter-ui@1.6.x&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : pour Duniter &lt;strong&gt;1.5.9&lt;/strong&gt; ou inférieur :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;bin/duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; plug duniter-ui@1.4.x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sed&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -i&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;s/duniter\//..\/..\/..\/..\//g&amp;quot; node_modules/duniter-ui/server/controller/webmin.js&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;demarrage-automatique&quot;&gt;Démarrage automatique&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Le démarrage automatique n&#39;est disponible que sur les versions &lt;em&gt;serveur&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Depuis la version 1.6.15, des scripts de démarrage automatique sont livrés pour les distributions basées sur &lt;em&gt;Systemd&lt;/em&gt; ou &lt;em&gt;OpenRC&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Pour que le nœud serveur se lance automatiquement au démarrage de la machine, tapez la commande suivante avec les droits d&#39;administration (&lt;code&gt;sudo&lt;/code&gt;) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pour &lt;em&gt;Systemd&lt;/em&gt; :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;systemctl&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; enable duniter.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;pour &lt;em&gt;OpenRC&lt;/em&gt; :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rc-update&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; add duniter default&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Par défaut, le serveur qui va démarrer ainsi le fera en tant qu&#39;utilisateur &lt;code&gt;duniter&lt;/code&gt; dans le répertoire &lt;code&gt;/var/lib/duniter&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez personnaliser le comportement du service :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pour &lt;em&gt;Systemd&lt;/em&gt;, en utilisant le principe de &lt;a rel=&quot;external&quot; href=&quot;https://coreos.com/os/docs/latest/using-systemd-drop-in-units.html&quot;&gt;drop-ins&lt;/a&gt; — par exemple, pour démarrer avec l&#39;interface web, vous pouvez créer un fichier &lt;code&gt;/etc/systemd/system/duniter.service.d/10-web.conf&lt;/code&gt; et y ajouter le contenu suivant :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;DUNITER_WEB=web&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;pour &lt;em&gt;OpenRC&lt;/em&gt;, en modifiant le fichier &lt;code&gt;/etc/conf.d/duniter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les variables d&#39;environnement que vous pouvez modifier pour le service sont :&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_WEB&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;Systemd&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Doit être vide pour un démarrage normal, ou &lt;code&gt;web&lt;/code&gt; pour démarrer l&#39;interface web&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_WEB&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Démarre avec l&#39;interface web si la valeur est définie et évaluée à vrai (&lt;code&gt;yes&lt;/code&gt;, par exemple)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_HOME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;tous&lt;/td&gt;&lt;td&gt;L&#39;emplacement des fichiers du serveur, par défaut : &lt;code&gt;/var/lib/duniter/.config/duniter&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_DATA&lt;/code&gt;&lt;/td&gt;&lt;td&gt;tous&lt;/td&gt;&lt;td&gt;Le nom (emplacement) de la base de données, par défaut : &lt;code&gt;duniter_default&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_KEYS&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Si cette variable est définie, elle doit indiquer l&#39;emplacement d&#39;un fichier trousseau pour l&#39;identité du nœud&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_WEB_HOST&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Cette variable permet de modifier le nom d&#39;hôte par défaut pour l&#39;interface web&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_WEB_PORT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Cette variable permet de modifier le port par défaut pour l&#39;interface web&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_GROUP&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Le nom du groupe avec lequel le nœud est exécuté, par défaut : &lt;code&gt;duniter&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_USER&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Le nom de l&#39;utilisateur avec lequel le nœud est exécuté, par défaut : &lt;code&gt;duniter&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_OPTS&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;Systemd&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Diverses autres options à passer à la ligne de commande lors du (re-)démarrage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;DUNITER_SSD_OPTIONS&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;OpenRC&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Options à passer à la commande &lt;code&gt;start-stop-daemon&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : jusqu&#39;à la version 1.6.17 (&lt;em&gt;Systemd&lt;/em&gt;) ou 1.6.22 (&lt;em&gt;OpenRC&lt;/em&gt;), &lt;code&gt;DUNITER_HOME&lt;/code&gt; était par défaut égal à &lt;code&gt;/var/lib/duniter&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous pouvez aussi vous inspirer de &lt;a href=&quot;https://duniter.fr/wiki/doc/lancement-au-boot/&quot;&gt;ce mode d&#39;emploi&lt;/a&gt; pour mieux contrôler le service &lt;em&gt;Systemd&lt;/em&gt; Duniter.&lt;/p&gt;
&lt;h2 id=&quot;windows&quot;&gt;Windows&lt;/h2&gt;
&lt;p&gt;Une version &lt;em&gt;bureau&lt;/em&gt; est disponible pour Windows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Allez sur la &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/-/releases&quot;&gt;page des publications&lt;/a&gt; pour obtenir le lien vers la dernière version stable et téléchargez le fichier &lt;code&gt;duniter-desktop&lt;/code&gt; qui se termine par l&#39;extension &lt;code&gt;.exe&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Procédez à l&#39;installation en double-cliquant sur le fichier &lt;code&gt;.exe&lt;/code&gt; téléchargé.
&lt;img src=&quot;./win_fichier.png&quot; width=&quot;591&quot; height=&quot;39&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Il se peut que le fichier téléchargé n&#39;ai pas l&#39;extension &lt;code&gt;.exe&lt;/code&gt;. C&#39;est Windows qui a retiré l&#39;extension lors du téléchargement pour vous protéger. Vous pouvez contourner ce problème en renommant le fichier téléchargé et en ajoutant &lt;code&gt;.exe&lt;/code&gt; à la fin du nom de fichier.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;Suivez la procédure d&#39;installation.
&lt;br /&gt;
&lt;img src=&quot;./win_install.png&quot; width=&quot;503&quot; height=&quot;387&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Duniter est maintenant installé, par défaut celui-ci est lancé à la fin de l&#39;installation. Vous pourrez aussi le lancer via le menu &quot;Démarrer &amp;gt; Programmes &amp;gt; Duniter &amp;gt; Duniter&quot;.
&lt;br /&gt;
&lt;img src=&quot;./win_programme.png&quot; width=&quot;271&quot; height=&quot;58&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;macos&quot;&gt;MacOS&lt;/h2&gt;
&lt;p&gt;Il n&#39;existe pas de version pour MacOS. Toutefois, vous pouvez toujours compiler la version &lt;em&gt;serveur&lt;/em&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Mettre à jour un nœud Duniter</title>
          <pubDate>Mon, 19 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/mettre-a-jour/</link>
          <guid>https://duniter.fr/wiki/doc/mettre-a-jour/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/mettre-a-jour/">&lt;h1 id=&quot;mettre-a-jour-un-noeud-duniter&quot;&gt;Mettre à jour un nœud Duniter&lt;/h1&gt;
&lt;p&gt;Mettre à jour son nœud Duniter consiste simplement à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://duniter.fr/wiki/doc/installer/&quot;&gt;réinstaller son nœud Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;relancer son nœud pour appliquer les modifications&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Conférence à Lodève le 14/06/2017</title>
          <pubDate>Wed, 14 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/conference-lodeve-14-06-2017/</link>
          <guid>https://duniter.fr/blog/conference-lodeve-14-06-2017/</guid>
          <description xml:base="https://duniter.fr/blog/conference-lodeve-14-06-2017/">&lt;h1 id=&quot;conference-a-lodeve-le-14-06-2017&quot;&gt;Conférence à Lodève le 14/06/2017&lt;/h1&gt;
&lt;p&gt;Une conférence animée par Eloïs aura lieu mercredi 14 juin 2017, à 22h00 à Lodève :&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.monnaielibreoccitanie.org/event/1ere-conference-monnaie-libre-a-lodeve/&quot;&gt;&lt;img src=&quot;/PELICAN/images/evenements/conf-elois-lodeve.png&quot; alt=&quot;Conférence au C.L.A.P, 9 avenue DENFERT, à Lodève&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Ğeconomicus à Lodève le 18/06/2017</title>
          <pubDate>Wed, 14 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/geconomicus-lodeve-18-06-2017/</link>
          <guid>https://duniter.fr/blog/geconomicus-lodeve-18-06-2017/</guid>
          <description xml:base="https://duniter.fr/blog/geconomicus-lodeve-18-06-2017/">&lt;h1 id=&quot;geconomicus-a-lodeve-le-18-06-2017&quot;&gt;Ğeconomicus à Lodève le 18/06/2017&lt;/h1&gt;
&lt;p&gt;Un Ğeconomicus est organisé à Lodève le 18/06/2017.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.monnaielibreoccitanie.org/event/jeu-geconomicus-a-lodeve/&quot;&gt;&lt;img src=&quot;/PELICAN/images/evenements/geconomicus-lodeve.jpg&quot; alt=&quot;Ğeconomicus à la Compagnie des Jeux, de 10h à 18h&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Plus d&#39;informations sur &lt;a rel=&quot;external&quot; href=&quot;https://www.monnaielibreoccitanie.org/event/jeu-geconomicus-a-lodeve/&quot;&gt;monnaielibreoccitanie.org&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Ğeconomicus Lyon 25/06/2017</title>
          <pubDate>Wed, 14 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/geconomicus-lyon-25-06-2017/</link>
          <guid>https://duniter.fr/blog/geconomicus-lyon-25-06-2017/</guid>
          <description xml:base="https://duniter.fr/blog/geconomicus-lyon-25-06-2017/">&lt;h1 id=&quot;geconomicus-lyon-25-06-2017&quot;&gt;Ğeconomicus Lyon 25/06/2017&lt;/h1&gt;
&lt;p&gt;Un Ğeconomicus est organisé à Lyon le 25/06/2017.&lt;/p&gt;
&lt;p&gt;Plus d&#39;informations sur :&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.fr/t/geconomicus-decouverte-monnaie-libre-a-lyon-le-25-06-2017/638&quot;&gt;https://forum.duniter.fr/t/geconomicus-decouverte-monnaie-libre-a-lyon-le-25-06-2017/638&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter aux RMLL 2017 de Saint-Étiennexa0!</title>
          <pubDate>Tue, 13 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-rmll2017/</link>
          <guid>https://duniter.fr/blog/duniter-rmll2017/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-rmll2017/">&lt;h1 id=&quot;duniter-aux-rmll-2017-de-saint-etienne&quot;&gt;Duniter aux RMLL 2017 de Saint-Étienne !&lt;/h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://2017.rmll.info/&quot;&gt;&lt;img src=&quot;/PELICAN/images/rmll2017.png&quot; alt=&quot;Bannière RMLL 2017&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les Rencontres Mondiales du Logiciel Libre (RMLL) édition 2017 se dérouleront à Saint-Étienne du 1er au 7 Juillet 2017.&lt;/p&gt;
&lt;p&gt;Deux développeurs de l&#39;équipe Duniter seront dépêchés sur place pour vous parler monnaie libre, Ğ1 et de son écosystème logiciel ! Nous vous proposons &lt;strong&gt;2 conférences le jeudi 6 juillet&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;conference-1&quot;&gt;Conférence #1&lt;/h3&gt;
&lt;h4 id=&quot;si-l-echange-est-libre-ou-est-la-monnaie-libre&quot;&gt;« Si l&#39;échange est libre, où est la monnaie libre ? »&lt;/h4&gt;
&lt;p&gt;La conférence aura lieu &lt;em&gt;le Jeudi 6 Juillet 2017 à 09h20&lt;/em&gt;, salle J106. Durée : 20 min.&lt;/p&gt;
&lt;p&gt;Intervenant : cgeek&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://prog2017.rmll.info/programme/partage-aspects-collectifs-du-libre/si-l-echange-est-libre-ou-est-la-monnaie-libre&quot;&gt;https://prog2017.rmll.info/programme/partage-aspects-collectifs-du-libre/si-l-echange-est-libre-ou-est-la-monnaie-libre&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;conference-2&quot;&gt;Conférence #2&lt;/h3&gt;
&lt;h4 id=&quot;une-monnaie-libre-pour-une-societe-libre&quot;&gt;« Une monnaie libre pour une société libre »&lt;/h4&gt;
&lt;p&gt;La conférence aura lieu &lt;em&gt;le Jeudi 6 Juillet 2017 à 14h00&lt;/em&gt;, salle J106. Durée : 40 min.&lt;/p&gt;
&lt;p&gt;Intervenant : Moul&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://prog2017.rmll.info/programme/partage-aspects-collectifs-du-libre/une-monnaie-libre-pour-une-societe-libre&quot;&gt;https://prog2017.rmll.info/programme/partage-aspects-collectifs-du-libre/une-monnaie-libre-pour-une-societe-libre&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;notes&quot;&gt;Notes&lt;/h3&gt;
&lt;p&gt;Il est très probable que la salle J106 soit une salle de classe, comprenant donc une vingtaine de places.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter version 1.3</title>
          <pubDate>Tue, 13 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-version-1-3/</link>
          <guid>https://duniter.fr/blog/duniter-version-1-3/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-version-1-3/">&lt;h1 id=&quot;duniter-version-1-3&quot;&gt;Duniter version 1.3&lt;/h1&gt;
&lt;p&gt;La version 1.3 de Duniter est désormais &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/releases/tag/v1.3.8&quot;&gt;disponible au téléchargement&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;nouveautes&quot;&gt;Nouveautés&lt;/h2&gt;
&lt;h3 id=&quot;performances&quot;&gt;Performances&lt;/h3&gt;
&lt;p&gt;La principale caractéristique de cette nouvelle mouture est certainement la rapidité du logiciel à enregistrer de nouveaux blocs : dans la version 1.2, la synchronisation initiale était devenue particulièrement longue à mesure que la blockchain avançait. Les nœuds ARM, souvent dotés de cartes SD à faibles performances comparées à des disques durs classiques ou SSD, était particulièrement lents pour traiter des nouveaux blocs.&lt;/p&gt;
&lt;p&gt;Désormais, la réception de nouveaux blocs ainsi que la synchronisation initiale sont jusqu&#39;à 200 fois plus rapides qu&#39;avant !&lt;/p&gt;
&lt;p&gt;À titre indicatif, la synchronisation initiale prend moins de 15 minutes pour synchroniser 26.000 blocs sur un Raspberry PI 3. Elle pouvait prendre &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/duniter-sur-yunohost-derriere-une-box-privatrice-type-livebox/2169/30&quot;&gt;plus de 2 jours en version 1.2&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;l-arrivee-des-modules&quot;&gt;L&#39;arrivée des modules !&lt;/h3&gt;
&lt;p&gt;C&#39;était une fonctionnalité &lt;a href=&quot;https://duniter.fr/blog/videos-rml9/&quot;&gt;annoncée durant les RML9 au Havre&lt;/a&gt; : Duniter 1.3 permettrait de brancher des modules sur son propre nœud !&lt;/p&gt;
&lt;p&gt;A titre d&#39;exemple, il est désormais possible d&#39;ajouter &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter-currency-monit/releases&quot;&gt;le plugin duniter-currency-monit&lt;/a&gt; à son nœud local :&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;screenshot&quot; src=&quot;/PELICAN/images/duniter-1.3/g1-monit.png&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;Une documentation sur les modules &lt;a href=&quot;https://duniter.fr/wiki/doc/modules/&quot;&gt;est mise à disposition ici&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;cesium-n-est-plus-livre-par-defaut&quot;&gt;Cesium n&#39;est plus livré par défaut&lt;/h3&gt;
&lt;p&gt;Le client Cesium était historiquement livré avec Duniter. Avec l&#39;arrivée des modules, ce choix d&#39;installer Cesium est laissé à chacun. L&#39;adresse du module Cesium est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;https://github.com/duniter/duniter-ui-cesium/archive/1.0.0.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;synchronisation&quot;&gt;Synchronisation&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Pas besoin de resynchroniser.
&lt;/div&gt;
&lt;h2 id=&quot;compatibilite&quot;&gt;Compatibilité&lt;/h2&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok&quot;&gt;
Compatible avec la Ğ1.
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mettre-a-jour-sa-version&quot;&gt;Mettre à jour sa version&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lien pour &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/install-a-node.md&quot;&gt;installer la nouvelle version&lt;/a&gt; depuis un poste vierge&lt;/li&gt;
&lt;li&gt;Lien pour &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/update-a-node.md&quot;&gt;mettre à jour vers la nouvelle version&lt;/a&gt; depuis une installation existante&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Les modules Duniter</title>
          <pubDate>Fri, 09 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/modules/</link>
          <guid>https://duniter.fr/wiki/doc/modules/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/modules/">&lt;h1 id=&quot;les-modules&quot;&gt;Les modules&lt;/h1&gt;
&lt;p&gt;Duniter embarque un système de chargement de &lt;em&gt;modules&lt;/em&gt;. Ce système permet d&#39;étendre les fonctionnalités de son nœud Duniter avec des portions de programme écrites par des tiers plutôt que par les développeurs du logiciel Duniter.&lt;/p&gt;
&lt;p&gt;Cela permet au cœur de ne contenir que l&#39;essentiel, et donne la liberté à chacun d&#39;avoir le nœud qui lui correspond.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;avertissement&quot;&gt;Avertissement !&lt;/h2&gt;
&lt;p&gt;Les modules &lt;em&gt;sont des programmes&lt;/em&gt;, et en tant que tels ils peuvent contenir n&#39;importe quel type de code. &lt;strong&gt;Nous ne pouvons pas vous garantir qu&#39;ils sont exempts de bugs ou de virus&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Il est de votre responsabilité de vérifier que le module que vous installez correspond à vos attentes, notamment en termes de respect de vos données et de votre système.&lt;/p&gt;
&lt;p&gt;Si vous ne savez pas lire le code source d&#39;un module, &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/c/dev/modules&quot;&gt;vous pouvez demander à d&#39;autres utilisateurs leur avis&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;installer-un-module&quot;&gt;Installer un module&lt;/h2&gt;
&lt;p&gt;Vous avez deux façon d&#39;opérer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;avec la ligne de commande (Duniter Server uniquement) :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  duniter plug &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;avec l&#39;interface graphique (méthode recommandée) :&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/modules/modules_ui.png&quot; alt=&quot;Installer un modules Duniter par l&amp;#39;interface graphique&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;droits-d-ecriture&quot;&gt;Droits d&#39;écriture&lt;/h3&gt;
&lt;p&gt;Selon votre installation, il se peut que vous ne puissiez pas installer de modules :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/modules/modules_droits.png&quot; alt=&quot;Droits modules Duniter&quot; /&gt;&lt;/p&gt;
&lt;p&gt;En effet, pour installer un module, Duniter va devoir télécharger, ajouter et modifier des fichiers dans son répertoire d&#39;installation. Si pendant votre exécution de Duniter vous n&#39;avez pas assez de droits système, l&#39;installation sera impossible et vous aurez le message ci-dessus.&lt;/p&gt;
&lt;p&gt;Vous pouvez toutefois remédier à ce problème en accordant ces droits :&lt;/p&gt;
&lt;h4 id=&quot;sous-linux&quot;&gt;Sous Linux&lt;/h4&gt;
&lt;p&gt;Une simple commande vous permet d&#39;accorder les droits d&#39;écriture à votre utilisateur. Exemple pour l&#39;utilisateur &lt;code&gt;bob&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# chown -R bob /opt/duniter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remplacez &lt;code&gt;bob&lt;/code&gt; par votre utilisateur courant.&lt;/p&gt;
&lt;h4 id=&quot;sous-windows&quot;&gt;Sous Windows&lt;/h4&gt;
&lt;p&gt;Le plus simple est d&#39;exécuter temporairement Duniter en mode administrateur : clic droit sur l&#39;icône &quot;Duniter&quot; puis &quot;Exécuter en tant qu&#39;administrateur&quot;. Installez alors les modules souhaités, puis redémarrez normalement Duniter.&lt;/p&gt;
&lt;h3 id=&quot;lancer-l-installation&quot;&gt;Lancer l&#39;installation&lt;/h3&gt;
&lt;p&gt;Une fois que vous avez suffisamment de droits, vous pouvez installer le module souhaité. Ceux-ci sont généralement présentés avec une adresse de téléchargement : c&#39;est celle que vous devez copier/coller dans le champ &quot;URL&quot; du module, ou dans la commande &lt;code&gt;plug&lt;/code&gt; si vous êtes en ligne de commande.&lt;/p&gt;
&lt;h4 id=&quot;exemple&quot;&gt;Exemple&lt;/h4&gt;
&lt;p&gt;Vous pouvez ajouter le module d&#39;exemple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; plug git+https://github.com/duniter/module-example.git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ou dans l&#39;interface graphique :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/modules/modules_install.png&quot; alt=&quot;modules_install&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Puis cliquez sur « Installer ». A la fin de la procédure, relancez votre nœud.&lt;/p&gt;
&lt;p&gt;Vous devriez alors voir dans l&#39;interface graphique un nouveau menu :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/modules/modules_menu.png&quot; alt=&quot;modules_menu&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez cliquer dessus pour voir le contenu du module :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/modules/modules_resultat.png&quot; alt=&quot;modules_resultat&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;desinstaller-un-module&quot;&gt;Désinstaller un module&lt;/h2&gt;
&lt;p&gt;La désinstallation s&#39;effectue de deux façons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;avec la ligne de commande (Duniter Server uniquement) :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  duniter unplug &amp;lt;nom_du_module&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;avec l&#39;interface graphique : cliquez simplement sur le bouton « On/Off ».&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mettre-a-jour-un-module&quot;&gt;Mettre à jour un module&lt;/h2&gt;
&lt;p&gt;La mise à jour est équivalente à désinstaller un module puis à le réinstaller avec une nouvelle version.&lt;/p&gt;
&lt;h2 id=&quot;liste-des-modules-duniter&quot;&gt;Liste des modules Duniter&lt;/h2&gt;
&lt;p&gt;Vous pouvez obtenir plus d&#39;informations sur les modules, comment les utiliser, leur sécurité, dans &lt;a href=&quot;https://duniter.fr/wiki/doc/modules/&quot;&gt;la page dédiée&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La liste ci-dessous consitue un référencement des modules développés pour Duniter. Elle ne constitue en aucun cas une garantie en terme de qualité ou de sécurité. L&#39;installation de ces modules engage votre propre responsabilité vis-à-vis de vos données et de votre système.&lt;/p&gt;
&lt;h3 id=&quot;duniter-currency-monit&quot;&gt;Duniter Currency Monit&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Auteur : elois&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter-currency-monit/&quot;&gt;Site web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/currency-monit-monitoring-dune-monnaie-et-de-sa-toile-de-confiance/2770&quot;&gt;Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Currency-Monit est un module Duniter permettant de faire du monitoring de la monnaie, de la toile de confiance et des données en piscine. Il permet de superviser l&#39;arrivée de nouveaux membres, l&#39;évolution du nombre de calculateurs de blocks, la densité de la toile de confiance, etc.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>Ğ1-Test : la blockchain de test</title>
          <pubDate>Wed, 07 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/gune-test/</link>
          <guid>https://duniter.fr/blog/gune-test/</guid>
          <description xml:base="https://duniter.fr/blog/gune-test/">&lt;h1 id=&quot;g1-test-la-blockchain-de-test&quot;&gt;Ğ1-Test : la blockchain de test&lt;/h1&gt;
&lt;p&gt;La blockchain de test est &lt;strong&gt;officiellement redémarrée&lt;/strong&gt;, les premiers blocs viennent d&#39;être calculés.&lt;/p&gt;
&lt;p&gt;Le réseau est constitué de 7 membres initiaux, avec des paramètres sensiblement &lt;a href=&quot;https://duniter.fr/blog/g1-go/&quot;&gt;équivalents à ceux de la &lt;em&gt;Ğ1&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;quelle-utilite&quot;&gt;Quelle utilité ?&lt;/h2&gt;
&lt;p&gt;Si l&#39;on dispose déjà d&#39;une monnaie « de production », la Ğ1 (prononcez « june »), alors pourquoi avec une 2ème monnaie, la &lt;em&gt;Ğ1-Test&lt;/em&gt; ?&lt;/p&gt;
&lt;p&gt;Comme son nom l&#39;indique, la monnaie Ğ1-Test est faite pour les &lt;em&gt;tests&lt;/em&gt; : c&#39;est le bac à sable dans lequel nous pouvons déployer les nouvelles versions de Duniter afin de les tester, avant d&#39;intervenir sur le réseau principal (le réseau Ğ1).&lt;/p&gt;
&lt;p&gt;Il serait en effet dommage de s&#39;apercevoir qu&#39;une nouvelle version contiendrait un bug majeur, et de déployer cette version directement sur le réseau Ğ1 : les dégâts pourraient être considérables (réseau inopérant, monnaie bloquée, etc.), alors que l&#39;on aurait pu détecter les problèmes en passant d&#39;abord par la monnaie de test. De plus, une nouvelle version met du temps à se déployer : il faut que chaque utilisateur mette à jour son logiciel Duniter, ce qui peut prendre des jours, des semaines ou des mois selon le nombre d&#39;utilisateurs.&lt;/p&gt;
&lt;p&gt;Le réseau de test est donc l&#39;antichambre du réseau principal, il est un garant de sa stabilité.&lt;/p&gt;
&lt;p&gt;Ce bac à sable profite également aux clients Duniter, tels &lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org/&quot;&gt;Sakia&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/cesium&quot;&gt;Cesium&lt;/a&gt; ou &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/silkaj&quot;&gt;Silkaj&lt;/a&gt;, qui peuvent tester de nouvelles fonctionnalités sans risquer de faire perdre leur monnaie aux utilisateurs, ou de provoquer des bugs rendant le logiciel inutilisable.&lt;/p&gt;
&lt;h2 id=&quot;est-ce-une-monnaie-qui-prendra-de-la-valeur&quot;&gt;Est-ce une monnaie qui prendra de la valeur ?&lt;/h2&gt;
&lt;p&gt;Nous avons choisi les paramètres de Ğ1-Test &lt;strong&gt;de façon à ce qu&#39;elle ne prenne pas de valeur, ou très peu&lt;/strong&gt; : la monnaie se crée à rythme bien plus élevé que la monnaie principale, rendant la possibilité d&#39;épargner minimale.&lt;/p&gt;
&lt;h2 id=&quot;puis-je-m-y-inscrire&quot;&gt;Puis-je m&#39;y inscrire ?&lt;/h2&gt;
&lt;p&gt;Oui, et vous aurez beaucoup plus de facilité à vous inscrire que sur le réseau Ğ1 : la licence ne s&#39;y applique pas, vous pouvez être certifié et certifier de façon légère sans que cela gêne qui que ce soit.&lt;/p&gt;
&lt;p&gt;Vous pouvez pour cela utiliser Sakia ou &lt;a rel=&quot;external&quot; href=&quot;https://g1-test.duniter.org/cesium&quot;&gt;Cesium pour Ğ1-Test&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour lancer Sakia sur Ğ1-Test, utilisez la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sakia&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --currency=g1-test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notez également que le réseau Ğ1-Test pourra être redémarré de zéro si cela s&#39;avère nécessaire.&lt;/p&gt;
&lt;h2 id=&quot;la-certification-est-elle-automatique&quot;&gt;La certification est-elle automatique ?&lt;/h2&gt;
&lt;p&gt;Non : comme dans la Ğ1, vous aurez à demander des certifications de la part des membres actuels de la monnaie de test. Si vous ne connaissez personne, vous pouvez poster un message sur un réseau social comme Mastodon ou Diaspora* avec le tag #ğ1-test pour attirer quelques certifieurs. Vous aurez probablement à vous présenter un minimum pour les convaincre de vous certifier, c&#39;est une habitude prise dans les monnaies de test précédentes.&lt;/p&gt;
&lt;p&gt;Et puis, cela prépare au fait que la certification est tout sauf automatique dans la Ğ1, le réseau de production.&lt;/p&gt;
&lt;h2 id=&quot;quels-sont-les-parametres-de-la-monnaie&quot;&gt;Quels sont les paramètres de la monnaie ?&lt;/h2&gt;
&lt;p&gt;Ce sont grosso-modo les mêmes que la Ğ1, mais avec des échéances plus courtes :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;currency&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;g1-test&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;c&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0.0488&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;                  # 4,88%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;dt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 86400&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;                  # DU toutes les 24h précises&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;dtReeval&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 631152&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;           # DU réévalué tous les 7,305 jours&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;ud0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1000&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;                  # 10,00 Ğ1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;udTime0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1496527200&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;        # 04 Juin 2017 00h00 : 1er DU&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;udReevalTime0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1496570400&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;  # 04 Juin 2017 12h00 : 1ère réévaluation du DU&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;sigPeriod&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 86400&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;           # 24 heures d&amp;#39;attente&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;sigStock&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 100&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;              # 100 certifications&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;sigWindow&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1051920&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;         # 12,175 jours&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;sigValidity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 12623040&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;      # 146,1 = plus de 4 mois&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;sigQty&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 5&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;                  # 5 signatures&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;idtyWindow&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1051920&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;        # 12,175 jours&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;msWindow&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1051920&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;          # 12,175 jours&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;xpercent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0.8&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;              # 80%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;msValidity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 6311520&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;        # 73,05 jours&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;stepMax&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 5&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;                 # 5 étapes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;medianTimeBlocks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 24&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;       # 24 blocs = retard de 24/2 = 12 blocs = 12*2&amp;#39;30 = 30min&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;avgGenTime&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 150&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;            # 2&amp;#39;30&amp;quot; de calcul par bloc en moyenne&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;dtDiffEval&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 12&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;             # Réévaluation de la difficulté tous les 12 blocs =&amp;gt; 30 minutes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;percentRot&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0.67&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt;           # =&amp;gt; 33,5% des calculateurs sont exclus&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;comment-ajouter-mon-noeud-au-reseau-g1-test&quot;&gt;Comment ajouter mon nœud au réseau Ğ1-Test ?&lt;/h2&gt;
&lt;p&gt;Rendez-vous sur la page &lt;a href=&quot;https://duniter.fr/wiki/doc/&quot;&gt;Forger des blocs&lt;/a&gt;, cliquez sur le bouton orange « Ğ1-TEST » pour télécharger la dernière version disponible sur ce réseau.&lt;/p&gt;
&lt;p&gt;Puis, synchronisez-vous sur le réseau :&lt;/p&gt;
&lt;h3 id=&quot;avec-duniter-desktop&quot;&gt;Avec Duniter Desktop :&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/gune-test-redemarree/sync.png&quot; alt=&quot;Synchonize this node&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;avec-duniter-server&quot;&gt;Avec Duniter Server :&lt;/h3&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1-test.duniter.org&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A bientôt sur Ğ1-Test !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>RML9 : vidéos des journées techniques</title>
          <pubDate>Wed, 07 Jun 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/videos-rml9/</link>
          <guid>https://duniter.fr/blog/videos-rml9/</guid>
          <description xml:base="https://duniter.fr/blog/videos-rml9/">&lt;h1 id=&quot;rml9-videos-des-journees-techniques&quot;&gt;RML9 : vidéos des journées techniques&lt;/h1&gt;
&lt;h2 id=&quot;les-videos-des-deux-journees-techniques-sont-desormais-disponibles&quot;&gt;Les vidéos des deux journées techniques sont désormais disponibles !&lt;/h2&gt;
&lt;p&gt;Revivez à votre rythme les tutoriaux pour développer des plugins Sakia, Cesium et Duniter.&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/videoseries?list=PL0UDqLtXevvH2GRaD5-HUPWExVxY_MuwK&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Vous y trouverez également les interventions de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Moul à propos de l&#39;utilisation de Silkaj et l&#39;API HTTP de Duniter&lt;/li&gt;
&lt;li&gt;Tortue à propos des &lt;a rel=&quot;external&quot; href=&quot;https://duniter.tednet.fr/paperwallet/&quot;&gt;paperwallet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;gpsqueeek pour l&#39;installation de Duniter sur une brique Internet&lt;/li&gt;
&lt;li&gt;Eloïs qui présente son nœud spécialisé &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter-currency-monit&quot;&gt;duniter-currency-monit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;kimamila qui présente les nouveautés de Cesium&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/rml9/paperwallet.png&quot; alt=&quot;Paper Wallet&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;rml10-a-montpellier&quot;&gt;RML10 à Montpellier&lt;/h2&gt;
&lt;p&gt;Rendez-vous pour les prochaines interventions techniques des &lt;a rel=&quot;external&quot; href=&quot;https://rml10.duniter.org/&quot;&gt;&lt;strong&gt;RML10 du 16 au 19 NOVEMBRE 2017 à MONTPELLIER&lt;/strong&gt;&lt;/a&gt; !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Les modules C/C++</title>
          <pubDate>Mon, 22 May 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/les-modules-c-cpp/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/les-modules-c-cpp/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/les-modules-c-cpp/">&lt;h1 id=&quot;les-modules-c-c&quot;&gt;Les modules C/C++&lt;/h1&gt;
&lt;p&gt;Duniter est écrit à plus de 96% en JavaScript, exécuté par le moteur &lt;a rel=&quot;external&quot; href=&quot;https://nodejs.org&quot;&gt;Node.js&lt;/a&gt;. Toutefois certaines parties gourmandes en calcul nécessitent l&#39;utilisation des langages C/C++ pour une exécution rapide. Ces parties ont été externalisées dans des modules à part, dont vous trouverez la liste ci-dessous.&lt;/p&gt;
&lt;h2 id=&quot;wotb&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/wotb&quot;&gt;wotb&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Module qui stocke et traite les données de la WoT. Il associe à chaque membre un entier, puis stocke une matrice des membres avec leurs liens.&lt;/p&gt;
&lt;h3 id=&quot;fonctionnalites&quot;&gt;Fonctionnalités&lt;/h3&gt;
&lt;p&gt;Ce module permet :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de faire du calcul de distance entre membres&lt;/li&gt;
&lt;li&gt;de connaître les chemins possibles d&#39;un membre à un autre&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;auteurs&quot;&gt;Auteurs&lt;/h3&gt;
&lt;p&gt;Écrit initialement par cgeek en C, puis refactorisé par mmpio en C++.&lt;/p&gt;
&lt;h3 id=&quot;tester&quot;&gt;Tester&lt;/h3&gt;
&lt;p&gt;Tout d&#39;abord, procéder à la copie des sources et à la compilation :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clone https://github.com/duniter/wotb.git&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; wotb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --build-from-source&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;en-javascript&quot;&gt;En JavaScript&lt;/h4&gt;
&lt;p&gt;C&#39;est le plus haut niveau, le plus complet. Ce niveau englobe tous les appels que fera finalement Duniter à ce module.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;en-c&quot;&gt;En C++&lt;/h4&gt;
&lt;p&gt;Le C++ se décompose en deux parties :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;le code métier du module C++&lt;/li&gt;
&lt;li&gt;l&#39;enrobage qui fait le lien entre JavaScript et le coder métier&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tout le code du point 1) se trouve dans le fichier &lt;code&gt;functions.cc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tout le code du point 2) se trouve dans le dossier &lt;code&gt;wotcpp/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il  est possible de travailler indépendamment sur 2), en se positionnant dans le dossier &lt;code&gt;wotcpp/&lt;/code&gt; puis en utilisant CMake. Il est possible de tester le module à travers le fichier &lt;code&gt;main.cpp&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;publier&quot;&gt;Publier&lt;/h3&gt;
&lt;p&gt;Pour publier une nouvelle version, quelques étapes sont à respecter.&lt;/p&gt;
&lt;h4 id=&quot;modifier-le-code-et-la-version&quot;&gt;Modifier le code et la version&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Modifier le code (correctifs/fonctionnalités)&lt;/li&gt;
&lt;li&gt;Changer le numéro de version dans &lt;code&gt;package.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tagger le commit de changement de version (optionnel)&lt;/li&gt;
&lt;li&gt;Pusher&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;publier-le-module-sur-npm&quot;&gt;Publier le module sur NPM&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Seul un développeur possédant un compte NPM ayant les droits sur le module &lt;code&gt;wotb&lt;/code&gt; peut effectuer cette publication.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La commande qu&#39;il devra lancer sur le code à jour est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; publish&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;publier-le-binaire-pre-compile-pour-windows-ou-arm&quot;&gt;Publier le binaire pré-compilé pour Windows ou ARM&lt;/h4&gt;
&lt;p&gt;Cette étape est nécessaire pour le build Windows ou ARM de Duniter.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Seul un développeur possédant un accès au répertoire AWS https://wotb.s3-eu-central-1.amazonaws.com peut effectuer cette publication. Voir la &lt;a rel=&quot;external&quot; href=&quot;https://github.com/mapbox/node-pre-gyp#3-configure-aws-credentials&quot;&gt;documentation pour fournir les accès à node-pre-gyp&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sélectionner la version de NodeJS pour laquelle publier, par exemple avec NVM :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;nvm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; use&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Compiler les sources :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --build-from-source&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vérifier que le résultat est conforme en lançant les tests :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Packager le binaire :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; run package&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Publier le binaire :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; run publish&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;naclb&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/naclb&quot;&gt;naclb&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Module d&#39;enrobage permettant d&#39;utiliser la librairie NaCl en C++ dans un contexte Node.js (donc JavaScript). Permet de réaliser les opérations de crypto à la vitesse du C++, plutôt que du JS.&lt;/p&gt;
&lt;p&gt;Ce module diminue le contenu initial de la librairie NaCl, certaines parties n&#39;ayant pas été compilables aisément, elles ont été tout bonnement supprmées. Aucun ajout ni aucune modification n&#39;ont été faites en dehors de ces suppressions à la librairie NaCl.&lt;/p&gt;
&lt;h3 id=&quot;auteurs-1&quot;&gt;Auteurs&lt;/h3&gt;
&lt;p&gt;Écrit par cgeek en C++.&lt;/p&gt;
&lt;h3 id=&quot;tester-1&quot;&gt;Tester&lt;/h3&gt;
&lt;p&gt;Tout d&#39;abord, procéder à la copie des sources et à la compilation :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clone https://github.com/duniter/naclb.git&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; naclb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --build-from-source&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;en-javascript-1&quot;&gt;En JavaScript&lt;/h4&gt;
&lt;p&gt;Le module ne se teste qu&#39;en JavaScript, bien qu&#39;il pût être aussi testé en C++.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;publier-1&quot;&gt;Publier&lt;/h3&gt;
&lt;p&gt;Procédure identique au module &lt;code&gt;wotb&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;leveldown&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Level/leveldown&quot;&gt;leveldown&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Module externe donnant accès à une ou plusieurs bases de données LevelDB.&lt;/p&gt;
&lt;h2 id=&quot;node-sqlite3&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/mapbox/node-sqlite3&quot;&gt;node-sqlite3&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Module externe donnant accès à une base de données SQLite.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Fuites mémoire</title>
          <pubDate>Thu, 11 May 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/fuites-memoire/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/fuites-memoire/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/fuites-memoire/">&lt;h1 id=&quot;fuites-memoire&quot;&gt;Fuites mémoire&lt;/h1&gt;
&lt;p&gt;Il se peut que Duniter manifeste une utilisation trop élevée de la mémoire de sa machine : ceci peut être dû à une fuite mémoire.&lt;/p&gt;
&lt;p&gt;Aussi, la version &lt;em&gt;Duniter Server&lt;/em&gt; dispose d&#39;un mécanisme permettant d&#39;analyser la mémoire consommée par Duniter.&lt;/p&gt;
&lt;h2 id=&quot;enregistrement-de-l-empreinte-memoire&quot;&gt;Enregistrement de l&#39;empreinte mémoire&lt;/h2&gt;
&lt;p&gt;À tout moment, il est possible d&#39;enregistrer la consommation détaillée de Duniter en termes de mémoire (Linux seulement). On parle de produire un &lt;em&gt;heapdump&lt;/em&gt;, ou rapport de mémoire utilisée.&lt;/p&gt;
&lt;p&gt;Pour produire ce dump, déterminer l&#39;identifiant de processus de Duniter :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;ps&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; aux&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; grep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis notez cet identifiant. Imaginons qu&#39;il s&#39;agisse du PID &lt;code&gt;12345&lt;/code&gt;. Alors pour produire le heapdump, lancer la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;kill&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -USR2 12345&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un fichier nommé &lt;code&gt;heapdump-&amp;lt;id&amp;gt;.heapsnapshot&lt;/code&gt; sera alors créé sur la machine, soit dans votre répertoire HOME, soit dans le répertoire depuis lequel Duniter a été lancé, soit encore à la racine &lt;code&gt;/&lt;/code&gt; du système.&lt;/p&gt;
&lt;p&gt;Ce fichier peut ensuite être exploité dans divers outils comme les &lt;a rel=&quot;external&quot; href=&quot;https://developer.chrome.com/devtools&quot;&gt;Chrome Dev Tools&lt;/a&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Livraisons (ancienne page)</title>
          <pubDate>Wed, 10 May 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/livraisons-old/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/livraisons-old/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/livraisons-old/">&lt;h1 id=&quot;livraisons-ancienne-page&quot;&gt;Livraisons (ancienne page)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Cette page est un guide à destination des développeurs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Duniter est livré sous la forme de différents binaires pour les environnements Linux et Windows :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Duniter Desktop&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour Debian (.deb)&lt;/li&gt;
&lt;li&gt;Pour Linux (archive tar.gz)&lt;/li&gt;
&lt;li&gt;Pour Windows (.exe)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Duniter Server&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour Debian (.deb)&lt;/li&gt;
&lt;li&gt;Pour Debian ARM (.deb)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La réalisation de ces livrables ainsi que leur mise à disposition est totalement automatisée. Les sections suivantes décrivent cette procédure.&lt;/p&gt;
&lt;h2 id=&quot;pre-requis&quot;&gt;Pré-requis&lt;/h2&gt;
&lt;p&gt;N&#39;importe qui peut réaliser la livraison de Duniter, c&#39;est-à-dire produire et mettre à disposition les livrables précédemment cités, sous réserve de réunir les conditions suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Être administrateur de l&#39;organisation &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter&quot;&gt;Duniter sur GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Disposer d&#39;une machine Linux avec :
&lt;ul&gt;
&lt;li&gt;4Go de RAM minimum&lt;/li&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;Node.js v6+&lt;/li&gt;
&lt;li&gt;VirtualBox&lt;/li&gt;
&lt;li&gt;Vagrant&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Yarn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;creation-d-un-token-github&quot;&gt;Création d&#39;un token GitHub&lt;/h3&gt;
&lt;p&gt;Pour créer la release GitHub et téléverser les livrables, les scripts de livraison s&#39;attendent à trouver un jeton d&#39;authentification dans le répertoire &lt;code&gt;~/.config/duniter/.github&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour obtenir un tel jeton, rendez-vous à l&#39;adresse &lt;a rel=&quot;external&quot; href=&quot;https://github.com/settings/tokens&quot;&gt;https://github.com/settings/tokens&lt;/a&gt; puis générez un nouveau jeton en cochant la case « public_repo ».&lt;/p&gt;
&lt;p&gt;Copiez alors le jeton généré, par exemple &lt;code&gt;b23ab3cbe624a8552545900d781a1779b928aa90&lt;/code&gt;, puis enregistrez ce jeton :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; -n&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;#39;b23ab3cbe624a8552545900d781a1779b928aa90&amp;#39;&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; ~/.config/duniter/.github&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;procedure&quot;&gt;Procédure&lt;/h2&gt;
&lt;h3 id=&quot;1-cloner-duniter-et-installer-ses-modules&quot;&gt;1. Cloner Duniter et installer ses modules&lt;/h3&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clone git@github.com:duniter/duniter.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;yarn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;2-creer-une-nouvelle-version&quot;&gt;2. Créer une nouvelle version&lt;/h3&gt;
&lt;p&gt;Cette opération se réalise sur n&#39;importe quel branche, selon le besoin :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour une release, utiliser la branche &lt;code&gt;master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pour une pre-release, utiliser la branche &lt;code&gt;dev&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sélectionnez la branche :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; checkout master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Une fois positionné sur la bonne branche, lancez le script de changement de version. Par exemple pour passer en version &lt;code&gt;1.2.3&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;./release/new_version.sh&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1.2.3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Poussez les modifications sur le dépôt :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; push origin master&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --tags&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A ce stade, le code source de Duniter est monté en version, et un nouveau tag a été ajouté au dépôt. GitHub est au courant, et reflète une entrée dans les releases à cette occasion. Toutefois la release n&#39;existe pas encore.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;N.B&lt;/strong&gt;: Si la version doit se faire sur la branche &lt;code&gt;dev&lt;/code&gt;, remplacez simplement &lt;code&gt;master&lt;/code&gt; par &lt;code&gt;dev&lt;/code&gt; dans les commandes ci-dessus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;3-creer-la-pre-release&quot;&gt;3. Créer la pré-release&lt;/h3&gt;
&lt;p&gt;Cette fois, nous allons créer la release avec le status &lt;em&gt;pre-release&lt;/em&gt;. Ce statut permet de produire la release sans que celle-ci soit visible officiellement jusqu&#39;au moment où l&#39;on décidera que « tout est bon ».&lt;/p&gt;
&lt;p&gt;Pour produire la pre-release et l&#39;ensemble des livrables (hors ARM), toujours pour notre version d&#39;exemple &lt;code&gt;1.2.3&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;./release/new_prerelease.sh&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1.2.3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette procédure &lt;strong&gt;est longue&lt;/strong&gt; et se résume en 3 étapes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Création de la pré-release sur GitHub&lt;/li&gt;
&lt;li&gt;Production des livrables&lt;/li&gt;
&lt;li&gt;Téléversement des livrables produits, sur GitHub&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La 1ère étape est quasi-instantannée, mais la production et le téléversement sont longs : le script va produire des machines virtuelles Ubuntu et Windows afin d&#39;y réaliser les livrables finaux. Puis, le téléversement peut prendre du temps selon le débit disponible sur votre connexion Internet.&lt;/p&gt;
&lt;h3 id=&quot;4-valider-la-release&quot;&gt;4. Valider la release&lt;/h3&gt;
&lt;p&gt;Vous pouvez alors consulter les livrables &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/releases&quot;&gt;sur la page releases du dépôt GitHub&lt;/a&gt;. Après avoir contrôlé que l&#39;ensemble des fichiers sont bien présents, il est possible de valider la release via :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;./release/set_release.sh&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1.2.3&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; rel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La &lt;em&gt;pre-release&lt;/em&gt; passera alors en &lt;em&gt;release&lt;/em&gt;, et les utilisateurs seront alertés du changement via Duniter UI (dont disposent Duniter Desktop ou Duniter Server démarré en &lt;code&gt;webstart&lt;/code&gt;). La page d&#39;accueil https://duniter.org/fr affichera également cette nouvelle version.&lt;/p&gt;
&lt;h3 id=&quot;5-le-build-arm&quot;&gt;5. Le build ARM&lt;/h3&gt;
&lt;p&gt;À partir du moment où l&#39;étape 2. a été réalisée (depuis x86 ou ARM, peu importe), il est possible de lancer le &lt;strong&gt;build ARM&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Il suffit de réaliser les opérations 1. et 3. sur ARM. Le livrable sera alors produit et uploadé avec les autres versions.&lt;/p&gt;
&lt;p&gt;Une bonne pratique est donc de démarrer les étapes 1., 2. et 3. sur un poste Linux 64bits, &lt;em&gt;puis&lt;/em&gt; de lancer les étapes 1. et 3. sur ARM en parallèle. Il existera alors 2 machines apportant leur concurrence à la construction de la release.&lt;/p&gt;
&lt;p&gt;Étapes à suivre avec une raspbian:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utiliser une release « jessie » pour garantir que ceux qui sont sous cette version peuvent installer le package&lt;/li&gt;
&lt;li&gt;installer yarn, voir la page https://yarnpkg.com/lang/en/docs/install/ :&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - &amp;amp;&amp;amp; echo &quot;deb https://dl.yarnpkg.com/debian/ stable main&quot; | sudo tee /etc/apt/sources.list.d/yarn.list &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install yarn&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;attention, yarn désinstalle automatiquement le nodejs préinstallé avec raspbian parce qu&#39;il n&#39;est pas compatible, il faut donc installer node :&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;sudo apt-get install curl &amp;amp;&amp;amp; curl -sL https://deb.nodesource.com/setup | bash - &amp;amp;&amp;amp; sudo apt-get install -y nodejs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;s&#39;assurer que le package zip est installé (il ne l&#39;est pas par défaut)&lt;/li&gt;
&lt;li&gt;avoir mis correctement le fichier correspondant à votre jeton github dans .config/duniter/.github (voir « création d&#39;un token github » plus haut)&lt;/li&gt;
&lt;li&gt;avoir installé votre authentification ssh pour github, voir par exemple https://help.github.com/articles/connecting-to-github-with-ssh/. Typiquement, il vous suffira de copier le contenu du répertoire .ssh de votre profile dans le profile du raspberry. Attention, in faut faire un chmod 400 sur id_rsa sinon github se plaint.&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Preuve de travail</title>
          <pubDate>Tue, 02 May 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/preuve-de-travail/</link>
          <guid>https://duniter.fr/blog/preuve-de-travail/</guid>
          <description xml:base="https://duniter.fr/blog/preuve-de-travail/">&lt;h1 id=&quot;preuve-de-travail&quot;&gt;Preuve de travail&lt;/h1&gt;
&lt;h2 id=&quot;a-quoi-sert-la-preuve-de-travail&quot;&gt;À quoi sert la preuve de travail ?&lt;/h2&gt;
&lt;p&gt;La preuve de travail permet de synchroniser un réseau pair à pair (p2p) de machines devant partager une base de données commune.
Dans duniter, cette base de données commune est notre grand livre de comptes commun qui consigne toutes les transactions de la monnaie ainsi que les actes de la toile de confiance (certifications, adhésions, renouvellements, révocations, etc). Elle est inscrite dans une « blockchain ».&lt;br /&gt;
Comment fait-on lorsque plusieurs machines souhaitent ajouter en même temps une nouvelle donnée (une nouvelle transaction par exemple) ?&lt;br /&gt;
De plus, comment fait-on pour nous mettre d&#39;accord sur le temps qui s&#39;est écoulé ? Ce qui est essentiel pour savoir s&#39;il est temps de créer le dividende universel ainsi que pour gérer les délais d&#39;expiration des adhésions et certifications.&lt;/p&gt;
&lt;p&gt;Eh bien la preuve de travail permet de résoudre ces deux problèmes en même temps.&lt;/p&gt;
&lt;p&gt;Voici comment :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;N&#39;importe quelle machine peut écrire une nouvelle donnée (= un nouveau bloc), mais pour avoir le droit de l&#39;écrire il faut résoudre un défi qui demande du &lt;em&gt;travail&lt;/em&gt; à la machine, ce défi doit être suffisamment difficile pour qu&#39;il n&#39;y ait pas deux machines qui le résolvent en même temps. Il n&#39;y a donc qu&#39;une seule machine qui peut écrire en même temps, celle qui résout le défi demandé, bien.&lt;/li&gt;
&lt;li&gt;La résolution de ce défi demande un certain temps de calcul qui est fonction de la puissance de calcul du réseau, nous avons donc là un moyen de définir l&#39;écoulement du temps selon un référentiel commun. Il suffit ensuite de choisir une convention, par exemple &lt;code&gt;1 bloc = 5 min&lt;/code&gt; puis d&#39;adapter la difficulté du défi pour que le réseau trouve bien en moyenne un bloc toutes les 5 min.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;seuls-les-membres-peuvent-calculer&quot;&gt;Seuls les membres peuvent calculer&lt;/h2&gt;
&lt;p&gt;Duniter a une différence fondamentale avec toutes les autres crypto-monnaies basées sur la preuve de travail : seuls les membres de la toile de confiance ont le droit d&#39;ajouter des blocs à la blockchain (le grand livre de comptes commun).&lt;br /&gt;
Chaque bloc est signé avec la clé privée du membre qui l&#39;a ajouté, cela permet d&#39;affecter une difficulté personnalisée a chaque membre ce qui change absolument tout, sans ce mécanisme la Ğ1 serait tout aussi asymétrique et non-libre que le bitcoin !&lt;/p&gt;
&lt;p&gt;La difficulté personnalisée est en effet indispensable pour empêcher la course au calcul, ainsi que pour empêcher un supercalculateur de prendre le contrôle de toute la blockchain et donc de la monnaie.&lt;br /&gt;
De plus, la difficulté personnalisée impose une rotation dans l&#39;écriture des blocs qui permet a tous d&#39;avoir la possibilité d&#39;écrire dans la blockchain, même avec une brique internet ou un raspberry pi, ce qui rend les monnaies duniter considérablement plus économes en énergie !&lt;/p&gt;
&lt;h2 id=&quot;comment-marche-la-preuve-de-travail&quot;&gt;Comment marche la preuve de travail ?&lt;/h2&gt;
&lt;h3 id=&quot;l-empreinte-le-hash&quot;&gt;L&#39;empreinte (le hash)&lt;/h3&gt;
&lt;p&gt;Exemple d&#39;empreinte valide :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;00000276902793AA44601A9D43099E7B63DBF9EBB55BCCFD6AE20C729B54C653&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut voir que cette empreinte démarre par 5 zéros : réaliser une telle empreinte demande beaucoup de &lt;em&gt;travail&lt;/em&gt; de la part d&#39;un ordinateur, d&#39;où le fait qu&#39;on appelle l&#39;opération consistant à réaliser une telle empreinte « &lt;em&gt;preuve de travail&lt;/em&gt; ».&lt;/p&gt;
&lt;h3 id=&quot;la-difficulte-commune&quot;&gt;La difficulté commune&lt;/h3&gt;
&lt;p&gt;Afin de nous donner une mesure commune du temps, nous avons besoin d&#39;une difficulté commune qui assure que la blockchain avance à un rythme régulier (1 bloc toutes les &lt;code&gt;avgGenTime&lt;/code&gt; secondes, &lt;code&gt;avgGenTime&lt;/code&gt; étant l&#39;un des 20 paramètres qui décrivent une monnaie duniter).&lt;br /&gt;
Cette difficulté peut commencer à une valeur arbitraire (&lt;code&gt;70&lt;/code&gt; dans le code &lt;code&gt;v1.5.x&lt;/code&gt;) puis agit comme un ressort, si l&#39;intervalle entre deux blocs est inférieur à &lt;code&gt;avgGenTime&lt;/code&gt; la difficulté commune augmente et inversement si l&#39;intervalle entre deux blocs est supérieur à &lt;code&gt;avgGenTime&lt;/code&gt;, la difficulté commune diminue.&lt;/p&gt;
&lt;h4 id=&quot;comment-s-applique-la-difficulte&quot;&gt;Comment s&#39;applique la difficulté&lt;/h4&gt;
&lt;p&gt;La valeur numérique de la difficulté correspond directement à une plage d&#39;empreintes possibles parmi toutes les empreintes possibles. Dans duniter &lt;code&gt;v1.5.x&lt;/code&gt; l&#39;empreinte d&#39;un bloc c&#39;est le hash hexadécimal sha256 du bloc. Ce qui veut dire que chaque caractère de l&#39;empreinte n&#39;a que 16 valeurs possibles : les chiffres de 0 à 9 et les lettres de A à F.&lt;/p&gt;
&lt;p&gt;Pour interpréter une difficulté il faut effectuer la division euclidienne de cette difficulté par 16. Exemple avec &lt;code&gt;70&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;70 // 16 = &lt;strong&gt;4&lt;/strong&gt; reste &lt;strong&gt;6&lt;/strong&gt;. Donc les empreintes valides sont celles qui commencent par &lt;strong&gt;4&lt;/strong&gt; zéros et dont le 5&lt;sup&gt;ème&lt;/sup&gt; caractère est inférieur ou égal à 9 (car on commence à &lt;code&gt;F&lt;/code&gt; (index 0), puis on descend ... &lt;code&gt;E(1), D(2), C(3), B(4), A(5), 9(6)&lt;/code&gt;). On écrit alors que les empreintes valides commencent par : &lt;code&gt;0000[0-9]&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oui mais l&#39;empreinte d&#39;un bloc sera toujours la même pour un bloc donné et n&#39;a aucune raison de commencer par une suite particulière, donc comment fait-on pour trouver un bloc qui a comme par hasard une empreinte qui respecte la difficulté ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bien vu, il faut effectivement faire varier le contenu du bloc pour obtenir une empreinte différente, c&#39;est le rôle du Nonce.
Lorsque qu&#39;un membre veut ajouter un nouveau bloc à la blockchain, il fixe le contenu de ce bloc, puis rajoute un champ Nonce qu&#39;il fait varier jusqu&#39;à tomber par hasard sur une empreinte qui respecte la difficulté.&lt;/p&gt;
&lt;h3 id=&quot;le-nonce&quot;&gt;Le Nonce&lt;/h3&gt;
&lt;p&gt;Il s&#39;agit du champ du document &lt;code&gt;Block&lt;/code&gt; permettant de faire varier l&#39;empreinte finale du bloc, empreinte qui définit le niveau de la preuve de travail.&lt;/p&gt;
&lt;p&gt;Exemples de valeurs de Nonce :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10100000112275&lt;/li&gt;
&lt;li&gt;10300000288743&lt;/li&gt;
&lt;li&gt;10400000008538&lt;/li&gt;
&lt;li&gt;10700000079653&lt;/li&gt;
&lt;li&gt;10300000070919&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En réalité ces valeurs de &lt;code&gt;Nonce&lt;/code&gt; suivent toutes un même schéma &lt;code&gt;XYY00000000000&lt;/code&gt;. Le Nonce ne correspond pas aux nombres d&#39;essais, mais plutôt à un espace de Nonce possible. La décomposition est la suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X correspond au numéro de pair. Par exemple celui qui a plusieurs nœuds avec la même clé personnelle et qui sont donc tous capables de calculer, chacun de ces nœuds va réaliser sa preuve avec un X différent, afin de ne pas calculer la même preuve justement. Car potentiellement, ils réalisent exactement le même prochain bloc (puisque l&#39;émetteur est le même, le contenu possiblement identique, seul le Nonce peut varier), donc il faut avoir un Nonce qui les différencie pour qu&#39;ils ne fassent pas exactement les mêmes calculs.&lt;/li&gt;
&lt;li&gt;Y correspond au numéro de cœur du processeur. On peut voir par exemple que quelqu&#39;un possède au moins 7 cores dans son CPU ici, car on lit le Nonce &lt;code&gt;107[...]&lt;/code&gt;. Un serveur avec 99 cores pourrait réaliser une preuve &lt;code&gt;199[...]&lt;/code&gt; par exemple.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le reste du Nonce, la partie derrière XYY, est l&#39;espace de Nonce du nœud pour chaque core du CPU. Ce qui fait donc un espace de 11 chiffres (&lt;code&gt;00000000000&lt;/code&gt;) pour trouver un Nonce correct pour chaque core du CPU de la machine (CPU au sens large, ce peut-être un bi-CPU, on considère le nombre de cores résultants pour la PoW).&lt;/p&gt;
&lt;h3 id=&quot;la-difficulte-personnalisee&quot;&gt;La difficulté personnalisée&lt;/h3&gt;
&lt;p&gt;Nous avons expliqué plus haut que la difficulté personnalisée est &lt;strong&gt;le nouveau concept fondamental&lt;/strong&gt; qui différencie les monnaies duniter des autres crypto-monnaies basées sur la « &lt;em&gt;preuve de travail&lt;/em&gt; », comme le bitcoin par exemple.&lt;/p&gt;
&lt;p&gt;Voici donc comment est calculée la difficulté personnalisée d&#39;un membre :&lt;/p&gt;
&lt;p&gt;La difficulté personnalisée d&#39;un membre résulte de l&#39;assemblage de deux contraintes distinctes qui ont des rôles complémentaires : le &lt;strong&gt;facteur d&#39;exclusion&lt;/strong&gt; et le &lt;strong&gt;handicap&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Soient &lt;code&gt;powMin&lt;/code&gt; la difficulté commune, &lt;code&gt;exFact&lt;/code&gt; le facteur d&#39;exclusion d&#39;un membre et &lt;code&gt;handicap&lt;/code&gt; son handicap. La difficulté personnalité &lt;code&gt;diff&lt;/code&gt; de ce membre est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;diff = powMin*exFact + handicap&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;le-facteur-d-exclusion-exfact-d-un-membre&quot;&gt;Le facteur d&#39;exclusion &lt;code&gt;exFact&lt;/code&gt; d&#39;un membre&lt;/h4&gt;
&lt;p&gt;Les membres qui n&#39;ont jamais écrit de bloc ou qui n&#39;ont pas écrit de bloc depuis longtemps ont un facteur d&#39;exclusion de &lt;code&gt;1&lt;/code&gt;. Leur difficulté personnalisée sera donc égale à la somme &lt;code&gt;powMin + handicap&lt;/code&gt;.&lt;br /&gt;
Avant de lire la formule donnée plus bas vous devez comprendre le rôle de ce facteur d&#39;exclusion : lorsqu&#39;un membre ajoute un bloc à la blockchain, son facteur d&#39;exclusion saute subitement de 1 vers une valeur très élevée afin de faire grimper exponentiellement sa difficulté et l&#39;exclure ainsi du calcul des prochains blocs et donc l&#39;empêcher de prendre le contrôle de la blockchain.&lt;br /&gt;
Le facteur d&#39;exclusion du membre va ensuite chuter rapidement à chaque nouveau bloc dont il n&#39;est pas l&#39;auteur puis retomber à 1 au bout d&#39;un nombre de blocs qui est en fait une proportion du nombre de membres calculant (un tiers dans le cas de la Ğ1, ce qui signifie que s&#39;il y a 15 membres calculant vous êtes exclus pendant 5 blocs).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;heu attend c&#39;est quoi le nombre de membres calculant ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Très bonne question, il s&#39;agit du nombre de membres que l&#39;on considère comme étant actuellement en train de calculer le prochain bloc. En réalité il n&#39;y a aucun moyen de savoir combien de membres sont réellement en train de calculer le prochain bloc car d&#39;une part il est impossible d&#39;avoir une vue complète du réseau et d&#39;autre part il existe des moyens de se rendre invisible du réseau. Il nous faut pourtant bien choisir une méthode, car sans considérer le nombre de membres calculant, il est impossible de calibrer la difficulté personnalisée.&lt;br /&gt;
La méthode actuellement utilisée par Duniter est de regarder l&#39;historique des X derniers blocs et considérer que le nombre de membres calculant c&#39;est le nombre de membres ayant écrit au moins 1 bloc sur les X derniers blocs sans compter le tout dernier bloc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Et comment on choisit X ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gràce au concept de &lt;strong&gt;fenêtre courante&lt;/strong&gt;, X correspond alors à la taille de la fenêtre courante, voici comment cela fonctionne :
On nomme &lt;code&gt;issuersFrame&lt;/code&gt; la taille de la fenêtre courante et &lt;code&gt;issuersCount&lt;/code&gt; le nombre de membres ayant calculé au moins 1 bloc dans la fenêtre courante.&lt;br /&gt;
Au commencement d&#39;une blockchain, le tout premier bloc que l&#39;on nomme le bloc #0 décrète que &lt;code&gt;issuersFrame=1&lt;/code&gt; et &lt;code&gt;issuersCount=0&lt;/code&gt;. Hé oui le tout dernier bloc étant exclu, il n&#39;y a pour l&#39;instant aucun membre dans la fenêtre courante.&lt;br /&gt;
Ensuite, à chaque nouveau bloc, on mesure la variation de &lt;code&gt;issuersCount&lt;/code&gt;, dès le second bloc (le bloc #1), l&#39;auteur du bloc #0 entre dans la fenêtre courante, on écrira donc dans le bloc #1 &lt;code&gt;issuersCount=1&lt;/code&gt;.&lt;br /&gt;
&lt;code&gt;issuersFrame&lt;/code&gt; varie alors de la façon suivante : si &lt;code&gt;issuersCount&lt;/code&gt; augmente de X (et X = 1 au maximum), alors &lt;code&gt;issuersFrame&lt;/code&gt; augmentera de 1 unité pendant 5X blocs. Et inversement : si &lt;code&gt;issuersCount&lt;/code&gt; diminue de Y (et Y = 2 au maximum : décalage de fenêtre + perte d’un auteur), alors issuersFrame diminuera de 1 unité pendant 5Y blocs. Les effets étant cumulatifs dans le temps. Ce qui fait que si un nouvel auteur apparaît au bloc &lt;code&gt;T&lt;/code&gt; et un autre disparaît à &lt;code&gt;T+1&lt;/code&gt;, &lt;code&gt;issuersFrame&lt;/code&gt; augmentera de 1 unité à &lt;code&gt;T+1&lt;/code&gt; puis diminuera de 1 unité à &lt;code&gt;T+2&lt;/code&gt;, pour se stabiliser.&lt;br /&gt;
Techniquement ce calcul est formalisé par les règles &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g05---headissuersframe&quot;&gt;BR_G05&lt;/a&gt; et &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g06---headissuersframevar&quot;&gt;BR_G06&lt;/a&gt; du protocole DUP.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Revenons à notre difficulté personnalisée !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nous avons dit que le facteur d&#39;exclusion &lt;code&gt;exFact&lt;/code&gt; augmente brutalement dès que le membre considéré trouve un bloc puis qu&#39;il diminue rapidement pour retomber à &lt;code&gt;1&lt;/code&gt; au bout d&#39;un nombre de blocs égal au tiers des calculateurs. Et bien, c&#39;est parti voici comment est calculé &lt;code&gt;exFact&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;Soient &lt;code&gt;nbPreviousIssuers&lt;/code&gt; la valeur du champ &lt;code&gt;issuersCount&lt;/code&gt; du dernier bloc trouvé par le membre et &lt;code&gt;nbBlocksSince&lt;/code&gt; le nombre de blocs trouvés par le reste du réseau depuis que le membre considéré a trouvé son dernier bloc.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exFact = MAX [ 1 ; FLOOR (0.67 * nbPreviousIssuers / (1 + nbBlocksSince)) ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La fonction FLOOR est une simple troncature, ainsi pour que &lt;code&gt;exFact&lt;/code&gt; soit excluant il faut que le rapport &lt;code&gt;(0.67 * nbPreviousIssuers / (1 + nbBlocksSince))&lt;/code&gt; soit supérieur ou égal à 2. On voit bien que si &lt;code&gt;nbBlocksSince&lt;/code&gt; est supérieur au tiers des calculateurs = &lt;code&gt;0.33*nbPreviousIssuers&lt;/code&gt; alors le rapport sera inférieur à 2 et donc le membre ne sera pas exclu du calcul du prochain bloc.&lt;br /&gt;
À l&#39;inverse, si le membre considéré est l&#39;auteur du dernier bloc alors &lt;code&gt;nbBlocksSince=0&lt;/code&gt; et le facteur d&#39;exclusion vaut donc &lt;code&gt;0.67 * nbPreviousIssuers&lt;/code&gt;, c&#39;est d&#39;autant plus grand que le nombre de calculateurs est élevé. Je vous laisse imaginer la difficulté vertigineuse que vous atteindrez en trouvant un bloc s&#39;il y a des centaines de membres calculant !&lt;br /&gt;
Vous atteindrez une difficulté telle que même le plus grand des supercalcuteurs serait bloqué, et c&#39;est bien le but du facteur d&#39;exclusion : empecher les supercalculateurs et fermes de calcul de prendre le contrôle de la blockchain et donc de la monnaie.&lt;/p&gt;
&lt;p&gt;En revanche, a tout instant t les deux tiers des membres calculant non exclus ont tous un facteur d&#39;exclusion égal à &lt;code&gt;1&lt;/code&gt;, mais tous n&#39;ont pas la même puissance de calcul, et donc si la difficulté personnalisée se limitait au facteur d&#39;exclusion c&#39;est toujours le tiers des membres calculant les plus puissants qui écriraient des blocs et deux tiers restants seraient presque toujours exclus, en particulier les machines très modestes type raspberry n&#39;auraient aucune chance.&lt;/p&gt;
&lt;h4 id=&quot;le-handicap&quot;&gt;Le handicap&lt;/h4&gt;
&lt;p&gt;Le handicap est le second paramètre de la difficulté personnalisée. Plus subtil, il permet néanmoins d&#39;améliorer considérablement le mécanisme de rotation en donnant un handicap aux membres ayant une machine puissante afin de donner leur chance aux machines les plus modestes et de diminuer le coût écologique de la monnaie.&lt;/p&gt;
&lt;p&gt;Le calcul du handicap se base sur le nombre médian de blocs écrits par chaque membre au sein de la fenêtre courante. En gros, l&#39;idée est de donner un handicap à la moitié haute de la fenêtre courante pour donner plus de chance à la moitié basse.&lt;/p&gt;
&lt;p&gt;Soient &lt;code&gt;nbPersonalBlocksInFrame&lt;/code&gt; le nombre de blocs écrits par le membre considéré dans la fenêtre courante et &lt;code&gt;medianOfBlocksInFrame&lt;/code&gt; le nombre médian de blocs écrits par les membres au sein de la fenêtre courante.&lt;/p&gt;
&lt;p&gt;Voici la formule :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;handicap = FLOOR(LN(MAX(1;(nbPersonalBlocksInFrame + 1) / medianOfBlocksInFrame)) / LN(1.189))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Démystifions cette formule, &lt;code&gt;(nbPersonalBlocksInFrame + 1) / medianOfBlocksInFrame)&lt;/code&gt; est simplement le rapport entre le nombre de blocs calculés par le membre et la médiane. Par exemple si le membre a calculé &lt;code&gt;9&lt;/code&gt; blocs dans la fenêtre courante alors que la médiane vaut &lt;code&gt;5&lt;/code&gt;, ce rapport vaudra &lt;code&gt;(9+1)/5 = 2&lt;/code&gt;.&lt;br /&gt;
On s&#39;assure via la fonction MAX que ce rapport vaut au moins &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite on prend le logarithme népérien de ce rapport pour éviter que le handicap devienne excluant lorsque la fenêtre courante devient très grande, c&#39;est ce qui fait la subtilité du handicap, son rôle n&#39;est pas d&#39;exclure mais de niveler la difficulté de chacun en fonction de sa puissance pour que tout le monde ait a peu près les mêmes chances de calculer.&lt;/p&gt;
&lt;p&gt;Si l&#39;on veut que le handicap s&#39;applique dés la médiane il faudrait ensuite diviser par &lt;code&gt;LN(1)&lt;/code&gt;, le problème c&#39;est qu&#39;on a déjà nivellé la rapport à &lt;code&gt;1&lt;/code&gt; avec la fonction MAX, donc si l&#39;on divisait par &lt;code&gt;LN(1)&lt;/code&gt; tous les membres calculant auraient un handicap &amp;gt;= &lt;code&gt;1&lt;/code&gt;, qui plus est, est-il bien juste de donner un handicap à un membre qui est tout juste à la médiane ?&lt;br /&gt;
C&#39;est pourquoi, au lieu de prendre &lt;code&gt;1&lt;/code&gt;, on prend &lt;code&gt;1.189&lt;/code&gt;, ce qui veut dire qu&#39;il faut être &lt;code&gt;18,9 %&lt;/code&gt; au-dessus de la médiane pour subir un handicap (si l&#39;on néglige le +1 dans la formule qui devient effectivement négligeable pour un grand nombre de calculateurs).&lt;/p&gt;
&lt;p&gt;Mais pourquoi &lt;code&gt;18,9%&lt;/code&gt; me direz-vous ?&lt;br /&gt;
C&#39;est 16^(1/16), le facteur de difficulté entre 2 niveaux de la preuve de travail dont le hash est en hexadécimal.&lt;/p&gt;
&lt;p&gt;En conclusion, ce qu&#39;il faut retenir c&#39;est l&#39;idée d&#39;indexer le handicap sur le logarithme du rapport à la médiane, et de ne l&#39;appliquer que pour les membres dont le rapport à la médiane dépasse le rapport entre 2 niveaux de difficulté de la preuve de travail.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Preuve de travail</title>
          <pubDate>Tue, 02 May 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/blockchain-nodejs/preuve-de-travail/</link>
          <guid>https://duniter.fr/wiki/contribuer/blockchain-nodejs/preuve-de-travail/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/blockchain-nodejs/preuve-de-travail/">&lt;h1 id=&quot;preuve-de-travail&quot;&gt;Preuve de travail&lt;/h1&gt;
&lt;h2 id=&quot;a-quoi-sert-la-preuve-de-travail&quot;&gt;À quoi sert la preuve de travail ?&lt;/h2&gt;
&lt;p&gt;La preuve de travail permet de synchroniser un réseau pair à pair (p2p) de machines devant partager une base de données commune.
Dans duniter, cette base de données commune est notre grand livre de comptes commun qui consigne toutes les transactions de la monnaie ainsi que les actes de la toile de confiance (certifications, adhésions, renouvellements, révocations, etc). Elle est inscrite dans une « blockchain ».&lt;br /&gt;
Comment fait-on lorsque plusieurs machines souhaitent ajouter en même temps une nouvelle donnée (une nouvelle transaction par exemple) ?&lt;br /&gt;
De plus, comment fait-on pour nous mettre d&#39;accord sur le temps qui s&#39;est écoulé ? Ce qui est essentiel pour savoir s&#39;il est temps de créer le dividende universel ainsi que pour gérer les délais d&#39;expiration des adhésions et certifications.&lt;/p&gt;
&lt;p&gt;Eh bien la preuve de travail permet de résoudre ces deux problèmes en même temps.&lt;/p&gt;
&lt;p&gt;Voici comment :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;N&#39;importe quelle machine peut écrire une nouvelle donnée (= un nouveau bloc), mais pour avoir le droit de l&#39;écrire il faut résoudre un défi qui demande du &lt;em&gt;travail&lt;/em&gt; à la machine, ce défi doit être suffisamment difficile pour qu&#39;il n&#39;y ait pas deux machines qui le résolvent en même temps. Il n&#39;y a donc qu&#39;une seule machine qui peut écrire en même temps, celle qui résout le défi demandé, bien.&lt;/li&gt;
&lt;li&gt;La résolution de ce défi demande un certain temps de calcul qui est fonction de la puissance de calcul du réseau, nous avons donc là un moyen de définir l&#39;écoulement du temps selon un référentiel commun. Il suffit ensuite de choisir une convention, par exemple &lt;code&gt;1 bloc = 5 min&lt;/code&gt; puis d&#39;adapter la difficulté du défi pour que le réseau trouve bien en moyenne un bloc toutes les 5 min.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;seuls-les-membres-peuvent-calculer&quot;&gt;Seuls les membres peuvent calculer&lt;/h2&gt;
&lt;p&gt;Duniter a une différence fondamentale avec toutes les autres crypto-monnaies basées sur la preuve de travail : seuls les membres de la toile de confiance ont le droit d&#39;ajouter des blocs à la blockchain (le grand livre de comptes commun).&lt;br /&gt;
Chaque bloc est signé avec la clé privée du membre qui l&#39;a ajouté, cela permet d&#39;affecter une difficulté personnalisée a chaque membre ce qui change absolument tout, sans ce mécanisme la Ğ1 serait tout aussi asymétrique et non-libre que le bitcoin !&lt;/p&gt;
&lt;p&gt;La difficulté personnalisée est en effet indispensable pour empêcher la course au calcul, ainsi que pour empêcher un supercalculateur de prendre le contrôle de toute la blockchain et donc de la monnaie.&lt;br /&gt;
De plus, la difficulté personnalisée impose une rotation dans l&#39;écriture des blocs qui permet a tous d&#39;avoir la possibilité d&#39;écrire dans la blockchain, même avec une brique internet ou un raspberry pi, ce qui rend les monnaies duniter considérablement plus économes en énergie !&lt;/p&gt;
&lt;h2 id=&quot;comment-marche-la-preuve-de-travail&quot;&gt;Comment marche la preuve de travail ?&lt;/h2&gt;
&lt;h3 id=&quot;l-empreinte-le-hash&quot;&gt;L&#39;empreinte (le hash)&lt;/h3&gt;
&lt;p&gt;Exemple d&#39;empreinte valide :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;00000276902793AA44601A9D43099E7B63DBF9EBB55BCCFD6AE20C729B54C653&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut voir que cette empreinte démarre par 5 zéros : réaliser une telle empreinte demande beaucoup de &lt;em&gt;travail&lt;/em&gt; de la part d&#39;un ordinateur, d&#39;où le fait qu&#39;on appelle l&#39;opération consistant à réaliser une telle empreinte « &lt;em&gt;preuve de travail&lt;/em&gt; ».&lt;/p&gt;
&lt;h3 id=&quot;la-difficulte-commune&quot;&gt;La difficulté commune&lt;/h3&gt;
&lt;p&gt;Afin de nous donner une mesure commune du temps, nous avons besoin d&#39;une difficulté commune qui assure que la blockchain avance à un rythme régulier (1 bloc toutes les &lt;code&gt;avgGenTime&lt;/code&gt; secondes, &lt;code&gt;avgGenTime&lt;/code&gt; étant l&#39;un des 20 paramètres qui décrivent une monnaie duniter).&lt;br /&gt;
Cette difficulté peut commencer à une valeur arbitraire (&lt;code&gt;70&lt;/code&gt; dans le code &lt;code&gt;v1.5.x&lt;/code&gt;) puis agit comme un ressort, si l&#39;intervalle entre deux blocs est inférieur à &lt;code&gt;avgGenTime&lt;/code&gt; la difficulté commune augmente et inversement si l&#39;intervalle entre deux blocs est supérieur à &lt;code&gt;avgGenTime&lt;/code&gt;, la difficulté commune diminue.&lt;/p&gt;
&lt;h4 id=&quot;comment-s-applique-la-difficulte&quot;&gt;Comment s&#39;applique la difficulté&lt;/h4&gt;
&lt;p&gt;La valeur numérique de la difficulté correspond directement à une plage d&#39;empreintes possibles parmi toutes les empreintes possibles. Dans duniter &lt;code&gt;v1.5.x&lt;/code&gt; l&#39;empreinte d&#39;un bloc c&#39;est le hash hexadécimal sha256 du bloc. Ce qui veut dire que chaque caractère de l&#39;empreinte n&#39;a que 16 valeurs possibles : les chiffres de 0 à 9 et les lettres de A à F.&lt;/p&gt;
&lt;p&gt;Pour interpréter une difficulté il faut effectuer la division euclidienne de cette difficulté par 16. Exemple avec &lt;code&gt;70&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;70 // 16 = &lt;strong&gt;4&lt;/strong&gt; reste &lt;strong&gt;6&lt;/strong&gt;. Donc les empreintes valides sont celles qui commencent par &lt;strong&gt;4&lt;/strong&gt; zéros et dont le 5&lt;sup&gt;ème&lt;/sup&gt; caractère est inférieur ou égal à 9 (car on commence à &lt;code&gt;F&lt;/code&gt; (index 0), puis on descend ... &lt;code&gt;E(1), D(2), C(3), B(4), A(5), 9(6)&lt;/code&gt;). On écrit alors que les empreintes valides commencent par : &lt;code&gt;0000[0-9]&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oui mais l&#39;empreinte d&#39;un bloc sera toujours la même pour un bloc donné et n&#39;a aucune raison de commencer par une suite particulière, donc comment fait-on pour trouver un bloc qui a comme par hasard une empreinte qui respecte la difficulté ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bien vu, il faut effectivement faire varier le contenu du bloc pour obtenir une empreinte différente, c&#39;est le rôle du Nonce.
Lorsque qu&#39;un membre veut ajouter un nouveau bloc à la blockchain, il fixe le contenu de ce bloc, puis rajoute un champ Nonce qu&#39;il fait varier jusqu&#39;à tomber par hasard sur une empreinte qui respecte la difficulté.&lt;/p&gt;
&lt;h3 id=&quot;le-nonce&quot;&gt;Le Nonce&lt;/h3&gt;
&lt;p&gt;Il s&#39;agit du champ du document &lt;code&gt;Block&lt;/code&gt; permettant de faire varier l&#39;empreinte finale du bloc, empreinte qui définit le niveau de la preuve de travail.&lt;/p&gt;
&lt;p&gt;Exemples de valeurs de Nonce :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10100000112275&lt;/li&gt;
&lt;li&gt;10300000288743&lt;/li&gt;
&lt;li&gt;10400000008538&lt;/li&gt;
&lt;li&gt;10700000079653&lt;/li&gt;
&lt;li&gt;10300000070919&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En réalité ces valeurs de &lt;code&gt;Nonce&lt;/code&gt; suivent toutes un même schéma &lt;code&gt;XYY00000000000&lt;/code&gt;. Le Nonce ne correspond pas aux nombres d&#39;essais, mais plutôt à un espace de Nonce possible. La décomposition est la suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X correspond au numéro de pair. Par exemple celui qui a plusieurs nœuds avec la même clé personnelle et qui sont donc tous capables de calculer, chacun de ces nœuds va réaliser sa preuve avec un X différent, afin de ne pas calculer la même preuve justement. Car potentiellement, ils réalisent exactement le même prochain bloc (puisque l&#39;émetteur est le même, le contenu possiblement identique, seul le Nonce peut varier), donc il faut avoir un Nonce qui les différencie pour qu&#39;ils ne fassent pas exactement les mêmes calculs.&lt;/li&gt;
&lt;li&gt;Y correspond au numéro de cœur du processeur. On peut voir par exemple que quelqu&#39;un possède au moins 7 cores dans son CPU ici, car on lit le Nonce &lt;code&gt;107[...]&lt;/code&gt;. Un serveur avec 99 cores pourrait réaliser une preuve &lt;code&gt;199[...]&lt;/code&gt; par exemple.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le reste du Nonce, la partie derrière XYY, est l&#39;espace de Nonce du nœud pour chaque core du CPU. Ce qui fait donc un espace de 11 chiffres (&lt;code&gt;00000000000&lt;/code&gt;) pour trouver un Nonce correct pour chaque core du CPU de la machine (CPU au sens large, ce peut-être un bi-CPU, on considère le nombre de cores résultants pour la PoW).&lt;/p&gt;
&lt;h3 id=&quot;la-difficulte-personnalisee&quot;&gt;La difficulté personnalisée&lt;/h3&gt;
&lt;p&gt;Nous avons expliqué plus haut que la difficulté personnalisée est &lt;strong&gt;le nouveau concept fondamental&lt;/strong&gt; qui différencie les monnaies duniter des autres crypto-monnaies basées sur la « &lt;em&gt;preuve de travail&lt;/em&gt; », comme le bitcoin par exemple.&lt;/p&gt;
&lt;p&gt;Voici donc comment est calculée la difficulté personnalisée d&#39;un membre :&lt;/p&gt;
&lt;p&gt;La difficulté personnalisée d&#39;un membre résulte de l&#39;assemblage de deux contraintes distinctes qui ont des rôles complémentaires : le &lt;strong&gt;facteur d&#39;exclusion&lt;/strong&gt; et le &lt;strong&gt;handicap&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Soient &lt;code&gt;powMin&lt;/code&gt; la difficulté commune, &lt;code&gt;exFact&lt;/code&gt; le facteur d&#39;exclusion d&#39;un membre et &lt;code&gt;handicap&lt;/code&gt; son handicap. La difficulté personnalité &lt;code&gt;diff&lt;/code&gt; de ce membre est :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;diff = powMin*exFact + handicap&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;le-facteur-d-exclusion-exfact-d-un-membre&quot;&gt;Le facteur d&#39;exclusion &lt;code&gt;exFact&lt;/code&gt; d&#39;un membre&lt;/h4&gt;
&lt;p&gt;Les membres qui n&#39;ont jamais écrit de bloc ou qui n&#39;ont pas écrit de bloc depuis longtemps ont un facteur d&#39;exclusion de &lt;code&gt;1&lt;/code&gt;. Leur difficulté personnalisée sera donc égale à la somme &lt;code&gt;powMin + handicap&lt;/code&gt;.&lt;br /&gt;
Avant de lire la formule donnée plus bas vous devez comprendre le rôle de ce facteur d&#39;exclusion : lorsqu&#39;un membre ajoute un bloc à la blockchain, son facteur d&#39;exclusion saute subitement de 1 vers une valeur très élevée afin de faire grimper exponentiellement sa difficulté et l&#39;exclure ainsi du calcul des prochains blocs et donc l&#39;empêcher de prendre le contrôle de la blockchain.&lt;br /&gt;
Le facteur d&#39;exclusion du membre va ensuite chuter rapidement à chaque nouveau bloc dont il n&#39;est pas l&#39;auteur puis retomber à 1 au bout d&#39;un nombre de blocs qui est en fait une proportion du nombre de membres calculant (un tiers dans le cas de la Ğ1, ce qui signifie que s&#39;il y a 15 membres calculant vous êtes exclus pendant 5 blocs).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;heu attend c&#39;est quoi le nombre de membres calculant ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Très bonne question, il s&#39;agit du nombre de membres que l&#39;on considère comme étant actuellement en train de calculer le prochain bloc. En réalité il n&#39;y a aucun moyen de savoir combien de membres sont réellement en train de calculer le prochain bloc car d&#39;une part il est impossible d&#39;avoir une vue complète du réseau et d&#39;autre part il existe des moyens de se rendre invisible du réseau. Il nous faut pourtant bien choisir une méthode, car sans considérer le nombre de membres calculant, il est impossible de calibrer la difficulté personnalisée.&lt;br /&gt;
La méthode actuellement utilisée par Duniter est de regarder l&#39;historique des X derniers blocs et considérer que le nombre de membres calculant c&#39;est le nombre de membres ayant écrit au moins 1 bloc sur les X derniers blocs sans compter le tout dernier bloc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Et comment on choisit X ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gràce au concept de &lt;strong&gt;fenêtre courante&lt;/strong&gt;, X correspond alors à la taille de la fenêtre courante, voici comment cela fonctionne :
On nomme &lt;code&gt;issuersFrame&lt;/code&gt; la taille de la fenêtre courante et &lt;code&gt;issuersCount&lt;/code&gt; le nombre de membres ayant calculé au moins 1 bloc dans la fenêtre courante.&lt;br /&gt;
Au commencement d&#39;une blockchain, le tout premier bloc que l&#39;on nomme le bloc #0 décrète que &lt;code&gt;issuersFrame=1&lt;/code&gt; et &lt;code&gt;issuersCount=0&lt;/code&gt;. Hé oui le tout dernier bloc étant exclu, il n&#39;y a pour l&#39;instant aucun membre dans la fenêtre courante.&lt;br /&gt;
Ensuite, à chaque nouveau bloc, on mesure la variation de &lt;code&gt;issuersCount&lt;/code&gt;, dès le second bloc (le bloc #1), l&#39;auteur du bloc #0 entre dans la fenêtre courante, on écrira donc dans le bloc #1 &lt;code&gt;issuersCount=1&lt;/code&gt;.&lt;br /&gt;
&lt;code&gt;issuersFrame&lt;/code&gt; varie alors de la façon suivante : si &lt;code&gt;issuersCount&lt;/code&gt; augmente de X (et X = 1 au maximum), alors &lt;code&gt;issuersFrame&lt;/code&gt; augmentera de 1 unité pendant 5X blocs. Et inversement : si &lt;code&gt;issuersCount&lt;/code&gt; diminue de Y (et Y = 2 au maximum : décalage de fenêtre + perte d’un auteur), alors issuersFrame diminuera de 1 unité pendant 5Y blocs. Les effets étant cumulatifs dans le temps. Ce qui fait que si un nouvel auteur apparaît au bloc &lt;code&gt;T&lt;/code&gt; et un autre disparaît à &lt;code&gt;T+1&lt;/code&gt;, &lt;code&gt;issuersFrame&lt;/code&gt; augmentera de 1 unité à &lt;code&gt;T+1&lt;/code&gt; puis diminuera de 1 unité à &lt;code&gt;T+2&lt;/code&gt;, pour se stabiliser.&lt;br /&gt;
Techniquement ce calcul est formalisé par les règles &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g05---headissuersframe&quot;&gt;BR_G05&lt;/a&gt; et &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g06---headissuersframevar&quot;&gt;BR_G06&lt;/a&gt; du protocole DUP.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Revenons à notre difficulté personnalisée !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nous avons dit que le facteur d&#39;exclusion &lt;code&gt;exFact&lt;/code&gt; augmente brutalement dès que le membre considéré trouve un bloc puis qu&#39;il diminue rapidement pour retomber à &lt;code&gt;1&lt;/code&gt; au bout d&#39;un nombre de blocs égal au tiers des calculateurs. Et bien, c&#39;est parti voici comment est calculé &lt;code&gt;exFact&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;Soient &lt;code&gt;nbPreviousIssuers&lt;/code&gt; la valeur du champ &lt;code&gt;issuersCount&lt;/code&gt; du dernier bloc trouvé par le membre et &lt;code&gt;nbBlocksSince&lt;/code&gt; le nombre de blocs trouvés par le reste du réseau depuis que le membre considéré a trouvé son dernier bloc.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exFact = MAX [ 1 ; FLOOR (0.67 * nbPreviousIssuers / (1 + nbBlocksSince)) ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La fonction FLOOR est une simple troncature, ainsi pour que &lt;code&gt;exFact&lt;/code&gt; soit excluant il faut que le rapport &lt;code&gt;(0.67 * nbPreviousIssuers / (1 + nbBlocksSince))&lt;/code&gt; soit supérieur ou égal à 2. On voit bien que si &lt;code&gt;nbBlocksSince&lt;/code&gt; est supérieur au tiers des calculateurs = &lt;code&gt;0.33*nbPreviousIssuers&lt;/code&gt; alors le rapport sera inférieur à 2 et donc le membre ne sera pas exclu du calcul du prochain bloc.&lt;br /&gt;
À l&#39;inverse, si le membre considéré est l&#39;auteur du dernier bloc alors &lt;code&gt;nbBlocksSince=0&lt;/code&gt; et le facteur d&#39;exclusion vaut donc &lt;code&gt;0.67 * nbPreviousIssuers&lt;/code&gt;, c&#39;est d&#39;autant plus grand que le nombre de calculateurs est élevé. Je vous laisse imaginer la difficulté vertigineuse que vous atteindrez en trouvant un bloc s&#39;il y a des centaines de membres calculant !&lt;br /&gt;
Vous atteindrez une difficulté telle que même le plus grand des supercalcuteurs serait bloqué, et c&#39;est bien le but du facteur d&#39;exclusion : empecher les supercalculateurs et fermes de calcul de prendre le contrôle de la blockchain et donc de la monnaie.&lt;/p&gt;
&lt;p&gt;En revanche, a tout instant t les deux tiers des membres calculant non exclus ont tous un facteur d&#39;exclusion égal à &lt;code&gt;1&lt;/code&gt;, mais tous n&#39;ont pas la même puissance de calcul, et donc si la difficulté personnalisée se limitait au facteur d&#39;exclusion c&#39;est toujours le tiers des membres calculant les plus puissants qui écriraient des blocs et deux tiers restants seraient presque toujours exclus, en particulier les machines très modestes type raspberry n&#39;auraient aucune chance.&lt;/p&gt;
&lt;h4 id=&quot;le-handicap&quot;&gt;Le handicap&lt;/h4&gt;
&lt;p&gt;Le handicap est le second paramètre de la difficulté personnalisée. Plus subtil, il permet néanmoins d&#39;améliorer considérablement le mécanisme de rotation en donnant un handicap aux membres ayant une machine puissante afin de donner leur chance aux machines les plus modestes et de diminuer le coût écologique de la monnaie.&lt;/p&gt;
&lt;p&gt;Le calcul du handicap se base sur le nombre médian de blocs écrits par chaque membre au sein de la fenêtre courante. En gros, l&#39;idée est de donner un handicap à la moitié haute de la fenêtre courante pour donner plus de chance à la moitié basse.&lt;/p&gt;
&lt;p&gt;Soient &lt;code&gt;nbPersonalBlocksInFrame&lt;/code&gt; le nombre de blocs écrits par le membre considéré dans la fenêtre courante et &lt;code&gt;medianOfBlocksInFrame&lt;/code&gt; le nombre médian de blocs écrits par les membres au sein de la fenêtre courante.&lt;/p&gt;
&lt;p&gt;Voici la formule :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;handicap = FLOOR(LN(MAX(1;(nbPersonalBlocksInFrame + 1) / medianOfBlocksInFrame)) / LN(1.189))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Démystifions cette formule, &lt;code&gt;(nbPersonalBlocksInFrame + 1) / medianOfBlocksInFrame)&lt;/code&gt; est simplement le rapport entre le nombre de blocs calculés par le membre et la médiane. Par exemple si le membre a calculé &lt;code&gt;9&lt;/code&gt; blocs dans la fenêtre courante alors que la médiane vaut &lt;code&gt;5&lt;/code&gt;, ce rapport vaudra &lt;code&gt;(9+1)/5 = 2&lt;/code&gt;.&lt;br /&gt;
On s&#39;assure via la fonction MAX que ce rapport vaut au moins &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite on prend le logarithme népérien de ce rapport pour éviter que le handicap devienne excluant lorsque la fenêtre courante devient très grande, c&#39;est ce qui fait la subtilité du handicap, son rôle n&#39;est pas d&#39;exclure mais de niveler la difficulté de chacun en fonction de sa puissance pour que tout le monde ait a peu près les mêmes chances de calculer.&lt;/p&gt;
&lt;p&gt;Si l&#39;on veut que le handicap s&#39;applique dés la médiane il faudrait ensuite diviser par &lt;code&gt;LN(1)&lt;/code&gt;, le problème c&#39;est qu&#39;on a déjà nivellé la rapport à &lt;code&gt;1&lt;/code&gt; avec la fonction MAX, donc si l&#39;on divisait par &lt;code&gt;LN(1)&lt;/code&gt; tous les membres calculant auraient un handicap &amp;gt;= &lt;code&gt;1&lt;/code&gt;, qui plus est, est-il bien juste de donner un handicap à un membre qui est tout juste à la médiane ?&lt;br /&gt;
C&#39;est pourquoi, au lieu de prendre &lt;code&gt;1&lt;/code&gt;, on prend &lt;code&gt;1.189&lt;/code&gt;, ce qui veut dire qu&#39;il faut être &lt;code&gt;18,9 %&lt;/code&gt; au-dessus de la médiane pour subir un handicap (si l&#39;on néglige le +1 dans la formule qui devient effectivement négligeable pour un grand nombre de calculateurs).&lt;/p&gt;
&lt;p&gt;Mais pourquoi &lt;code&gt;18,9%&lt;/code&gt; me direz-vous ?&lt;br /&gt;
C&#39;est 16^(1/16), le facteur de difficulté entre 2 niveaux de la preuve de travail dont le hash est en hexadécimal.&lt;/p&gt;
&lt;p&gt;En conclusion, ce qu&#39;il faut retenir c&#39;est l&#39;idée d&#39;indexer le handicap sur le logarithme du rapport à la médiane, et de ne l&#39;appliquer que pour les membres dont le rapport à la médiane dépasse le rapport entre 2 niveaux de difficulté de la preuve de travail.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Certifier de nouveaux membres</title>
          <pubDate>Fri, 28 Apr 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/</link>
          <guid>https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/</guid>
          <description xml:base="https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/">&lt;h1 id=&quot;certifier-de-nouveaux-membres&quot;&gt;Certifier de nouveaux membres&lt;/h1&gt;
&lt;h1 id=&quot;comment-devient-on-membre-de-la-toile-de-confiance&quot;&gt;Comment devient-on membre de la Toile de confiance ?&lt;/h1&gt;
&lt;p&gt;Lorsque vous êtes vous-même devenu membre, vous obtenez le droit de &lt;em&gt;certifier de nouveaux prétendants à la toile Ğ1&lt;/em&gt;. C&#39;est-à-dire que vous pouvez aider de nouvelles personnes à devenir membre de la toile de confiance Ğ1.&lt;/p&gt;
&lt;h2 id=&quot;comment-certifier-de-nouveaux-membres&quot;&gt;Comment certifier de nouveaux membres&lt;/h2&gt;
&lt;p&gt;Pour qu&#39;une personne intègre la toile de confiance Ğ1, il lui faut obtenir au minimum 5 certifications. Elle va donc chercher à obtenir ces 5 certifications auprès des membres actuels de Ğ1, dont vous.&lt;/p&gt;
&lt;p&gt;Vous pouvez être d&#39;accord pour donner une certification à cette personne, et même à plusieurs autres. Par le concours de 4 autres membres, celle-ci pourra à son tour devenir membre.&lt;/p&gt;
&lt;h2 id=&quot;on-ne-certifie-pas-a-la-legere&quot;&gt;On ne certifie pas à la légère !&lt;/h2&gt;
&lt;p&gt;Toutefois, il ne s&#39;agit pas de donner des certifications à tout va ou pour faire plaisir. En tant que nouveau membre, &lt;strong&gt;&lt;a href=&quot;https://duniter.fr/wiki/g1/licence-g1/&quot;&gt;vous avez étudié et accepté la licence Ğ1&lt;/a&gt;&lt;/strong&gt;. Vous comprenez donc qu&#39;il est important de connaître la personne que vous certifiez, et que votre propre responsabilité de membre est engagée dans ce processus envers les autres membres de la toile Ğ1.&lt;/p&gt;
&lt;p&gt;Notamment si vous certifiez une personne qui aurait déjà un compte, ou certifiez une identité factice, cela crée un préjudice pour le reste de la toile de confiance.&lt;/p&gt;
&lt;p&gt;Il faut bien avoir conscience que la certification, tout autant que l&#39;identité sont des données publiques et vérifiables. Ainsi, créer de fausses identités et de faux liens dans la toile pourrait très bien être repéré et révélé publiquement, ceci pouvant mener à des sanctions prises par la communauté Ğ1 notamment en termes d&#39;exclusion des tricheurs &lt;strong&gt;mais aussi de leurs complices&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;quelques-outils-pratiques&quot;&gt;Quelques outils pratiques&lt;/h2&gt;
&lt;p&gt;Ces remarques étant faites, sachez qu&#39;il existe 2 outils pour vous aider à « voir » qui attend des certifications, combien ont été reçues, quelle est la distance de ce membre vis-à-vis de la toile.&lt;/p&gt;
&lt;h3 id=&quot;monitorer-les-certifications-en-attente&quot;&gt;Monitorer les certifications en attente&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://monit.g1.nordstrom.duniter.org/willMembers?lg=fr&quot;&gt;L&#39;outil willMembers de ğ1-monit&lt;/a&gt; permet de voir les membres en attente de certification et le nombre déjà reçues.&lt;/p&gt;
&lt;p&gt;En outre, l&#39;outil permet de repérer d&#39;éventuels doubles comptes.&lt;/p&gt;
&lt;h3 id=&quot;connaitre-la-distance-entre-les-membres&quot;&gt;Connaître la distance entre les membres&lt;/h3&gt;
&lt;p&gt;L&#39;outil &lt;a rel=&quot;external&quot; href=&quot;https://monit.g1.nordstrom.duniter.org/wotex&quot;&gt;Wotex&lt;/a&gt; permet de voir la distance des membres entre eux.&lt;/p&gt;
&lt;p&gt;Pour le moment, la règle dite « de distance » n&#39;a pas un impact très fort, la toile étant encore petite (moins de 3000 membres). Donc aujourd&#39;hui les nouveaux venus ne se soucient que d&#39;obtenir 5 certifications, peu importe qui leur donne la leur.&lt;/p&gt;
&lt;p&gt;Mais dans un avenir proche, cette règle de distance commencera à s&#39;appliquer : obtenir 5 certifications ne sera pas nécessairement suffisant si celles-ci ne remplissent pas le critère de distance.&lt;/p&gt;
&lt;p&gt;Quel est ce critère ? Il stipule que tout membre doit être joignable par n&#39;importe quel autre membre référent à travers ses 5 certifications. C&#39;est-à-dire qu&#39;il doit exister &lt;em&gt;au moins 1 chemin&lt;/em&gt; partant de chaque membre référent et menant au nouveau membre à travers les chemins de la toile, certifications vers le nouveau venu comprises. Et ce pour 80% des membres référents.&lt;/p&gt;
&lt;p&gt;Un membre référent est un membre de la toile qui a émis et reçu au moins X certifications, ce nombre X dépendant du nombre de membres. Actuellement, pour 100 membres, X vaut 3. Tout membre ayant émis et reçu 3 certifications est donc membre référent, la règle de distance s&#39;applique à tout nouveau venu vis-à-vis de lui.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Duniter avec Yunohost sur Raspberry Pi derrière Freebox</title>
          <pubDate>Sat, 15 Apr 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/raspberry-pi-freebox-yunohost/</link>
          <guid>https://duniter.fr/wiki/doc/raspberry-pi-freebox-yunohost/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/raspberry-pi-freebox-yunohost/">&lt;h1 id=&quot;installer-duniter-sur-raspberry-pi-3-derriere-une-freebox-v5-avec-yunohost&quot;&gt;Installer Duniter sur Raspberry Pi 3 derrière une Freebox v5 avec Yunohost&lt;/h1&gt;
&lt;p&gt;Ce tutoriel présente une manière de procéder pour installer Duniter sur un Raspberry Pi 3 (RPi)
derrière une Freebox v5 avec Yunohost (v2.5.6).&lt;/p&gt;
&lt;p&gt;Il s&#39;appuie et s&#39;inspire de deux autres tutoriels qu&#39;il est vivement conseillé de lire au préalable :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/installation-d-un-noeud-duniter-a-l-aide-de-yunohost/1420&quot;&gt;Installer Duniter à l&#39;aide de Yunohost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/duniter-sur-yunohost-derriere-une-box-privatrice-type-livebox/2169&quot;&gt;Duniter sur Yunohost derrière une box privatrice (type livebox)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;parametrer-la-freebox&quot;&gt;Paramétrer la Freebox&lt;/h2&gt;
&lt;p&gt;La fonction routeur de la Freebox v5 est accessible depuis l&#39;interface web de Free :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/freebox_v5_routeur.png&quot; alt=&quot;Freebox v5 routeur&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ouvrir les ports de la Freebox&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il s&#39;agit d&#39;ouvrir les ports suivants :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/freebox_v5_redirections_ports.PNG&quot; alt=&quot;Freebox v5 ports ouverts&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pour pouvoir enregistrer mes modifications, j&#39;ai du ajouter une ligne vide (visible sur la capture d&#39;écran ci-dessus).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixer l&#39;adresse ip du Raspberry&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette étape consiste à affecter une adresse ip fixe au RPi.
Comme le mien était neuf, j&#39;ai branché dessus un écran, un clavier et une souris pour installer le système d&#39;exploitation &lt;a rel=&quot;external&quot; href=&quot;https://www.raspberrypi.org/downloads/raspbian/&quot;&gt;Raspbian Jessie Lite&lt;/a&gt; grâce à &lt;a rel=&quot;external&quot; href=&quot;https://www.raspberrypi.org/downloads/noobs/&quot;&gt;NOOBS&lt;/a&gt;.
Une fois le système d&#39;exploitation installé, j&#39;ai lancé la commande suivante dans un terminal pour déterminer les adresses ip et mac du RPi :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ifconfig&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dans l&#39;interface web de la Freebox, il faut ensuite se rendre dans la rubrique &quot;Baux DHCP permanents&quot;
et ajouter les informations relatives au RPi fournies par la commande précédente.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/freebox_v5_baux_dhcp_perm.PNG&quot; alt=&quot;Freebox v5 - Baux DHCP permanents&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;installer-yunohost&quot;&gt;Installer Yunohost&lt;/h2&gt;
&lt;p&gt;Yunohost est un système d&#39;exploitation orienté serveur. Il permet de faire de l&#39;auto-hébergement de services Internet. Il est basé et reste totalement compatible avec Debian GNU/Linux.&lt;/p&gt;
&lt;p&gt;Après le paramétrage de la Freebox, j&#39;ai :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;éteint le RPi ;&lt;/li&gt;
&lt;li&gt;retiré la carte micro-SD pour la formater ;&lt;/li&gt;
&lt;li&gt;copié une image de Yunohost dessus depuis un autre ordinateur ;&lt;/li&gt;
&lt;li&gt;introduit de nouveau la carte micro-SD dans le RPi pour installer Yunohost, en suivant &lt;a rel=&quot;external&quot; href=&quot;https://yunohost.org/#/install_on_raspberry_fr&quot;&gt;ces explications&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cette façon de procéder n&#39;était peut-être pas la plus optimale : au lieu d&#39;utiliser Raspbian Jessie Lite temporairement, j&#39;aurais pu d&#39;emblée installer Yunohost.&lt;/p&gt;
&lt;p&gt;À ce stade, vous devoir pouvoir accéder au RPi en ssh depuis un autre ordinateur, même extérieur à votre réseau local, en utilisant l&#39;ip fixe externe.&lt;/p&gt;
&lt;h2 id=&quot;configurer-la-zone-dns-du-des-sous-nom-s-de-domaine-s&quot;&gt;Configurer la zone DNS du/des (sous)nom(s) de domaine(s)&lt;/h2&gt;
&lt;p&gt;Pour ma part, j&#39;ai acheté un nom de domaine (auprès de 1and1 en l&#39;occurrence mais d&#39;autres prestataires comme OVH proposent le même service). J&#39;ai opté pour l&#39;organisation suivante :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;mondomaine.fr ;&lt;/li&gt;
&lt;li&gt;duniter.mondomaine.fr (sous-domaine dédié à Duniter)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Contrairement à la Livebox, la Freebox v5 propose une adresse ipv4 fixe, ce qui facilite normalement l&#39;installation. Cette adresse ip externe est consultable depuis l&#39;interface Free (voir 1ère capture d&#39;écran).&lt;/p&gt;
&lt;p&gt;Dans mon cas, j&#39;ai paramétré la résolution du nom de domaine dans l&#39;interface de 1and1 comme suit :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/gestion_domaine.PNG&quot; alt=&quot;Gestion domaine&quot; /&gt;&lt;/p&gt;
&lt;p&gt;J&#39;ai ensuite créé un alias pour le sous-domaine&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/gestion_sous_domaine.PNG&quot; alt=&quot;Gestion domaine1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/gestion_sous_domaine_2.PNG&quot; alt=&quot;Gestion domaine2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Après cette étape, vous pouvez désormais accéder au RPi via ssh en spécifiant votre nom de domaine à la place de l&#39;ip fixe externe.&lt;/p&gt;
&lt;h2 id=&quot;installer-l-application-duniter&quot;&gt;Installer l&#39;application Duniter&lt;/h2&gt;
&lt;p&gt;Duniter peut désormais être installé soit en ligne de commande soit par l&#39;interface web de Yunohost.&lt;/p&gt;
&lt;p&gt;Pour cette partie, je renvoie à la section correspondante dans ce tutoriel : &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/installation-d-un-noeud-duniter-a-l-aide-de-yunohost/1420&quot;&gt;Installer Duniter à l&#39;aide de Yunohost&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ne vous inquiétez pas, l&#39;installation peut durer quelques dizaines de minutes.&lt;/p&gt;
&lt;h2 id=&quot;generer-un-certificat-ssl&quot;&gt;Générer un certificat ssl&lt;/h2&gt;
&lt;p&gt;Une fois le noeud installé, j&#39;ai du générer un certificat ssl pour accéder à l&#39;interface web de Duniter depuis un navigateur.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/duniter_freebox_v5/yunohost_certificat_ssl.PNG&quot; alt=&quot;Generer certificat ssl&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L&#39;installation est terminée ! Vous pouvez accéder à l&#39;interface web de Duniter depuis https://duniter.mondomaine.fr/webui.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Être rémunéré en calculant des blocs</title>
          <pubDate>Mon, 10 Apr 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/remuneration-calcul-blocs/</link>
          <guid>https://duniter.fr/wiki/doc/remuneration-calcul-blocs/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/remuneration-calcul-blocs/">&lt;h1 id=&quot;comment-etre-remunere-en-calculant-des-blocs&quot;&gt;Comment être rémunéré en calculant des blocs&lt;/h1&gt;
&lt;h2 id=&quot;un-protocole-neutre&quot;&gt;Un protocole neutre&lt;/h2&gt;
&lt;p&gt;Dans Duniter, à la différence des cryptomonnaies usuelles, le réseau n&#39;intègre pas de &lt;em&gt;taxe&lt;/em&gt; sur les transactions.&lt;/p&gt;
&lt;p&gt;La raison est qu&#39;il faut éviter de mélanger les sujets.&lt;/p&gt;
&lt;p&gt;Pour qu&#39;elle reste simple, la base technique (la blockchain, le réseau P2P)
ne devrait pas intégrer les moyens de rémunérer ceux qui hébergent les noeuds.&lt;/p&gt;
&lt;p&gt;À terme, l&#39;économie Duniter se développera par elle-même et inventera ses solutions &lt;strong&gt;par-dessus&lt;/strong&gt; le calcul des blocs.
Par exemple, on peut envisager une société qui accepterait de ne calculer des blocs contenant des transactions
d&#39;utilisateurs que s&#39;ils ont envoyé de la monnaie à cette société.
Elle calculerait alors des blocs contenant la transaction de l&#39;utilisateur ainsi que le paiement requis pour la transaction.&lt;/p&gt;
&lt;p&gt;Il faut noter que cet élément &lt;strong&gt;économique&lt;/strong&gt; se serait alors bien effectué &lt;strong&gt;par-dessus le protocole technique&lt;/strong&gt;.
Ce dernier est neutre, et n&#39;induit par défaut aucun comportement particulier vis-à-vis de l&#39;activité de calcul des blocs.&lt;/p&gt;
&lt;h2 id=&quot;remuniter-le-financement-participatif-du-calcul&quot;&gt;Remuniter : le financement participatif du calcul&lt;/h2&gt;
&lt;p&gt;Aujourd&#39;hui, le calcul des blocs peut être rémunéré par le service &lt;a rel=&quot;external&quot; href=&quot;https://remuniter.cgeek.fr/#/&quot;&gt;Remuniter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le fonctionnement est simple :&lt;/p&gt;
&lt;p&gt;Les utilisateurs de la monnaie libre peuvent faire un don sur la clé de Remuniter :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;et le service va se charger de distribuer aux calculateurs la monnaie ainsi récoltée.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/remuniter.png&quot; alt=&quot;RemuniterScreenshot&quot; /&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Commandes Duniter</title>
          <pubDate>Sat, 08 Apr 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/commandes/</link>
          <guid>https://duniter.fr/wiki/doc/commandes/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/commandes/">&lt;h1 id=&quot;commandes-duniter&quot;&gt;Commandes Duniter&lt;/h1&gt;
&lt;p&gt;Voici un guide des différentes commandes de l&#39;exécutable &lt;code&gt;duniter&lt;/code&gt; en ligne de commande.&lt;/p&gt;
&lt;h2 id=&quot;initialiser-son-noeud&quot;&gt;Initialiser son nœud&lt;/h2&gt;
&lt;h3 id=&quot;wizard-key&quot;&gt;&lt;code&gt;wizard key&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Permet de configurer le trousseau cryptographique utilisé par votre nœud. C&#39;est à travers ce trousseau que votre nœud peut être identifié et ses réponses authentifiées, vérifiées.&lt;/p&gt;
&lt;p&gt;Ce trousseau est composé d&#39;une clé privée et d&#39;une clé publique Ed25519.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; wizard key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Modify you keypair? Yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Key&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;&amp;#39;s salt *****************&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;? Key&amp;#39;&lt;/span&gt;&lt;span&gt;s password ********************&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;wizard-network&quot;&gt;&lt;code&gt;wizard network&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Permet de configurer la connectivité réseau de votre nœud : à la fois celle locale (interface réseau et port de la machine sur lequels se connecter) et distance (déclaration de votre nœud sur &lt;em&gt;comment&lt;/em&gt; le contacter depuis l&#39;Internet).&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; wizard network&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;samp&gt;? IPv4 interface: eth0 192.168.1.667
? IPv6 interface: eth0 2a01:e35:8ae7:8bb0:3de1:ee66:a6ba:a438  (Global)
? Port: 10900
? Remote IPv4: 88.174.120.187
? Remote port: 10900
? UPnP is available: use automatic port mapping? (easier) Yes
? Does this server has a DNS name? Yes
? DNS name: cgeek.fr&lt;/samp&gt;&lt;/p&gt;
&lt;p&gt;Bien évidemment, il faut mettre ici vos propres valeurs, et donc ne pas mettre &quot;192.168.1.667&quot;, ni &quot;2a01:e35:8ae7:8bb0:3de1:ee66:a6ba:a438&quot; ou encore &quot;cgeek.fr&quot;.&lt;/p&gt;
&lt;h3 id=&quot;sync&quot;&gt;&lt;code&gt;sync&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Pour un nœud tout neuf ou dont les données ont été effacées (par exemple suite à l&#39;utilisation de &lt;code&gt;reset data&lt;/code&gt;), il convient d&#39;initialiser son nœud en synchronisant une blockchain existante. Cette opération téléchargera la blockchain puis en extraira toutes les données de la monnaie : toile de confiance, unités de monnaie existantes, transactions.&lt;/p&gt;
&lt;p&gt;Synchroniser son nœud avec le réseau Ğ1 (monnaie Duniter) :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Progress:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Milestones:&lt;/span&gt;&lt;span&gt;   [||||||||||||||||||||] 100 %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Download:&lt;/span&gt;&lt;span&gt;     [||||||||||||||||||||] 100 %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Apply:&lt;/span&gt;&lt;span&gt;        [||||||||||||||||||||] 100 %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Sandbox:&lt;/span&gt;&lt;span&gt;      [&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;                    ]&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Peers:&lt;/span&gt;&lt;span&gt;        [||||||||||||||||||||] 100 %&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande prend du temps. Soyez patients. Mais à partir de la version 1.7 cela prend généralement 10/15min suivant la puissance de votre machine.&lt;/p&gt;
&lt;h4 id=&quot;option-slow&quot;&gt;Option &lt;code&gt;--slow&lt;/code&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;A partir de la version 1.3.0.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Télécharge lentement la blockchain pour les connexion à faible débit (&amp;lt; 150 ko/s). Permet d&#39;éviter des goulots d&#39;étranglement.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:443&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --slow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-nointeractive&quot;&gt;Option &lt;code&gt;--nointeractive&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Désactive l&#39;affichage avec barres de progression au profit d&#39;une sortie classique de commande.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;samp&gt;2017-04-10T08:31:42+02:00 - info: Try with g1.duniter.org:10901 4aCqwi
2017-04-10T08:31:42+02:00 - info: Sync started.
2017-04-10T08:31:42+02:00 - info: Getting remote blockchain info...
2017-04-10T08:31:42+02:00 - info: Connecting to g1.duniter.org...
2017-04-10T08:31:42+02:00 - info: Peers...&lt;/samp&gt;&lt;/p&gt;
&lt;h4 id=&quot;option-nopeers&quot;&gt;Option &lt;code&gt;--nopeers&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Désactive le téléchargement P2P ainsi que le téléchargement du listing des nœud du réseau.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:443&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Try with g1.duniter.org:10901 4aCqwi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Sync started.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Getting remote blockchain info...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Connecting to g1.duniter.org...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Downloading Blockchain...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - debug: dl starts from&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Getting chunck&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt; #36/36 from 9000 to 9023 on peer g1.duniter.org:10901&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T08:32:26+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: GOT chunck&lt;/span&gt;&lt;span class=&quot;z-7 z-i&quot;&gt; #36/36 from 9000 to 9023 on peer g1.duniter.org:10901&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-cautious&quot;&gt;Option &lt;code&gt;--cautious&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Force la vérification minutieuse de la validité de chaque bloc par rapport au règles du protocole.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:443&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --cautious&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-memory&quot;&gt;Option &lt;code&gt;--memory&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Réaliser la synchronisation en mémoire uniquement. La synchronisation ne sera donc pas stockée sur le disque dur. Cette option est utile pour une vérification rapide de l&#39;intégrité de la blockchain quand combinée à l&#39;option &lt;code&gt;--cautious&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:443&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --cautious --memory&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;demarrer-arreter-son-noeud&quot;&gt;Démarrer/Arrêter son nœud&lt;/h2&gt;
&lt;p&gt;Un nœud Duniter tourne généralement en tâche de fond. Duniter fourni plusieurs commandes afin d&#39;être démarré/arrêté dans différends modes de fonctionnement.&lt;/p&gt;
&lt;h3 id=&quot;start&quot;&gt;&lt;code&gt;start&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Démarre le nœud Duniter &lt;em&gt;sans interface graphique&lt;/em&gt;, en tâche de fond. Le seul moyen de communiquer avec le nœud en tant qu&#39;administrateur est de consulter ses logs avec &lt;code&gt;duniter logs&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Starting&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter_default daemon...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon started. PID:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1328&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;stop&quot;&gt;&lt;code&gt;stop&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Stoppe un nœud Duniter qui tournerait en tâche de fond. Si aucun nœud ne tourne, la commande ne fait rien.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; stop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Stopping&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter_default daemon...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon stopped.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;status&quot;&gt;&lt;code&gt;status&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Dit si le nœud est actuellement lancé en tâche de fond ou non.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; is running using PID 1832.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;restart&quot;&gt;&lt;code&gt;restart&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Raccourci pour &lt;code&gt;stop&lt;/code&gt; suivi d&#39;un &lt;code&gt;start&lt;/code&gt;. Si aucun nœud n&#39;était lancé, la commande équivaut alors à un simple &lt;code&gt;start&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; restart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon is not running&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Starting&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter_default daemon...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon started. PID:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1913&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;webstart&quot;&gt;&lt;code&gt;webstart&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Démarre le nœud Duniter &lt;em&gt;avec interface graphique&lt;/em&gt;, en tâche de fond.&lt;/p&gt;
&lt;p&gt;Le nœud est alors accessible graphiquement à l&#39;adresse &lt;a rel=&quot;external&quot; href=&quot;http://localhost:9220&quot;&gt;localhost:9220&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; webstart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Starting&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter_default daemon...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon started. PID:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 2878&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-webmhost&quot;&gt;Option &lt;code&gt;--webmhost&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Il est possible de remplacer l&#39;interface &lt;code&gt;localhost&lt;/code&gt; par l&#39;interface de votre choix.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; webstart&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --webmhost 192.168.1.35&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le nœud est alors accessible graphiquement à l&#39;adresse http://192.168.1.35:9220.&lt;/p&gt;
&lt;h4 id=&quot;option-webmport&quot;&gt;Option &lt;code&gt;--webmport&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Il est possible de remplacer le port &lt;code&gt;9220&lt;/code&gt; par le port de votre choix.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; webstart&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --webmport 9330&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le nœud est alors accessible graphiquement à l&#39;adresse http://localhost:9330.&lt;/p&gt;
&lt;h3 id=&quot;webrestart&quot;&gt;&lt;code&gt;webrestart&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Raccourci pour &lt;code&gt;stop&lt;/code&gt; suivi d&#39;un &lt;code&gt;webstart&lt;/code&gt;. Si aucun nœud n&#39;était lancé, la commande équivaut alors à un simple &lt;code&gt;webstart&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le nœud est alors accessible graphiquement à l&#39;adresse &lt;a rel=&quot;external&quot; href=&quot;http://localhost:9220&quot;&gt;localhost:9220&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; webrestart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Stopping&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter_default daemon...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon stopped.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;Starting&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter_default daemon...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter_default&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; daemon started. PID:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 2938&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;administration&quot;&gt;Administration&lt;/h2&gt;
&lt;h3 id=&quot;direct-start&quot;&gt;&lt;code&gt;direct_start&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Démarre le nœud &lt;em&gt;en direct&lt;/em&gt;, sans exécution en tâche de fond. Les logs de l&#39;application apparaitront en direct dans la console.&lt;/p&gt;
&lt;p&gt;Pour arrêter le nœud, réaliser la combinaison de touches &lt;code&gt;Ctrl^C&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; direct_start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T11:12:28+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info:&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; Server starting...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T11:12:28+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Node version:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 1.2.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;2017-04-10T11:12:28+02:00&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; - info: Node pubkey: 2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-keyprompt&quot;&gt;Option &lt;code&gt;--keyprompt&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Demande des identifiants secrets au démarrage de l&#39;application qui généreront le trousseau cryptographique en mémoire. Ce trousseau sera ensuite utilisé pendant toute la durée d&#39;exécution de l&#39;application et disparaîtront à son arrêt.&lt;/p&gt;
&lt;p&gt;Option utile pour ne pas stocker son trousseau dans un fichier.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; direct_start&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --keyprompt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;direct-webstart&quot;&gt;&lt;code&gt;direct_webstart&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Identique à &lt;code&gt;direct_start&lt;/code&gt;, mais démarre avec l&#39;interface graphique chargée.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; direct_webstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;reset-data&quot;&gt;&lt;code&gt;reset data&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Supprime toutes les &lt;em&gt;données&lt;/em&gt; du nœud : blockchain, identités, transactions, etc. Ne supprime pas la configuration.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; reset data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;reset-all&quot;&gt;&lt;code&gt;reset all&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Supprime toutes les données et toute la configuration du nœud. Équivalent à avoir une nouvelle installation.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; reset all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;logs&quot;&gt;&lt;code&gt;logs&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Affiche les dernières lignes de journaux de Duniter et affiche les nouvelles lignes en continu.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; logs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;config&quot;&gt;&lt;code&gt;config&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Permet de modifier une ou plusieurs valeurs de configuration par options.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --option1&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;valeur&lt;/span&gt;&lt;span&gt;1&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --option2 --option3&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;valeur&lt;/span&gt;&lt;span&gt;3&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nécessite un redémarrage du nœud pour que la nouvelle configuration soit prise en compte.&lt;/p&gt;
&lt;h4 id=&quot;option-upnp&quot;&gt;Option &lt;code&gt;--upnp&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Active l&#39;UPnP.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --upnp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-noupnp&quot;&gt;Option &lt;code&gt;--noupnp&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Désactive l&#39;UPnP.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --noupnp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-cpu-pourcentage&quot;&gt;Option &lt;code&gt;--cpu &amp;lt;pourcentage&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Définit le pourcentage de CPU disponible.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --cpu 0.5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure l&#39;utilisation CPU à 50%.&lt;/p&gt;
&lt;h4 id=&quot;option-ipv4-adresse&quot;&gt;Option &lt;code&gt;--ipv4 &amp;lt;adresse&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Configure l&#39;interface réseau IPv4 de la machine sur laquelle dialoguer.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ipv4 192.168.1.22&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure l&#39;écoute sur l&#39;interface réseau &lt;code&gt;192.168.1.22&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-ipv6-adresse&quot;&gt;Option &lt;code&gt;--ipv6 &amp;lt;adresse&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Configure l&#39;interface réseau IPv6 de la machine sur laquelle dialoguer.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ipv6&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;2a01:e35:8ae7:8bb0:2e0:4cff:feca:36&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure l&#39;écoute sur l&#39;interface réseau &lt;code&gt;2a01:e35:8ae7:8bb0:2e0:4cff:feca:36&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-port-numero&quot;&gt;Option &lt;code&gt;--port &amp;lt;numero&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Configure le port de la machine sur lequel dialoguer pour chaque interface (IPv4, IPv6).&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --port 10901&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure l&#39;écoute sur le port machine &lt;code&gt;10901&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-remote4-adresse&quot;&gt;Option &lt;code&gt;--remote4 &amp;lt;adresse&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Configure l&#39;adresse IPv4 distante de la machine.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ipv4 88.174.120.187&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure le nœud pour qu&#39;il se déclare disponible à l&#39;adresse &lt;code&gt;88.174.120.187&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-remote6-adresse&quot;&gt;Option &lt;code&gt;--remote6 &amp;lt;adresse&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Configure l&#39;adresse IPv6 distante de la machine.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --ipv6&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; 2a01:e35:8ae7:8bb0:2e0:4cff:feca:36&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure le nœud pour qu&#39;il se déclare disponible à l&#39;adresse &lt;code&gt;2a01:e35:8ae7:8bb0:2e0:4cff:feca:36&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-remotep-adresse&quot;&gt;Option &lt;code&gt;--remotep &amp;lt;adresse&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Configure le port distant de la machine.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --remotep 10901&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure le nœud pour qu&#39;il se déclare disponible sur le port &lt;code&gt;10901&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-addep-specification&quot;&gt;Option &lt;code&gt;--addep &amp;lt;specification&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Déclare une nouvelle interface de contact réseau inconnue de Duniter.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --addep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;ES_CORE_API g1.data.duniter.fr&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Attention :&lt;/strong&gt; cette commande doit être exécutée sur un seul nœud : toutes les interfaces inconnues doivent être déclarées sur celui-ci, au risque de tomber dans une boucle infinie de création/suppression d&#39;interfaces.&lt;/p&gt;
&lt;h4 id=&quot;option-remep-specification&quot;&gt;Option &lt;code&gt;--remep &amp;lt;specification&amp;gt;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Supprime une interface de contact réseau inconnue de Duniter qui a été préalablement ajoutée.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --remep&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;ES_CORE_API g1.data.duniter.fr&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Attention :&lt;/strong&gt; cette commande doit être exécutée sur un seul nœud : toutes les interfaces inconnues doivent être déclarées sur celui-ci, au risque de tomber dans une boucle infinie de création/suppression d&#39;interfaces.&lt;/p&gt;
&lt;h4 id=&quot;option-autoconf&quot;&gt;Option &lt;code&gt;--autoconf&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Regénère la configuration réseau de façon automatique et génère une paire de clé aléatoirement si celle-ci n&#39;existe pas.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; config&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --autoconf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;generer-un-bloc-manuellement&quot;&gt;Générer un bloc manuellement&lt;/h2&gt;
&lt;h3 id=&quot;gen-next&quot;&gt;&lt;code&gt;gen-next&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Génère le prochain bloc à partir des données en piscine et du bloc courant, réalise la preuve de travail pour la difficulté demandée puis soumet le bloc résultant à un nœud.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; gen-next&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --submit-host&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; g1.duniter.org&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --submit-port 10901 74&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande génère le prochain bloc, l&#39;envoie au nœud &lt;code&gt;g1.duniter.org:10901&lt;/code&gt; sur le port &lt;code&gt;10901&lt;/code&gt; et calcule la preuve de travail avec une difficulté de &lt;code&gt;74&lt;/code&gt; (empreinte débutant par 4 zéros).&lt;/p&gt;
&lt;h4 id=&quot;option-show&quot;&gt;Option &lt;code&gt;--show&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Affiche le bloc calculé &lt;em&gt;avant&lt;/em&gt; la réalisation de la preuve de travail et la soumission au réseau. Permet de contrôler son contenu.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; gen-next&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --submit-host&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; g1.duniter.org&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --submit-port 10901 74 --show&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;option-check&quot;&gt;Option &lt;code&gt;--check&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Modifie le comportement de la commande : celle-ci ne réalise plus de preuve de travail ni ne soumet le bloc au réseau. A la place, elle génère le bloc et vérifie si celui-ci est acceptable par un nœud.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; gen-next&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --show --check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;gen-root&quot;&gt;&lt;code&gt;gen-root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Génère le block#0 de façon automatique, en incluant un maximum de membres.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;gen-root&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter.org&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 10901 74&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;gen-root-choose&quot;&gt;&lt;code&gt;gen-root-choose&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Génère le block#0 en sélectionnant manuellement les membres à inclure&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;gen-root&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; duniter.org&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 10901 74&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;? Newcomers to add: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt; ◯&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; john&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt; ◯&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; dude404&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt; ◉&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sinogeek&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;❯◉&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; deviantime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt; ◯&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; kernel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt; ◯&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; vivide&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;options-transversales&quot;&gt;Options transversales&lt;/h2&gt;
&lt;p&gt;Ces options, si utilisées, doivent être &lt;em&gt;systématiquement&lt;/em&gt; fournies lors de futures commandes pour conserver leur application.&lt;/p&gt;
&lt;p&gt;Car ces options permettent de redéfinir temporairement (le temps d&#39;une commande) une variable globale de l&#39;application.&lt;/p&gt;
&lt;h4 id=&quot;option-home&quot;&gt;Option &lt;code&gt;--home&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Permet de redéfinir le dossier où sont stockées les données de l&#39;application. La valeur par défaut de cette option est &lt;code&gt;$HOME/.config/duniter/&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:10901&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --home&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; /tmp/duniter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande réalisera une synchronisation et stockera le résultat dans le dossier &lt;code&gt;/tmp/duniter/duniter_default&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-mdb&quot;&gt;Option &lt;code&gt;--mdb&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Permet de redéfinir le dossier où sont stockées les données de l&#39;application. La valeur par défaut de cette option est &lt;code&gt;duniter_default&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:10901&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --mdb&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; g-one&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande réalisera une synchronisation et stockera le résultat dans le dossier &lt;code&gt;$HOME/.config/duniter/g-one&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il est possible de combiner les 2 options :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; sync g1.duniter.org:10901&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --home&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; /tmp/duniter&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --mdb&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; g-one&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande réalisera une synchronisation et stockera le résultat dans le dossier &lt;code&gt;/tmp/duniter/g-one&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;option-keyfile&quot;&gt;Option &lt;code&gt;--keyfile&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Permet de fournir le trousseau cryptographique via un ficher YAML.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; start&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --keyfile&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; /tmp/key.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Avec un fichier &lt;code&gt;key.yml&lt;/code&gt; au format suivant:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;pub&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;EfJ5xHtwjxvF3Bq4GMeuKkKe5nmodQcqkvgVPZZT6gCF&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;sec&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;2vyztEUMgSgcidmLPprbR5pPUUFbGnTG99mdEMPiiRD6wVAm76AvjDDp5PypzMsTvLKX8UrJ5sQbCUCmxTWRtr9d&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;options-salt-passwd&quot;&gt;Options &lt;code&gt;--salt&lt;/code&gt;, &lt;code&gt;--passwd&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Ces options permettent d&#39;utiliser le trousseau cryptographique résultant de la valeur de ces deux options combinées.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; start&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --salt&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; abc&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --passwd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; def&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;options-keyn-keyr-keyp&quot;&gt;Options &lt;code&gt;--keyN&lt;/code&gt;, &lt;code&gt;--keyr&lt;/code&gt;, &lt;code&gt;--keyp&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;L&#39;utilisation de &lt;code&gt;--salt&lt;/code&gt; et &lt;code&gt;--passwd&lt;/code&gt; présupposent d&#39;autres paramètres cryptographiques nommés « N,r,p ». Leur valeur par défaut dans Duniter est « 4096,16,1 ».&lt;/p&gt;
&lt;p&gt;Les options &lt;code&gt;--keyN&lt;/code&gt;, &lt;code&gt;--keyr&lt;/code&gt;, &lt;code&gt;--keyp&lt;/code&gt; permettent de redéfinir précisément ces valeurs.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;duniter&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --salt&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; abc&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --passwd&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; def&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; --keyN 4096 --keyr 16 --keyp 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      </item>
      <item>
          <title>Refonte du site /fr !</title>
          <pubDate>Mon, 03 Apr 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/refonte-du-site/</link>
          <guid>https://duniter.fr/blog/refonte-du-site/</guid>
          <description xml:base="https://duniter.fr/blog/refonte-du-site/">&lt;h1 id=&quot;refonte-du-site-fr&quot;&gt;Refonte du site /fr !&lt;/h1&gt;
&lt;p&gt;Certains auront pu le remarquer depuis hier après-midi : la version française du site duniter.org a changé de look !&lt;/p&gt;
&lt;p&gt;En réalité, cela va plus loin qu&#39;un simple changement ergonomique. Petit tour du propriétaire.&lt;/p&gt;
&lt;h2 id=&quot;une-nouvelle-ergonomie&quot;&gt;Une nouvelle ergonomie&lt;/h2&gt;
&lt;p&gt;D&#39;abord, l&#39;ergonomie a été revue : nous souhaitions que le site soit plus attrayant et ne freine pas sa consultation. Quelques images supplémentaires et un agencement revu évitent un accueil trop austère :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/refonte/changement.png&quot; alt=&quot;Le site de duniter : avant et après&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;un-site-entierement-editable&quot;&gt;Un site entièrement éditable&lt;/h2&gt;
&lt;p&gt;Une des grandes nouveautés : le site est désormais &lt;a href=&quot;https://duniter.fr/wiki/contribuer/ameliorer-le-site/&quot;&gt;entièrement éditable&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Vous trouverez sur chacune des pages dans la barre latérale un bouton « Modifier la page sur GitHub » ou « Modifier l&#39;article sur GitHub ». Il ressemble à ceci :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/wiki/btn_modifier.png&quot; alt=&quot;Bouton &amp;quot;Modifier la page sur GitHub&amp;quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pourrez donc proposer des modifications ou même ajouter du nouveau contenu à ce site. Une simple validation de notre part, et voilà le site modifié !&lt;/p&gt;
&lt;p&gt;En espérant que cette nouvelle version vous plaise !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Améliorer le site</title>
          <pubDate>Fri, 31 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/ameliorer-le-site/</link>
          <guid>https://duniter.fr/wiki/contribuer/ameliorer-le-site/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/ameliorer-le-site/">&lt;h1 id=&quot;ameliorer-le-site&quot;&gt;Améliorer le site&lt;/h1&gt;
&lt;p&gt;Ce site est comme un logiciel libre : tout son code source est disponible et modifiable &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/websites/website_fr&quot;&gt;sur GitLab&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;Vous trouverez dans le pied de presque chacune des pages du site un bouton qui ressemble à celui-ci :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#&quot; class=&quot;btn btn-primary gitlab&quot;&gt;Modifiez cette page sur GitLab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En cliquant dessus, vous serez redirigé notre plateforme GitLab qui héberge le code source du site. &lt;em&gt;Vous pourrez donc le modifier&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;necessite-un-compte-github&quot;&gt;Nécessite un compte GitHub&lt;/h2&gt;
&lt;p&gt;Toutefois après avoir cliqué sur ce bouton, vous noterez rapidement que GitLab requiert d&#39;ouvrir un compte GitHub pour aller plus loin. Cela peut vous rebuter, mais sachez que vous n&#39;aurez besoin de créer ce compte qu&#39;une fois pour modifier toutes les pages de notre site (et même d&#39;autres sites proposant cette fonctionnalité).&lt;/p&gt;
&lt;p&gt;Ce fonctionnement &lt;strong&gt;permet à tous&lt;/strong&gt; de corriger une faute de frappe, une mauvaise tournure de phrase, ou même de proposer de nouveaux contenus sans attendre !&lt;/p&gt;
&lt;h2 id=&quot;est-soumis-a-moderation&quot;&gt;Est soumis à modération&lt;/h2&gt;
&lt;p&gt;Bien sûr, vous ne pouvez pas modifier le site sans contrôle de notre part. Mais sachez que grâce à GitHub, nous pouvons &lt;em&gt;très rapidement répondre&lt;/em&gt; à votre proposition : il nous suffit de cliquer sur un bouton, et hop ! vos modifications apparaissent dans les secondes qui suivent.&lt;/p&gt;
&lt;h2 id=&quot;comment-creer-une-nouvelle-page-un-nouvel-article&quot;&gt;Comment créer une nouvelle page, un nouvel article&lt;/h2&gt;
&lt;p&gt;Rédiger un nouveau contenu est un peu plus difficile, puisqu&#39;il faut créer un ou plusieurs nouveaux fichiers.&lt;/p&gt;
&lt;p&gt;Nous détaillerons cela un peu plus tard. Mais si vous vous sentez déjà à l&#39;aise avec GitHub, sachez qu&#39;ajouter un article sur ce blog revient simplement à ajouter un fichier au format &lt;code&gt;YYYY-MM-DD-nom-article.md&lt;/code&gt; dans le répertoire &lt;code&gt;content/&lt;/code&gt; pour un article (par exemple &lt;code&gt;2017-04-28-article-du-28-avril&lt;/code&gt;), ou un fichier &lt;code&gt;nom-de-la-page.md&lt;/code&gt; dans le répertoire &lt;code&gt;content/pages/&lt;/code&gt; ou l&#39;un de ses sous-répertoires selon la catégorie visée, de rédiger son contenu en s&#39;inspirant d&#39;autres articles déjà existants pour finalement envoyer une &lt;em&gt;pull request&lt;/em&gt; via le bouton dédié sur GitHub.&lt;/p&gt;
&lt;p&gt;De nôtre côté, la validation est toujours un simple bouton.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Ajouter/Retirer des interfaces spécifiques de pair</title>
          <pubDate>Fri, 31 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/interfaces-specifiques-de-pair/</link>
          <guid>https://duniter.fr/wiki/doc/interfaces-specifiques-de-pair/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/interfaces-specifiques-de-pair/">&lt;h1 id=&quot;ajouter-retirer-des-interfaces-specifiques-de-pair&quot;&gt;Ajouter/Retirer des interfaces spécifiques de pair&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Reprise d&#39;un &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/337#issuecomment-251380492&quot;&gt;commentaire sur le ticket GitHub #337&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;ajouter-une-interface&quot;&gt;Ajouter une interface&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;duniter config --addep &amp;quot;SUPER_ENDPOINT_ELASTIC_SEARCH cgeek.fr blablabla 21020&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce qui produit :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;version&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;currency&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;test_net&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;endpoints&amp;quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;BASIC_MERKLED_API cgeek.fr 88.174.120.187 2a01:e35:8ae7:8bb0:b468:a0c:a607:379f 9330&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;BASIC_MERKLED_API 88.174.120.187 9333&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;SUPER_ENDPOINT_ELASTIC_SEARCH cgeek.fr blablabla 21020&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;block&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;44041-0000297B14119AC6710D493D773821B11E016DBE317E778FF8B0B5BC347B8039&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;signature&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;tgNB44JiHBuP3G1DsQthkTFBrghNX7me1R5XACx15SQ1RC39yuqhaHWhy94rYttJRgsWNPOQPRmfuEDs6bM7BQ==&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;pubkey&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;supprimer-une-interface&quot;&gt;Supprimer une interface&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;duniter config --remep &amp;quot;SUPER_ENDPOINT_ELASTIC_SEARCH cgeek.fr blablabla 21020&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce qui produit :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;version&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-6&quot;&gt; 2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;currency&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;test_net&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;endpoints&amp;quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;BASIC_MERKLED_API cgeek.fr 88.174.120.187 2a01:e35:8ae7:8bb0:b468:a0c:a607:379f 9330&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    &amp;quot;BASIC_MERKLED_API 88.174.120.187 9333&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;block&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;44041-0000297B14119AC6710D493D773821B11E016DBE317E778FF8B0B5BC347B8039&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;signature&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;tgNB44JiHBuP3G1DsQthkTFBrghNX7me1R5XACx15SQ1RC39yuqhaHWhy94rYttJRgsWNPOQPRmfuEDs6bM7BQ==&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;  &amp;quot;pubkey&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; &amp;quot;HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;precautions&quot;&gt;Précautions&lt;/h2&gt;
&lt;p&gt;Une bonne pratique est de réaliser ces opérations &lt;strong&gt;exclusivement sur un seul nœud&lt;/strong&gt;, qui s&#39;occupera de gérer les interfaces spécifiques. Car si vous avez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un nœud qui ajoute l&#39;interface &lt;code&gt;EP1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;un &lt;em&gt;autre&lt;/em&gt; nœud qui supprime l&#39;interface &lt;code&gt;EP1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alors vous tomberez dans un &lt;a href=&quot;https://duniter.fr/wiki/doc/cles-partagees/#le-stock-de-blockstamp&quot;&gt;ping-pong infini&lt;/a&gt;,
ce qui consommera tout le stock disponible de tampons temporels pour émettre de nouvelles fiches de pair. Vous n&#39;aurez alors plus la possibilité de mettre à jour votre fiche de pair avant qu&#39;un nouveau bloc apparaisse.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Crédits</title>
          <pubDate>Wed, 29 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/about/credits/</link>
          <guid>https://duniter.fr/wiki/about/credits/</guid>
          <description xml:base="https://duniter.fr/wiki/about/credits/">&lt;h1 id=&quot;credits&quot;&gt;Crédits&lt;/h1&gt;
&lt;h2 id=&quot;images-et-logos&quot;&gt;Images et logos&lt;/h2&gt;
&lt;img src=&quot;/PELICAN/images/network.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/madebyoliver&quot; title=&quot;Madebyoliver&quot;&gt;Madebyoliver&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/share.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/madebyoliver&quot; title=&quot;Madebyoliver&quot;&gt;Madebyoliver&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/calendar.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.freepik.com&quot; title=&quot;Freepik&quot;&gt;Freepik&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/races.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.freepik.com&quot; title=&quot;Freepik&quot;&gt;Freepik&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/play.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/simpleicon&quot; title=&quot;SimpleIcon&quot;&gt;SimpleIcon&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/code.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/dave-gandy&quot; title=&quot;Dave Gandy&quot;&gt;Dave Gandy&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/box.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/pixel-buddha&quot; title=&quot;Pixel Buddha&quot;&gt;Pixel Buddha&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/coin.png&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/madebyoliver&quot; title=&quot;Madebyoliver&quot;&gt;Madebyoliver&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/coding.png&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/madebyoliver&quot; title=&quot;Madebyoliver&quot;&gt;Madebyoliver&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/user.png&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/madebyoliver&quot; title=&quot;Madebyoliver&quot;&gt;Madebyoliver&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/www.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;http://www.flaticon.com/authors/alfredo-hernandez&quot; title=&quot;Alfredo Hernandez&quot;&gt;Alfredo Hernandez&lt;/a&gt; from &lt;a href=&quot;http://www.flaticon.com&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/light.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;https://www.flaticon.com/authors/vectors-market&quot; title=&quot;Vectors Market&quot;&gt;Vectors Market&lt;/a&gt; from &lt;a href=&quot;https://www.flaticon.com/&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/networking.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;https://www.flaticon.com/authors/gregor-cresnar&quot; title=&quot;Gregor Cresnar&quot;&gt;Gregor Cresnar&lt;/a&gt; from &lt;a href=&quot;https://www.flaticon.com/&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;/PELICAN/images/coins.svg&quot; class=&quot;credits&quot;/&gt;
&lt;div&gt;Icons made by &lt;a href=&quot;https://www.flaticon.com/authors/smashicons&quot; title=&quot;Smashicons&quot;&gt;Smashicons&lt;/a&gt; from &lt;a href=&quot;https://www.flaticon.com/&quot; title=&quot;Flaticon&quot;&gt;www.flaticon.com&lt;/a&gt; is licensed by &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; title=&quot;Creative Commons BY 3.0&quot; target=&quot;_blank&quot;&gt;CC 3.0 BY&lt;/a&gt;&lt;/div&gt;
</description>
      </item>
      <item>
          <title>Comment fonctionne Duniter ?</title>
          <pubDate>Mon, 27 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/duniter/fonctionnement/</link>
          <guid>https://duniter.fr/faq/duniter/fonctionnement/</guid>
          <description xml:base="https://duniter.fr/faq/duniter/fonctionnement/">&lt;h1 id=&quot;comment-fonctionne-duniter&quot;&gt;Comment fonctionne Duniter ?&lt;/h1&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;la-creation-de-monnaie&quot;&gt;La création de monnaie&lt;/h2&gt;
&lt;p&gt;Duniter est un &lt;em&gt;logiciel&lt;/em&gt;. Son but est de permettre la production d&#39;une nouvelle valeur numérique (ou électronique) ayant toutes les caractéristiques d&#39;une &lt;a href=&quot;https://duniter.fr/wiki/monnaie-libre/&quot;&gt;monnaie libre&lt;/a&gt; ».&lt;/p&gt;
&lt;p&gt;Nom de code de cette nouvelle valeur : la &lt;strong&gt;Ğ1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La Ğ1 est désormais bien réelle : les toutes premières unités ont été créées le 8 mars 2017, et de nouvelles sont produites chaque jour par ses membres.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/concept/workflow.png&quot; alt=&quot;De l&amp;#39;utilisateur à la création de monnaie&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;le-code-de-la-monnaie&quot;&gt;Le code de la monnaie&lt;/h2&gt;
&lt;h3 id=&quot;qui-produit-la-monnaie&quot;&gt;Qui produit la monnaie&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Tout membre est co-producteur de la monnaie Ğ1&lt;/strong&gt; à travers le &lt;em&gt;Dividende Universel&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Le dividende universel est une création de monnaie à parts égales pour tous les membres, à la fois dans l&#39;espace et dans le temps.&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;un Dividende Universel doit se produire, chaque membre de la monnaie produit automatiquement grâce au logiciel Duniter sa propre part de monnaie nouvelle. La seule action requise pour bénéficier de ce droit de production via Dividende Universel est de devenir &lt;em&gt;membre de la Toile de confiance&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Dans Ğ1, le Dividende Universel est &lt;strong&gt;la seule et unique façon de créer de la monnaie&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;comment-sont-identifies-les-utilisateurs&quot;&gt;Comment sont identifiés les utilisateurs&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Tout membre doit être reconnu par la toile de confiance Ğ1&lt;/strong&gt; pour en faire partie.&lt;/p&gt;
&lt;p&gt;Ainsi, tout individu qui souhaite intégrer la toile de confiance Ğ1 devra produire, à l&#39;aide de logiciels, une identité qui devra être &lt;em&gt;reconnue&lt;/em&gt; par des membres existants de la toile de confiance.&lt;/p&gt;
&lt;p&gt;Cet acte de reconnaissance est appelé &lt;em&gt;certification&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;un-reseau-decentralise&quot;&gt;Un réseau décentralisé&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;La monnaie Ğ1 est décentralisée&lt;/strong&gt;, elle repose sur un enregistrement blockchain sur un réseau pair-à-pair.&lt;/p&gt;
&lt;p&gt;L&#39;ensemble des données de la monnaie Ğ1 est enregistré au sein d&#39;une &lt;em&gt;blockchain&lt;/em&gt;. Ainsi, la toile de confiance composée des identités membres et des certifications, ainsi que les transactions de monnaie sont enregistrées au sein d&#39;une base de donnée partagée, répliquée, et écrite de façon décentralisée.&lt;/p&gt;
&lt;p&gt;Par ailleurs, la blockchain Duniter &lt;a href=&quot;https://duniter.fr/faq/duniter/duniter-est-il-energivore/&quot;&gt;n&#39;incitant pas à la course à la puissance de calcul&lt;/a&gt;, on peut dire qu&#39;elle est relativement « écologique ».&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Comment obtenir des Ğ1</title>
          <pubDate>Mon, 27 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/g1/obtenir-des-g1/</link>
          <guid>https://duniter.fr/faq/g1/obtenir-des-g1/</guid>
          <description xml:base="https://duniter.fr/faq/g1/obtenir-des-g1/">&lt;h1 id=&quot;comment-obtenir-des-g1&quot;&gt;Comment obtenir des Ğ1&lt;/h1&gt;
&lt;h2 id=&quot;methode-ndeg1-en-echanger&quot;&gt;Méthode n°1 : en échanger&lt;/h2&gt;
&lt;p&gt;Que vous soyez un individu, une association, entreprise ou un robot, vous pouvez tout à fait vous procurer des unités de monnaie Ğ1.&lt;/p&gt;
&lt;p&gt;Au moment de l&#39;écriture de ces lignes, le 2 janvier 2020, il existe plus de &lt;strong&gt;12 millions de Ğ1&lt;/strong&gt; en circulation (soit environ &lt;strong&gt;5 000 Ğ1 par membre certifié&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Pour vous procurer des unités de monnaie Ğ1 il faut créer un portefeuille Ğ1, puis trouvez une personne prête à faire un échange.&lt;/p&gt;
&lt;p&gt;Oui mais un échange de quoi ?&lt;/p&gt;
&lt;p&gt;D&#39;unités Ğ1 (pour celui qui en possède) contre un bien ou service (pour celui qui en veut).&lt;/p&gt;
&lt;p&gt;En 2020, la plateforme la plus populaire pour échanger en des biens et services en Ğ1 est &lt;a rel=&quot;external&quot; href=&quot;https://www.gchange.fr/#/app/home&quot;&gt;ğchange&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une autre solution possible &lt;strong&gt;est d&#39;utiliser les réseaux sociaux tels &lt;a rel=&quot;external&quot; href=&quot;https://framasphere.org&quot;&gt;diaspora*&lt;/a&gt;&lt;/strong&gt; pour y poster vos annonces. Avec le hashtag #Ğ1, vous pourriez attirer quelques intéressés.&lt;/p&gt;
&lt;h2 id=&quot;methode-ndeg2-en-produire&quot;&gt;Méthode n°2 : en produire&lt;/h2&gt;
&lt;p&gt;Mais si vous êtes un individu ne produisant pas encore d&#39;unités Ğ1, sachez que &lt;em&gt;vous pourriez en produire vous-même&lt;/em&gt;. C&#39;est une propriété fondamentale de Ğ1 : tout individu peut produire sa part de monnaie sous réserve de devenir membre de la toile de confiance Ğ1.&lt;/p&gt;
&lt;p&gt;Devenir membre n&#39;est ni anodin ni instantané :&lt;/p&gt;
&lt;p&gt;Cette étape fait intervenir des humains et s&#39;effectue donc à temps humain. Devenir membre consiste à être reconnu par des personnes déjà membres de la toile ; c&#39;est ce que l&#39;on appele « être certifié ».&lt;/p&gt;
&lt;p&gt;Si vous recevez suffisamment de certifications (cinq minimum) et en bonne qualité (notion de distance), alors ces certifications seront agrégées à toutes celles déjà existantes et viendront augmenter la toile de confiance.&lt;/p&gt;
&lt;p&gt;Si donc vous souhaitez poursuivre et devenir membre de la toile, prenez tout d&#39;abord connaissances de &lt;strong&gt;&lt;a href=&quot;https://duniter.fr/wiki/g1/licence-g1/&quot;&gt;la licence de la monnaie Ğ1&lt;/a&gt;&lt;/strong&gt;. Vous pouvez aussi la télécharger pour en conserver une copie.&lt;/p&gt;
&lt;h3 id=&quot;comment-connaitre-l-etat-de-sa-demande-d-adhesion&quot;&gt;Comment connaître l&#39;état de sa demande d&#39;adhésion&lt;/h3&gt;
&lt;p&gt;Il ne suffit pas toujours d&#39;obtenir cinq certification pour devenir immédiatement certifié.&lt;/p&gt;
&lt;p&gt;Si certaines des personnes qui vous certifient ont émis d&#39;autres certifications avant d&#39;émettre celle vous concernant, vous entrez dans une file d&#39;attente.&lt;/p&gt;
&lt;p&gt;Vous pouvez voir cette file d&#39;attente, et connaître les certifications reçues sur &lt;a rel=&quot;external&quot; href=&quot;https://g1-monit.elois.org/willMembers?lg=fr&amp;amp;hideIdtyWithZeroCert=yes&quot;&gt;la page « willMembers » de ğ1-monit&lt;/a&gt;. Dans cette page, les membres qui sont le plus en haut ont le plus de chances de devenir membre à plus ou moins court terme.&lt;/p&gt;
&lt;h3 id=&quot;une-fois-membre&quot;&gt;Une fois membre...&lt;/h3&gt;
&lt;p&gt;Quand vous serez vous-même membre, vous pourrez alors &lt;a href=&quot;https://duniter.fr/faq/toile-de-confiance/certifier-de-nouveaux-membres/&quot;&gt;certifier de nouveaux membres&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;comment-se-familiariser-avec-les-monnaies-libres&quot;&gt;Comment se familiariser avec les monnaies libres&lt;/h2&gt;
&lt;p&gt;Nous vous conseillons d&#39;abord de vous essayer au &lt;em&gt;réseau de test&lt;/em&gt; et sa monnaie ĞTest en suivant &lt;a rel=&quot;external&quot; href=&quot;https://www.monnaielibreoccitanie.org/2017/01/24/nouvelle-monnaie-de-test-gtest/&quot;&gt;les tutoriels de l&#39;association Monnaie Libre Occitanie&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce faisant, vous ne prenez aucun risque : il n&#39;y a aucun enjeu dans cette monnaie, nous l&#39;avons conçue pour cela.&lt;/p&gt;
&lt;p&gt;Une fois suffisamment aguerri avec ĞTest, vous pourrez alors tenter de passer à Ğ1. Vous pourrez commencer par &lt;em&gt;vous rapprocher de personnes déjà membres de Ğ1 et vous connaissant&lt;/em&gt;, leurs certifications étant nécessaires pour devenir membre.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Contact</title>
          <pubDate>Mon, 27 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/about/contact/</link>
          <guid>https://duniter.fr/wiki/about/contact/</guid>
          <description xml:base="https://duniter.fr/wiki/about/contact/">&lt;h1 id=&quot;contact&quot;&gt;Contact&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pour un bug :&lt;/strong&gt; merci de suivre la procédure indiquée sur la page &lt;a href=&quot;https://duniter.fr/wiki/contribuer/rapporter-un-bug/&quot;&gt;Rapporter un bug&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;le-forum-monnaie-libre-fr&quot;&gt;Le &lt;a rel=&quot;external&quot; href=&quot;https://forum.monnaie-libre.fr&quot;&gt;forum monnaie-libre.fr&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;C&#39;est le forum a consulter si vous êtes nouveau et découvrez la monnaie libre.&lt;/p&gt;
&lt;p&gt;Vous devrez inscrire si vous souhaitez participer aux échanges écrits, mais la simple lecture ne requiert aucune inscription.&lt;/p&gt;
&lt;h2 id=&quot;le-forum-duniter-org&quot;&gt;Le &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;forum duniter.org&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Plus technique, ce forum est réservé &lt;strong&gt;au développement logiciel&lt;/strong&gt; de Duniter.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;&lt;img src=&quot;/PELICAN/images/contact/forum.png&quot; alt=&quot;Forum Duniter&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;le-salon-de-discussion-xmpp&quot;&gt;Le salon de discussion XMPP&lt;/h2&gt;
&lt;p&gt;Nous utilisons le salon XMPP &lt;code&gt;duniter@muc.duniter.org&lt;/code&gt; pour discuter en direct. Si vous avez besoin d&#39;un contact &lt;em&gt;immédiat&lt;/em&gt;, c&#39;est le bon endroit !&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A noter qu&#39;il y a toujours des utilisateurs sur ce salon, mais cela ne veut pas dire qu&#39;ils sont disponibles. Si vous n&#39;avez pas de réponse, soyez patients ! Ou allez faire un tour sur le forum !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous pouvez vous connecter en utilisant &lt;a rel=&quot;external&quot; href=&quot;https://chat.duniter.org&quot;&gt;chat.duniter.org&lt;/a&gt; (c&#39;est le plus simple), ou utiliser votre client XMPP favori comme &lt;a rel=&quot;external&quot; href=&quot;https://pidgin.im/&quot;&gt;Pidgin&lt;/a&gt; ou &lt;a rel=&quot;external&quot; href=&quot;http://psi-plus.com/&quot;&gt;Psi+&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://chat.duniter.org&quot;&gt;&lt;img src=&quot;/PELICAN/images/contact/chat.png&quot; alt=&quot;Chat Duniter&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;theorie-relative-de-la-monnaie&quot;&gt;Théorie Relative de la Monnaie&lt;/h2&gt;
&lt;p&gt;L&#39;auteur de la TRM peut vous répondre sur :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;son blog &lt;a rel=&quot;external&quot; href=&quot;http://creationmonetaire.info&quot;&gt;creationmonetaire.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;le &lt;a rel=&quot;external&quot; href=&quot;http://forum.duniter.org&quot;&gt;forum Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;la &lt;a rel=&quot;external&quot; href=&quot;https://groups.google.com/forum/?hl=fr#!forum/openudc&quot;&gt;liste de diffusion d&#39;OpenUDC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Qui sommes-nous ?</title>
          <pubDate>Mon, 27 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/about/qui-sommes-nous/</link>
          <guid>https://duniter.fr/wiki/about/qui-sommes-nous/</guid>
          <description xml:base="https://duniter.fr/wiki/about/qui-sommes-nous/">&lt;h1 id=&quot;qui-sommes-nous&quot;&gt;Qui sommes-nous ?&lt;/h1&gt;
&lt;p&gt;Nous sommes de simples citoyens, principalement français, s&#39;efforçant de produire une nouvelle valeur économique appelée « &lt;em&gt;monnaie libre&lt;/em&gt; », de forme numérique, et respectant les principes établis par la &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info/&quot;&gt;Théorie Relative de la Monnaie (TRM)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il n&#39;y a pour le moment aucune organisation officielle derrière Duniter, bien que le projet soit toutefois soutenu par la société &lt;em&gt;Art et Zerty&lt;/em&gt;, EURL détenue par le fondateur du logiciel Duniter Cédric Moreau alias &lt;em&gt;cgeek&lt;/em&gt;, et possédant la marque Duniter en France.&lt;/p&gt;
&lt;p&gt;Si le projet prend de l&#39;ampleur sur le long terme, la création d&#39;une association est déjà envisagée par ses initiateurs. La marque serait alors transmise à cette association.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Rapporter un bug</title>
          <pubDate>Mon, 27 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/rapporter-un-bug/</link>
          <guid>https://duniter.fr/wiki/contribuer/rapporter-un-bug/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/rapporter-un-bug/">&lt;h1 id=&quot;rapporter-un-bug&quot;&gt;Rapporter un bug&lt;/h1&gt;
&lt;p&gt;Il se peut que vous détectiez un bug sur l&#39;une des applications de Duniter ! Si c&#39;est le cas, &lt;strong&gt;merci de rédiger un rapport de bug&lt;/strong&gt;, comme expliqué ci-après.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;rapporter-un-bug-via-les-plateformes-dediees&quot;&gt;Rapporter un bug via les plateformes dédiées&lt;/h2&gt;
&lt;p&gt;C&#39;est la méthode à privilégier. &lt;em&gt;Vraiment, nous préférons celle-ci&lt;/em&gt; : &lt;strong&gt;c&#39;est notre liste officielle de bugs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vous devez d&#39;abord &lt;a rel=&quot;external&quot; href=&quot;https://github.com/join&quot;&gt;créer un compte GitHub&lt;/a&gt;, ce qui vous permettra par la suite de &lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/users/sign_in&quot;&gt;créer un compte sur notre GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois créé votre compte GitHub et éventuellement GitLab, allez sur le dépôt correspondant au projet pour lequel vous souhaitez rapporter un bug :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/nodes/typescript/duniter/issues&quot;&gt;Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/sakia/issues&quot;&gt;Sakia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://git.duniter.org/clients/cesium/cesium/issues&quot;&gt;Cesium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/silkaj/issues&quot;&gt;Silkaj&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Puis mettez un titre, et un descriptif de l&#39;erreur rencontrée :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/contribuer/ticket_gitlab.png&quot; alt=&quot;Créer un ticket sur le GitLab&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-warning&quot;&gt;
&lt;p&gt;&lt;strong&gt;N&#39;oubliez pas de valider en cliquant sur le bouton « Submit issue » !&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;rapporter-un-bug-via-le-forum&quot;&gt;Rapporter un bug via le forum&lt;/h2&gt;
&lt;p&gt;Si &lt;em&gt;vraiment&lt;/em&gt; vous vous sentez en difficulté pour saisir le ticket sur GitHub (c&#39;est pourtant une bonne occasion d&#39;apprendre !), vous pouvez également créer un sujet sur le forum Duniter :&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://forum.duniter.org/&quot;&gt;forum.duniter.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Veillez bien à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;donner un titre&lt;/li&gt;
&lt;li&gt;donner un descriptif&lt;/li&gt;
&lt;li&gt;sélectionner la catégorie « support »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://forum.duniter.org/&quot;&gt;&lt;img src=&quot;/PELICAN/images/contribuer/ticket_forum.png&quot; alt=&quot;Créer un ticket sur le forum&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Puis validez.&lt;/p&gt;
&lt;p&gt;Quelqu&#39;un vous répondra, puis il &lt;em&gt;nous faudra&lt;/em&gt; ensuite &lt;em&gt;saisir votre problème&lt;/em&gt; sur Gitlab. Mais bon, vous rapportez un bug, c&#39;est le plus important !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Ğ1 : c&#39;est parti !</title>
          <pubDate>Wed, 08 Mar 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/g1-go/</link>
          <guid>https://duniter.fr/blog/g1-go/</guid>
          <description xml:base="https://duniter.fr/blog/g1-go/">&lt;h1 id=&quot;g1-c-est-parti&quot;&gt;Ğ1 : c&#39;est parti !&lt;/h1&gt;
&lt;p&gt;Les pré-inscriptions à Ğ1 sont désormais terminées. En effet, nous venons officiellement de démarrer la blockchain : &lt;strong&gt;Ğ1 est donc désormais en plein fonctionnement !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La monnaie a démarré ce jour, le 8 mars 2017 à 16h32 UTC+1 et compte à cette heure :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;59 membres&lt;/strong&gt; initiaux&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;551 certifications&lt;/strong&gt; reliant ces membres&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;590,00 Ğ1&lt;/strong&gt; ont été produits via le 1er Dividende Universel&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8 transactions&lt;/strong&gt; ont dores et déjà été validées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 membres calculent des blocs&lt;/strong&gt; afin de faire fonctionner la monnaie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il ne tient donc plus qu&#39;à vous de l&#39;utiliser ! Pour le moment, seul &lt;a rel=&quot;external&quot; href=&quot;https://cesium.app/&quot;&gt;Cesium pour Ğ1&lt;/a&gt; est disponible. Le logiciel Sakia le sera également, mais plutôt d&#39;ici quelques jours.&lt;/p&gt;
&lt;h2 id=&quot;les-1eres-unites-g1&quot;&gt;Les 1ères unités Ğ1&lt;/h2&gt;
&lt;p&gt;Les toutes 1ères unités ont été produites immédiatement par les 59 membres initiaux, à raison de 10,00 Ğ1 par membre. D&#39;où une masse monétaire totale de 590,00 Ğ1. Les unités suivantes seront produites de la même manière, à travers un Dividende Universel quotidien (à 12h00) d&#39;un montant de 10,00 Ğ1.&lt;/p&gt;
&lt;p&gt;Ğ1 étant une monnaie libre, son Dividende Universel sera régulièrement et automatiquement réévalué (à la hausse dans le cas de Ğ1). La prochaine réévaluation se produira le 21 mars 2017, celles-ci ayant été calées sur les équinoxes terrestres pour s&#39;en rappeler aisément.&lt;/p&gt;
&lt;div class=&quot;note note-icon note-icon-small note-icon-ok note-block note-ok&quot;&gt;
&lt;p&gt;Note : Le DU&lt;sub&gt;Ğ1&lt;/sub&gt; est créé journalièrement, sur la base d’une augmentation aux équinoxes (21 mars, 21 septembre environ), pour un taux de croissance cible de c = 4,88% / équinoxe, selon la &lt;a href=&quot;http://www.creationmonetaire.info/2016/09/dug-et-dividende-universel-dordre-n.html&quot; target=&quot;_blank&quot;&gt;formulation différentielle d’ordre 2&lt;/a&gt; :&lt;br&gt;
&lt;span class=&quot;center-content&quot;&gt;&lt;b&gt;DU(t+1) = DU(t) + c² M/N / (182,625 jours)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/g1_start/rocket_2.jpg&quot; alt=&quot;La fusée Ğ1 est lancée ; elle est propulsée par Duniter&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-1ers-echanges&quot;&gt;Les 1ers échanges&lt;/h2&gt;
&lt;p&gt;Vous pouvez réaliser des échanges en monnaie libre dès maintenant : les 590,00 Ğ1 produits peuvent librement circuler de compte en compte au gré des transactions que vous réaliserez. Nous en avons déjà effectué huit sans difficulté.&lt;/p&gt;
&lt;h2 id=&quot;rejoindre-la-toile-de-confiance-g1&quot;&gt;Rejoindre la toile de confiance Ğ1&lt;/h2&gt;
&lt;p&gt;Si vous pensez pouvoir entrer dans la toile de confiance (ce qui nécessite des certifications) et que connaissez déjà les outils Cesium et Sakia, vous pouvez vous inscrire dès maintenant. Toutefois vous ne pourrez intégrer la toile avant 5 jours pour des raisons techniques protégeant la toile existante : mais au terme de ce délai, votre inscription pourra être prise en compte.&lt;/p&gt;
&lt;p&gt;Sinon, nous vous conseillons d&#39;attendre les prochains jours : nous ferons bientôt quelques articles explicatifs détaillant les modalités d&#39;entrée dans la monnaie.&lt;/p&gt;
&lt;p&gt;Sâchez toutefois que cela ne vous empêche pas de recevoir de la monnaie dès maintenant et réaliser des transactions : il vous faut simplement en recevoir de quelqu&#39;un qui en a déjà.&lt;/p&gt;
&lt;h2 id=&quot;qu-advient-il-de-gtest&quot;&gt;Qu&#39;advient-il de ĞTest ?&lt;/h2&gt;
&lt;p&gt;La monnaie de test continue de tourner. Il se peut qu&#39;elle nous dévoile encore quelques bugs, donc nous la maintenons pour le moment. Mais d&#39;ici quelques jours ou semaines, nous redémarrerons une nouvelle monnaie de test, parallèle à Ğ1 et tournant avec la même version du logiciel.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Attention : Duniter v1.0.0 et versions supérieures ne sont pas compatibles avec ĞTest ! N&#39;essayez donc pas de l&#39;installer, votre nœud ne fonctionnerait pas.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>Pré-inscriptions à Ğ1</title>
          <pubDate>Thu, 16 Feb 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/pre-inscriptions-g1/</link>
          <guid>https://duniter.fr/blog/pre-inscriptions-g1/</guid>
          <description xml:base="https://duniter.fr/blog/pre-inscriptions-g1/">&lt;h1 id=&quot;pre-inscriptions-a-g1&quot;&gt;Pré-inscriptions à Ğ1&lt;/h1&gt;
&lt;p&gt;La monnaie ĞTest, visant à tester les logiciels Duniter, Cesium et Sakia dans des conditions d&#39;utilisation quasi-réelles, a été lancée il y a bientôt un mois pour une durée prévue de deux mois. Nous sommes donc à mi-parcours.&lt;/p&gt;
&lt;p&gt;À cette occasion nous avons accueilli 67 membres, et une quinzaine de personnes est encore en attente pour participer. Par ailleurs, ces membres ont réalisé 689 transactions et donné 431 certifications soit à des membres existants, soit à des nouveaux venus.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/logos/sdc_trilogo.jpg&quot; alt=&quot;Logos Sakia, Duniter et Cesium&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Cette activité a permis de débusquer quelques bugs résiduels importants, mais aucun d&#39;entre eux ne remettait véritablement en cause la stabilité et la maturité des logiciels pour une utilisation « réelle ». Nous en venons donc à la suite logique de cette expérience : si tous les feux sont au vert, et alors que ĞTest montre ses limites (nous les avions prévues), il convient de passer à l&#39;étape supérieure.&lt;/p&gt;
&lt;p&gt;Nous n&#39;attendrons donc pas plus longtemps et allons &lt;em&gt;ouvrir les pré-inscriptions à une monnaie libre P2P dite « officielle »&lt;/em&gt;, nom de code : &lt;strong&gt;Ğ1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ce billet a pour but de vous guider dans ce processus.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vous pouvez commenter ce billet sur &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/pre-inscriptions-a-g1/1827&quot;&gt;ce sujet dédié du forum&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;qui-peut-se-pre-inscrire&quot;&gt;Qui peut se pré-inscrire ?&lt;/h2&gt;
&lt;p&gt;Les pré-inscriptions sont réservées à une partie des utilisateurs : &lt;strong&gt;participants aux monnaies de test (TestNet, ĞTest) et aux Rencontres des Monnaies Libres&lt;/strong&gt;. Par ailleurs, cinq certifications sont nécessaires pour être reconnu dans la toile de confiance. Il faudra donc remplir ces trois conditions pour avoir une pré-inscription valide.&lt;/p&gt;
&lt;p&gt;Si vous avez participé aux RML mais n&#39;avez pas participé aux tests, il vous est encore possible d&#39;essayer ĞTest afin de remplir cette condition. Dans tous les cas, il faudra aussi obtenir cinq certifications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Personne n&#39;échappera à ces trois conditions d&#39;entrée&lt;/strong&gt; : le choix des membres initiaux est une opération manuelle réalisée par nos soins, nous excluront toute personne ne répondant pas à ces critères. &lt;strong&gt;Les membres initiaux doivent se connaître physiquement, c&#39;est un pré-requis.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;comment-se-pre-inscrire&quot;&gt;Comment se pré-inscrire ?&lt;/h2&gt;
&lt;p&gt;Les outils sont les mêmes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://cesium.app/&quot;&gt;Cesium pour Ğ1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org/&quot;&gt;Sakia&lt;/a&gt; (version 0.30.8 ou supérieure) lancé avec l&#39;option &lt;code&gt;--currency g1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour ces pré-inscriptions, nous reprenons la même méthode que TestNet ou ĞTest : &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;reprenez votre demande du forum&lt;/a&gt; et mettez-la dans la catégorie « Currencies &amp;gt; Ğ1 », ou créez une nouvelle demande avec un lien vers l&#39;ancienne.&lt;/p&gt;
&lt;p&gt;Vous n&#39;êtes pas obligés d&#39;utiliser cette méthode, toutefois nous la conseillons pour avoir un peu de visibilité et d&#39;échanges entre les utilisateurs. Par ailleurs, nous vous &lt;strong&gt;conseillons fortement de lire&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/recommandations-de-securite-a-lire-avant-de-creer-votre-compte-g1/1829&quot;&gt;ce billet de recommandations&lt;/a&gt; pour choisir vos identifiants secrets.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vos identifiants secrets de TestNet ou ĞTest pouvaient être faibles (votre@email // toto61), mais nous vous incitons fortement à en choisir de nouveaux et bien plus difficiles à deviner pour Ğ1.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;combien-de-temps-durera-la-phase-de-pre-inscriptions&quot;&gt;Combien de temps durera la phase de pré-inscriptions ?&lt;/h2&gt;
&lt;p&gt;Nous avons prévu de la faire durer entre deux et trois semaines. Mais selon l&#39;affluence, nous pourrions avancer ou repousser l&#39;échéance. Vous pourrez suivre l&#39;évolution des inscriptions sur le forum, où nous commenterons l&#39;avancement et les décisions éventuelles d&#39;échéance.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-restreindre-les-pre-inscriptions&quot;&gt;Pourquoi restreindre les pré-inscriptions ?&lt;/h2&gt;
&lt;p&gt;Principalement pour deux raisons : avoir une toile &lt;em&gt;de confiance&lt;/em&gt;, c&#39;est-à-dire dont les identités sont connues et proches, et pour que les premiers utilisateurs soient d&#39;abord les plus motivés et autonomes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Une toile initiale de confiance : car la monnaie sera créée par les membres, et uniquement eux, la qualité de la toile est très importante : débuter avec une toile bien connue de tous permettra d&#39;étendre la confiance &lt;em&gt;ensuite&lt;/em&gt; à de nouveaux venus, et sereinement.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Des utilisateurs autonomes : car nous aurons certainement de nombreuses problématiques techniques à gérer, il convient que ce soient les membres les plus avertis qui transmettent leurs connaissances plutôt que les développeurs, et que cette connaissance s&#39;étende progressivement par la suite, d&#39;un nouveau venu à l&#39;autre. Ceux ayant participé à TestNet ou ĞTest sont donc tout indiqués !&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le but est d&#39;avancer progressivement mais sûrement vers notre destination : une monnaie qui tourne !&lt;/p&gt;
&lt;h2 id=&quot;qui-pourra-s-inscrire-par-la-suite&quot;&gt;Qui pourra s’inscrire par la suite ?&lt;/h2&gt;
&lt;p&gt;N&#39;importe qui, dans le cadre des règles de la toile de confiance. Ce qui signifie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;créer une identité sur la toile&lt;/li&gt;
&lt;li&gt;obtenir cinq certifications de cette identité par des membres actuels de la toile de confiance&lt;/li&gt;
&lt;li&gt;ne pas être à plus de cinq pas des membres référents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces conditions sont vérifiées par le logiciel, tout est automatisé. En revanche, l&#39;obtention des certifications &lt;em&gt;est une étape manuelle et humaine&lt;/em&gt; : vous devrez vous adresser à vos semblables pour cela, leur intervention personnelle et manuelle sera requise.&lt;/p&gt;
&lt;p&gt;Nous réaliserons une page dédiée à cette procédure une fois Ğ1 démarrée.&lt;/p&gt;
&lt;h2 id=&quot;une-personne-non-inscrite-pourra-t-elle-utiliser-g1&quot;&gt;Une personne non-inscrite pourra-t-elle utiliser Ğ1 ?&lt;/h2&gt;
&lt;p&gt;Oui, l&#39;inscription n&#39;est obligatoire que pour devenir membre : ce statut particulier est le seul à pouvoir &lt;em&gt;créer de la monnaie&lt;/em&gt; et certifier d&#39;autres membres.&lt;/p&gt;
&lt;p&gt;Mais il est tout à fait possible de se créer un compte qui ne fait que portefeuille : simplement, un tel compte ne pourra ni créer de monnaie ni certifier d&#39;autres comptes.&lt;/p&gt;
&lt;h2 id=&quot;une-entreprise-ou-association-pourra-t-elle-utiliser-g1&quot;&gt;Une entreprise ou association pourra-t-elle utiliser Ğ1 ?&lt;/h2&gt;
&lt;p&gt;Oui, de la même façon qu&#39;un non-membre : le compte peut alors recevoir et envoyer de la monnaie, et c&#39;est tout. Il s&#39;agit d&#39;un compte portefeuille.&lt;/p&gt;
&lt;h2 id=&quot;quels-sont-les-parametres-de-g1&quot;&gt;Quels sont les paramètres de Ğ1 ?&lt;/h2&gt;
&lt;p&gt;Cette partie est un peu technique : nous y détaillons le sens de chaque paramètre de la monnaie.&lt;/p&gt;
&lt;h3 id=&quot;nom-de-code-de-la-monnaie&quot;&gt;Nom de code de la monnaie&lt;/h3&gt;
&lt;p&gt;Il s&#39;agit de Ğ1, et plus techniquement &lt;code&gt;g1&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;inscription&quot;&gt;Inscription&lt;/h3&gt;
&lt;p&gt;Tout nouveau venu dispose d&#39;un délai de &lt;code&gt;deux mois&lt;/code&gt; pour créer son identité et entrer dans la toile de confiance. S&#39;il échoue dans ce délai, malgré l&#39;obtention de plusieurs certifications, il devra tout recommencer.&lt;/p&gt;
&lt;h3 id=&quot;dividende-universel&quot;&gt;Dividende Universel&lt;/h3&gt;
&lt;p&gt;Chaque membre de la monnaie produit quotidiennement et automatiquement une part nouvelle de monnaie, le Dividende Universel (DU).&lt;/p&gt;
&lt;p&gt;Ce DU démarrera à &lt;code&gt;10,00 Ğ1&lt;/code&gt;, puis verra sa valeur quotidiennement augmentée pour tendre vers un taux de croissance de la masse monétaire globale &lt;code&gt;c = 0,026 %/jour&lt;/code&gt;, soit environ &lt;code&gt;c = 10%/an&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dit autrement, la quantité totale de Ğ1 en circulation augmente de 10 % par an, et chaque utilisateur est co-créateur d&#39;une partie de ces 10 %.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cette augmentation est lente&lt;/strong&gt;. Le taux cible &lt;code&gt;c = 10%/an&lt;/code&gt; ne sera pas atteint avant plusieurs années d&#39;utilisation.&lt;/p&gt;
&lt;h3 id=&quot;nombre-de-certifications-pour-etre-membre&quot;&gt;Nombre de certifications pour être membre&lt;/h3&gt;
&lt;p&gt;Que ce soit pour devenir membre ou le rester, tout individu doit &lt;em&gt;en permanence&lt;/em&gt; bénéficier de &lt;code&gt;cinq certifications&lt;/code&gt; valides.&lt;/p&gt;
&lt;p&gt;Tout individu qui n&#39;aurait pas cinq certifications ne peut prétendre à entrer dans la toile de confiance. De même, tout membre qui se retrouverai avec quatre certifications du fait de la péremption de certifications précédentes se voit immédiatement exclu et devra à nouveau collecter les certifications manquantes pour devenir à nouveau membre.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les certifications d&#39;un membre exclu persistent : dont un membre se retrouvant avec quatre certifications n&#39;a besoin que d&#39;une seule nouvelle certification pour revenir dans la toile.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;stock-de-certifications&quot;&gt;Stock de certifications&lt;/h3&gt;
&lt;p&gt;Chaque membre dispose d&#39;un stock maximum de &lt;code&gt;100&lt;/code&gt; certifications. Ce stock est décrémenté à chaque certification émise et incrémenté chaque fois qu&#39;une certification périme.&lt;/p&gt;
&lt;h3 id=&quot;duree-de-validite-d-une-certification&quot;&gt;Durée de validité d&#39;une certification&lt;/h3&gt;
&lt;p&gt;Une certification périme selon deux modalités :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;en piscine, c&#39;est-à-dire avant d&#39;être inscrite en blockchain, une certification périme au bout de &lt;code&gt;deux mois&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;une fois inscrite en blockchain, une certification périme au bout de &lt;code&gt;deux ans&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Cela implique que lorsque vous certifiez une personne, c&#39;est pour une durée de &lt;code&gt;deux ans&lt;/code&gt;. Ne prenez donc pas cette opération à la légère !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Par ailleurs, il est possible de rejouer une certification : cela consiste à certifier à nouveau la même personne. Cette opération n&#39;est possible qu&#39;une fois la précédente certification périmée.&lt;/p&gt;
&lt;h3 id=&quot;duree-inter-certifications&quot;&gt;Durée inter-certifications&lt;/h3&gt;
&lt;p&gt;Le rythme maximum d&#39;écriture de certification est d’&lt;code&gt;une certification tous les cinq jours&lt;/code&gt;. C&#39;est-à-dire qu&#39;un membre peut émettre plusieurs certifications simultanément, mais celles-ci ne seront inscrites &lt;em&gt;au mieux&lt;/em&gt; qu&#39;au rythme d’une tous les cinq jours.&lt;/p&gt;
&lt;p&gt;Un membre émettant trois certifications verrait donc celles-ci inscrites au mieux au bout de dix jours :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la 1ère de façon immédiate&lt;/li&gt;
&lt;li&gt;la 2ème cinq jours plus tard&lt;/li&gt;
&lt;li&gt;la 3ème dix jours après la 1ère&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;renouvellement-d-adhesion&quot;&gt;Renouvellement d’adhésion&lt;/h3&gt;
&lt;p&gt;Tout membre est présent en toile pour une durée d’&lt;code&gt;un an&lt;/code&gt; (sous réserve de conserver cinq certifications minimum en permanence).&lt;/p&gt;
&lt;p&gt;À tout moment, le membre peut renouveler son adhésion pour une durée d’&lt;code&gt;un an&lt;/code&gt;. S&#39;il ne le fait pas, il sera exclu automatiquement au bout de cette échéance. Si &lt;code&gt;deux ans&lt;/code&gt; se sont écoulés depuis son dernier renouvellement (ou depuis son entrée si jamais renouvelé), alors le membre est considéré définitivement exclu : il ne pourra rentrer à nouveau qu&#39;à travers une toute nouvelle identité.&lt;/p&gt;
&lt;h3 id=&quot;distance&quot;&gt;Distance&lt;/h3&gt;
&lt;p&gt;Tout membre qui entre dans la toile de confiance ou se renouvelle doit respecter la règle de distance : il doit se trouver à un maximum de &lt;code&gt;cinq pas&lt;/code&gt; de &lt;code&gt;80 %&lt;/code&gt; des membres référents grâce aux certifications.&lt;/p&gt;
&lt;p&gt;Autrement dit, il doit exister pour au moins &lt;code&gt;80 %&lt;/code&gt; des membres référents, un chemin partant de chacun d&#39;eux menant au nouveau venu ou membre qui se renouvelle utilisant les certifications établies dans la toile.&lt;/p&gt;
&lt;p&gt;S&#39;il ne respecte pas cette règle, le nouveau venu ne peut pas être intégré à la toile, et celui qui tente de se renouveler ne peut pas le faire.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les membres référents sont les membres ayant émis et reçu suffisamment de certifications pour faire partie du calcul de distance. Le nombre de certifications dépend la taille de la toile. La formule est &lt;code&gt;PLAFOND(N^(1/5))&lt;/code&gt;, ainsi :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour une toile &amp;lt;= 32 membres : 2 certifications sont nécessaires&lt;/li&gt;
&lt;li&gt;Pour une toile &amp;lt;= 243 membres : 3 certifications sont nécessaires&lt;/li&gt;
&lt;li&gt;Pour une toile &amp;lt;= 1.024 membres : 4 certifications sont nécessaires&lt;/li&gt;
&lt;li&gt;Pour une toile &amp;lt;= 3.125 membres : 5 certifications sont nécessaires&lt;/li&gt;
&lt;li&gt;Pour une toile &amp;lt;= 7.776 membres : 6 certifications sont nécessaires&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;temps-moyen-de-generation-d-un-bloc&quot;&gt;Temps moyen de génération d’un bloc&lt;/h3&gt;
&lt;p&gt;Le temps entre l’écriture de deux blocs dans la blockchain est configurée pour être en moyenne de &lt;code&gt;cinq minutes&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;temps-de-reference&quot;&gt;Temps de référence&lt;/h3&gt;
&lt;p&gt;Le temps de référence est évalué comme la moyenne des temps locaux dans les &lt;code&gt;24&lt;/code&gt; derniers blocs.&lt;/p&gt;
&lt;h3 id=&quot;reevaluation-de-la-difficulte&quot;&gt;Réévaluation de la difficulté&lt;/h3&gt;
&lt;p&gt;La blockchain réévalue la difficulté commune tous les &lt;code&gt;12 blocs&lt;/code&gt;, afin d&#39;atteindre les cinq minutes par blocs en moyenne.&lt;/p&gt;
&lt;h3 id=&quot;rotation-de-l-ecriture&quot;&gt;Rotation de l’écriture&lt;/h3&gt;
&lt;p&gt;De façon permanente, &lt;code&gt;33 %&lt;/code&gt; des membres calculateurs de blocs sont exclus de l&#39;écriture de la blockchain.&lt;/p&gt;
&lt;h2 id=&quot;quel-avantage-a-faire-partie-des-membres-initiaux&quot;&gt;Quel avantage à faire partie des membres initiaux ?&lt;/h2&gt;
&lt;p&gt;Les membres initiaux ont deux avantages sur tous les autres lors du bloc#0, le bloc « genesis », celui qui fait tout démarrer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;toutes leurs certifications sont inscrites immédiatement&lt;/li&gt;
&lt;li&gt;la règle de distance ne leur est pas appliquée&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien sûr, ce « privilège » n&#39;existe qu&#39;à cet instant précis. Dès le bloc suivant, toutes les règles de la toile de confiance sont activées. Donc pour renouveler leur identité, les membres devront passer la règle de distance. De même, ils devront attendre cinq jours pour passer leur prochaine certification.&lt;/p&gt;
&lt;p&gt;À noter également : les membres initiaux sont les tout premiers utilisateurs à créer de la monnaie, le lendemain de la création du bloc#0.&lt;/p&gt;
&lt;h2 id=&quot;et-ma-part-de-monnaie&quot;&gt;Et ma part de monnaie ?&lt;/h2&gt;
&lt;p&gt;Duniter produit une monnaie libre, son but est précisément d&#39;assurer qu&#39;en moyenne, tout individu produise la même part de monnaie. Et donc, peu importe le moment où vous arrivez, vous produirez en moyenne la même part de monnaie au cours de votre existence.&lt;/p&gt;
&lt;p&gt;Bien sûr, un membre présent depuis dix ans aura produit relativement plus qu&#39;un membre présent depuis deux mois, mais au bout de 40 années la différence est totalement gommée.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour comprendre davantage ces propriétés de la monnaie libre, étudier la &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info&quot;&gt;Théorie Relative de la Monnaie&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;pourquoi-g1-est-dit-officiel&quot;&gt;Pourquoi Ğ1 est dit « officiel » ?&lt;/h2&gt;
&lt;p&gt;Ğ1 est dite « officielle » en ce que ses paramètres sont &lt;em&gt;compatibles&lt;/em&gt; avec une prise de poids économique. Cela ne dit donc rien quant à son évolution : notamment dans l&#39;hypothèse d&#39;une adoption de cette monnaie par cent utilisateurs au bout de dix ans, ou encore si le logiciel ou son protocole contenait des failles incompatibles avec un fonctionnement acceptable, alors il est bien évident que ce poids économique resterait négligeable voire inexistant.&lt;/p&gt;
&lt;p&gt;Ces précisions étant posées, vous êtes libre d&#39;adhérer à cette monnaie dans le respect des règles que nous avons développées pour protéger les membres participant déjà de sa production.&lt;/p&gt;
&lt;h2 id=&quot;faut-il-continuer-a-utiliser-gtest&quot;&gt;Faut-il continuer à utiliser ĞTest ?&lt;/h2&gt;
&lt;p&gt;ĞTest est actuellement la seule monnaie Duniter en cours de fonctionnement. Comme Ğ1 ne sera pas démarré avant deux ou trois semaines, si vous souhaitez tester la monnaie libre et ses outils, ĞTest est le meilleur moyen d&#39;y parvenir.&lt;/p&gt;
&lt;p&gt;De plus, nous pouvons encore y découvrir des bugs. Mais si son utilisation est arrêtée, alors il est certain que nous ne découvrirons rien !&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-le-nom-g1&quot;&gt;Pourquoi le nom Ğ1 ?&lt;/h2&gt;
&lt;p&gt;Le projet Duniter fait régulièrement un parallèle avec le lancement d&#39;une fusée, ĞTest n&#39;y a d&#39;ailleurs pas échappé avec son logo de lancement :&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/g1_start/rocket.jpg&quot; alt=&quot;La ĞTest propulsée par la fusée Duniter&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;De la même manière, Ğ1 fait allusion aux noms de fusées/lanceurs spatiaux : Ariane 1, Ares I, Saturn I, … et ici, c&#39;est le tout premier Ğ : c&#39;est donc Ğ1.&lt;/p&gt;
&lt;p&gt;Par ailleurs, Ğ fait référence à une notion de logique développée par l&#39;auteur de la Théorie Relative de la Monnaie, et participe d&#39;ailleurs au fondement de cette dernière et donc à la monnaie libre : plus d&#39;informations sur http://www.glibre.org&lt;/p&gt;
&lt;p&gt;À noter que Ğ1 est &lt;em&gt;nom de code&lt;/em&gt;, une façon de nommer la monnaie techniquement. La communauté d&#39;utilisateurs de Ğ1 peut donc librement décider du nom commun qui lui conviendra pour désigner cette monnaie.&lt;/p&gt;
&lt;h2 id=&quot;qui-controle-g1&quot;&gt;Qui contrôle Ğ1 ?&lt;/h2&gt;
&lt;p&gt;Ğ1 est une monnaie libre pair à pair : une fois lancée, nous (développeurs initiaux) n&#39;en avons plus le plein contrôle. Les utilisateurs sont co-responsable de cet outil et de son exécution logicielle.&lt;/p&gt;
&lt;p&gt;Pour faire un parallèle avec un État, les développeurs sont en quelque sorte le pouvoir législatif tandis que les utilisateurs sont le pouvoir exécutif.&lt;/p&gt;
&lt;p&gt;Ainsi donc, une monnaie libre pair à pair propulsée par Duniter ne peut plus être arrêtée sans un mouvement conjoint d&#39;une large majorité de ses utilisateurs.&lt;/p&gt;
&lt;p&gt;Enfin, Duniter, Sakia et Cesium étant des logiciels libres, les utilisateurs de Ğ1 bénéficient de l&#39;ensemble des libertés leur permettant de maintenir et utiliser leur monnaie commune.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Nouvelle monnaie GTest !</title>
          <pubDate>Mon, 23 Jan 2017 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/monnaie-gtest/</link>
          <guid>https://duniter.fr/blog/monnaie-gtest/</guid>
          <description xml:base="https://duniter.fr/blog/monnaie-gtest/">&lt;h1 id=&quot;nouvelle-monnaie-gtest&quot;&gt;Nouvelle monnaie GTest !&lt;/h1&gt;
&lt;p&gt;Depuis ce matin 11h, une nouvelle monnaie produite par Duniter a vu le jour : il s&#39;agit de &lt;strong&gt;GTest&lt;/strong&gt;, la dernière monnaie « de test » destinée à valider le code actuel de Duniter.&lt;/p&gt;
&lt;p&gt;Cette monnaie ne durera pas plus de 2 mois, mais est ouverte à tout utilisateur actif qui contribuerait à remonter suggestions et anomalies s&#39;il en détecte.&lt;/p&gt;
&lt;p&gt;Pour plus de détails, voir &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/lancement-officiel-de-gtest/1619&quot;&gt;l&#39;annonce officielle sur le forum&lt;/a&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Nouvelle version Duniter 0.40</title>
          <pubDate>Mon, 17 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/release-0-40/</link>
          <guid>https://duniter.fr/blog/release-0-40/</guid>
          <description xml:base="https://duniter.fr/blog/release-0-40/">&lt;h1 id=&quot;nouvelle-version-duniter-0-40&quot;&gt;Nouvelle version Duniter 0.40&lt;/h1&gt;
&lt;p&gt;Duniter passe de nouveau en version supérieure et se rapproche d&#39;une mise en exploitation ! Cette version permet de réaliser les derniers réglages techniques avant de se pencher sérieusement sur la mise en place d&#39;une monnaie libre utilisable en production.&lt;/p&gt;
&lt;p&gt;Pour plus de précisions concernant cette version et mettre à jour votre installation, &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/nouvelle-version-0-40-vers-un-protocole-dexploitation/1334&quot;&gt;dirigez-vous vers cette annonce&lt;/a&gt; réalisée sur le forum.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/protocol/synchro_04.png&quot; alt=&quot;Synchronize a Duniter node&quot; /&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Mise à jour du forum</title>
          <pubDate>Fri, 07 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/forum-update/</link>
          <guid>https://duniter.fr/blog/forum-update/</guid>
          <description xml:base="https://duniter.fr/blog/forum-update/">&lt;h1 id=&quot;mise-a-jour-du-forum&quot;&gt;Mise à jour du forum&lt;/h1&gt;
&lt;p&gt;Le forum &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;https://forum.duniter.org&lt;/a&gt; est actuellement en maintenance, nous tentons de nous passer de SparkPost pour l&#39;envoi des e-mails, ce service étant beaucoup trop restrictif.&lt;/p&gt;
&lt;p&gt;Nous mettrons à jour ce billet dès que le forum sera de nouveau disponible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Edit du 11 Octobre 2016 : Le forum est toujours disponible, mais soyez prévenus : nous pouvons le couper à n&#39;importe quel moment pour lancer nos scripts de maintenance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Edit du 15 Octobre 2016 : Maintenance terminée !&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
      <item>
          <title>Avoir plusieurs pairs partageant une même clé</title>
          <pubDate>Tue, 04 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/doc/cles-partagees/</link>
          <guid>https://duniter.fr/wiki/doc/cles-partagees/</guid>
          <description xml:base="https://duniter.fr/wiki/doc/cles-partagees/">&lt;h1 id=&quot;avoir-plusieurs-pairs-partageant-une-meme-cle&quot;&gt;Avoir plusieurs pairs partageant une même clé&lt;/h1&gt;
&lt;p&gt;Petit billet technique, vu que Moul m&#39;inspire le sujet dans &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/608&quot;&gt;ce ticket&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Attention, ce billet est de la technique pure et dure d&#39;un protocole encore peu connu, ce post est donc pour les plus acharnés.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;avoir-plusieurs-noeuds-partageant-un-meme-trousseau&quot;&gt;Avoir plusieurs nœuds partageant un même trousseau&lt;/h2&gt;
&lt;p&gt;Peut-être ne le savez-vous pas encore, mais il est &lt;em&gt;tout à fait possible d&#39;avoir plusieurs nœuds à soi qui calculent de concert&lt;/em&gt; le prochain bloc que vous seriez en mesure de calculer.&lt;/p&gt;
&lt;p&gt;En effet, vous avez simplement à inscrire les données de votre trousseau personnel dans l&#39;écran dédié de chacun de vos nœuds pour réaliser cette opération :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/keyring_change.png&quot; alt=&quot;Change keyring&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;quel-interet&quot;&gt;Quel intérêt ?&lt;/h3&gt;
&lt;p&gt;Avoir plusieurs nœuds avec votre trousseau personnel est strictement équivalent à avoir une puissance de calcul répartie sur chacun de vos nœuds. Plus vous avez de nœuds physiques différents, plus vous avez de puissance de calcul et êtes susceptibles de trouver le prochain bloc.&lt;/p&gt;
&lt;p&gt;L&#39;intérêt est à la fois de &lt;strong&gt;sécuriser davantage le réseau&lt;/strong&gt; en élevant la difficulté commune de la preuve de travail, mais cela vous donne aussi &lt;strong&gt;un avantage concurrentiel pour trouver la prochaine preuve&lt;/strong&gt;, et par conséquent recevoir davantage de récompense de services comme &lt;a rel=&quot;external&quot; href=&quot;http://remuniter.cgeek.fr&quot;&gt;Remuniter&lt;/a&gt;. Ou encore, au cas où l&#39;un de vos nœuds tombe, il y en a toujours d&#39;autres pour calculer : c&#39;est une sécurité supplémentaire.&lt;/p&gt;
&lt;h3 id=&quot;declarer-ses-noeuds&quot;&gt;Déclarer ses nœuds&lt;/h3&gt;
&lt;p&gt;Les développeurs de clients tels Sakia/Cesium/Silkaj, mais également les participants des RML6 savent que chaque pair du réseau, chaque nœud, est identifié par sa clé publique et une liste d&#39;interfaces techniques.&lt;/p&gt;
&lt;p&gt;Une fiche de pair ressemble à ceci (vous pouvez obtenir ce document dans Sakia en faisant un clic droit sur un nœud du réseau puis « Ouvrir dans le navigateur ») :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Version: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type: Peer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Currency: test_net&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: 43835-00000D9316C6A4A1C236A0A3CA58FC007B75829981DA08A0633AA622E26F2421&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Endpoints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_MERKLED_API cgeek.fr 88.174.120.187 2a01:e35:8ae7:8bb0:b468:a0c:a607:379f 9330&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_MERKLED_API 88.174.120.187 9333&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SJZe1JvGgWYibkiApJIiwLVbfB8LIuq4oPB+ejqnXNM5NqFdz9p1C5mXIpAA62c4f1JXIUQf5RhcvQdMMGGiAg==&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut y voir la clé publique qui rassemble les entités techniques, ici :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis la liste de ces entités ou nœuds :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_MERKLED_API cgeek.fr 88.174.120.187 2a01:e35:8ae7:8bb0:b468:a0c:a607:379f 9330&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_MERKLED_API 88.174.120.187 9333&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nous pouvons traduire ces 2 lignes en :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Il existe une interface BASIC_MERKLED_API disponible sur cgeek.fr [blabla …] port 9330&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Il existe une interface BASIC_MERKLED_API disponible sur 88.174.120.187 port 9333&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et donc, pour chaque nœud, une entrée est ajoutée ici.&lt;/p&gt;
&lt;h3 id=&quot;le-blockstamp&quot;&gt;Le blockstamp&lt;/h3&gt;
&lt;p&gt;Mais il existe aussi un champ très important, présent dans ce document mais également dans &lt;strong&gt;tout document Duniter&lt;/strong&gt;, ce que je nomme le &lt;em&gt;blockstamp&lt;/em&gt; (mot-valise de &lt;em&gt;blocktime&lt;/em&gt; et &lt;em&gt;timestamp&lt;/em&gt;) :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: 43835-00000D9316C6A4A1C236A0A3CA58FC007B75829981DA08A0633AA622E26F2421&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce champ est une date. Une date qui désigne un bloc précis de la chaîne de blocs : elle est composée d&#39;un premier nombre qui représente un n° de bloc, puis un condensat ou &lt;em&gt;hash&lt;/em&gt; de bloc qui est le condensat de ce même bloc. Étant donné que la chaîne de bloc est un historique représenté par des blocs, alors référer à l&#39;un d&#39;eux est exactement comme donner une date.&lt;/p&gt;
&lt;p&gt;Celle-ci est toutefois très particulière car l&#39;une de ses propriétés est &lt;em&gt;de ne pas être connue par avance&lt;/em&gt; : en effet, son condensat est justement ce que les nœuds du réseau cherchent à calculer à chaque itération, chaque instant de la chaîne de blocs, &lt;em&gt;et affecte directement le condensat suivant&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En effet, on parle de &lt;em&gt;chaîne de blocs&lt;/em&gt; justement car chaque bloc inscrit le condensat du précédent bloc dans son propre corps de document, qui est lui-même la source du condensat à trouver.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et cela est extrêmement intéressant : en demandant d&#39;inscrire cette date dans les documents Duniter, on s&#39;assure que ce document &lt;em&gt;n&#39;a pas pu être produit avant la date inscrite sur le bloc&lt;/em&gt;. En effet, répétons-le, le condensat n&#39;est pas connu par avance. Donc, nous disposons là d&#39;un puissant moyen de datation.&lt;/p&gt;
&lt;h3 id=&quot;le-stock-de-blockstamp&quot;&gt;Le stock de blockstamp&lt;/h3&gt;
&lt;p&gt;Et alors, quel est le lien avec nos nœuds ? Afin de se faire connaître du réseau, chaque nœud construit la fiche de pair que nous avons vu plus haut : celle-ci contient initialement &lt;strong&gt;uniquement l&#39;interface du nœud local&lt;/strong&gt;, qui se connaît bien évidemment lui-même, &lt;em&gt;mais n&#39;a aucune idée du fait que vous pouvez posséder plusieurs nœuds comme lui&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Si l&#39;on reprend ce scénario pour chaque nœud qui partage le même trousseau, alors nous avons un ensemble de nœuds qui vont se disputer la fiche de pair : en effet, imaginons être en possession de deux nœuds partageant un même trousseau, alors nous avons par exemple :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le nœud Na qui envoie sa fiche de pair Fa1, à la date D1 et sa clé publique P, avec l&#39;interface de Na :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Fiche partielle Fa1]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: P&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: D1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Endpoints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Na&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;le nœud Nb qui envoie sa fiche de pair Fb1, à la date D1 et sa clé publique P, avec l&#39;interface de Nb :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Fiche partielle Fb1]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: P&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: D1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Endpoints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Nb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les autres nœuds du réseau qui reçoivent les fiches Fa1 et Fb1, avec une même clé publique et une même date, n&#39;ont du coup &lt;em&gt;aucun moyen de discrimination&lt;/em&gt; pour choisir l&#39;une ou l&#39;autre de ces fiches comme étant légitime.&lt;/p&gt;
&lt;p&gt;Dès lors, un scénario possible est que Na, voyant la fiche Fb1 manifestement fausse s&#39;il l&#39;avait émise lui-même (il aurait émis Fa1, précisément), alors il incrémente la date et émet une nouvelle fiche Fa2, avec pour date D2 donc :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Fiche partielle Fa2]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: P&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: D2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Endpoints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Na&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour les autres nœuds du réseau, il y a là un discriminant : la fiche Fa2 est plus récente que Fb1, &lt;em&gt;car D2 est plus grand que D1&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Le réseau accepte donc Fa2, puis Nb voyant Fa2 manifestement faux de lui-même, agit pareillement à Na et émet Fb3 :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Fiche partielle Fb3]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: P&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: D3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Endpoints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Na&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et on boucle : Fa4, Fb5, Fa6, Fb7, ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oui mais voilà, le stock de dates (blockstamp) est limité.&lt;/strong&gt; En effet, la chaîne de blocs avance à son rythme, de 5 minutes par bloc, et il existe donc un nombre limité de dates consommables.&lt;/p&gt;
&lt;p&gt;Au-delà du fait que les nœuds jouent au ping-pong pour savoir qui aura raison, &lt;em&gt;in fine&lt;/em&gt; l&#39;un d&#39;entre eux ne pourra plus émettre de nouvelle fiche tant qu&#39;un nouveau bloc, et donc une nouvelle date, ne sera pas disponible.&lt;/p&gt;
&lt;h3 id=&quot;le-partage-du-stock&quot;&gt;Le partage du stock&lt;/h3&gt;
&lt;p&gt;Une solution possible pour ces deux malheureux nœuds, est en réalité &lt;em&gt;de supposer qu&#39;ils ne sont pas seuls&lt;/em&gt; et que, potentiellement, un autre pair similaire à eux (partageant le même trousseau) se montrera. Comment se montrera-t-il ? Par une fiche de pair.&lt;/p&gt;
&lt;p&gt;Concrètement, quand Na reçoit Fb1, il se dit « &lt;em&gt;Tiens, ce n&#39;est pas de moi car, étant donné ma configuration, je n&#39;aurais pas écrit cela. Je vais vérifier l&#39;adresse inscrite sur cette fiche, il s&#39;agit peut-être d&#39;un de mes semblables.&lt;/em&gt; ». Il établit le contact. S&#39;il n&#39;obtient aucune réponse de Nb, alors il considère qu&#39;il s&#39;agit d&#39;une erreur et émet Fa2 comme précédemment pour corriger le tir auprès du réseau qui pourrait tenter de contacter Na via Fb1, ce qui ne fonctionnerait pas, puisque Na possède l&#39;interface Na, pas Nb.&lt;/p&gt;
&lt;p&gt;Maiiiiis … si jamais Nb répond, alors Na est aux anges : il a trouvé un nœud partageant le même trousseau que lui ! Ce sont des alliés. Pour que chacun puisse être visible du réseau, et étant donné le problème du stock de blockstamp, &lt;em&gt;les 2 nœuds vont coopérer&lt;/em&gt;. Pour Na qui vient de recevoir Fb1, il va alors émettre une fiche Fab2 qui, comme son code l&#39;indique, &lt;em&gt;contiendra à la fois l&#39;interface Na et l&#39;interface Nb&lt;/em&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Fiche partielle Fab2]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PublicKey: P&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Block: D2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Endpoints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Na&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Nb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nb reçoit alors cette fiche Fab2 et, ne connaissant pas encore Na, répète l&#39;opération réalisée par Na et vérifie son existence. S&#39;il ne le trouve pas, il émettra une fiche Fb3, mais dans le cas contraire, &lt;strong&gt;il ne fera rien&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dans cet ultime cas, il ne consommera donc pas le stock de blockstamp commun à ces deux nœuds. Il l&#39;économisera et, sur une base régulière moins fréquente que l&#39;émission d&#39;un nouveau bloc, ira vérifier que Na est toujours présent et émettra une nouvelle fiche Fab3 le cas échéant (sinon, bien sûr, il émettra une fiche Fb3).&lt;/p&gt;
&lt;p&gt;Et bien sûr lorsque Na recevra Fab3, il réitère le processus de réception d&#39;une fiche de pair. Tant que Na et Nb se voient mutuellement, seul l&#39;un d&#39;eux émet et consomme un blockstamp pour mettre à jour la fiche de pair commune, ce qui permet à ce petit réseau de cohabiter et exister de concert parmi le réseau Duniter, tout en partageant le même trousseau et pouvant donc calculer simultanément leur preuve suivante.&lt;/p&gt;
&lt;p&gt;Dans notre exemple, nous n&#39;utilisons que 2 noeuds, mais vous pouvez bien entendu étendre le raisonnement à 3, 5, 10, 20, 50 nœuds ! Il y aura peut-être alors d&#39;autres effets non mesurés pour le moment, mais un réseau de 10 nœuds partageant un même trousseau devrait parfaitement tourner.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A noter que, si les 2 pairs possèdent &lt;em&gt;strictement les mêmes données&lt;/em&gt;, et jouent le &quot;Nonce&quot; de la preuve de travail à l&#39;identique (par exemple s&#39;ils ont un Nonce séquentiel à partir de zéro) alors ils calculeront exactement la même preuve, et donc ne tireront aucunement parti d&#39;être plusieurs. Toutefois, étant donné qu&#39;ils ont une fiche de pair indiquant clairement qu&#39;ils sont plusieurs, ils doivent pouvoir s&#39;adapter en conséquence.&lt;/p&gt;
&lt;p&gt;Ceci fait l&#39;objet du ticket &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/634&quot;&gt;#634&lt;/a&gt; fraîchement saisi alors que je rédige ce billet, me rendant compte du problème :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Voilà donc comment la déclaration des pairs du réseau Duniter fonctionne !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Sortie officielle de Duniter 0.20.0</title>
          <pubDate>Mon, 27 Jun 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/sortie-officielle-0-20-0/</link>
          <guid>https://duniter.fr/blog/sortie-officielle-0-20-0/</guid>
          <description xml:base="https://duniter.fr/blog/sortie-officielle-0-20-0/">&lt;h1 id=&quot;sortie-officielle-de-duniter-0-20-0&quot;&gt;Sortie officielle de Duniter 0.20.0&lt;/h1&gt;
&lt;p&gt;Maintenant que les &lt;a rel=&quot;external&quot; href=&quot;https://fr.duniter.org/rml7-liens-et-videos/&quot;&gt;RML 7 sont terminées&lt;/a&gt;, nous pouvons de nouveau nous concentrer sur l&#39;évolution des logiciels de l&#39;écosystème Duniter.&lt;/p&gt;
&lt;p&gt;Et aujourd&#39;hui est une date importante, car nous officialisons la livraison de &lt;strong&gt;Duniter dans sa version 0.20.0&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;Quelle est donc cette version, et quelle sera la suite ?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Si vous souhaitez utiliser cette nouvelle version sans plus attendre : suivez ce &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/install-a-duniter-node/900&quot;&gt;tutoriel d&#39;installation de Duniter (anglais)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;testnet-et-le-protocole-en-version-0-2&quot;&gt;TestNet et le protocole en version 0.2&lt;/h2&gt;
&lt;p&gt;Cela fait maintenant 2 mois que la nouvelle monnaie de test appelée « &lt;em&gt;TestNet&lt;/em&gt; » circule sur le réseau. Elle compte aujourd&#39;hui 81 membres se partageant et s&#39;échangeant les 810 dividendes qui constituent la monnaie, via les logiciels de paiement libres que sont &lt;a rel=&quot;external&quot; href=&quot;https://cesium.app&quot;&gt;Cesium&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org/&quot;&gt;Sakia&lt;/a&gt; et &lt;a rel=&quot;external&quot; href=&quot;https://play.google.com/store/apps/details?id=org.duniter.android&amp;amp;hl=fr&quot;&gt;Android&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cette monnaie est sous-tendue par le logiciel Duniter dans sa &lt;strong&gt;version 0.20.0&lt;/strong&gt;, qui malgré l&#39;annonce dans le présent billet, existe en réalité depuis plusieurs semaines : mais c&#39;est aujourd&#39;hui que nous l&#39;officialisons.&lt;/p&gt;
&lt;span class=&quot;center-content&quot;&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/protocol/board_02.png&quot; alt=&quot;Nombre de pas à 2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Duniter est désormais en version 0.20.0&lt;/em&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;Cette version du protocole est actuellement stable, de même que cette version du logiciel. Cela fait pratiquement 1 mois que nous autres, développeurs ou utilisateurs avancés du logiciel, ne sommes pas intervenus pour palier à un bug majeur ou a une instabilité.&lt;/p&gt;
&lt;p&gt;Dans les faits biensûr, des forks apparaissent régulièrement : c&#39;est-à-dire que le réseau se scinde en deux groupes qui ne sont plus d&#39;accords entre eux pour diverses raisons (latences réseau, bloc calculé simultanément, etc.). Mais cette scission ne dure jamais très longtemps, en général une heure, chaque pair disposant de mécanismes automatiques afin de rejoindre le consensus dès lors que celui-ci émerge. L&#39;expérience de ce dernier mois nous montre que ces mécanismes sont tout à fait fonctionnels et à l&#39;épreuve des aléas de connectivité réseau !&lt;/p&gt;
&lt;p&gt;Et donc grâce à cette version 0.20.0 de Duniter, le logiciel fonctionne, se montre stable, et le réseau d&#39;utilisateurs fait sa vie, &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/search?q=Demande%20de%20certification&quot;&gt;se reconnaît mutuellement&lt;/a&gt; et produit sa monnaie. D&#39;aucuns se demandent même pourquoi ne pas lancer tout de suite une monnaie libre ! C&#39;est dire l&#39;impression procurée par son utilisation !&lt;/p&gt;
&lt;p&gt;Même si nous devons tempérer ces ardeurs, puisqu&#39;il nous reste du travail comme vous le verrez ci-après, ces derniers résultats sont tout de même très positifs !&lt;/p&gt;
&lt;span class=&quot;center-content&quot;&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/protocol/sakia.png&quot; alt=&quot;Capture d&amp;#39;écran Sakia Wallet, vue onglet réseau&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Le réseau de pairs Duniter pour la monnaie TestNet&lt;/em&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;h2 id=&quot;vers-les-protocoles-0-3-et-0-4&quot;&gt;Vers les protocoles 0.3 et 0.4 !&lt;/h2&gt;
&lt;p&gt;Cette stabilité et les désormais nombreux utilisateurs de la monnaie (81 utilisateurs venus de tous horizons) nous donnent des ailes : nous préparons ainsi plusieurs évolutions importantes en vue de réaliser une première monnaie libre, et qui passeront par deux évolutions successives du protocole,  &lt;em&gt;a minima&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;la-version-0-3&quot;&gt;La version 0.3&lt;/h3&gt;
&lt;p&gt;Cette version du protocole sera rétro-compatible avec la version 0.2. C&#39;est-à-dire qu&#39;il ne sera pas nécessaire de démarrer une nouvelle monnaie pour l&#39;utiliser.&lt;/p&gt;
&lt;p&gt;Les changements apportés par cette version sont uniquement techniques :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apporter des limites explicites pour &lt;em&gt;tous les champs variables&lt;/em&gt;, comme le nombre de transactions possibles au sein d&#39;un bloc (évite une attaque par submersion)&lt;/li&gt;
&lt;li&gt;Faire disparaître le paramètre &lt;code&gt;blocksRot&lt;/code&gt; (correctif &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/441&quot;&gt;#441&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Empêcher la métastase des sources de sortie d&#39;une transaction (correctif &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/485&quot;&gt;#485&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Nécessiter un verrou pour consommer un montant de transaction (correctif &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter/issues/379&quot;&gt;#379&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Introduire la rétro-compatibilité protocolaire (gérer le passe de la version 0.2 à 0.3 du protocole, et généraliser cela pour une version &lt;code&gt;n&lt;/code&gt; à &lt;code&gt;n+1&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces changements sont énumérés ici afin notamment que les développeurs de clients comme Cesium, Sakia ou l&#39;application Android puissent anticiper ces changements et proposer aux utilisateurs des versions compatibles au moment du déploiement sur le réseau.&lt;/p&gt;
&lt;h3 id=&quot;la-version-0-4&quot;&gt;La version 0.4&lt;/h3&gt;
&lt;p&gt;Il s&#39;agira d&#39;une version majeure impactant directement les règles de la toile de confiance. En effet, nous étudions actuellement plus en profondeur les règles à implémenter pour espérer atteindre, un jour, le million d&#39;utilisateurs pour une monnaie réalisée via Duniter.&lt;/p&gt;
&lt;p&gt;Et cela demande de ne pas faire n&#39;importe quoi, au risque d&#39;aller droit dans le mur. Non seulement les règles doivent être claires et efficaces, mais les valeurs des paramètres doivent être correctement choisis. Il s&#39;agira de la dernière étape de nos développements dans la réalisation possible d&#39;une monnaie libre P2P.&lt;/p&gt;
&lt;p&gt;Cette version impactera aussi les logiciels clients, comme pour la version 0.3 du protocole, mais cette fois-ci au niveau des certifications. Cela ne devrait toutefois pas chambouler les pratiques (développeurs, rassurez-vous).&lt;/p&gt;
&lt;span class=&quot;center-content&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://cesium.app&quot;&gt;&lt;img src=&quot;/PELICAN/images/logos/cesium.png&quot; alt=&quot;Logo Cesium&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Logo de l&#39;application Cesium, application web cliente pour Duniter&lt;/em&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;h2 id=&quot;du-chemin-a-parcourir&quot;&gt;Du chemin à parcourir&lt;/h2&gt;
&lt;p&gt;Comme vous le voyez, il nous reste encore du chemin avant d&#39;en arriver à nos fins ! Et peut-être attendez-vous aussi, avec impatience, l&#39;émergence d&#39;une monnaie libre P2P ?&lt;/p&gt;
&lt;p&gt;Mais plutôt que d&#39;attendre, vous pouvez aussi &lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/contribute&quot;&gt;nous aider&lt;/a&gt; à votre échelle afin d&#39;accélérer les choses ! &lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/contact/&quot;&gt;Venez nous voir&lt;/a&gt; sur les &lt;a rel=&quot;external&quot; href=&quot;https://jappix.com/?r=duniter@muc.duniter.org&quot;&gt;salons de discussion&lt;/a&gt; (choisissez un pseudo) et &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;forum&lt;/a&gt;, nous vous répondrons !&lt;/p&gt;
&lt;p&gt;Car une monnaie libre n&#39;émergera pas toute seule, et même une fois réalisée, c&#39;est bien &lt;em&gt;vous&lt;/em&gt; qui produirez votre monnaie : ce n&#39;est pas un banquier qui le fera à votre place !&lt;/p&gt;
&lt;p&gt;Alors si vous comptez utiliser une monnaie libre, autant s&#39;y mettre dès maintenant ! &lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/try/&quot;&gt;Venez tester&lt;/a&gt;, venez développer, en deux mots : &lt;em&gt;venez participer&lt;/em&gt; !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>RML7 : les liens, les vidéos !</title>
          <pubDate>Wed, 08 Jun 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/rml7-liens-et-videos/</link>
          <guid>https://duniter.fr/blog/rml7-liens-et-videos/</guid>
          <description xml:base="https://duniter.fr/blog/rml7-liens-et-videos/">&lt;h1 id=&quot;rml7-les-liens-les-videos&quot;&gt;RML7 : les liens, les vidéos !&lt;/h1&gt;
&lt;p&gt;Les &lt;a rel=&quot;external&quot; href=&quot;http://www.duniter.fr/rml/&quot;&gt;7èmes Rencontres des Monnaies Libres&lt;/a&gt; viennent de se terminer, et peut-être n&#39;avez-vous pas pu les suivre ou avez manqué un épisode : qu&#39;à cela ne tienne, toutes les conférence ont été filmées !&lt;/p&gt;
&lt;p&gt;Voici donc l&#39;ensemble des liens et vidéos pour vous permettre de vivre ou revivre ces journées très intenses en échanges, et qui n&#39;interviennent que tous les 6 mois !&lt;/p&gt;
&lt;p&gt;Prochain rendez-vous dans environ 6 mois pour les RML8 à Toulouse, le site officiel, les dates et lieux seront indiqués prochainement sur ce blog.&lt;/p&gt;
&lt;h2 id=&quot;videos&quot;&gt;Vidéos&lt;/h2&gt;
&lt;p&gt;Toutes les vidéos sont disponibles sur la chaîne Youtube des Monnaies Libres, dans la &lt;a rel=&quot;external&quot; href=&quot;https://www.youtube.com/watch?v=vKlAQgYO9YM&amp;amp;list=PLpnzpufBlv-lgf8LDooi8vaWkOMGxR1C-&quot;&gt;liste spéciale RML7&lt;/a&gt; avec pas moins de &lt;strong&gt;15 heures de vidéos&lt;/strong&gt; :&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/vKlAQgYO9YM?list=PLr7acQJbh5rzgkXOrCws2bELR8TNRIuv0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;liens&quot;&gt;Liens&lt;/h2&gt;
&lt;h3 id=&quot;sites-et-plateformes&quot;&gt;Sites et plateformes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://duniter.org&quot;&gt;Blog officiel de Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.duniter.fr&quot;&gt;Site francophone de Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://forum.duniter.org&quot;&gt;Forum de Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://weblate.duniter.org&quot;&gt;Outil de traduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter&quot;&gt;Dépôts de code source des projets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tutoriels-de-contribution-technique&quot;&gt;Tutoriels de contribution technique :&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/contribuer-au-code-de-duniter/923&quot;&gt;Tutoriel de contribution à Duniter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/contribuer-au-code-de-sakia/964&quot;&gt;Tutoriel de contribution à Sakia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/contribuer-au-code-cesium/929&quot;&gt;Tutoriel de contribution à Cesium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/contribuer-au-code-de-duniter-app/932&quot;&gt;Tutoriel de contribution à l&#39;application Android&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;geconomicus&quot;&gt;Ğeconomicus&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://geconomicus.glibre.org&quot;&gt;Règles du jeu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/Geconomicus&quot;&gt;Dépôt officiel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;supports-de-conferences&quot;&gt;Supports de conférences&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;« &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/uploads/default/original/1X/2258efbf395f4fa8e09527fa3227719a539fa520.odp&quot;&gt;Architecture Réseau des Clients Duniter&lt;/a&gt; » par Gaël G.&lt;/li&gt;
&lt;li&gt;« &lt;a rel=&quot;external&quot; href=&quot;http://vit.free.fr/yeswiki/wakka.php?wiki=LesMonnaiesLibres&quot;&gt;Initiation aux Monnaies Libres&lt;/a&gt; » par Vincent Texier&lt;/li&gt;
&lt;li&gt;« &lt;a rel=&quot;external&quot; href=&quot;http://pjc76.free.fr/conf/&quot;&gt;Théorie Relative de la Monnaie, les monnaies libres 2.0&lt;/a&gt; » par Pierre-Jean Chancellier&lt;/li&gt;
&lt;li&gt;« &lt;a rel=&quot;external&quot; href=&quot;http://www.creationmonetaire.info/rml7/30sTRM/&quot;&gt;la TRM en 30 secondes&lt;/a&gt; » par Stéphane Laborde&lt;/li&gt;
&lt;li&gt;« &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/cesium/blob/master/doc/fr/cesium-pre-16-001-developpement_sous_Cesium-2016-06-03.odp?raw=true&quot;&gt;Cesium&lt;/a&gt; » par Benoît Lavenier&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Fonctionnement de la toile de confiance</title>
          <pubDate>Fri, 13 May 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/introduction-a-la-toile-de-confiance/</link>
          <guid>https://duniter.fr/blog/introduction-a-la-toile-de-confiance/</guid>
          <description xml:base="https://duniter.fr/blog/introduction-a-la-toile-de-confiance/">&lt;h1 id=&quot;fonctionnement-de-la-toile-de-confiance&quot;&gt;Fonctionnement de la toile de confiance&lt;/h1&gt;
&lt;p&gt;Duniter est un logiciel permettant de créer une monnaie libre au sens décrit dans la TRM (Théorie Relative de la Monnaie).  Cette théorie implique que les unités monétaires sont co-produites par chacun des membres d&#39;une même communauté.  Il est donc essentiel que les membres de la communauté soient bien identifiés et (re)connus.&lt;/p&gt;
&lt;p&gt;Dans un monde dépourvu de gens malhonnêtes, une simple déclaration d&#39;identité pourrait suffire pour devenir membre (et donc co-produire des unités monétaires).  Mais dans notre monde, s&#39;agissant de monnaie, des cas de triches sont susceptibles d’apparaître.&lt;/p&gt;
&lt;p&gt;En effet, il est tentant de s&#39;inscrire avec plusieurs identités et ainsi produire un surplus d&#39;unités monétaires à son avantage.  Ceci est d&#39;autant plus vrai qu&#39;il s&#39;agit d&#39;identités numériques et qu&#39;il est aisé d&#39;en créer autant que l&#39;on en souhaite.  On appelle cela une &lt;em&gt;« attaque sybil »&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Il convient donc de s&#39;assurer que les membres ne disposent que d&#39;une seule identité numérique.&lt;/p&gt;
&lt;h2 id=&quot;a-qui-faire-confiance&quot;&gt;À qui faire confiance ?&lt;/h2&gt;
&lt;p&gt;Comment s&#39;assurer que les membres ne disposent que d&#39;une seule identité numérique ? Quelle organisation est nécessaire ?&lt;/p&gt;
&lt;p&gt;Il existe deux types d&#39;organisations possibles : les organisations à tiers de confiance et les organisations auto-régulées.&lt;/p&gt;
&lt;p&gt;Pour illustrer l&#39;organisation à tiers de confiance, prenons l&#39;exemple du recensement de la population.  Ce sont les services de l&#39;état qui « créent » les identités et les enregistrent dans les différents fichiers (aka. bases de données) de l&#39;état. Les fonctionnaires agissent comme « tiers de confiance » au nom de l&#39;état. Les moyens de contrôles utilisés peuvent être des justificatifs administratifs (déclaration de la maternité, justificatifs de domicile, …). Ces moyens sont loin d&#39;être infaillibles puisqu&#39;il est trivial de créer des faux documents (et ainsi obtenir de vrais-faux papiers).  Ce système s&#39;appuie donc sur le système judiciaire pour dissuader les comportements frauduleux.&lt;/p&gt;
&lt;p&gt;Pour illustrer une organisation auto-régulée, nous pouvons utiliser l&#39;exemple de la file d&#39;attente.
Les personnes arrivent les unes après les autres et, bien que personne ne soit vraiment ravi d&#39;avoir à attendre son tour,  chacun respecte la règle, qui régit une file d&#39;attente ; l&#39;ordre de passage correspond à l&#39;ordre d&#39;arrivée.
Étant donné que chacun sait qui est arrivé avant et qui est arrivé après, chacun est en mesure de contrôler qu&#39;il n&#39;y a pas de fraude.
Enfreindre ces règles nous expose à une désapprobation sociale forte, et une exclusion de la file d&#39;attente.&lt;/p&gt;
&lt;h2 id=&quot;la-toile-de-confiance&quot;&gt;La toile de confiance&lt;/h2&gt;
&lt;p&gt;Duniter fait le choix d&#39;un système auto-régulé par ses membres.&lt;/p&gt;
&lt;p&gt;Rappelons l&#39;objectif qui est de s&#39;assurer que les individus ne puissent s&#39;enregistrer qu&#39;avec une seule identité numérique.&lt;/p&gt;
&lt;p&gt;Le système distingue deux états d&#39;identités numériques : les &lt;em&gt;identités membres&lt;/em&gt; et les &lt;em&gt;identités non-membres&lt;/em&gt;.  Seules les identités membres sont co-créatrices de monnaie.&lt;/p&gt;
&lt;p&gt;Chaque individu déjà membre est en capacité, à l&#39;aide d&#39;un document numérique signé, de certifier des identités (membres et non-encore-membres).  Cela revient à délivrer des &lt;strong&gt;certificats d&#39;authenticité&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ces certificats, donnés les uns aux autres, forment un maillage appelé « &lt;strong&gt;toile de confiance&lt;/strong&gt; ».  Cette toile de confiance est utilisé par Duniter pour déterminer qui est membre et qui ne l&#39;est pas.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/intro-wot/wot.png&quot; alt=&quot;Toile de confiance globale de la monnaie de test Méta Brouzouf en juin 2015&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-regles-de-fonctionnement-de-la-toile-de-confiance&quot;&gt;Les règles de fonctionnement de la toile de confiance&lt;/h2&gt;
&lt;p&gt;Les règles régissant la toile de confiance d&#39;une monnaie Duniter est paramétrée lors de la création (l&#39;initialisation) de cette monnaie, par ses fondateurs, et &lt;em&gt;ne peuvent pas être modifiés ultérieurement&lt;/em&gt;.  Il est donc important d&#39;y porter une attention particulière.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&#39;auto-déclaration d&#39;identité numérique&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un individu, s&#39;il souhaite devenir membre d&#39;une communauté, doit créer son identité numérique.&lt;/p&gt;
&lt;p&gt;Sur Duniter, une identité numérique est composée de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;une clé cryptographique privée, connue uniquement de l&#39;individu et donc    non diffusée sur le réseau, lui servant à signer des documents numériques&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;une clé cryptographique publique, connue de tous, permettant de vérifier    qu&#39;un document a été signé par la clé privée de l&#39;individu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;un pseudonyme&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&#39;auto-déclaration d&#39;identité à elle seule ne suffit pas pour devenir membre mais est la première étape du processus.&lt;/p&gt;
&lt;p&gt;Tout comme une carte d&#39;identité, une identité numérique a une &lt;strong&gt;durée de validité&lt;/strong&gt;.  Si elle n&#39;est pas renouvelée régulièrement, elle devient invalide.&lt;/p&gt;
&lt;p&gt;Dans une monnaie créée par Duniter, la durée maximale de validité d&#39;une identité membre est configurée avec le paramètre &lt;em&gt;msValidity (Membership expiry Delay)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les certifications&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour devenir membre, un individu doit collecter un certain nombre de certifications de la part de membres déjà existants.  Ces certifications ont une durée de validité. Pour conserver un statut membre, une identité numérique doit donc être continuellement re-certifiée par des individus membres.&lt;/p&gt;
&lt;p&gt;Le nombre de certifications nécessaires pour devenir membre est configuré avec le paramètre &lt;em&gt;sigQty (Min Required Certs)&lt;/em&gt;.  La durée de vie d&#39;une certification est configurée avec le paramètre &lt;em&gt;sigValidity (Cert Expiry Delay)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les protections anti-Sybil&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Des règles complémentaires sont mises en place pour assurer la sécurité de la toile de confiance contre un groupe d&#39;attaquants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le nombre de pas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un groupe d&#39;individus membres pourrait s&#39;entendre pour créer des identités fictives et les certifier pour leur permettre de devenir membres à leurs tour.  Plus encore, ils pourraient utiliser ces membres fictifs pour certifier de nouvelles identités fictives, créant ainsi un très grand nombre de membres illégitimes.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/intro-wot/attack-edges.jpg&quot; alt=&quot;Réseau Sybil&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour prévenir cette attaque, Duniter s&#39;assure que les membres soient suffisamment proches les uns des autres dans la toile de confiance.  Dans l&#39;exemple ci-dessous, le membre C est à deux pas (deux sauts) de A.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/intro-wot/graph_steps.jpg&quot; alt=&quot;Nombre de pas à 2&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;un individu est susceptible de devenir membre (c&#39;est-à-dire qu&#39;il a obtenu suffisamment de certifications), Duniter déroule le protocole de vérification suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les membres ayant émis suffisamment de certifications sont utilisés comme    « points de contrôle » (&lt;em&gt;membres référents&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le nombre de certifications qu&#39;il faut émettre &lt;strong&gt;et&lt;/strong&gt; recevoir dépend du nombre de membres en cours.  N est le nombre de membres, Y(N) est le nombre de certifications qu&#39;il faut émettre &lt;strong&gt;et&lt;/strong&gt; recevoir pour que le membre soit considéré « référent ».&lt;/p&gt;
&lt;p&gt;Pour qu&#39;une identité devienne membre, il faut qu&#39;il existe un chemin de &lt;em&gt;stepMax&lt;/em&gt; pas ou moins de &lt;em&gt;xpercent&lt;/em&gt; % des membres référents vers l&#39;identité considérée.&lt;/p&gt;
&lt;p&gt;Dans le cas de la monnaie Ğ1 &lt;em&gt;stepMax&lt;/em&gt;=&lt;code&gt;5&lt;/code&gt; et &lt;em&gt;xpercent&lt;/em&gt;=&lt;code&gt;0.8&lt;/code&gt; (80%)&lt;/p&gt;
&lt;p&gt;Y(N) = CEIL(N^(1/stepMax))&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Avec stepMax = 5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;N         Y(N)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1         1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2         2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;33        3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;244       4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1025      5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3126      6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7777      7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Limiter les pouvoirs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Afin de se protéger contre une création de membres sybils massive, les membres sont dotés d&#39;un stock limite de signatures.  Ce stock se vide à mesure que le membre émet des certifications, et se remplit à mesure que ces certifications expirent.&lt;/p&gt;
&lt;p&gt;Le stock de certifications est configuré avec le paramètre &lt;em&gt;sigstock&lt;/em&gt; (Max cert stock).&lt;/p&gt;
&lt;p&gt;De plus, afin d&#39;enrayer une éventuelle attaque, Duniter ne permet pas qu&#39;un membre puisse émettre plusieurs certifications simultanément.  Duniter les traite les unes après les autres en observant une pause entre chaque traitement.&lt;/p&gt;
&lt;p&gt;Cette période est configurée avec le paramètre &lt;em&gt;sigPeriod&lt;/em&gt; (Delay between two certs).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&#39;expiration des certifications en cours de traitement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une certification qui n&#39;a pas été traitée dans un certain laps de temps est détruite.  Cela se produit lorsque qu&#39;un membre émet de nombreuses signatures au même moment.  Duniter observant une pause entre chaque traitement, les certifications qui n&#39;ont pas eu le temps d’être traitées sont détruites.&lt;/p&gt;
&lt;p&gt;Ce laps de temps est configurable avec le paramètre &lt;em&gt;sigWindow&lt;/em&gt; (Cert Time Window).&lt;/p&gt;
&lt;p&gt;Il existe un paramètre similaire utilisé lors de l&#39;inscription de nouveaux membres.&lt;/p&gt;
&lt;p&gt;Comme vu précédemment, pour devenir membre un individu doit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;publier sa déclaration d&#39;identité&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;collecter un nombre de certifications suffisantes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;respecter la règle de distance (nombre de pas)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces trois étapes doivent être réalisées dans le laps de temps configuré par &lt;em&gt;idtyWindow&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;resume-des-regles-de-la-toile-de-confiance-tdc&quot;&gt;Résumé des règles de la toile de confiance (TdC)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pour devenir un nouveau membre CCM de la TDC Ğ1 il faut obtenir, dans les 2 mois qui suivent sa demande à devenir membre CCM, 5 certifications et respecter la règle de distance.&lt;/li&gt;
&lt;li&gt;La règle de distance consiste à se trouver, au travers de ces certifications, à une distance inférieure ou égale à 5 pas de 80% des membres référents de la TDC.&lt;/li&gt;
&lt;li&gt;Les membres référents de la TDC sont des membres qui ont reçu et émis un nombre minimum de certifications. Ce nombre varie en corrélation avec la variation du nombre total de membres (formule ci-dessus). Les membres référents sont donc les plus actifs dans le maillage des certifications de la TDC.&lt;/li&gt;
&lt;li&gt;Pour rester membre il faut renouveler son accord tous les 12 mois et s&#39;assurer d&#39;avoir toujours au moins 5 certifications actives et respectant la règle de distance.&lt;/li&gt;
&lt;li&gt;Chaque membre CCM peut émettre des certifications.&lt;/li&gt;
&lt;li&gt;Elles seront prisent en compte au rythme maximum d&#39;une tous les 5 jours.&lt;/li&gt;
&lt;li&gt;Au maximum, 100 certifications émises par un même compte peuvent être actives.&lt;/li&gt;
&lt;li&gt;Chaque certification est valable 2 ans.&lt;/li&gt;
&lt;li&gt;Le compte certifié peut forger des blocs dans la blockchain V1.&lt;/li&gt;
&lt;li&gt;Dans la V2 plusieurs de ces règles seront probablement gérées différement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;lexique&quot;&gt;Lexique&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Membre CCM : Membre Co-Créateur de Monnaie&lt;/li&gt;
&lt;li&gt;TDC : Toile De Confiance&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Fonctionnement de la toile de confiance</title>
          <pubDate>Fri, 13 May 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/toile-de-confiance/introduction-a-la-toile-de-confiance/</link>
          <guid>https://duniter.fr/wiki/toile-de-confiance/introduction-a-la-toile-de-confiance/</guid>
          <description xml:base="https://duniter.fr/wiki/toile-de-confiance/introduction-a-la-toile-de-confiance/">&lt;h1 id=&quot;fonctionnement-de-la-toile-de-confiance&quot;&gt;Fonctionnement de la toile de confiance&lt;/h1&gt;
&lt;p&gt;Duniter est un logiciel permettant de créer une monnaie libre au sens décrit dans la TRM (Théorie Relative de la Monnaie).  Cette théorie implique que les unités monétaires sont co-produites par chacun des membres d&#39;une même communauté.  Il est donc essentiel que les membres de la communauté soient bien identifiés et (re)connus.&lt;/p&gt;
&lt;p&gt;Dans un monde dépourvu de gens malhonnêtes, une simple déclaration d&#39;identité pourrait suffire pour devenir membre (et donc co-produire des unités monétaires).  Mais dans notre monde, s&#39;agissant de monnaie, des cas de triches sont susceptibles d’apparaître.&lt;/p&gt;
&lt;p&gt;En effet, il est tentant de s&#39;inscrire avec plusieurs identités et ainsi produire un surplus d&#39;unités monétaires à son avantage.  Ceci est d&#39;autant plus vrai qu&#39;il s&#39;agit d&#39;identités numériques et qu&#39;il est aisé d&#39;en créer autant que l&#39;on en souhaite.  On appelle cela une &lt;em&gt;« attaque sybil »&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Il convient donc de s&#39;assurer que les membres ne disposent que d&#39;une seule identité numérique.&lt;/p&gt;
&lt;h2 id=&quot;a-qui-faire-confiance&quot;&gt;À qui faire confiance ?&lt;/h2&gt;
&lt;p&gt;Comment s&#39;assurer que les membres ne disposent que d&#39;une seule identité numérique ? Quelle organisation est nécessaire ?&lt;/p&gt;
&lt;p&gt;Il existe deux types d&#39;organisations possibles : les organisations à tiers de confiance et les organisations auto-régulées.&lt;/p&gt;
&lt;p&gt;Pour illustrer l&#39;organisation à tiers de confiance, prenons l&#39;exemple du recensement de la population.  Ce sont les services de l&#39;état qui « créent » les identités et les enregistrent dans les différents fichiers (aka. bases de données) de l&#39;état. Les fonctionnaires agissent comme « tiers de confiance » au nom de l&#39;état. Les moyens de contrôles utilisés peuvent être des justificatifs administratifs (déclaration de la maternité, justificatifs de domicile, …). Ces moyens sont loin d&#39;être infaillibles puisqu&#39;il est trivial de créer des faux documents (et ainsi obtenir de vrais-faux papiers).  Ce système s&#39;appuie donc sur le système judiciaire pour dissuader les comportements frauduleux.&lt;/p&gt;
&lt;p&gt;Pour illustrer une organisation auto-régulée, nous pouvons utiliser l&#39;exemple de la file d&#39;attente.
Les personnes arrivent les unes après les autres et, bien que personne ne soit vraiment ravi d&#39;avoir à attendre son tour,  chacun respecte la règle, qui régit une file d&#39;attente ; l&#39;ordre de passage correspond à l&#39;ordre d&#39;arrivée.
Étant donné que chacun sait qui est arrivé avant et qui est arrivé après, chacun est en mesure de contrôler qu&#39;il n&#39;y a pas de fraude.
Enfreindre ces règles nous expose à une désapprobation sociale forte, et une exclusion de la file d&#39;attente.&lt;/p&gt;
&lt;h2 id=&quot;la-toile-de-confiance&quot;&gt;La toile de confiance&lt;/h2&gt;
&lt;p&gt;Duniter fait le choix d&#39;un système auto-régulé par ses membres.&lt;/p&gt;
&lt;p&gt;Rappelons l&#39;objectif qui est de s&#39;assurer que les individus ne puissent s&#39;enregistrer qu&#39;avec une seule identité numérique.&lt;/p&gt;
&lt;p&gt;Le système distingue deux états d&#39;identités numériques : les &lt;em&gt;identités membres&lt;/em&gt; et les &lt;em&gt;identités non-membres&lt;/em&gt;.  Seules les identités membres sont co-créatrices de monnaie.&lt;/p&gt;
&lt;p&gt;Chaque individu déjà membre est en capacité, à l&#39;aide d&#39;un document numérique signé, de certifier des identités (membres et non-encore-membres).  Cela revient à délivrer des &lt;strong&gt;certificats d&#39;authenticité&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ces certificats, donnés les uns aux autres, forment un maillage appelé « &lt;strong&gt;toile de confiance&lt;/strong&gt; ».  Cette toile de confiance est utilisé par Duniter pour déterminer qui est membre et qui ne l&#39;est pas.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/intro-wot/wot.png&quot; alt=&quot;Toile de confiance globale de la monnaie de test Méta Brouzouf en juin 2015&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-regles-de-fonctionnement-de-la-toile-de-confiance&quot;&gt;Les règles de fonctionnement de la toile de confiance&lt;/h2&gt;
&lt;p&gt;Les règles régissant la toile de confiance d&#39;une monnaie Duniter est paramétrée lors de la création (l&#39;initialisation) de cette monnaie, par ses fondateurs, et &lt;em&gt;ne peuvent pas être modifiés ultérieurement&lt;/em&gt;.  Il est donc important d&#39;y porter une attention particulière.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&#39;auto-déclaration d&#39;identité numérique&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un individu, s&#39;il souhaite devenir membre d&#39;une communauté, doit créer son identité numérique.&lt;/p&gt;
&lt;p&gt;Sur Duniter, une identité numérique est composée de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;une clé cryptographique privée, connue uniquement de l&#39;individu et donc    non diffusée sur le réseau, lui servant à signer des documents numériques&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;une clé cryptographique publique, connue de tous, permettant de vérifier    qu&#39;un document a été signé par la clé privée de l&#39;individu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;un pseudonyme&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&#39;auto-déclaration d&#39;identité à elle seule ne suffit pas pour devenir membre mais est la première étape du processus.&lt;/p&gt;
&lt;p&gt;Tout comme une carte d&#39;identité, une identité numérique a une &lt;strong&gt;durée de validité&lt;/strong&gt;.  Si elle n&#39;est pas renouvelée régulièrement, elle devient invalide.&lt;/p&gt;
&lt;p&gt;Dans une monnaie créée par Duniter, la durée maximale de validité d&#39;une identité membre est configurée avec le paramètre &lt;em&gt;msValidity (Membership expiry Delay)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les certifications&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour devenir membre, un individu doit collecter un certain nombre de certifications de la part de membres déjà existants.  Ces certifications ont une durée de validité. Pour conserver un statut membre, une identité numérique doit donc être continuellement re-certifiée par des individus membres.&lt;/p&gt;
&lt;p&gt;Le nombre de certifications nécessaires pour devenir membre est configuré avec le paramètre &lt;em&gt;sigQty (Min Required Certs)&lt;/em&gt;.  La durée de vie d&#39;une certification est configurée avec le paramètre &lt;em&gt;sigValidity (Cert Expiry Delay)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les protections anti-Sybil&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Des règles complémentaires sont mises en place pour assurer la sécurité de la toile de confiance contre un groupe d&#39;attaquants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le nombre de pas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un groupe d&#39;individus membres pourrait s&#39;entendre pour créer des identités fictives et les certifier pour leur permettre de devenir membres à leurs tour.  Plus encore, ils pourraient utiliser ces membres fictifs pour certifier de nouvelles identités fictives, créant ainsi un très grand nombre de membres illégitimes.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/intro-wot/attack-edges.jpg&quot; alt=&quot;Réseau Sybil&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour prévenir cette attaque, Duniter s&#39;assure que les membres soient suffisamment proches les uns des autres dans la toile de confiance.  Dans l&#39;exemple ci-dessous, le membre C est à deux pas (deux sauts) de A.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/intro-wot/graph_steps.jpg&quot; alt=&quot;Nombre de pas à 2&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&#39;un individu est susceptible de devenir membre (c&#39;est-à-dire qu&#39;il a obtenu suffisamment de certifications), Duniter déroule le protocole de vérification suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les membres ayant émis suffisamment de certifications sont utilisés comme    « points de contrôle » (&lt;em&gt;membres référents&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le nombre de certifications qu&#39;il faut émettre &lt;strong&gt;et&lt;/strong&gt; recevoir dépend du nombre de membres en cours.  N est le nombre de membres, Y(N) est le nombre de certifications qu&#39;il faut émettre &lt;strong&gt;et&lt;/strong&gt; recevoir pour que le membre soit considéré « référent ».&lt;/p&gt;
&lt;p&gt;Pour qu&#39;une identité devienne membre, il faut qu&#39;il existe un chemin de &lt;em&gt;stepMax&lt;/em&gt; pas ou moins de &lt;em&gt;xpercent&lt;/em&gt; % des membres référents vers l&#39;identité considérée.&lt;/p&gt;
&lt;p&gt;Dans le cas de la monnaie Ğ1 &lt;em&gt;stepMax&lt;/em&gt;=&lt;code&gt;5&lt;/code&gt; et &lt;em&gt;xpercent&lt;/em&gt;=&lt;code&gt;0.8&lt;/code&gt; (80%)&lt;/p&gt;
&lt;p&gt;Y(N) = CEIL(N^(1/stepMax))&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Avec stepMax = 5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;N         Y(N)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1         1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2         2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;33        3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;244       4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1025      5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3126      6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7777      7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Limiter les pouvoirs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Afin de se protéger contre une création de membres sybils massive, les membres sont dotés d&#39;un stock limite de signatures.  Ce stock se vide à mesure que le membre émet des certifications, et se remplit à mesure que ces certifications expirent.&lt;/p&gt;
&lt;p&gt;Le stock de certifications est configuré avec le paramètre &lt;em&gt;sigstock&lt;/em&gt; (Max cert stock).&lt;/p&gt;
&lt;p&gt;De plus, afin d&#39;enrayer une éventuelle attaque, Duniter ne permet pas qu&#39;un membre puisse émettre plusieurs certifications simultanément.  Duniter les traite les unes après les autres en observant une pause entre chaque traitement.&lt;/p&gt;
&lt;p&gt;Cette période est configurée avec le paramètre &lt;em&gt;sigPeriod&lt;/em&gt; (Delay between two certs).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&#39;expiration des certifications en cours de traitement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une certification qui n&#39;a pas été traitée dans un certain laps de temps est détruite.  Cela se produit lorsque qu&#39;un membre émet de nombreuses signatures au même moment.  Duniter observant une pause entre chaque traitement, les certifications qui n&#39;ont pas eu le temps d’être traitées sont détruites.&lt;/p&gt;
&lt;p&gt;Ce laps de temps est configurable avec le paramètre &lt;em&gt;sigWindow&lt;/em&gt; (Cert Time Window).&lt;/p&gt;
&lt;p&gt;Il existe un paramètre similaire utilisé lors de l&#39;inscription de nouveaux membres.&lt;/p&gt;
&lt;p&gt;Comme vu précédemment, pour devenir membre un individu doit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;publier sa déclaration d&#39;identité&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;collecter un nombre de certifications suffisantes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;respecter la règle de distance (nombre de pas)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces trois étapes doivent être réalisées dans le laps de temps configuré par &lt;em&gt;idtyWindow&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;resume-des-regles-de-la-toile-de-confiance-tdc&quot;&gt;Résumé des règles de la toile de confiance (TdC)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pour devenir un nouveau membre CCM de la TDC Ğ1 il faut obtenir, dans les 2 mois qui suivent sa demande à devenir membre CCM, 5 certifications et respecter la règle de distance.&lt;/li&gt;
&lt;li&gt;La règle de distance consiste à se trouver, au travers de ces certifications, à une distance inférieure ou égale à 5 pas de 80% des membres référents de la TDC.&lt;/li&gt;
&lt;li&gt;Les membres référents de la TDC sont des membres qui ont reçu et émis un nombre minimum de certifications. Ce nombre varie en corrélation avec la variation du nombre total de membres (formule ci-dessus). Les membres référents sont donc les plus actifs dans le maillage des certifications de la TDC.&lt;/li&gt;
&lt;li&gt;Pour rester membre il faut renouveler son accord tous les 12 mois et s&#39;assurer d&#39;avoir toujours au moins 5 certifications actives et respectant la règle de distance.&lt;/li&gt;
&lt;li&gt;Chaque membre CCM peut émettre des certifications.&lt;/li&gt;
&lt;li&gt;Elles seront prisent en compte au rythme maximum d&#39;une tous les 5 jours.&lt;/li&gt;
&lt;li&gt;Au maximum, 100 certifications émises par un même compte peuvent être actives.&lt;/li&gt;
&lt;li&gt;Chaque certification est valable 2 ans.&lt;/li&gt;
&lt;li&gt;Le compte certifié peut forger des blocs dans la blockchain V1.&lt;/li&gt;
&lt;li&gt;Dans la V2 plusieurs de ces règles seront probablement gérées différement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;lexique&quot;&gt;Lexique&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Membre CCM : Membre Co-Créateur de Monnaie&lt;/li&gt;
&lt;li&gt;TDC : Toile De Confiance&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Duniter aux 7èmes Rencontres des Monnaies Libres !</title>
          <pubDate>Tue, 10 May 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/duniter-sera-aux-rml7/</link>
          <guid>https://duniter.fr/blog/duniter-sera-aux-rml7/</guid>
          <description xml:base="https://duniter.fr/blog/duniter-sera-aux-rml7/">&lt;h1 id=&quot;duniter-aux-7emes-rencontres-des-monnaies-libres&quot;&gt;Duniter aux 7èmes Rencontres des Monnaies Libres !&lt;/h1&gt;
&lt;p&gt;Nous serons présents pour faire découvrir Duniter aux 7èmes rencontres des monnaies libres.  Rejoignez-nous ! Il suffit de remplir quelques informations du &lt;a rel=&quot;external&quot; href=&quot;https://docs.google.com/forms/d/1CekoZ4EpgU56vWU3IpYCUb3z28kHHjrtdLld7hjdPb8/viewform?c=0&amp;amp;w=1&quot;&gt;formulaire d&#39;inscription&lt;/a&gt; pour nous faire part de votre présence !&lt;/p&gt;
&lt;p&gt;Le programme détaillé est disponible sur le site de &lt;a rel=&quot;external&quot; href=&quot;http://www.duniter.fr/rml-programme/&quot;&gt;duniter.fr&lt;/a&gt;. Voici le résumé des activités prévues.&lt;/p&gt;
&lt;h2 id=&quot;resume-du-programme&quot;&gt;Résumé du programme&lt;/h2&gt;
&lt;h3 id=&quot;jeudi-2-et-vendredi-3-juin&quot;&gt;Jeudi 2 et vendredi 3 juin&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Conférences et ateliers techniques&lt;/strong&gt;&lt;/br&gt;  Cette partie est réservée aux informaticiens ou contributeurs des monnaies libres.&lt;/br&gt; Après une courte introduction sur le logiciel Duniter et ses clients, nous présenterons l&#39;environnement de développement. &lt;/br&gt; Nous organiserons ensuite de petits ateliers d&#39;utilisation et de modification des logiciels.&lt;/br&gt; L&#39;objectif étant de permettre à plus de monde d&#39;y contribuer afin de les améliorer sans attendre !&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/rml7/presentation.png&quot; alt=&quot;rml6&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;samedi-4-juin&quot;&gt;Samedi 4 juin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Expérimenter les monnaies libres (et non libres)&lt;/strong&gt; :&lt;/br&gt; &lt;strong&gt;Jeu libre &lt;a rel=&quot;external&quot; href=&quot;http://vtexier.github.io/Geconomicus/&quot;&gt;Ğeconomicus&lt;/a&gt;&lt;/strong&gt; : jeu grandeur nature de simulation économique et monétaire sur une durée de vie humaine (80 ans) simulant naissances, vies et morts de joueurs d’âges distincts (de 0 à 80 ans). Des vidéos résumant les jeux précédents sont disponibles sur &lt;a rel=&quot;external&quot; href=&quot;https://www.youtube.com/watch?v=R4SIO2VuC2A&amp;amp;list=PL0UDqLtXevvHY5rAyFtql5931VqYyRaoK&quot;&gt;youtube&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Atelier d&#39;économie&lt;/strong&gt; : &lt;/br&gt; Travaux sur PC pour approfondir la compréhension de la TRM sur des cas concrets :&lt;/br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Module Galilée : pour les nouveaux ayant déjà joué à Ğeconomicus   - Module Yoland Bresson : pour ceux ayant déjà réalisé le module Galilée&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Animé par Stéphane Laborde;&lt;/br&gt;   - Niveau requis : avoir déjà joué au jeu Ğeconomicus;&lt;/br&gt;   - Si possible, venir avec un ordinateur portable muni d&#39;un tableur.&lt;/br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/rml7/geconomicus.png&quot; alt=&quot;geconomicus&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conférence de vulgarisation et de présentation de la notion de monnaie libre, à 17h&lt;/strong&gt;&lt;/br&gt; &quot;La monnaie libre dans l’histoire des monnaies&quot;&lt;/br&gt; par Matthieu Bize, Carole Fabre et Pierre-Jean Chancellier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Soirée Débat &amp;amp; Concert au bar Le Rond Point&lt;/strong&gt;&lt;/br&gt; 2 rue du Val de Mayenne - Laval&lt;/br&gt; Posez vos questions sur les monnaies libres, autour d&#39;un verre .&lt;/p&gt;
&lt;h3 id=&quot;dimanche-5-juin&quot;&gt;Dimanche 5 Juin&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Prenez en main les monnaies libres !&lt;/strong&gt;&lt;/br&gt; Démonstration et travaux pratiques sur les logiciels de monnaie libre :  logiciel de bureau, applications web, sur téléphone...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conférence de vulgarisation et de présentation de la notion de monnaie libre à 14h&lt;/strong&gt;&lt;/br&gt; &quot;Une monnaie libre ? Pourquoi, comment ?&quot;&lt;/br&gt; par Vincent Texier&lt;/p&gt;
&lt;h2 id=&quot;envie-de-contribuer&quot;&gt;Envie de contribuer ?&lt;/h2&gt;
&lt;p&gt;Proposition de conférence, d&#39;atelier, d&#39;animations ludiques, etc. &amp;gt;&amp;gt; &lt;strong&gt;envoyez-nous vos propositions&lt;/strong&gt; à : &lt;a href=&quot;mailto:contact@le-sou.org&quot;&gt;contact@le-sou.org&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;plan-d-acces&quot;&gt;Plan d&#39;accès &lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/rml7/plan_technopole_laval.jpg&quot; alt=&quot;plan d&amp;#39;acces&quot; /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 id=&quot;hebergement&quot;&gt;Hébergement&lt;/h2&gt;
&lt;p&gt;L&#39;hébergement n&#39;est pas pris en charge; &lt;/br&gt; Liste des hôtels a proximité:&lt;/br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Première classe : Jeudi: 48€  Vendredi/Samedi : 39€         - 02 43 98 27 74 / Boulevard Bertrand du Guesclin, 53000 Laval&lt;/li&gt;
&lt;li&gt;B&amp;amp;B : Jeudi : 45€ Vendredi/Samedi : 40€                        - 08 92 78 80 49 / Rue Louis de Broglie, 53810 Changé&lt;/li&gt;
&lt;li&gt;Ibis Budget : Jeudi : 44€  Vendredi/Samedi : 37.40€        - 08 92 70 20 38 / 2 Rue Bernard Palissy, 53960 Bonchamp-lès-Laval&lt;/li&gt;
&lt;li&gt;Fasthotel : Jeudi:43.90€  Vendredi/Samedi : 32.90€         - 02 43 68 30 30 / Rue du Dr Paul Mer, 53000 Laval&lt;/li&gt;
&lt;li&gt;Bas du Gast (Auberge/hôtel) : 30€                                   - 02 43 49 22 79 / 6 Rue de la Halle aux Toiles, 53000 Laval&lt;/li&gt;
&lt;li&gt;F1 :27€                                                                             - 08 91 70 52 66 / Boulevard de Buffon, ZI des Touches, 53810 Changé&lt;/li&gt;
&lt;li&gt;Camping municipal pour tente et caravane : entre 2,50€ et 8€ la nuit  02 43 68 30 70&lt;/li&gt;
&lt;li&gt;Camping de Coupeau, rue Jean Cottereau, 53940 Saint-Berthevin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour toute demande contactez les organisateurs : contact (at) le-sou.org&lt;/p&gt;
&lt;h2 id=&quot;contact&quot;&gt;Contact&lt;/h2&gt;
&lt;p&gt;Les RML7 sont organisées par :&lt;/br&gt; &lt;strong&gt;L&#39;association Le Sou et ses partenaires&lt;/strong&gt;&lt;/br&gt;   - Email : &lt;strong&gt;contact (at) le-sou.org&lt;/strong&gt;&lt;/br&gt;   - Adresse :  &lt;strong&gt;22 résidence de la Filousière, 53100 Mayenne, FRANCE&lt;/strong&gt;&lt;/br&gt;   - Tel : (+33) 6 62 86 37 82 - www.le-sou.org&lt;/p&gt;
</description>
      </item>
      <item>
          <title>uCoin devient Duniter !</title>
          <pubDate>Sun, 24 Apr 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/ucoin-rename-duniter/</link>
          <guid>https://duniter.fr/blog/ucoin-rename-duniter/</guid>
          <description xml:base="https://duniter.fr/blog/ucoin-rename-duniter/">&lt;h1 id=&quot;ucoin-devient-duniter&quot;&gt;uCoin devient Duniter !&lt;/h1&gt;
&lt;p&gt;À partir d&#39;aujourd&#39;hui, et à l&#39;occasion de l&#39;arrivée du protocole 0.2, le projet &lt;em&gt;uCoin&lt;/em&gt; devient &lt;em&gt;Duniter&lt;/em&gt;. uCoin fut un nom choisi au démarrage par son créateur cgeek, et avec le recul nous estimions qu&#39;il ne représentait plus le logiciel que nous souhaitions développer.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-ucoin-ne-convenait-pas&quot;&gt;Pourquoi uCoin ne convenait pas ?&lt;/h2&gt;
&lt;p&gt;Le nom uCoin était là pour faire penser aux cryptomonnaies comme Bitcoin. Le U de uCoin (prononcez &quot;You&quot;) voulait faire passer l&#39;idée que c&#39;était &quot;Vous, l&#39;utilisateur, qui alliez créer la monnaie&quot;. Mais ce parallèle avec Bitcoin était mal choisi à plusieurs titres :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le terme « coin » laissait penser que uCoin était une monnaie, et plus   encore &lt;em&gt;une seule&lt;/em&gt; monnaie alors que le logiciel permet d&#39;en créer une   multitude&lt;/li&gt;
&lt;li&gt;le terme « you » pouvait faire penser à des monnaies individuelles, alors   qu&#39;une monnaie uCoin est commune et co-produite par ses utilisateurs, et   donc pas individuelle&lt;/li&gt;
&lt;li&gt;notre logiciel utilise certes une blockchain, mais celle-ci est   particulière au sens où il n&#39;y a pas de course à la puissance&lt;/li&gt;
&lt;li&gt;une monnaie nommée uCoin a vu le jour durant nos développements mais basée   sur Bitcoin, apportant donc une confusion vis-à-vis de notre projet &lt;em&gt;dont   elle ne fait pas partie&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dernier point mais non des moindres, trouver une &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/need-a-logo-for-ucoin/138&quot;&gt;idée de logo&lt;/a&gt; pour uCoin fut extrêmement difficile. Après plus d&#39;une centaine de commentaires sur le forum, nous n&#39;étions toujours pas satisfaits. Nous avons alors compris que le nom actuel ne permettait pas de communiquer les idées fondatrices du projet. Et depuis la sixième édition des rencontres des monnaies libres, nous étions à la recherche d&#39;un nom alternatif.&lt;/p&gt;
&lt;h2 id=&quot;presentons-duniter&quot;&gt;Présentons Duniter&lt;/h2&gt;
&lt;p&gt;« Duniter » pour « Dividend Uniter » : le logiciel qui &lt;em&gt;fait&lt;/em&gt; l&#39;unité Dividende.&lt;/p&gt;
&lt;p&gt;Le nom que nous cherchions devait faire passer plusieurs idées :&lt;/p&gt;
&lt;h3 id=&quot;concept-de-flux&quot;&gt;Concept de Flux&lt;/h3&gt;
&lt;p&gt;Ce concept est fondamental pour nous. En effet, nous prenons acte du fait que les humains ont une espérance de vie limitée, et que l&#39;arrivée et le départ d&#39;individus dans l&#39;économie forment un flux continu. Le logiciel prend en compte cet aspect à travers la forme de la monnaie et de ses membres, les individus.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/ucoin-rename-duniter/flux_comp.gif&quot; alt=&quot;flux&quot; /&gt;&lt;br/&gt; &lt;em&gt;Le flux humain en France de 1920 à 2020&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Le renouvellement au sein du flux &lt;em&gt;à travers l&#39;espérance de vie&lt;/em&gt; permet de déduire le taux de croissance monétaire impliquant une symétrie monétaire spatiale et temporelle entre les individus.&lt;/p&gt;
&lt;h3 id=&quot;concept-de-relativite&quot;&gt;Concept de Relativité&lt;/h3&gt;
&lt;p&gt;Un taux de croissance de 10 % fait grossir les nombres de 0,8 % par mois. Dans ce référentiel, il n&#39;est pas aisé de comparer des valeurs sur des années d&#39;écarts en comparant ces nombres. Mais dans notre logiciel, les individus émettent un dividende universel (abrégé « DU »). Celui-ci est stable et ne change pas : il vaut toujours 10 % de la masse monétaire. Ainsi, en comparant les nombres &lt;em&gt;relativement&lt;/em&gt; au DU créé, nous pouvons comparer et mesurer avec un référentiel stable dans le temps.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/ucoin-rename-duniter/flux_comp2.gif&quot; alt=&quot;Relative and Quantitative&quot; /&gt;  &lt;br/&gt;&lt;em&gt;La masse monétaire, les comptes, et les dividendes des dix membres&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;C&#39;est pourquoi « Duniter » signifie « Dividend Uniter », car ce nom souhaite évoquer l&#39;unité dividende particulière aux monnaies libres : le Dividende Universel ou « DU » .&lt;/p&gt;
&lt;h3 id=&quot;logiciel-de-generation-de-monnaies-au-pluriel&quot;&gt;Logiciel de génération de monnaies, au pluriel&lt;/h3&gt;
&lt;p&gt;Le nom du logiciel devait faire comprendre qu&#39;il permet de générer des monnaies libres. C&#39;est donc chacun, en initialisant son propre réseau Duniter, qui pourra créer et nommer une nouvelle monnaie. Le nom ne devait donc pas faire penser que c&#39;était un nom de &quot;monnaie&quot; mais un nom de &quot;logiciel&quot;. C&#39;est pourquoi le nouveau nom a une telle consonance et n&#39;évoque plus la monnaie de façon directe à travers la suppression du terme « coin ».&lt;/p&gt;
&lt;p&gt;Dividend Uniter, ou Duniter exprime ainsi mieux le concept d&#39;outil de création de monnaies libres par dividendes universels.&lt;/p&gt;
&lt;h2 id=&quot;logo-duniter&quot;&gt;Logo Duniter&lt;/h2&gt;
&lt;p&gt;Avec ce nouveau nom, plus évocateur, le logo a rapidement été trouvé. Il évoque les dunes de sables balayées par le vent.  La dune est un flux invisible, une entité perpétuelle. De nouveaux grains de sables alimentent constamment la dune représentée dans le logo Duniter, tandis que d&#39;autres sont emportés par le vent, faisant de celle-ci une entité changeante mais stable. Tout comme le flux des individus et de la monnaie.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/duniter-logo.png&quot; alt=&quot;Duniter logo&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;changements&quot;&gt;Changements&lt;/h2&gt;
&lt;h3 id=&quot;un-nouveau-protocole&quot;&gt;Un nouveau protocole&lt;/h3&gt;
&lt;p&gt;Le changement de nom est l’occasion pour nous d&#39;utiliser une nouvelle version du protocole (0.2), non compatible avec le précédent (0.1). Duniter devient la nouvelle implémentation de référence qui corrige et améliore son ancêtre uCoin de façon décisive.&lt;/p&gt;
&lt;p&gt;Ce protocole permet notamment &lt;a rel=&quot;external&quot; href=&quot;http://duniter.org/transactions-0-2-overview/&quot;&gt;l&#39;échange inter-monnaies&lt;/a&gt; &lt;em&gt;sans tiers de confiance&lt;/em&gt;, fonctionnalité particulièrement intéressante pour convertir une monnaie en une autre facilement, librement et de manière totalement sécurisée.&lt;/p&gt;
&lt;h3 id=&quot;une-interface-graphique&quot;&gt;Une interface graphique !&lt;/h3&gt;
&lt;p&gt;Duniter introduira l&#39;ajout d&#39;une interface graphique pour l&#39;utilisation du logiciel, dont vous pouvez voir un aperçu ci-dessous ! &lt;em&gt;Enfin&lt;/em&gt;, le logiciel s&#39;ouvre à un plus vaste panel d&#39;utilisateurs que les seuls habitués de la console Linux.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/ucoin-rename-duniter/board.png&quot; alt=&quot;Duniter UI&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;une-nouvelle-monnaie&quot;&gt;Une nouvelle monnaie !&lt;/h3&gt;
&lt;p&gt;Nous allons prochainement démarrer une nouvelle monnaie. Celle-ci aura pour but de permettre une utilisation en conditions réelles : il s&#39;agira d&#39;une monnaie &lt;strong&gt;expérimentale&lt;/strong&gt; à l&#39;instar du Bitcoin il y a 7 ans.&lt;/p&gt;
&lt;p&gt;Le lancement sera annoncé sur les blog, forum, groupes de discussion, Diaspora*, Twitter et autres, suivez-nous donc pour être informés au plus tôt ! Et pour les plus impatients, vous pouvez aussi passer sur le &lt;a rel=&quot;external&quot; href=&quot;https://chat.duniter.org&quot;&gt;salon XMPP&lt;/a&gt; où vous pourrez obtenir les toutes dernières informations en date .&lt;/p&gt;
&lt;h3 id=&quot;migration-de-nos-outils&quot;&gt;Migration de nos outils&lt;/h3&gt;
&lt;p&gt;Le nom du projet changeant, les adresses web de nos outils changent également :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dépôts de développements : https://github.com/ucoin-io –&amp;gt; https://github.com/duniter&lt;/li&gt;
&lt;li&gt;Site web : http://ucoin.io –&amp;gt;  http://duniter.org&lt;/li&gt;
&lt;li&gt;Forum : https://forum.ucoin.io –&amp;gt; https://forum.duniter.org&lt;/li&gt;
&lt;li&gt;Traduction : http://weblate.ucoin.io –&amp;gt; http://weblate.duniter.org&lt;/li&gt;
&lt;li&gt;Hébergement de notre serveur XMPP, salon de discussion :  ucoin@muc.jappix.com –&amp;gt; duniter@muc.duniter.org&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A noter que tous les anciens liens en http://ucoin.io seront automatiquement redirigés vers le même lien en http://duniter.org, de façon à conserver leur validité tout en basculant vers le nouveau nom.&lt;/p&gt;
&lt;p&gt;N&#39;hésitez pas à nous dire ce que vous pensez de ce nouveau nom sur le &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/ucoin-renames-to-duniter/810&quot;&gt;forum&lt;/a&gt; ou encore en participant aux &lt;a rel=&quot;external&quot; href=&quot;http://www.ucoin.fr/rml/&quot;&gt;7èmes rencontres des monnaies libres à Laval du 2 au 5 Juin prochain&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Vous pouvez maintenant faire savoir autour de vous que uCoin a changé de nom, et est devenu Duniter !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Un aperçu du protocole 0.2 : les transactions</title>
          <pubDate>Mon, 04 Apr 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/transactions-0-2-overview/</link>
          <guid>https://duniter.fr/blog/transactions-0-2-overview/</guid>
          <description xml:base="https://duniter.fr/blog/transactions-0-2-overview/">&lt;h1 id=&quot;un-apercu-du-protocole-0-2-les-transactions&quot;&gt;Un aperçu du protocole 0.2 : les transactions&lt;/h1&gt;
&lt;p&gt;Celle-ci va permettre de réaliser de nombreuses nouvelles choses, comme de créer des applications avancées autour des blockchains ucoin ou encore de s&#39;interfacer avec les crypto-monnaies existantes !&lt;/p&gt;
&lt;p&gt;Qu&#39;est-ce qui manquait au protocole 0.1 ? Comment est-ce que ces manques ont été corrigés ? Cet article, orienté pour les développeurs, devrait intéresser toute personne s&#39;intéressant aux blockchains et aux techniques liées.&lt;/p&gt;
&lt;h2 id=&quot;ce-qui-manquait-au-protocole-0-1&quot;&gt;Ce qui manquait au protocole 0.1&lt;/h2&gt;
&lt;p&gt;Nous avions réalisé le protocole 0.1 avec un objectif très simple. Réaliser une blockchain permettant de tracer l’origine de la monnaie, pour s’assurer que les abus du type &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Double-spending&quot;&gt;double-dépense&lt;/a&gt; soient irréalisables, et que seuls les individus puissent co-créer de la monnaie.    Pour ce faire, nous avons repris le principe initié par &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Bitcoin&quot;&gt;Bitcoin&lt;/a&gt; : une blockchain, qui permet, de block en block, de suivre le parcours de la monnaie, d’adresse en adresse. La monnaie est traçable depuis le présent jusqu’à sa création. Nous pouvons vérifier qu’elle a été créée par un membre de la communauté de l’époque, et qu’elle n’a été dépensée qu’une seule fois à la fois.   Ce protocole a permis de réaliser très vite des applications simples autour du dividende universel. Chaque individu membre co-crée de la monnaie, et peut la transférer à une autre adresse. La forme d’une transaction était la suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ISSUERS: Liste des identifiants des émetteurs signataires de cette transaction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INPUTS: Liste des transactions sources, dont les signataires doivent être propriétaires&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OUTPUTS: Identifiant des destinataires de cette transaction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SIGNATURES&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Seulement, ce protocole ne permettait pas de réaliser des fonctionnalités avancées très importante autour de la monnaie.  Pour comprendre, il faut revenir sur un choix réalisé autour du design de notre logiciel monétaire.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/transactions-overview/wot.png&quot; alt=&quot;WoT&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;uCoin est un logiciel qui identifie ses utilisateurs grâce à &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Web_of_trust&quot;&gt;une toile de confiance&lt;/a&gt;. Pour que les individus puissent être identifiés, ils se certifient une confiance d&#39;unicité et d&#39;existence. Cet acte, d&#39;individu en individu, forme une toile qui permet à tout le monde de savoir qui est reconnu par qui. Cependant, pour que les individus puissent être reconnus, et que &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Sybil_attack&quot;&gt;les attaques sibylles&lt;/a&gt; ne puissent pas arriver, cette toile doit pouvoir être tendue et serrée. Une attaque sibylle consiste à créer de nombreuses fausses identités afin de gagner le contrôle du réseau et de la communauté monétaire. Il faut que des efforts conséquents soit nécessaires pour qu&#39;un tricheur multiplie les identités, de façon à ce que la triche reste un fait extrêmement mineur.&lt;/p&gt;
&lt;p&gt;La conséquence est que les individus doivent pouvoir créer plusieurs communautés (et donc plusieurs monnaies). En effet, la toile de confiance est de taille limitée (nous en parlerons plus en détail dans un autre article). Il faut donc que les individus puissent créer plusieurs communautés monétaires pour que l&#39;ensemble des individus aient le droit de co-créer une monnaie libre. De plus, créer plusieurs communautés permet de tester de nouvelles règles de confiance, chercher à déterminer les meilleurs paramètres.  Tous ces éléments font que plusieurs dizaines de communautés pourront potentiellement exister, et devront échanger leur monnaie via des taux de changes inter-communautaires. Ces relations d&#39;échanges doivent pouvoir s&#39;automatiser de façon à ce que ça soit transparent pour les utilisateurs. Aussi, nous souhaitons éviter au maximum à avoir à introduire des tiers de confiances.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/transactions-overview/cross0.png&quot; alt=&quot;Swap exchange&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Dans le protocole 0.1, il n&#39;est pas possible d&#39;automatiser cet échange inter-communautaire. En effet, l&#39;échange demande que chaque partie prenante se fassent confiance car aucun verrou transactionnel n&#39;est réalisable dans la blockchain :&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/transactions-overview/cross1.png&quot; alt=&quot;Protocol swap exchange with protocol&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Vous l’aurez compris : il fallait trouver une solution et améliorer notre blockchain.&lt;/p&gt;
&lt;h2 id=&quot;ne-pas-reinventer-la-roue&quot;&gt;Ne pas réinventer la roue&lt;/h2&gt;
&lt;p&gt;L’univers de Bitcoin est riche, après 7 années d&#39;expérimentations, leur blockchain a souffert de nombreux défauts. Les développeurs ont eu à répondre à de nombreuses limitations et ont dû créer de nouvelles fonctionnalités régulièrement. Encore aujourd’hui, la communauté Bitcoin continue d’évoluer et de réfléchir aux évolutions à réaliser pour améliorer ce logiciel.&lt;/p&gt;
&lt;p&gt;Dans la blockchain Bitcoin, il est notamment possible de programmer des &lt;a rel=&quot;external&quot; href=&quot;https://en.bitcoin.it/wiki/Script&quot;&gt;transactions scriptées&lt;/a&gt; dans un langage qui n&#39;est pas &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Turing_completeness&quot;&gt;turing complet&lt;/a&gt;. Ce langage de script permet d&#39;expérimenter et de réaliser toujours de nouvelle fonctionnalités autour de la blockchain de Bitcoin, sans avoir à développer de nouvelles versions du logiciel.&lt;/p&gt;
&lt;p&gt;L’univers Bitcoin a vu lui aussi naître de &lt;a rel=&quot;external&quot; href=&quot;https://coinmarketcap.com/&quot;&gt;nombreuses crypto-monnaies alternatives&lt;/a&gt;. Souvent, ces forks sont réalisés par des simples changements d’algorithmes de chiffrement, ou d’algorithmes de consensus. Ces monnaies alternatives permettent à leurs utilisateurs de toucher leur part de création monétaire, puisque Bitcoin ne le permet plus. En effet, les premiers mineurs ont raflé la mise, et il faut travailler pour eux si on souhaite obtenir sa part.&lt;/p&gt;
&lt;p&gt;Pour que les utilisateurs puissent réaliser des places de changes sûres, l&#39;algorithme des transactions crosschains est apparu. Celui-ci permet à deux utilisateurs de monnaies distinctes d’échanger entre eux des unités monétaires sans tiers de confiance, et sans besoin de se faire confiance. Ces unités sont présentes dans des blockchains différentes, et pourtant, l’échange crosschain va permettre de lier l’échange entre les deux blockchains.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/transactions-overview/cross2.png&quot; alt=&quot;Protocol 0.2 swap transactions&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;L’exemple précédent présente le cas idéal, ou Alice et Mark s’échangent leur monnaie sans que le processus soit interrompu. Vous noterez cependant que la monnaie peut ici être bloquée dans la blockchain : Si Mark envoie de la monnaie à Alice, et que Alice ne répond plus, Mark ne peut pas récupérer sa part. C’est pourquoi il est nécessaire d’introduire des documents de remboursements dans cet échange. Ces documents de remboursement sont des transactions qui retournent la monnaie à son propriétaire. L’algorithme devient un petit peu plus complexe, alors, accrochez-vous :&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/transactions-overview/cross3.png&quot; alt=&quot;protocol 0.2 refund&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;keep-it-simple&quot;&gt;Keep It Simple&lt;/h2&gt;
&lt;p&gt;Développer un langage de script au sein de nos transactions aurait nécessité un effort trop conséquent, alors que nous ne souhaitons pas transformer notre blockchain en une blockchain applicative. Nous avons donc décidé de réaliser ce mécanisme transactionnel sous sa forme la plus simple : un conditionnement à l&#39;écriture dans la blockchain.&lt;/p&gt;
&lt;p&gt;Comment ça se passe concrètement ? Les transactions ont toujours une forme &lt;em&gt;Entrée&lt;/em&gt; -&amp;gt; &lt;em&gt;Sortie&lt;/em&gt;. L&#39;entrée correspond à de la monnaie disponible à la dépense, tandis que la sortie correspond à la monnaie qui deviendra disponible pour le destinataire. Mais des nouveaux éléments font leur apparition : Des &lt;em&gt;paramètres de déverrouillage&lt;/em&gt; et des &lt;em&gt;conditions verrouillant&lt;/em&gt; la monnaie de cette transaction.  Dans la pratique, ce changement est simple. La transaction est maintenant de la forme &lt;em&gt;Entrée&lt;/em&gt; -&amp;gt; &lt;em&gt;Déverrouillage&lt;/em&gt; -&amp;gt; &lt;em&gt;Verrou de sortie&lt;/em&gt;. La forme d’une transaction est la suivante :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ISSUERS: Liste des identifiants des émetteurs signataires de cette&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;transaction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INPUTS: Liste des transactions sources, dont les signataires doivent être&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;propriétaires&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;UNLOCKS : List des paramètres de déverrouillage des inputs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OUTPUTS: Conditions de verrouillage de la monnaie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SIGNATURES&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il existe 2 types de verrous possibles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Un verrou &lt;strong&gt;SIG(PUBKEY)&lt;/strong&gt; qui signifie &lt;em&gt;La signature de PUBKEY est nécessaire pour utiliser cette monnaie&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Un second verrou est &lt;strong&gt;XHX(HASH)&lt;/strong&gt;, qui signifie &lt;em&gt;Le nombre X générant le HASH est nécessaire pour utiliser cette monnaie&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces verrous peuvent être combinés par des opérateurs &lt;strong&gt;OR&lt;/strong&gt; et &lt;strong&gt;AND&lt;/strong&gt;. Enfin, il est possible de placer un verrou temporel &lt;strong&gt;LOCKTIME&lt;/strong&gt; sur une transaction. Ce verrou permet d&#39;empêcher d&#39;enregistrer une transaction dans une blockchain avant un temps déterminé.&lt;/p&gt;
&lt;h2 id=&quot;quelques-exemples-des-nouvelles-possibilites&quot;&gt;Quelques exemples des nouvelles possibilités&lt;/h2&gt;
&lt;p&gt;Nos transactions simples du protocole 0.1 se transforment sous une nouvelle forme. Pour envoyer de la monnaie à une clé publique &lt;strong&gt;A&lt;/strong&gt; nous placerons une condition de déverrouillage &lt;strong&gt;SIG(A)&lt;/strong&gt; signifiant &lt;em&gt;La transaction doit être signée par la clé publique A pour que cette monnaie soit débloquée&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Pour envoyer de la monnaie à une clé publique &lt;strong&gt;A&lt;/strong&gt;, tout en gardant le contrôle sur le moment où elle pourra dépenser cette monnaie, nous utiliserons un verrou &lt;strong&gt;XHX(HASH)&lt;/strong&gt; combiné avec un &lt;strong&gt;SIG(A)&lt;/strong&gt;. Nous allons choisir un nombre &lt;strong&gt;X&lt;/strong&gt;, qui, hashé, générera le &lt;strong&gt;HASH&lt;/strong&gt;. Nous ne donnerons ce nombre &lt;strong&gt;X&lt;/strong&gt; à &lt;strong&gt;A&lt;/strong&gt; qu’à partir du moment où nous souhaiterons qu’il puisse dépenser sa monnaie, par exemple lorsqu’il aura rempli sa part d’un contrat.&lt;/p&gt;
&lt;p&gt;Nous pouvons envisager aussi de mettre en place des billets &lt;em&gt;consommables&lt;/em&gt;. Un billet serait verrouillé sur une monnaie consommable uniquement par un nombre caché dans le billet. La destruction physique du billet révélerait ce nombre et permettrait d’empocher la monnaie sur son adresse. De nombreux moyens physiques de destruction sont possibles, comme des billets à gratter, un révélateur chimique, etc.&lt;/p&gt;
&lt;p&gt;Ce ne sont que de premières idées que nous avons eu en discutant entre nous. Ces nouvelles règles protocolaires vont permettre de développer de nouveaux systèmes toujours plus décentralisés. Reste aux développeurs de s’approprier ces nouveaux moyens pour développer des nouvelles applications pour des individus toujours plus libres !&lt;/p&gt;
&lt;p&gt;Article rédigé par &lt;a rel=&quot;external&quot; href=&quot;https://twitter.com/_inso&quot;&gt;@Inso&lt;/a&gt;, contributeur du projet uCoin et fondateur du client Sakia&lt;/p&gt;
</description>
      </item>
      <item>
          <title>L&#39;expérimentation Meta_Brouzouf est terminée !</title>
          <pubDate>Tue, 22 Mar 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/bye-metabrouzouf/</link>
          <guid>https://duniter.fr/blog/bye-metabrouzouf/</guid>
          <description xml:base="https://duniter.fr/blog/bye-metabrouzouf/">&lt;h1 id=&quot;l-experimentation-meta-brouzouf-est-terminee&quot;&gt;L&#39;expérimentation Meta_Brouzouf est terminée !&lt;/h1&gt;
&lt;p&gt;Nous y sommes ! 14 mois après le lancement de la monnaie de test nommée &lt;em&gt;Meta_Brouzouf&lt;/em&gt; le 21 janvier 2015, il est temps pour nous de délaisser cette monnaie et &quot;stopper&quot; l&#39;expérimentation afin de passer à l&#39;étape supérieure !&lt;/p&gt;
&lt;p&gt;Mais pour quelles raisons ? Que va-t-il advenir de cette monnaie ? Et surtout, quelle est la suite ?!&lt;/p&gt;
&lt;p&gt;Quelques éléments de réponse :&lt;/p&gt;
&lt;h2 id=&quot;rappels-sur-le-meta-brouzouf&quot;&gt;Rappels sur le Meta_Brouzouf&lt;/h2&gt;
&lt;p&gt;Pour ceux qui n&#39;auraient pas suivi de près cette expérimentation, voici quelques rappels permettant de situer le contexte.&lt;/p&gt;
&lt;h3 id=&quot;le-but-initial-la-naissance-de-logiciels-clients&quot;&gt;Le but initial : la naissance de logiciels clients&lt;/h3&gt;
&lt;p&gt;Le projet uCoin débutait durant l&#39;été 2013. Suite à une année et demi de développement, janvier 2015, les bases étaient considérées posées et les premières bribes de code prêtes à être testées. Il était alors important de mettre à disposition une première monnaie, fut-elle de test, pour permettre à d&#39;autres développeurs de produire des &lt;em&gt;logiciels clients&lt;/em&gt; possédant des interfaces graphiques facilitant l&#39;utilisation de la monnaie.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org&quot;&gt;&lt;img src=&quot;/PELICAN/images/logos/sakia.png&quot; alt=&quot;Logo Sakia Wallet&quot; /&gt;&lt;/a&gt;&lt;/span&gt; &lt;span class=&quot;center-content&quot;&gt;&lt;em&gt;Logo du premier client : le logiciel Sakia&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;En effet, bien que uCoin soit le logiciel au cœur de la monnaie, son rôle &lt;em&gt;n&#39;est pas&lt;/em&gt; de s&#39;occuper de &lt;em&gt;vos&lt;/em&gt; transactions en particulier, &lt;em&gt;mais de traiter tous les documents&lt;/em&gt; permettant de la faire vivre.&lt;/p&gt;
&lt;p&gt;Ce sont les logiciels clients qui, eux, permettent l&#39;utilisation de la monnaie supportée par le logiciel uCoin en produisant les documents correspondant à vos actions &lt;em&gt;puis de les envoyer au réseau&lt;/em&gt; afin qu&#39;ils soient traités : il peut s&#39;agir d&#39;une transaction pour payer quelqu&#39;un, d&#39;une certification d&#39;un individu de la toile de confiance ou encore d&#39;une demande d&#39;adhésion à la communauté monétaire.&lt;/p&gt;
&lt;p&gt;Le logiciel uCoin, quant à lui, ne fait que traiter ces documents et les ajouter au registre commun de la monnaie nommé &lt;em&gt;Blockchain&lt;/em&gt; et qui contient l&#39;ensemble des données du réseau : les unités monétaires, les transactions effectuées et les individus constituant la toile de confiance.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/logos/ucoin.png&quot; alt=&quot;Logo uCoin&quot; /&gt;&lt;/span&gt; &lt;span class=&quot;center-content&quot;&gt;&lt;em&gt;Logo de l&#39;application &quot;Android App&quot;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;les-premiers-clients&quot;&gt;Les premiers clients&lt;/h4&gt;
&lt;p&gt;Force est de constater que cet objectif, à la fin de l&#39;expérimentation, a été atteint ! De valeureux développeurs se sont donnés corps et âme pour produire les précieux logiciels qui suivent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://sakia-wallet.org&quot;&gt;Sakia&lt;/a&gt;, un logiciel de bureau complet pour Linux, Mac et Windows&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://play.google.com/store/apps/details?id=io.ucoin.android&quot;&gt;uCoin App&lt;/a&gt;, application pour votre smartphone Android&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://play.google.com/store/apps/details?id=io.ucoin.android.wallet&quot;&gt;uCoinWallet&lt;/a&gt;, autre application pour smartphone Android&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://cesium.app/&quot;&gt;Cesium&lt;/a&gt;, un client toute plateforme qui fonctionne dans votre navigateur favori&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;et-meme-un-premier-paquet-du-serveur&quot;&gt;Et même un premier paquet du serveur !&lt;/h4&gt;
&lt;p&gt;Il est intéressant de noter qu&#39;un contributeur actif de l&#39;équipe &lt;a rel=&quot;external&quot; href=&quot;http://yunohost.org&quot;&gt;YunoHost&lt;/a&gt; a également développé &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/duniter_ynh&quot;&gt;un paquet uCoin pour YunoHost&lt;/a&gt; facilitant grandement l&#39;installation de uCoin aux adeptes de l&#39;auto-hébergement !&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;a rel=&quot;external&quot; href=&quot;http://yunohost.org/&quot;&gt;&lt;img src=&quot;/PELICAN/images/logos/yunohost.png&quot; alt=&quot;Logo Yunohost&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;les-limites-connues&quot;&gt;Les limites connues&lt;/h3&gt;
&lt;p&gt;Toutefois, cette expérimentation était dès le départ pensée et construite pour constituer &lt;strong&gt;une monnaie de test&lt;/strong&gt;. Celle-ci n&#39;avait donc pas vocation a durer, mais plutôt de tester l&#39;application dans des conditions plus réalistes afin d&#39;essuyer les premiers plâtres et éviter les erreurs les plus grossières.&lt;/p&gt;
&lt;p&gt;En l&#39;occurrence, nous avons choisi des paramètres monétaires incompatibles avec un fonctionnement à long terme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une croissance monétaire de &lt;strong&gt;10% par jour&lt;/strong&gt;, plutôt que par an&lt;/li&gt;
&lt;li&gt;une nombre minimal de &lt;strong&gt;3 certifications&lt;/strong&gt; pour être membre&lt;/li&gt;
&lt;li&gt;une durée de validité des certifications et adhésions &lt;strong&gt;limitée à 1 mois&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il faut bien comprendre que &lt;strong&gt;10% par jour&lt;/strong&gt; plutôt que par an est une différence énorme, en effet la masse monétaire croit exponentiellement : au cours d&#39;une année (c&#39;est-à-dire après révolution complète de la Terre autour de son orbite), nous créons en réalité &lt;strong&gt;1,166,641,437,000,000 fois plus de monnaie&lt;/strong&gt; qu&#39;à la normale. Vous lisez bien : il s&#39;agit d&#39;une croissance &lt;strong&gt;1 million de milliard de fois&lt;/strong&gt; plus rapide que 10% par an. La monnaie ne peut pas prendre de valeur à ce rythme, ce qui l&#39;empêche de servir d&#39;intermédiaire d&#39;échange à moyen et long terme.&lt;/p&gt;
&lt;p&gt;Également, le minimum de &lt;strong&gt;3 certifications&lt;/strong&gt; pour être membre est suffisant pour une communauté d&#39;une dizaine de membres mais devient beaucoup trop léger pour une communauté plus grande car cette règle devient trop facile à passer, et les faux comptes ne sont plus gênés par cette contrainte (ils le restent toutefois par la règle de distance).&lt;/p&gt;
&lt;p&gt;Enfin, la durée de vie de &lt;strong&gt;1 mois&lt;/strong&gt; pour les certifications et adhésions est bien trop faible. Bon nombre de membres de la communauté de test se sont vus rapidement exclus du fait de cette faible durée, leurs certifications et adhésion ayant expiré. Une valeur de &lt;strong&gt;6 mois&lt;/strong&gt; serait déjà plus acceptable.&lt;/p&gt;
&lt;p&gt;Pour ces raisons, aucune chance que cette monnaie ne perdure dans le temps.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/bye-metabrouzouf/meta_courbes.png&quot; alt=&quot;Courbes d&amp;#39;évolution de la masse monétaire et du nombre de membres dans la monnaie MetaBrouzouf&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-resultats-de-l-experimentation&quot;&gt;Les résultats de l&#39;expérimentation&lt;/h2&gt;
&lt;p&gt;Malgré ces paramètres qui augurent la fin précoce de cette monnaie de test, celle-ci a totalement joué son rôle notamment car &lt;a href=&quot;https://duniter.fr/blog/bye-metabrouzouf/#les-premiers-clients&quot;&gt;plusieurs logiciels clients sont nés&lt;/a&gt;, mais aussi pas moins de &lt;strong&gt;115 utilisateurs&lt;/strong&gt; ont activement participé à la monnaie, et ce malgré la jeunesse du projet qui demande un certain effort avant d&#39;arriver au statut d&#39;individu créateur de monnaie.&lt;/p&gt;
&lt;p&gt;En effet pour réussir à créer son compte il a fallu pour chacun d&#39;eux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;installer le logiciel client Sakia&lt;/li&gt;
&lt;li&gt;suivre un &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org/t/tutorial-subscribe-to-the-testing-currency/143&quot;&gt;tutoriel en anglais&lt;/a&gt;   pour créer son identité dans Sakia, se connecter au réseau puis publier sa   demande d&#39;adhésion à la communauté&lt;/li&gt;
&lt;li&gt;faire une demande explicite, écrite sur le &lt;a rel=&quot;external&quot; href=&quot;https://forum.duniter.org&quot;&gt;forum uCoin&lt;/a&gt; avec quelques preuves de son identité afin de recevoir des certifications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&#39;est grâce à ces personnes que nous avons pu débusquer bon nombre de bugs, mineurs ou majeurs, mais également identifier les limites du protocole dans sa version initiale qu&#39;il aura fallu corriger pour atteindre des tailles de communauté plus grandes, ce qui est important pour que la monnaie ait une réelle efficacité.&lt;/p&gt;
&lt;h3 id=&quot;quelques-chiffres&quot;&gt;Quelques chiffres&lt;/h3&gt;
&lt;p&gt;Pour clôturer ce post et marquer la fin de cette monnaie de test, nous vous proposons quelques chiffres tirés de la &lt;a rel=&quot;external&quot; href=&quot;https://fr.wikipedia.org/wiki/Cha%C3%AEne_de_blocs&quot;&gt;Blockchain&lt;/a&gt;, base de données publique partagée par l&#39;ensemble du réseau utilisateur de la monnaie, et que vous pouvez donc vous-même consulter et exploiter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;424&lt;/strong&gt; années simulées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;137 identités&lt;/strong&gt; publiées dont &lt;strong&gt;115 identités&lt;/strong&gt; ayant atteint le statut   de membre (et donc ayant créé de la monnaie)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1676 certifications&lt;/strong&gt; d&#39;identité effectuées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;466&lt;/strong&gt; demandes d&#39;adhésions / d&#39;actualisation envoyées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1191 transactions&lt;/strong&gt; réalisées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7193&lt;/strong&gt; dividendes (DU) ont été créés (1 dividende / jour / membre)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1,820,920,587,213,340,000,000&lt;/strong&gt; Meta_Brouzouf (unités de monnaie) créés&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;l-arret-de-la-monnaie&quot;&gt;L&#39;arrêt de la monnaie&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Je ne comprends pas, je pensais que uCoin était basé sur un modèle en pair-à-pair (P2P) et que donc cet outil n&#39;était pas centralisé ? Comment pouvez-vous donc &quot;stopper&quot;, &quot;arrêter&quot; l&#39;expérimentation si moi, avec mon nœud personnel, je décide de continuer l&#39;aventure ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En réalité, &lt;strong&gt;nous ne pouvons pas forcer l&#39;arrêt de la monnaie&lt;/strong&gt;. En effet, son infrastructure est bien de type P2P. Et donc si 3 membres décident de continuer à faire fonctionner cette monnaie en laissant chacun leur nœud uCoin fonctionner tout en se certifiant mutuellement, alors la monnaie continuera de fonctionner.&lt;/p&gt;
&lt;p&gt;Simplement, ces 3 membres auront une monnaie &quot;à eux&quot;, seront les seuls à en créer et probablement les seuls à l&#39;accepter et l&#39;utiliser.&lt;/p&gt;
&lt;p&gt;Cet aspect P2P est crucial à nos yeux puisqu&#39;il rend extrêmement difficile la prise de contrôle par quelques uns d&#39;une monnaie libre, notre outil d&#39;échange commun dont la durée d&#39;existence vise à dépasser celle d&#39;un être humain.&lt;/p&gt;
&lt;p&gt;Or si nous souhaitons réaliser une monnaie libre, celle-ci doit être suffisamment robuste et à l&#39;épreuve du temps : pour nous, seuls les systèmes décentralisés (pair-à-pair) sont à même de remplir cet objectif. C&#39;est la raison pour laquelle uCoin est pair-à-pair.&lt;/p&gt;
&lt;h3 id=&quot;pourquoi-arreter-cette-monnaie&quot;&gt;Pourquoi arrêter cette monnaie ?&lt;/h3&gt;
&lt;p&gt;Les objectifs ont été atteints, et surtout nous rencontrons des limites techniques qui ne permettent plus d&#39;assurer le bon fonctionnement du logiciel.&lt;/p&gt;
&lt;p&gt;Bien que celui-ci fonctionne toujours et que des utilisateurs peuvent faire perdurer l&#39;expérimentation, nous ne souhaitons pas assurer davantage la cohérence des données.&lt;/p&gt;
&lt;p&gt;Il se peut donc que les montants transférés deviennent incorrects, ou que les logiciels clients perdent les pédales ! N&#39;en soyez pas surpris, nous ne le serons pas, et surtout nous regardons déjà dans une nouvelle direction.&lt;/p&gt;
&lt;h2 id=&quot;et-apres&quot;&gt;Et après ?&lt;/h2&gt;
&lt;p&gt;Comme dit précédemment, cette monnaie de test a été l&#39;occasion de découvrir les limites de la 1ère version du protocole, estampillée sobrement &lt;strong&gt;0.1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nous avons dores et déjà implémenté sa suite, la version &lt;strong&gt;0.2&lt;/strong&gt; qui apporte un grand nombre de nouveautés. Et donc, que va-t-il se passer ?&lt;/p&gt;
&lt;p&gt;Les semaines à venir vous le diront.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt;&lt;img src=&quot;/PELICAN/images/logos/duniter.png&quot; alt=&quot;Logo Duniter&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
</description>
      </item>
      <item>
          <title>RML6 les vidéos</title>
          <pubDate>Mon, 14 Dec 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/rml6-les-videos/</link>
          <guid>https://duniter.fr/blog/rml6-les-videos/</guid>
          <description xml:base="https://duniter.fr/blog/rml6-les-videos/">&lt;h1 id=&quot;rml6-les-videos&quot;&gt;RML6 les vidéos&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Article tiré du site &lt;a rel=&quot;external&quot; href=&quot;http://www.creationmonetaire.info/2015/12/rml6-les-videos.html&quot;&gt;creationmonetaire.info&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les 6èmes rencontres des monnaies libres ont eu lieu à Valence du 12 au 14 Novembre. Ce fut l’occasion pour les développeurs de uCoin d’avancer sur le projet et de faire quelques conférences sur le sujet de la monnaie libre, de uCoin, de la blockchain gérée par &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter&quot;&gt;uCoin&lt;/a&gt;, de Cutecoin (devenu désormais &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/sakia&quot;&gt;sakia&lt;/a&gt; !), de &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/ucoin-android-app/issues&quot;&gt;uCoinApps&lt;/a&gt;…&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/rml6-les-videos/IMG_3200-e1447855860789.jpg&quot; alt=&quot;Présentation de Sakia par @inso&quot; /&gt; &lt;span class=&quot;center-content&quot;&gt;&lt;em&gt;Inso présentant le code de Sakia&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A aussi eu lieu un jeu &lt;a rel=&quot;external&quot; href=&quot;https://github.com/galuel/Geconomicus&quot;&gt;Ğeconomicus&lt;/a&gt; (actuellement en version 1.6 vers une version 2.0), animé de main de maître par kimamila et vit, pour ceux qui découvrent sur le sujet monétaire, pendant que les joueurs déjà confirmés lors des précédentes éditions ont pu s’initier à une analyse relativiste de données économiques sur tableur. Une excellente vidéo récapitulative du jeu Ğeconomicus a été réalisée par vit, avec un compte rendu sur tableur très bien réalisé.&lt;/p&gt;
&lt;p&gt;La chaîne vidéo youtube « RML6 » ci-dessous permet de voir ces vidéos RML6 regroupées dans un même menu.&lt;/p&gt;
&lt;iframe width=&quot;700&quot; height=&quot;350&quot; src=&quot;https://www.youtube.com/embed/6_iqDKQu9Og?list=PL0UDqLtXevvGHwQAstWU_CrVlQYpUbrxL&amp;index=3&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Les RML7 sont d’ores et déjà annoncées à &lt;a rel=&quot;external&quot; href=&quot;http://www.ucoin.fr/rml/&quot;&gt;Laval du 2 au 5 Juin 2015&lt;/a&gt;, et l’annonce que les RML8 auront lieu fin 2016 à Toulouse (site officiel annoncé dès que disponible) a été réalisée lors de ces RML6.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Publier ou modifier un article sur le blog</title>
          <pubDate>Tue, 08 Dec 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/wiki/contribuer/publier-un-article/</link>
          <guid>https://duniter.fr/wiki/contribuer/publier-un-article/</guid>
          <description xml:base="https://duniter.fr/wiki/contribuer/publier-un-article/">&lt;h1 id=&quot;publier-ou-modifier-un-article-sur-le-blog&quot;&gt;Publier ou modifier un article sur le blog&lt;/h1&gt;
&lt;div class=&quot;note note-icon note-icon-large note-icon-warning note-block note-warning&quot;&gt;
&lt;p&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt; : depuis avril 2017 le site s&#39;est transformé et ce billet n&#39;est plus d&#39;actualité.&lt;/p&gt;
&lt;p&gt;Vous pouvez toutefois participer à la vie de ce site en ajoutant ou modifiant ses pages, ses articles ou son wiki en suivant &lt;a href=&quot;/wiki/contribuer/ameliorer-le-site&quot;&gt;le tutoriel correspondant&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;Le blog &lt;a rel=&quot;external&quot; href=&quot;https://fr.duniter.org&quot;&gt;duniter.org&lt;/a&gt; a subit depuis peu une transformation technique : désormais &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/blog-posts/tree/master/posts/fr_FR/&quot;&gt;l&#39;intégralité des articles du blog&lt;/a&gt; est mise à disposition sur GitHub.&lt;/p&gt;
&lt;p&gt;Pour quoi faire ? Très simplement, nous apprécions de pouvoir découpler le contenu du contenant, en l&#39;occurrence découpler les articles du moteur de blog qui les affiche. Cela nous permet entre autres choses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de traduire les articles en ajoutant des dossiers de langue (&lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/blog-posts/tree/master/posts/en_EN&quot;&gt;voir l&#39;exemple de l&#39;anglais&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;de migrer vers un autre moteur de blog dans le futur, de façon automatisée&lt;/li&gt;
&lt;li&gt;de proposer une rédaction communautaire des articles à travers la   plateforme &lt;a rel=&quot;external&quot; href=&quot;http://github.com&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&#39;est ici le dernier point qui nous intéresse ! Vous permettre de rédiger des articles, ou même de modifier ceux existants. Voyons sans plus attendre comme procéder.&lt;/p&gt;
&lt;h2 id=&quot;premiere-etape-forkez-le-depot-principal&quot;&gt;Première étape : forkez le dépôt principal&lt;/h2&gt;
&lt;p&gt;Pour participer de la rédaction des articles, qu&#39;il s&#39;agisse de création ou de modification, vous travaillerez avec votre propre copie que vous partagerez ensuite. Vous devez donc créer votre propre copie du blog, un &lt;em&gt;fork&lt;/em&gt; dans le jargon technique.&lt;/p&gt;
&lt;h3 id=&quot;creez-un-compte-github&quot;&gt;Créez un compte GitHub&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Si vous disposez déjà d&#39;un compte GitHub, vous pouvez passer cette étape.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rendez-vous sur https://github.com (site en anglais). Renseigner les 3 champs proposés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nom d&#39;utilisateur&lt;/li&gt;
&lt;li&gt;E-mail&lt;/li&gt;
&lt;li&gt;Mot de passe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/969136/11662425/d0a2883a-9dd6-11e5-927b-d6939fb8fe50.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous recevrez probablement un e-mail de confirmation qu&#39;il vous faudra valider. Une fois cette étape passée, vous devriez disposer d&#39;un compte GitHub .&lt;/p&gt;
&lt;h3 id=&quot;forkez-le-depot-principal&quot;&gt;Forkez le dépôt principal&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Si vous avez déjà forké le dépôt principal &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/blog-posts&quot;&gt;duniter/blog-posts&lt;/a&gt;, vous pouvez passer cette étape.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rendez-vous à l&#39;adresse https://github.com/duniter/blog-posts. Cliquez sur le bouton « Fork » en dans le coin supérieur droit de la page :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/969136/11662678/2d26d542-9dd8-11e5-8e81-2e91941926cb.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous aurez alors &lt;em&gt;votre propre version&lt;/em&gt; des articles du blog, dans &lt;em&gt;votre dépôt&lt;/em&gt; GitHub.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://forum.duniter.org/uploads/default/original/1X/fc58e753585935dfd107ac33d411e0a4b690fad3.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;deuxieme-etape-clonez-votre-fork&quot;&gt;Deuxième étape : clonez votre fork&lt;/h2&gt;
&lt;p&gt;Maintenant que vous possédez une copie dans votre dépôt GitHub, votre fork, il convient maintenant de récupérer une copie locale que vous pourrez modifier. C&#39;est l&#39;étape de &lt;em&gt;clonage&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;La copie distante est en quelque sorte la référence &lt;em&gt;pour les autres utilisateurs&lt;/em&gt; qui peuvent ainsi voir l&#39;état de votre code. Mais vous, vous travaillez sur les fichiers présents sur votre PC.&lt;/p&gt;
&lt;h3 id=&quot;installer-git&quot;&gt;Installer Git&lt;/h3&gt;
&lt;p&gt;L&#39;installation de Git dépend de votre système d&#39;exploitation. Suivez simplement les indications présentes sur : https://git-scm.com&lt;/p&gt;
&lt;h3 id=&quot;cloner-votre-fork&quot;&gt;Cloner votre fork&lt;/h3&gt;
&lt;p&gt;A ce stade, vous êtes en mesure de récupérer votre version du code source (votre &lt;em&gt;fork&lt;/em&gt;), afin de pouvoir travailler dessus.&lt;/p&gt;
&lt;h4 id=&quot;ouvrez-git-en-ligne-de-commande&quot;&gt;Ouvrez Git en ligne de commande&lt;/h4&gt;
&lt;p&gt;Pour récupérer le code source, lancez Git en mode console.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sous Linux et MacOS, ouvrez tout simplement le Terminal&lt;/li&gt;
&lt;li&gt;Sous Windows lancez le programme &lt;em&gt;Git Bash&lt;/em&gt; :&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://forum.duniter.org/uploads/default/original/1X/6fc638dc0a22d88da7e84dbf0371e69747767f78.png&quot; width=&quot;432&quot; height=&quot;80&quot;&gt;
&lt;h4 id=&quot;clonez-votre-fork&quot;&gt;Clonez votre fork&lt;/h4&gt;
&lt;p&gt;Retournez sur la page web GitHub, puis trouvez le bouton « Clone or download » :&lt;/p&gt;
&lt;img src=&quot;https://forum.duniter.org/uploads/default/original/1X/188450ce5f807c958c2a7efb72bf89c0febb94ab.png&quot; width=&quot;459&quot; height=&quot;159&quot;&gt;
&lt;p&gt;Cliquez dessus, vous pourrez alors copier l&#39;URL de clonage en cliquant sur l&#39;icône de valise :&lt;/p&gt;
&lt;img src=&quot;https://forum.duniter.org/uploads/default/original/1X/7e84f49d0cae40790abdccfb9f22551b76d07b34.png&quot; width=&quot;457&quot; height=&quot;199&quot;&gt;
&lt;p&gt;Vous n&#39;avez plus qu&#39;à retourner dans votre console Git et saisir :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; clone&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt;coller l&amp;#39;URL copiée&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ce qui donne dans mon cas :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git clone https://github.com/c-geek/blog-posts.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Clonage dans &amp;#39;blog-posts&amp;#39;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;remote: Counting objects: 713, done.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;remote: Total 713 (delta 0), reused 0 (delta 0), pack-reused 713&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Réception d&amp;#39;objets: 100% (713/713), 336.82 KiB | 597.00 KiB/s, fait.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Résolution des deltas: 100% (427/427), fait.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Vérification de la connectivité... fait.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si vous êtes arrivés à un comportement similaire, &lt;strong&gt;c&#39;est parfait&lt;/strong&gt;, vous avez réussi à cloner votre dépôt en local !&lt;/p&gt;
&lt;h2 id=&quot;troiseme-etape-effectuez-des-modifications&quot;&gt;Troisème étape : effectuez des modifications&lt;/h2&gt;
&lt;p&gt;Vous pouvez désormais travailler tranquillement à la rédaction d&#39;un nouvel article ou à la modification d&#39;un article existant. Dans les 2 cas, vous devrez valider votre travail une fois terminé et publier vos changements sur votre dépôt (c&#39;est une action de &lt;em&gt;push&lt;/em&gt;) puis nous les proposer (c&#39;est une action de &lt;em&gt;pull-request&lt;/em&gt;, abrégé &lt;em&gt;PR&lt;/em&gt;) pour publication.&lt;/p&gt;
&lt;h3 id=&quot;ajouter-ou-modifier-un-nouvel-article&quot;&gt;Ajouter ou modifier un nouvel article&lt;/h3&gt;
&lt;p&gt;Le principe est le suivant : chaque article est matéralisé par un fichier au format &lt;a rel=&quot;external&quot; href=&quot;https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet&quot;&gt;Markdown&lt;/a&gt;. Ce type de fichier se termine par l&#39;extension &lt;code&gt;.md&lt;/code&gt;. Ainsi le fichier suivant est un fichier Markdown :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;posts/fr_FR/2016-06-27-sortie-officielle-0.20.0.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Pour créer un nouvel article&lt;/strong&gt;, il vous suffit de créer un fichier similaire, en changeant de nom.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour modifier un article existant&lt;/strong&gt;, modifiez simplement le contenu du fichier concerné.&lt;/p&gt;
&lt;p&gt;Vous êtes libres quant au nom de fichier et au contenu de votre article, mais vous devez respecter les quelques règles simples ci-après.&lt;/p&gt;
&lt;h3 id=&quot;regles-sur-le-nom-de-fichier&quot;&gt;Règles sur le nom de fichier&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Le nom de fichier est très important&lt;/strong&gt;. C&#39;est à travers celui-ci que vous définirez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La date de rédaction de votre article&lt;/li&gt;
&lt;li&gt;Le chemin web par lequel sera accessible votre article&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le nom du fichier doit être de la forme suivante : &lt;code&gt;AAAA-MM-JJ-nom-du-chemin.md&lt;/code&gt;. Par exemple &lt;code&gt;2015-12-31-bonne-annee.md&lt;/code&gt; pour un article souhaitant la nouvelle année le 31/12/2015.&lt;/p&gt;
&lt;p&gt;L&#39;article sera alors disponible à l&#39;adresse http://fr.duniter.org/bonne-annee/, et sera marqué comme ayant été rédigé le 31/12/2015.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Attention ! Le chemin web ne doit contenir que des chiffres, lettres, tirets et points, le tout en minuscules. Faites-le commencer par une lettre.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;regle-de-la-ligne-de-titre&quot;&gt;Règle de la ligne de titre&lt;/h3&gt;
&lt;p&gt;Très important : votre fichier doit débuter par une ligne de titre, c&#39;est-à-dire débuter par un &lt;code&gt;#&lt;/code&gt; puis un message qui fera office de titre d&#39;article. Par exemple, &lt;code&gt;# Bonne année !&lt;/code&gt; est une ligne de titre valide.&lt;/p&gt;
&lt;h3 id=&quot;regardez-les-exemples&quot;&gt;Regardez les exemples !&lt;/h3&gt;
&lt;p&gt;Si vous vous sentez perdus, prenez simplement les autres fichiers comme exemple ! Tous ceux présents, mis à part vos propre fichiers, sont déjà publiés sur le blog et donc parfaitement valides. Inspirez-vous-en !&lt;/p&gt;
&lt;p&gt;Voici, à titre informatif, le contenu du fichier d&#39;exemple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;# Exemple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Ceci est un exemple d&amp;#39;article désactivé. Il ne sera jamais publié, tant qu&amp;#39;il reste dans ce dossier.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-11&quot;&gt;## Règles importantes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;*&lt;/span&gt;&lt;span class=&quot;z-6 z-b&quot;&gt; **Ne pas déplacer cet article dans le répertoire parent : cela publierait automatiquement l&amp;#39;article !**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;*&lt;/span&gt;&lt;span class=&quot;z-6 z-b&quot;&gt; **Ne pas supprimer cet article : le répertoire courant ne dois jamais devenir vide !**&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;langue-de-votre-article&quot;&gt;Langue de votre article&lt;/h3&gt;
&lt;p&gt;Les articles sont pour le moment rédigés &lt;em&gt;soit en français soit en anglais&lt;/em&gt;. Selon la langue choisie, l&#39;article sera publié :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ou bien sur http://fr.duniter.org pour un article en français&lt;/li&gt;
&lt;li&gt;ou bien sur http://en.duniter.org pour un article en anglais&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour indiquer la langue choisie, il vous suffit de placer votre article dans un sous-dossier &lt;code&gt;posts/&lt;/code&gt;, il en existe aujourd&#39;hui deux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fr_FR&lt;/code&gt; si vous avez rédigé votre article en français&lt;/li&gt;
&lt;li&gt;&lt;code&gt;en_EN&lt;/code&gt; si vous avez rédigé votre article en anglais&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Soyons clairs : nous ne publierons pas les articles écris en français sur le blog en version anglaise, et inversement.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il pourrait exister davantage de langues en ajoutant de nouveaux dossiers : toutefois nous ne souhaitons pas déployer d&#39;autres versions du blog pour le moment, 2 langues suffisent amplement pour le moment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;quatrieme-etape-validez-et-publiez-vos-changements&quot;&gt;Quatrième étape : validez et publiez vos changements&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;N.B. : nous allons ici utiliser Git en ligne de commande étant donné que celle-ci ne diffère pas d&#39;un système à l&#39;autre. Mais vous pouvez utiliser l&#39;outil de votre choix pour faire la même chose : il existe par exemple des outils graphiques, bien plus commodes à utiliser : vous en trouverez plusieurs à l&#39;adresse https://git-scm.com/downloads/guis&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;ajouter-les-modifications-au-commit&quot;&gt;Ajouter les modifications au commit&lt;/h3&gt;
&lt;p&gt;La commande est simple :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; add posts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela ajoutera l&#39;ensemble des modifications effectuées sur le répertoire &lt;code&gt;posts/&lt;/code&gt;, où se trouve forcément votre article.&lt;/p&gt;
&lt;h3 id=&quot;valider-les-modifications&quot;&gt;Valider les modifications&lt;/h3&gt;
&lt;p&gt;Utilisez la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; commit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un message descriptif succint vous sera demandé, puis vos modifications seront enregistrées.&lt;/p&gt;
&lt;h3 id=&quot;partagez-vos-modifications&quot;&gt;Partagez vos modifications&lt;/h3&gt;
&lt;p&gt;Pour envoyer vos commits sur votre fork, utilisez :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; push origin master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;cinquieme-etape-demandez-la-publication&quot;&gt;Cinquième étape : demandez la publication&lt;/h2&gt;
&lt;p&gt;Vous avez poussé (&lt;em&gt;pushé&lt;/em&gt;) vos modifications sur votre dépôt GitHub, votre &lt;em&gt;fork&lt;/em&gt;, celles-ci sont donc désormais visibles. &lt;em&gt;Mais cela ne publie pas pour autant vos modifications sur le blog&lt;/em&gt; : vous devez nous proposer ces changements et, si nous les acceptions, &lt;em&gt;alors&lt;/em&gt; ceux-ci seront automatiquement intégrés et publiés dans l&#39;instant sur le blog.&lt;/p&gt;
&lt;p&gt;Pour partager vos modifications, c&#39;est très simple : sur la page principale de votre dépôt, cliquez sur « New pull request » :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/969136/11663449/925e612e-9ddc-11e5-9cbd-d73df99c9277.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Puis sur la page suivante, si tous les voyants sont verts, cliquez sur « Create pull request » afin de valider votre demande :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/969136/11663712/058a0602-9dde-11e5-9b0e-f729b2e7d748.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;derniere-etape-attendez-notre-validation&quot;&gt;Dernière étape : attendez notre validation&lt;/h2&gt;
&lt;p&gt;Votre demande d&#39;ajout est désormais effective ! Nous allons vérifier que vous avez bien respecté les consignes en termes de nom de fichier, date d&#39;article, langue et contenu. Si tout est dans les règles, nous n&#39;aurons qu&#39;à cliquer sur un bouton pour que votre article soit visible sur le site dans la minute qui suit !&lt;/p&gt;
&lt;p&gt;Toutefois, même si nous recevons une notification de proposition de nouvel article, soyez patients : nous ne sommes pas toujours disponible immédiatement pour valider vos articles !&lt;/p&gt;
&lt;p&gt;Mais n&#39;en doutez pas : si votre article convient, nous le publierons.&lt;/p&gt;
&lt;p&gt;En vous remerciant d&#39;avance pour vos futures contributions !&lt;/p&gt;
&lt;h2 id=&quot;pour-vos-futures-modifications&quot;&gt;Pour vos futures modifications&lt;/h2&gt;
&lt;p&gt;Il se peut que vous deveniez un contributeur actif au blog, en publiant plusieurs articles par exemple. Dans ce cas, &lt;em&gt;vous devrez mettre à jour votre fork et votre clone&lt;/em&gt; par rapport au dépôt du blog. C&#39;est-à-dire que votre clône et fork devront récupérer les modifications que nous aurions pu apporter avant de nous proposer une modification ou un ajout d&#39;article.&lt;/p&gt;
&lt;h3 id=&quot;ajouter-le-depot-principal-aux-depots-distants-de-votre-clone&quot;&gt;Ajouter le dépôt principal aux dépôts distants de votre clone&lt;/h3&gt;
&lt;p&gt;Pour l&#39;instant, votre clone dispose d&#39;un seul dépôt : &lt;em&gt;origin&lt;/em&gt;. Il s&#39;agit en fait de votre fork.&lt;/p&gt;
&lt;p&gt;Mais vous pouvez ajouter autant de dépôts que vous le souhaitez, c&#39;est là tout l&#39;intérêt de Git ! Et notamment, ajouter le dépôt que manipule le blog : &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/blog-posts.git&quot;&gt;duniter/blog-posts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour ce faire, lancez la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; remote add blog https://github.com/duniter/blog-posts.git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous n&#39;aurez pas besoin de rétirer cette commande par la suite.&lt;/p&gt;
&lt;h3 id=&quot;recuperer-les-dernieres-modifications-du-depot-principal&quot;&gt;Récupérer les dernières modifications du dépôt principal&lt;/h3&gt;
&lt;p&gt;Cela se fait simplement avec la commande :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; pull blog master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Attention : il se peut que des conflits apparaissent si vous avez modifié des fichiers en même temps que d&#39;autres personnes, et que ces modifications entrent en conflit. Dans ce cas vous aurez à arbitrer les conflits ! Voici &lt;a rel=&quot;external&quot; href=&quot;http://alainericgauthier.com/git/gerer_les_conflits_de_fusion&quot;&gt;un petit manuel&lt;/a&gt; pour vous en sortir dans un tel cas.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;proceder-comme-d-habitude&quot;&gt;Procéder comme d&#39;habitude&lt;/h3&gt;
&lt;p&gt;Vous pouvez ensuite reprendre le processus de l&#39;étape 3 à 5. C&#39;est tout !&lt;/p&gt;
&lt;h2 id=&quot;questions-complementaires&quot;&gt;Questions complémentaires&lt;/h2&gt;
&lt;h3 id=&quot;que-signifie-le-repertoire-static-dans-l-arborescence-du-blog&quot;&gt;Que signifie le répertoire &lt;code&gt;static&lt;/code&gt; dans l&#39;arborescence du blog ?&lt;/h3&gt;
&lt;p&gt;Il s&#39;agit d&#39;un répertoire abritant des articles spéciaux : ceux-ci ne sont pas publiés à la suite des autres articles, mais forment des pages du blog à part entière. Nous les utilisons pour des pages comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/presentation/&quot;&gt;Présentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/theoretical&quot;&gt;Théorie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/contact&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://fr.duniter.org/contribute&quot;&gt;Contribution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous pouvez vous aussi y placer votre article, toutefois cela nécessite également que nous placions un lien pour y accéder par la suite.&lt;/p&gt;
&lt;p&gt;Nous utiliserons notamment les pages statiques pour les tutoriels d&#39;utilisation de Duniter et ses clients (Sakia, Cesium, ...).&lt;/p&gt;
&lt;h3 id=&quot;que-signifie-le-repertoire-disabled-dans-l-arborescence-du-blog&quot;&gt;Que signifie le répertoire &lt;code&gt;disabled&lt;/code&gt; dans l&#39;arborescence du blog ?&lt;/h3&gt;
&lt;p&gt;Il s&#39;agit d&#39;un répertoire hébergeant des articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;publiés sur le blog mais que l&#39;on souhaite désactiver&lt;/li&gt;
&lt;li&gt;en cours de rédaction mais déjà ajoutés au dépôt principal. Ces articles &lt;strong&gt;ne sont donc pas visibles&lt;/strong&gt; sur le blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela peut aussi nous aider à mettre temporairement hors ligne un article, un article alternatif est alors affiché (le contenu du fichier &lt;code&gt;2016-06-29-editing.md&lt;/code&gt;).&lt;/p&gt;
&lt;h3 id=&quot;peut-on-modifier-d-autres-parties-du-blog-comme-le-menu-lateral-ou-les-elements-de-la-page-d-accueil&quot;&gt;Peut-on modifier d&#39;autres parties du blog, comme le menu latéral ou les éléments de la page d&#39;accueil ?&lt;/h3&gt;
&lt;p&gt;Pour le moment non, mais cela sera possible très prochainement ! Il sera par exemple possible d&#39;afficher :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les dernières versions disponibles des logiciels&lt;/li&gt;
&lt;li&gt;les bandeaux promotionels pour les évènements à venir (Rencontres des Monnaies Libres par ex.)&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Les 6èmes rencontres des monnaies libres à Valence du 12 au 15 Novembre !</title>
          <pubDate>Tue, 29 Sep 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/les-6emes-rencontres-des-monnaies-libres-a-valence-du-12-au-15-novembre/</link>
          <guid>https://duniter.fr/blog/les-6emes-rencontres-des-monnaies-libres-a-valence-du-12-au-15-novembre/</guid>
          <description xml:base="https://duniter.fr/blog/les-6emes-rencontres-des-monnaies-libres-a-valence-du-12-au-15-novembre/">&lt;h1 id=&quot;les-6emes-rencontres-des-monnaies-libres-a-valence-du-12-au-15-novembre&quot;&gt;Les 6èmes rencontres des monnaies libres à Valence du 12 au 15 Novembre !&lt;/h1&gt;
&lt;p&gt;C&#39;est officiel : les 6èmes rencontres des monnaies libres &lt;a rel=&quot;external&quot; href=&quot;http://connex-asso.net/?p=27&quot;&gt;auront lieu à l&#39;IUT de Valence&lt;/a&gt; ! Et le &lt;a rel=&quot;external&quot; href=&quot;http://connex-asso.net/?p=82&quot;&gt;programme&lt;/a&gt; se précise .&lt;/p&gt;
&lt;h3 id=&quot;les-12-et-13-novembre-la-technique&quot;&gt;Les 12 et 13 Novembre : la technique&lt;/h3&gt;
&lt;p&gt;Les 2 premières journées seront dédiées aux aspects techniques des premiers logiciels permettant la réalisation des monnaies libres, avec notamment :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une présentation de &lt;strong&gt;uCoin&lt;/strong&gt; incluant :&lt;/li&gt;
&lt;li&gt;des rappels des principes techniques (blockchain, Toile de Confiance, transactions, ...)&lt;/li&gt;
&lt;li&gt;un zoom sur les derniers développements (multi-branches et évolutions du protocole)&lt;/li&gt;
&lt;li&gt;perspectives à court et moyen terme, &lt;em&gt;dont le potentiel lancement d&#39;une monnaie libre&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;une ou plusieurs présentations des logiciels client permettant d&#39;utiliser une monnaie libre tels &lt;strong&gt;Cutecoin&lt;/strong&gt; et &lt;strong&gt;uCoinApps&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;le-14-novembre-jeu-geconomicus-et-travaux-pratiques&quot;&gt;Le 14 Novembre : jeu Ğeconomicus et travaux pratiques !&lt;/h3&gt;
&lt;p&gt;Cette journée sera divisée en 2 groupes, selon le niveau de chacun :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un 1er groupe participera au jeu Ğeconomicus permettant de révéler le code   des systèmes monétaires et de leur implication en termes économiques&lt;/li&gt;
&lt;li&gt;un 2nd groupe participera à un atelier animé par Stéphane Laborde, l&#39;auteur de la &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info/&quot;&gt;Théorie Relative de la Monnaie&lt;/a&gt;, pour les personnes ayant déjà participé au jeu Ğeconomicus. L&#39;atelier, qui nécessitera un tableur pour chacun de ses participants, se propose :&lt;/li&gt;
&lt;li&gt;d&#39;apprendre à afficher une même monnaie dans différents référentiels (quantitatif, quantitatif à somme nulle, relatif, ...)&lt;/li&gt;
&lt;li&gt;d&#39;établir le lien entre revenu de base par Dividende Universel et revenu de base financé&lt;/li&gt;
&lt;li&gt;des exemples de valeurs permettront d&#39;établir la double relativité monétaire + valeurs&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/4lDmgOvgKP4?list=PL0UDqLtXevvH1w83dlXvs7PmLKaJlFnMx&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h3 id=&quot;le-15-novembre-toutes-contributions&quot;&gt;Le 15 Novembre : toutes contributions !&lt;/h3&gt;
&lt;p&gt;La dernière journée se veut ouverte à toutes les contributions (qui restent à définir et feront l&#39;objet d&#39;un prochain post) qui peuvent aller :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de la manipulation des logiciels Cutecoin et uCoinApps&lt;/li&gt;
&lt;li&gt;de la présentation d&#39;autres projets autour de la TRM (&lt;em&gt;la TRM en couleur&lt;/em&gt;,   &lt;em&gt;la TRM pour les enfant&lt;/em&gt;, &lt;em&gt;la TRM en détails&lt;/em&gt;, la traduction de la TRM en   anglais, le modèle DAC, ...)&lt;/li&gt;
&lt;li&gt;des plateformes d&#39;échange autour de la TRM, des monnaies libres (blogs,   forums, ...)&lt;/li&gt;
&lt;li&gt;des questions pratiques pour le lancement de monnaies libres&lt;/li&gt;
&lt;li&gt;... liste non exhaustive !&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&quot;425&quot; height=&quot;350&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; src=&quot;https://www.openstreetmap.org/export/embed.html?bbox=4.80926513671875%2C44.873632497977226%2C5.024700164794922%2C44.984713498441046&amp;amp;layer=mapnik&amp;amp;marker=44.92919985125153%2C4.916982650756836&quot; style=&quot;border: 1px solid black&quot;&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;small&gt;&lt;a href=&quot;http://www.openstreetmap.org/?mlat=44.9292&amp;amp;mlon=4.9170#map=13/44.9292/4.9170&quot;&gt;Afficher une carte plus grande&lt;/a&gt;&lt;/small&gt;
&lt;p&gt;Pour tous les détails, suivez le site de &lt;a rel=&quot;external&quot; href=&quot;http://connex-asso.net/&quot;&gt;connex-asso.net&lt;/a&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Pourquoi une blockchain ?</title>
          <pubDate>Tue, 11 Aug 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/faq/duniter/blockchain/</link>
          <guid>https://duniter.fr/faq/duniter/blockchain/</guid>
          <description xml:base="https://duniter.fr/faq/duniter/blockchain/">&lt;h1 id=&quot;la-blockchain-une-solution-technique-pour-les-monnaies-libres&quot;&gt;La blockchain, une solution technique pour les monnaies libres&lt;/h1&gt;
&lt;h2 id=&quot;un-systeme-de-crypto-monnaie&quot;&gt;Un système de crypto-monnaie&lt;/h2&gt;
&lt;p&gt;Duniter utilise le concept de crypto-monnaie introduit par Bitcoin : le principe est d&#39;utiliser les possibilités offertes par la cryptographie comme la signature électronique afin de créer des devises numériques.&lt;/p&gt;
&lt;p&gt;Toutefois, Duniter a d&#39;autres principes très différents de Bitcoin comme la &lt;em&gt;Toile de Confiance&lt;/em&gt; et le &lt;em&gt;Dividende Universel&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;En fait, Duniter a une référence théorique : la &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info&quot;&gt;Théorie Relative de la Monnaie (TRM)&lt;/a&gt;. Cette théorie démontre qu&#39;une monnaie qui vise à respecter les libertés économiques de chaque individu doit mettre en œuvre le Dividende Universel (ou Revenu de base par création monétaire). Ceci est la seule façon d&#39;éviter les asymétries spatiale et temporelle dans l&#39;émission de la monnaie.&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&quot;l-asymetrie-spatio-temporelle-dans-les-monnaies-non-libres&quot;&gt;L&#39;asymétrie spatio-temporelle dans les monnaies non libres&lt;/h2&gt;
&lt;p&gt;L&#39;asymétrie spatio-temporelle se réfère à l&#39;accès relatif des individus à la monnaie nouvellement créée.&lt;/p&gt;
&lt;p&gt;Concrètement, toutes les monnaies que nous qualifions de &quot;non libres&quot; sont à la fois spatialement et temporellement asymétriques pour leurs utilisateurs.&lt;/p&gt;
&lt;p&gt;Prenons par exemple le Bitcoin afin de comprendre pourquoi :&lt;/p&gt;
&lt;h3 id=&quot;l-asymetrie-spatiale-dans-le-bitcoin&quot;&gt;L&#39;asymétrie spatiale dans le Bitcoin&lt;/h3&gt;
&lt;p&gt;Lorsque de nouveaux BTC sont créés, &lt;em&gt;seuls certains utilisateurs&lt;/em&gt; (les mineurs) sont crédités, tandis que les autres membres de la communauté ne reçoivent rien. &lt;strong&gt;Nous pensons que ceci est la première injustice.&lt;/strong&gt; Cependant, certains pourraient dire :&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class=&quot;ui message&quot;&gt;« Mais les mineurs utilisent de l’électricité et du temps pour obtenir ces BTC! »&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;À cela, nous répondrions que ce travail &lt;em&gt;ne doit pas être récompensé par les BTC nouvellement créés&lt;/em&gt;. Les nouveaux BTC devraient être répartis dans toute la communauté. Les mineurs devraient être récompensés d’une autre façon. Bien sûr, Bitcoin ne peut pas créer de la monnaie par le Revenu de Base puisque ses utilisateurs ne sont pas fortement identifiés. En possédant plusieurs portefeuilles, ces derniers pourraient bénéficier plusieurs fois de la création de monnaie.&lt;/p&gt;
&lt;p&gt;Duniter se débarrasse de ce problème &lt;em&gt;dans sa conception&lt;/em&gt; par l&#39;identification de ses utilisateurs, ce qui permet de donner &lt;strong&gt;le même montant à tout le monde&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;l-asymetrie-temporelle-dans-le-bitcoin&quot;&gt;L&#39;asymétrie temporelle dans le Bitcoin&lt;/h3&gt;
&lt;p&gt;Bitcoin a une limite prévue de 21 millions de BTC. Cela signifie que de moins en moins de monnaie est créée au fil du temps (jusqu&#39;à plus du tout). Ainsi, une fois que les premiers arrivants auront exploité chaque BTC, comment feront les suivants pour obtenir des BTC ? La réponse est : tout comme les euros ou les dollars, pour obtenir de la monnaie, vous devrez forcément travailler pour ceux qui en possèdent déjà, ce qui ne permet pas de commencer son activité économique librement. &lt;strong&gt;Nous pensons que c’est la seconde injustice.&lt;/strong&gt; Chaque membre d&#39;une communauté monétaire devrait être égal face à l&#39;émission de la monnaie et en obtenir la même quantité relative au cours du temps, &lt;em&gt;même s&#39;il adopte le système en cours de route&lt;/em&gt;. Duniter tend à corriger ce défaut en faisant croître le Dividende Universel en fonction du temps selon des règles précises permettant aux membres d’obtenir une quantité égale de monnaie sur la période d’une demie vie.&lt;/p&gt;
&lt;h2 id=&quot;comment-s-inspirer-du-bitcoin-pour-faire-une-monnaie-libre&quot;&gt;Comment s&#39;inspirer du Bitcoin pour faire une monnaie libre&lt;/h2&gt;
&lt;p&gt;L’idée est la suivante: Bitcoin nous a enseigné &lt;em&gt;qu&#39;il est possible&lt;/em&gt; de créer un système monétaire permettant à la fois de créer la monnaie numérique et de l&#39;échanger sans autorité centrale.&lt;/p&gt;
&lt;p&gt;Que devons-nous changer de Bitcoin afin que nous ayons enfin un système symétrique ?&lt;/p&gt;
&lt;p&gt;Nous avons besoin d&#39;y ajouter le Dividende Universel.&lt;/p&gt;
&lt;p&gt;Mais le dividende universel &lt;em&gt;implique&lt;/em&gt; d&#39;avoir une communauté de personnes identifiées.&lt;/p&gt;
&lt;p&gt;C’est ici qu’intervient la toile de confiance (ou Web of Trust, WoT). Ce concept, introduit en cryptographie avec le format OpenPGP, nous permet d&#39;identifier les membres d&#39;une manière décentralisée. Il fonctionne de cette façon : chacun crée une &lt;em&gt;identité personnelle&lt;/em&gt;, liée à son certificat cryptographique, qui doit être confirmée par les autres membres en utilisant leur propre clé de chiffrement. C’est aussi simple que cela : &lt;strong&gt;les gens définissent par eux-mêmes qui fait et qui ne fait pas partie de la communauté.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Duniter n&#39;utilisera cependant pas OpenPGP pour ses fonctions cryptographiques mais plutôt les Courbes Elliptiques. Celles-ci sont beaucoup plus concises et il en résulte des avantages pratiques importants. Cela implique pour nous de définir notre propre processus de génération de toile de confiance, mais nous pensons que cela en vaut la peine.&lt;/p&gt;
&lt;h2 id=&quot;en-quoi-la-blockchain-duniter-differe-de-celle-du-bitcoin&quot;&gt;En quoi la blockchain Duniter diffère de celle du Bitcoin&lt;/h2&gt;
&lt;p&gt;Le mécanisme de blockchain de Bitcoin est important pour nous, pour deux raisons principales: &lt;strong&gt;la synchronisation et la sécurité&lt;/strong&gt;. Duniter l’utilisera aussi pour bénéficier de ces deux caractéristiques.&lt;/p&gt;
&lt;p&gt;Cependant, la blockchain de Duniter est légèrement différente : tout comme Bitcoin elle sert à stocker les transactions, mais aussi la &lt;strong&gt;Toile de Confiance&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Elle dispose également d&#39;&lt;strong&gt;un mécanisme différent de preuve de travail&lt;/strong&gt; (Proof-of-Work = PoW) rendu possible par définition de la WoT, et permettant &lt;strong&gt;une économie d&#39;énergie considérable&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;la-toile-de-confiance-wot&quot;&gt;La toile de confiance (WoT)&lt;/h3&gt;
&lt;p&gt;La toile de confiance Duniter est inscrite dans notre document commun : la blockchain. De la même manière que les transactions de Bitcoin sont écrites dans la blockchain de Bitcoin, l&#39;identité de chaque personne y est également inscrite. Ainsi, la blockchain constitue un &lt;em&gt;référentiel d&#39;espace-temps&lt;/em&gt;, où &lt;em&gt;l&#39;espace&lt;/em&gt; est représenté par les individus et &lt;em&gt;le temps&lt;/em&gt; fourni par les unités de la blockchain : les blocs.&lt;/p&gt;
&lt;p&gt;Nous sommes donc en mesure de définir la &lt;strong&gt;WoT(t)&lt;/strong&gt; : la communauté à un instant t, qui est la condition &lt;em&gt;sine qua non&lt;/em&gt; du Dividende Universel.&lt;/p&gt;
&lt;h3 id=&quot;les-transactions&quot;&gt;Les transactions&lt;/h3&gt;
&lt;p&gt;La blockchain stocke également les &lt;em&gt;transactions&lt;/em&gt; : ce sont les documents qui permettent de transférer la monnaie d&#39;un compte à un autre.&lt;/p&gt;
&lt;p&gt;Pour cette partie, Duniter ressemble vraiment à Bitcoin : les transactions ont des entrées (les comptes débités) et des sorties (les comptes crédités). La particularité de Duniter est que la monnaie débitée peut soit provenir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;d&#39;une autre transaction [comme Bitcoin]&lt;/li&gt;
&lt;li&gt;d&#39;un Dividende Universel [spécifique à Duniter]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme vous pouvez le voir, aucune &lt;em&gt;transaction de génération&lt;/em&gt; n&#39;existe dans Duniter, contrairement au Bitcoin par exemple. Ce type d&#39;opération est remplacé par le &lt;em&gt;dividende universel&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Par ailleurs, un compte peut être créé n&#39;importe quand et est &lt;em&gt;totalement indépendant de la toile de confiance&lt;/em&gt;. Un compte peut devenir membre afin de produire le Dividende Universel, mais cela n&#39;est pas une condition requise pour utiliser la monnaie. Cela nous conduit à un fait important: &lt;strong&gt;les entreprises sont également en mesure d&#39;utiliser la monnaie, mais pas de la créer&lt;/strong&gt;. Seuls les individus sont en mesure de le faire. Ceci est un point très important.&lt;/p&gt;
&lt;p&gt;Et donc, une entreprise peut tout à fait se créer un compte « porte-monnaie », qui ne fait rien d&#39;autre que recevoir de la monnaie et en envoyer. De même, un individu peut très bien avoir plusieurs comptes : un pour créer la monnaie via le Dividende Universel, puis un autre pour les paiements réguliers, un autre pour l&#39;épargne, un autre pour servir de pot commun, etc.&lt;/p&gt;
&lt;h3 id=&quot;une-preuve-de-travail-a-difficulte-personnalite&quot;&gt;Une preuve de travail à difficulté personnalité&lt;/h3&gt;
&lt;p&gt;Comme tout système de crypto-monnaie P2P, Duniter a une façon de synchroniser ses pairs pour la rédaction de son document commun : la blockchain. Celle-ci est écrite de façon régulière grâce à une &lt;em&gt;preuve de travail&lt;/em&gt;, tout comme Bitcoin. Cependant, Duniter bénéficie d&#39;un environnement très différent de celui d&#39;autres altcoins : il possède une &lt;strong&gt;toile de confiance&lt;/strong&gt;, où chaque membre est supposé représenter un unique être humain vivant.&lt;/p&gt;
&lt;p&gt;Cette différence peu paraître minime, mais elle a pourtant un impact énorme : alors que Bitcoin doit proposer une &lt;strong&gt;course généralisée&lt;/strong&gt; basée sur la puissance de machines, Duniter a la possibilité de créer un cadre &lt;em&gt;qui n&#39;est pas une course&lt;/em&gt;. Concrètement, Duniter propose plutôt &lt;em&gt;une mini-loterie&lt;/em&gt; où, chaque fois que quelqu&#39;un gagne, il se voit exclut de celle-ci pendant un certain temps. De plus, ceux qui gagnent plus souvent la course que les autres se voient handicapés, de façon à laisser les autres gagner un minimum.&lt;/p&gt;
&lt;p&gt;Cela est rendu possible car la Toile de Confiance rend possible &lt;strong&gt;la course personnalisée&lt;/strong&gt; : en posant comme principe que seuls les membres peuvent calculer de nouveaux blocs, et en rendant très dangereux le fait de calculer à plusieurs, ce mécanisme permet ainsi une rotation dans l&#39;écriture de la blockchain tout en gardant l&#39;avantage de synchronisation apporté par la preuve de travail.&lt;/p&gt;
&lt;p&gt;Mais de plus, les participants peuvent s&#39;accorder pour abaisser le niveau de difficulté de cette mini-loterie, ce qui se traduit par une diminution &lt;em&gt;directe&lt;/em&gt; de la consommation en électricité dont le niveau dépend principalement de la volonté des participants, et de leur nombre. Qui plus est, n&#39;ayant aucune création monétaire à gagner à cette loterie, on peut supposer qu&#39;injecter une forte puissance de calcul n&#39;est pas très intéressant en termes économiques.&lt;/p&gt;
&lt;p&gt;On pourrait donc dire que Duniter utilise une preuve de travail « écologique », ou à défaut qui peut tendre vers une très basse consommation relativement à Bitcoin.&lt;/p&gt;
&lt;h3 id=&quot;pour-resumer&quot;&gt;Pour résumer&lt;/h3&gt;
&lt;p&gt;La blockchain de Duniter peut être comparée à la blockchain de Bitcoin : un grand livre retraçant l&#39;histoire de la Toile de Confiance, ainsi que les transactions réalisées par ses utilisateurs.&lt;/p&gt;
&lt;p&gt;Avec la blockchain, nous avons le &lt;strong&gt;référentiel fondamental&lt;/strong&gt; de la Théorie Relative de la Monnaie : les humains, ainsi que le flux des transactions émises par les utilisateurs de la monnaie.&lt;/p&gt;
&lt;h2 id=&quot;une-economie-libre&quot;&gt;Une économie libre&lt;/h2&gt;
&lt;p&gt;Le but de tout cela est de permettre aux gens de participer à une économie libre grâce à une monnaie libre. Qu&#39;est-ce qu&#39;une économie libre ? La &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info/&quot;&gt;Théorie Relative de la Monnaie&lt;/a&gt; la définit à travers 4 libertés économiques :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La liberté de choisir son système monétaire&lt;/strong&gt; : parce que la monnaie     ne devrait pas être imposée&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La liberté d&#39;accès aux ressources&lt;/strong&gt; : parce que nous devrions tous     avoir accès aux ressources économiques et monétaires&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La liberté d&#39;estimer et de produire de la valeur&lt;/strong&gt; : parce que la     valeur est une notion relative à chaque individu, dans l&#39;espace et le     temps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La liberté d&#39;échanger dans la monnaie&lt;/strong&gt; : parce que nous ne devrions     pas être limités par le stock de monnaie disponible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces quatre libertés économiques doivent être comprises ensemble, pas exclusivement. De plus, la «&lt;em&gt;liberté&lt;/em&gt;» doit être comprise comme «&lt;em&gt;non-nuisance&lt;/em&gt;». Donc ici, la liberté ne signifie pas le droit de prendre toutes les ressources (comme une source d&#39;eau dans un désert) et qu&#39;il n&#39;y en ait plus à la disposition des autres. Maintenant vous comprenez quel est l&#39;objectif : une &lt;em&gt;économie libre&lt;/em&gt; à travers des &lt;em&gt;monnaies libres&lt;/em&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Récapitulatif des 5èmes Rencontres des Monnaies Libres : 4 jours intenses sur les systèmes monétaires !</title>
          <pubDate>Tue, 09 Jun 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/recap-of-the-5th-fmm-4-days-focusing-on-money-systems/</link>
          <guid>https://duniter.fr/blog/recap-of-the-5th-fmm-4-days-focusing-on-money-systems/</guid>
          <description xml:base="https://duniter.fr/blog/recap-of-the-5th-fmm-4-days-focusing-on-money-systems/">&lt;h1 id=&quot;recapitulatif-des-5emes-rencontres-des-monnaies-libres-4-jours-intenses-sur-les-systemes-monetaires&quot;&gt;Récapitulatif des 5èmes Rencontres des Monnaies Libres : 4 jours intenses sur les systèmes monétaires !&lt;/h1&gt;
&lt;p&gt;Ça y est ! Les &lt;strong&gt;5èmes Rencontres des Monnaies Libres sont terminées&lt;/strong&gt;. Cela a été une &lt;a href=&quot;https://duniter.fr/blog/ucoin-at-the-5th-freedom-money-meeting/&quot;&gt;très riche expérience de 4 jours&lt;/a&gt; à se concentrer sur les systèmes monétaires. Voici ci-dessous un récapitulatif rapide de ce qui s&#39;est passé durant ces jours pour ceux d&#39;entre-vous qui ne sont pas venus .&lt;/p&gt;
&lt;h2 id=&quot;premier-jour-plongeon-dans-le-protocole-ucoin&quot;&gt;Premier jour : plongeon dans le protocole uCoin&lt;/h2&gt;
&lt;p&gt;Le tout premier jour était une présentation faite par votre serviteur (cgeek) à propos du logiciel uCoin et de son protocole. Nous nous sommes intéressés aux détails techniques sur le fonctionnement de uCoin, sur les règles qui régissent sont protocole monétaire.&lt;/p&gt;
&lt;p&gt;La présentation était en Français, vous pouvez la retrouver ici : &lt;a href=&quot;/PELICAN/files/Presentation_FMM5.odp&quot;&gt;Presentation_FMM5.odp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/PELICAN/files/FMM5_Presentation_en.odp&quot;&gt;&lt;img src=&quot;/PELICAN/images/2015/08/fmm5_presentation.png&quot; alt=&quot;Presentation&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;deuxieme-journee-les-logiciels-cutecoin-ucoinapps&quot;&gt;Deuxième journée : les logiciels CuteCoin &amp;amp; uCoinApps !&lt;/h2&gt;
&lt;p&gt;Cette journée était une opportunité pour les logiciels client d&#39;être présentés. Voyons les 2 premiers : &lt;em&gt;CuteCoin&lt;/em&gt; et &lt;em&gt;uCoinApps&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;cutecoin&quot;&gt;CuteCoin&lt;/h3&gt;
&lt;p&gt;La matinée était dédiée à &lt;a rel=&quot;external&quot; href=&quot;https://github.com/duniter/sakia&quot;&gt;CuteCoin&lt;/a&gt;, le tout premier client du logiciel uCoin. Nous avons vu :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L&#39;état actuel de l&#39;application&lt;/li&gt;
&lt;li&gt;Le travail restant à effectuer&lt;/li&gt;
&lt;li&gt;Le processus de développement (tests unitaires, intégration continue)&lt;/li&gt;
&lt;li&gt;Et les fonctionnalités à venir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dès à présent, CuteCoin vous permet de réaliser tout les opérations de base proposées par le logiciel uCoin. C&#39;est aussi le premier à proposer une vue du réseau !&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;center-content&quot;&gt; &lt;img src=&quot;/PELICAN/images/2015/08/Capture-du-2015-06-09-21-38-05.png&quot; alt=&quot;Vue de la Toile de Confiance de cgeek vers inso&quot; /&gt; &lt;i&gt;Vue de la Toile de Confiance de cgeek vers inso&lt;/i&gt; &lt;/span&gt; &lt;span class=&quot;center-content&quot;&gt; &lt;img src=&quot;/PELICAN/images/2015/08/network2.png&quot; alt=&quot;Vue d&amp;#39;ensemble du réseau de la monnaie meta_brouzouf&quot; /&gt; &lt;i&gt;Vue d&#39;ensemble du réseau de la monnaie meta_brouzouf&lt;/i&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La présentation est aussi disponible au téléchargement ici : &lt;a href=&quot;/PELICAN/files/FMM5-Cutecoin-Presentation-FR.odp&quot;&gt;FMM5 Cutecoin Presentation (fr)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/PELICAN/files/FMM5-Cutecoin-Presentation-FR.odp&quot;&gt;&lt;img src=&quot;/PELICAN/images/2015/08/cutecoin_pres.png&quot; alt=&quot;cutecoin_pres&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;ucoinapps&quot;&gt;uCoinApps&lt;/h3&gt;
&lt;p&gt;L&#39;après-midi était dédiée à uCoinApps, le petit frère de CuteCoin étant donné qu&#39;il s&#39;agit du second client de uCoin. uCoinApps est une application Android qui vous permet de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vous connecter à un réseau monétaire existant&lt;/li&gt;
&lt;li&gt;créer votre compte personnel&lt;/li&gt;
&lt;li&gt;publier votre identité&lt;/li&gt;
&lt;li&gt;certifier d&#39;autres membres&lt;/li&gt;
&lt;li&gt;voir l&#39;état de votre compte&lt;/li&gt;
&lt;li&gt;transférer de la monnaie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&#39;application est disponible sur &lt;a rel=&quot;external&quot; href=&quot;https://play.google.com/store/apps/details?id=io.ucoin.ucoin&quot;&gt;Google Play&lt;/a&gt;. Vous pouvez aussi trouver &lt;a rel=&quot;external&quot; href=&quot;http://www.ucoin.fr/utiliser/ucoinapps-android/&quot;&gt;un tutoriel en français&lt;/a&gt; pour l&#39;utiliser sur le site web &lt;a rel=&quot;external&quot; href=&quot;http://ucoin.fr&quot;&gt;ucoin.fr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/2015/08/account_ucoinapps.png&quot; alt=&quot;ucoin_apps&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L&#39;auteur de l&#39;application a également réalisé une présentation disponible au téléchargement : &lt;a href=&quot;/PELICAN/files/FMM5-uCoinApps-Presentation-fr.odp&quot;&gt;FMM5 uCoinApps Presentation (fr)&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;troisieme-jour-simulation-sur-160-ans-de-differents-systemes-monetaires&quot;&gt;Troisième jour : simulation sur 160 ans de différents systèmes monétaires&lt;/h2&gt;
&lt;p&gt;Ce jour était l&#39;opportunité pour les non-développeurs de découvrir un jeu français nommé &lt;a rel=&quot;external&quot; href=&quot;http://www.valeureux.org/blog/les-jeux/jeu-la-corbeille/&quot;&gt;La Corbeille&lt;/a&gt;. Ce jeu consiste en la simulation d&#39;une &lt;strong&gt;économie&lt;/strong&gt; en produisant des valeurs via le système monétaire disponible. Le but est de comprendre le code monétaire sous-jacent et de voir les conséquences de son utilisation. Durant cette session, nous avons essayé 2 systèmes monétaires :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le système de monnaie-dette (celui utilisé par toutes les monnaies du monde, incluant donc l&#39;€ et le $) le matin&lt;/li&gt;
&lt;li&gt;Le système de Monnaie Libre (celui réalisé par uCoin) l&#39;après-midi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les résultats de cette session sont disponibles au téléchargement sur GitHub : &lt;a rel=&quot;external&quot; href=&quot;https://github.com/galuel/Geconomicus/raw/master/Exemple_de_suivi_tableur.ods&quot;&gt;fichier LibreOffice Calc&lt;/a&gt;.
Vous pouvez également accéder au projet &lt;a rel=&quot;external&quot; href=&quot;https://github.com/galuel/Geconomicus&quot;&gt;Ğeconomicus&lt;/a&gt; qui fournit un ensemble d&#39;images et d&#39;outils libres et gratuits pour créer vos propres simulations d&#39;une économie sur la base d&#39;une espérance de vie des hommes de 80 ans. Voici une vidéo récapitulative en français de cette journée, ainsi qu&#39;un autre résumé sur &lt;a rel=&quot;external&quot; href=&quot;http://www.creationmonetaire.info/2015/06/video-geconomicus-la-corbeille-aux-5emes-rencontres-des-monnaies-libres.html&quot;&gt;creationmonetaire.info&lt;/a&gt; :&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/LdHFPcyjKQA?list=PL0UDqLtXevvHY5rAyFtql5931VqYyRaoK&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;quatrieme-jour-contributions-non-techniques&quot;&gt;Quatrième jour : contributions non-techniques&lt;/h2&gt;
&lt;p&gt;Un dernier jour était dédié aux contributions dites non-techniques, c&#39;est-à-dire ne traitant pas du code logiciel.&lt;/p&gt;
&lt;h3 id=&quot;une-nouvelle-demonstration-mathematique&quot;&gt;Une nouvelle démonstration mathématique&lt;/h3&gt;
&lt;p&gt;La matinée fut le théâtre d&#39;une nouvelle démonstration de Stéphane Laborde, l&#39;auteur de la Théorie Relative de la Monnaie (TRM), qui stipule qu&#39;une monnaie en expansion qui assurerait le Revenu de Base à travers une taxe &lt;strong&gt;a un équivalent en Monnaie Libre&lt;/strong&gt;, c&#39;est-à-dire une monnaie uniquement en expansion mais sans aucune taxe. Cette démonstration mathématique peut être trouvée dans la dernière version de la TRM dans ce fichier : &lt;a rel=&quot;external&quot; href=&quot;http://trm.creationmonetaire.info/TheorieRelativedelaMonnaie.pdf&quot;&gt;Théorie Relative de la Monnaie&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;presentation-de-david-chazalviel-la-trm-en-couleur-et-la-trm-pour-les-enfants&quot;&gt;Présentation de David Chazalviel : &quot;La TRM en couleur&quot; et &quot;La TRM pour les enfants&quot;&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://cuckooland.free.fr/index.html&quot;&gt;David Chazalviel&lt;/a&gt; a réalisé une présentation de ses 2 dernières contributions pour communiquer à propos des Monnaies Libres :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La TRM en couleur&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;http://cuckooland.free.fr/LaTrmEnCouleur.html&quot;&gt;en français&lt;/a&gt; est une superbe application web pour simuler et explorer les concepts de la Monnaie Libre.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/2015/08/rtm_in_color-1024x664.png&quot; alt=&quot;La TRM en couleurs&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La TRM pour les enfants&lt;/strong&gt; en &lt;a rel=&quot;external&quot; href=&quot;http://cuckooland.free.fr/LaTrmPourLesEnfants.html&quot;&gt;français&lt;/a&gt; est une présentation interactive tentant d&#39;expliquer ce qu&#39;est une Monnaie Libre ainsi que la TRM à des enfants, grâce à Elise et son amie la Fée :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/2015/08/rtm_for_the_kids.png&quot; alt=&quot;La TRM pour les enfants&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;inscriptions-a-la-monnaie-meta-brouzouf&quot;&gt;Inscriptions à la monnaie meta_brouzouf&lt;/h3&gt;
&lt;p&gt;L&#39;après-midi était l&#39;occasion pour les personnes d&#39;essayer CuteCoin et &lt;a rel=&quot;external&quot; href=&quot;http://forum.duniter.org/t/subscribing-to-meta-brouzouf-testing-currency&quot;&gt;s&#39;inscrire à la monnaie meta_brouzouf&lt;/a&gt; ! Comme vous pouvez le voir, nous sommes maintenant 23 membres actifs à tester uCoin :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/2015/08/wot_fmm5.png&quot; alt=&quot;Toile de confiance uCoin&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Et voici une vue d&#39;ensemble de la monnaie :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/PELICAN/images/2015/08/metab_fmm5.png&quot; alt=&quot;Statistiques Meta Brouzouf&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Cette 1ère édition des Rencontres des Monnaies Libres 2015 fut un franc succès avec beaucoup de nouvelles personnes rencontrées et sensibilisées aux codes monétaires, beaucoup de détails techniques ont pu être expliqués et &lt;strong&gt;les toutes premières applications clientes&lt;/strong&gt; CuteCoin et uCoinApps ont été présentées et testées par des utilisateurs finaux ! Que nous attend-il pour les &lt;a rel=&quot;external&quot; href=&quot;https://www.google.fr/maps/place/Valence/@44.8679005,4.9135516,11z/data=!4m2!3m1!1s0x47f55799c63221c7:0x408ab2ae4bfb580&quot;&gt;prochaines Rencontres des Monnaies Libres à Valence en Novembre 2015&lt;/a&gt; ? Les mois qui viennent nous le diront, mais soyez sûrs que beaucoup de travail est à accomplir d&#39;ici là !&lt;/p&gt;
</description>
      </item>
      <item>
          <title>uCoin aux 5èmes Rencontres des Monnaies Libres !</title>
          <pubDate>Thu, 05 Feb 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://duniter.fr/blog/ucoin-at-the-5th-freedom-money-meeting/</link>
          <guid>https://duniter.fr/blog/ucoin-at-the-5th-freedom-money-meeting/</guid>
          <description xml:base="https://duniter.fr/blog/ucoin-at-the-5th-freedom-money-meeting/">&lt;h1 id=&quot;ucoin-aux-5emes-rencontres-des-monnaies-libres&quot;&gt;uCoin aux 5èmes Rencontres des Monnaies Libres !&lt;/h1&gt;
&lt;p&gt;Le projet uCoin sera sous les projecteurs des 5èmes Rencontres des Monnaies Libres (RML ou Freedom Money Meeting - FMM) ces &lt;strong&gt;4 et 5 Juin 2015 à Paris&lt;/strong&gt; ! Cet événement sera une grande occasion pour nous de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;faire &lt;em&gt;une démonstration en direct&lt;/em&gt; en créant notre monnaie FMM5 !&lt;/li&gt;
&lt;li&gt;présenter plus en détails à la fois les logiciels &lt;em&gt;cœur&lt;/em&gt; et &lt;em&gt;client&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;donner les plans du projet pour les mois à venir&lt;/li&gt;
&lt;li&gt;expliquer plus précisément la philosophie du projet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Donc si vous êtes un potentiel développeur, testeur ou promoteur du projet, n&#39;hésitez pas à vous inscrire à cet événement ! Vous trouverez ci-dessous l&#39;annonce officielle faite sur le site web &lt;a rel=&quot;external&quot; href=&quot;http://www.openudc.org/2015/02/05/5th-freedom-money-meeting-4th-to-7th-june-2015-paris/&quot;&gt;www.openudc.org&lt;/a&gt;, avec les détails d&#39;inscription et d&#39;organisation de la rencontre. En espérant vous y retrouver !&lt;/p&gt;
&lt;blockquote&gt;
&lt;h1 id=&quot;5th-freedom-money-meeting-4th-to-7th-june-2015-paris&quot;&gt;5th Freedom Money Meeting 4th to 7th June 2015 Paris&lt;/h1&gt;
&lt;h6 id=&quot;posted-on-february-5-2015-08-49-by-galuel&quot;&gt;&lt;em&gt;Posted on &lt;a rel=&quot;external&quot; href=&quot;http://www.openudc.org/2015/02/05/5th-freedom-money-meeting-4th-to-7th-june-2015-paris/&quot;&gt;February 5, 2015&lt;/a&gt; 08:49 by &lt;a rel=&quot;external&quot; title=&quot;View all posts by Galuel&quot; href=&quot;http://www.openudc.org/author/galuel/&quot;&gt;Galuel&lt;/a&gt;&lt;/em&gt;&lt;/h6&gt;
&lt;p&gt;The 5th freedom money meeting (FMM5, “Rencontres des Monnaies Libres”) will take place in France / Paris – Montreuil, 4th, 5th, 6th and 7th June 2015. You can subscribe emailing [galuel at glibre dot org](mailto:galuel at glibre dot org &quot;mailto galuel at glibre dot org&quot;). You can also contribute to the event by publishing those informations in your own website. The program is an indication, and will be modified during next months.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;4th June 2015 : uCoin core (for developpers only)&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Introduction, presentation and running uCoin core&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review of different WoT algorithm and how to code them in uCoin core&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Code review of Nodejs, uCoin, objects, class and code architecture&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to compile and produce full uCoin package&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RoadMap and more…&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;5th June 2015 : Cutecoin + uCoin Apps (mobile) (for developpers only)&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Introduction and presentation of Cutecoin code architecture (Python etc…)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compiling and Running last Cutecoin version, joining a uCoin free money community&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Introduction and presentation of uCoin Apps, a uCoin mobile client&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RoadMap and more&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;6th June 2015 : Game “La Corbeille” new version 3.0 ! (Open to any contributor)&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;morning (9h00) : subscriptions to the game and rules explanations, choice of money models to play&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;morning (10h00) : Game start with first money code played 80 years&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Morning (13h00) : Lunch&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Afternoon (14h00) : Game with next money code played 80 years&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Afternoon (18h00) : collecting game data, first comments towards video and text production&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;7th June 2015 : Other contributions&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Morning (10h00): Relative Money Theory conference about demonstration a new RTM Theorem “Law of transformation RdB/DU” : full equivalence (not completion) of referentials between free money and basic income based systems + how to contribute to RTM development&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Afternoon (14h00) : Contributors to freedom money meet developers and exchange about how to join project and testing money community with CuteCoin.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to play “La Corbeille 3.0″, collect data, developp the game community and development of a “Corbeille game data” internet site.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to produce conference about freedom money, with return of experiences, sharing data and graphics.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;France / Paris – Montreuil (near &lt;a rel=&quot;external&quot; title=&quot;Mairie de Montreuil on OpenStreet Map&quot; href=&quot;http://www.openstreetmap.org/node/255161399#map=12/48.8761/2.3035&quot;&gt;Métro Mairie de Montreuil&lt;/a&gt; more details after subscription).&lt;/p&gt;
&lt;iframe src=&quot;https://www.openstreetmap.org/export/embed.html?bbox=2.2539138793945312%2C48.76592046318992%2C2.6281356811523438%2C48.957228082603905&amp;amp;layer=mapnik&amp;amp;marker=48.8615527456014%2C2.4410247802734375&quot; width=&quot;425&quot; height=&quot;350&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;small&gt;[Afficher une carte plus grande](http://www.openstreetmap.org/?mlat=48.8616&amp;mlon=2.4410#map=12/48.8617/2.4410)&lt;/small&gt;
&lt;p&gt;Propositions of organisation for 6th Freedom Money Meeting, &lt;strong&gt;must be sent before 31st August 2015&lt;/strong&gt;. The event needs to take place around November 2015, just send mail to any &lt;a rel=&quot;external&quot; title=&quot;OpenUDC&quot; href=&quot;http://www.openudc.org/&quot;&gt;OpenUDC&lt;/a&gt; or&lt;a rel=&quot;external&quot; title=&quot;uCoin&quot; href=&quot;http://www.ucoin.io/&quot;&gt;uCoin&lt;/a&gt; contributor or connect to the XMPP chatroom.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      </item>
    </channel>
</rss>
