From b4e0ebfdb3f1e589ac062a1a17299dad80982865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rard=20Meunier?= Date: Tue, 26 Feb 2019 17:06:42 +0100 Subject: [PATCH] Idem --- .../Documentation/Duniter/Manual.en.txt | Bin 5717 -> 6872 bytes .../Documentation/Duniter/Manual.fr.txt | 70 ++++++++--------- Server version/Help/Manual.pdf | Bin 63610 -> 63610 bytes Server version/Sources/Duniter/Sandbox.txt | 16 ++-- Server version/Sources/Duniter/Server.txt | 2 +- Server version/Sources/Duniter/ServerML.txt | 2 +- Server version/Sources/Duniter/WotWizard.txt | 52 +++++++------ .../Documentation/Duniter0/Manual.en.txt | 6 +- .../Documentation/Duniter0/Manual.fr.txt | 4 +- Standalone version/Help/Manual.en.pdf | Bin 115510 -> 116206 bytes Standalone version/Help/Manual.fr.pdf | Bin 137487 -> 140835 bytes .../Sources/Duniter0/Events.txt | 2 + .../Sources/Duniter0/IdentitySearch.txt | 73 +++++++++++++----- .../Sources/Duniter0/Sandbox.txt | 16 ++-- .../Sources/Duniter0/WotWizard.txt | 54 +++++++------ 15 files changed, 173 insertions(+), 124 deletions(-) diff --git a/Server version/Documentation/Duniter/Manual.en.txt b/Server version/Documentation/Duniter/Manual.en.txt index f5ca91bf5d7a66f368f46b86166104a30a7fc894..c03b3ae22f95d06ec7809ff62343c31020b205ec 100644 GIT binary patch literal 6872 zcmcIpOK&5`5gt>v*K)$V9oxwv6~Tz41vPrb_Ifw5O+9ukWVI4RD#Y3jjNwd^Y-`v} zPtS{eT>DFyKQr*lXZl5FkGKl3Px>#HSzug22|v2?A`s>YfqFm6Qjv89 z>v_|-{s3ot-2SXC2B}jKW{$KTJwADMT*?>miIv@SQtnt8xfT#IrU*+prQY%5xtx!m z_Pj6S`Xij}@yOFp;OunDmsQg=kX3`QrU*hn>%_IEaqW96WQ+DLnBV{jUPt`wu zJQur{#q1uaX|EivtY$tidV1^xdET!ekj=ek1$)lik(^pOjGZGb4krV}(_>y+9Bkj~ z`HizPpMRd6#lq+K!rI6ebk7Odt(Cmr{d{bIC*3|S^Bf$P+{t?oq@_>BLHa7sVn4W} zfa~~6`GY3TY{N}=f9Los`2e5TpjYzy+s9wauZq*Z*SY|?G}3xDU;Uug&wT3acdq5@ zsnMd z29pXOf8A;0eKS9^2a03r6I?wu+T^?}DKllYlR z3%7Wug6|OH|935>Sf$5!o2d*x9!LJ;BNWdI$bxHJY_W_BqebThWD&)qMK0V-{95oT@63`sf;%V2zV95VA3E-=Vm);+B26I z7yJFbZ{CTK4!%y>iz`dZ&o8?Bg(!{}`ckc~EDSEau&}yxX?baB#lIzcoESfV+;dbo zGtmD6ou3$?J;`(~m$)1hf$q?@9)1@q&w>1>P=e8`l}?=;g@c!Y7Z2lMk; zke9soR!ZJS=6jemCHcorKjr&(@t75PD3p7aBE0R?9q4O)KlR)5G2xl4%1`*>EKJtj zz!{j#@yG-w`P2y-z=Xd&g@FrI{`u?u`}Z&KnhSsAt8e3KitEk&QbVT=c`HaF+746} z#O0bu4n;!vGg7N^sa)?!L%l?|lb}nuY$ZaF(XF%}B;pDUbw**JC=rn~c~?O)r9efC zI-#zPWNXL|G8I8?+7W~p?;6rAdjn#pYXaR}5YukfjAckUvr~Y5`HAU>h?+w?{VMNX z%Xg=%8d8H4ie4chA^SveS}iunrBw*p%mpbcoRIGEqIqaJq&R>=g~5LLl))prB9h8# z(a}Aa(SbA=)|YWiO+lFvtt_q(`YLK{)nD7$uT%BLO=?v4_Nq7PH?Lr3+R+#lhr-E` z-CitV9H2}Bl@3|w?ajUQ*D$}jwsn20ev{R{x>diiS*y|2ojt13ZgsD|wZ4D7x<|YF zd%HWeO`oU+SQy(9@VuMjdDr22H%FjE)UqB)1VsWZb!=emP5941t2m-ga46u%P{>2* z6i}#pRwI`CuiO-C)wZ@lgHfzpA=x6O(+c$y5ErG|DtMj)E3~CTze3NyM0EjJ1ntH_ zC}@Fd882U5U8>NUHmOz>+O85Utt>AuFD$Pvy;!0BS{0_0%A;s*W-^XU1<|UzcHd^K z!-KGc7YPncGWcog0Rx`*85LOE<0uX}G>YhHWoZVy@WzrzVS^UI9!Ufp?xf0%%0*B^ zG;IMG+mz>9mIw~gm6Oiv@xZL&6lVwF#IxNnq4JQ>QsrXWjo7wUvT91kh$ zu}u-jW-_D}LV&tb@hbv=0bradtYq76X=EE^D#rXnX+RtC&}aCAL`l`YOk+U>+b#af z{tN!fOGTP7N|EdDIKWS(VUcKP1le+4Jn(5lt67UCz+CoU^aq7FIR7=>=MdxVWcmt% zVS=}m5D~ke09@hqkCIHWx`5GYXo9Xl%y)Y*I`JoI08fI8k6Rl?^H|#H7H7W>BQX41i4xQUZwb5Hw;kl)$pW3*D@+)t<4Khg!8{o8ymD zFiNnyVIx5{#ytfC@latFTo^P1Krm;(2Tc*{{=8*ptVlRyM3kqzrEF|C${4UMLe#Op zR`C$}S<^sH3cF|m5B6e&AQPw&am&UUUb?dw0W~N5w(l(JBMEvzTX5_%vWU6&B^my8+SiEDn6n<*zikl6W{B@EgUeXAHr!y|^Z7Aoy(7Uvj!zh~1)Xf9d- zqW&`Bc6#ITo4!lbH*-cS&Tr-OihDn5V!^s2QC2%2r^6u5kggzDBx%Zqu}@Hn_!>UJ zRGTw-nlJ8|BwXCW+p(VxQnVEX?eauxO_%GBV+r7m#>@3j@NJ~gQ3-k{(_Fyj1pGSl zUs*6SU*Hx8Nn2o_uIO^68hHxjkmUg!CQE(3J(~xF&4~=8eazA<&m*k6ta*Gsgsy4U4`7$oEJFZ^YQeycG>J|ZR zyBNGXvI*l=fw4zF$IYgrTFy_KF0Nh_p|!CFs`fdJ<}21oVJPrz4{l;aWI}mEggVPq z2B~O;G0aU3_a|v^fX;&Ogqv~O8K$x;DgfM7%2VZpfi9YlqMD2u1g#a)Ak&%QnpD(+ zyoMBSFJnc7HS^oIK&;alRkl%C*g4a7!X#N9(-H=`#czN$9c| z^1NmO^*N-sLWcpsk}>wfO+jxqu~21fJC#E+5;iB(S)|W@*t5--%eIj`(WL_nT%@D% zV3H5eGbYj;KqflMAVEB$s= zp|_xQ)VYI#r}KG8^)5#R>(UJp>& zAF(}8I?)7O8y3#kmpshN3{SEf3YCF+M3-hZ!KbwFGOfGG#NVgQ3<9&XZ<|KDoltM< z;dk-Y@yp+vAl7IISld?ecQkR@@W7f@04l@R8dzcDeu2Jo^y<;2qn)F*qaPlGZWPls|FCeB`FZe^beC^K(-o@{33-rb! zDZ7u^{11vmquX|$*w@n}|IYf1mw=s6$ zQ+V+aJHX?I_CZ1a68ZMPKh8bpR$rOwO1&30qZ6TPk@rTG z(3!}MmUJVnQ%3iCwGdW5r=_VW6`HKfl&h?o)RiPv5e)4Z zONGhQbjc5Dok>g8Tv8=%;mAz=m)ED4^jd0ZMNa4SBv&cDRjJfYlEAtA#LZm7#F2^)HeMeWri;Lmu_}z1?tmX#4${QK% zsG`gjffbbkC0^ZD^ZNa)88O-5_^sZKbp42MO+yH1bg+F$Z zoAf%J3sex$B!~Yd=9UxwvevL~2MD-i6sHW020hcds*x_K0d46)3$SMjpu;z%V@%Nm zUC9Y=9NXGew0U(l-b&~g(05oY$f=?R*gDpmeT9T)TDc;jt2waYfDmqo(m1CkDpwUB zUWg@1RF)D6kRqKE_bKv?4yhPKKo{`nn{^_ZT?vf=i?)w=F`Pk6qOME8A?8FOfw`i@sWw^PkEM<@yuFcd78|aV&dkCgzthmt%|^D0LTS*5 zu5Sk@lB?h#^%qLZJ|eRYkVHuQ6Fg!zQV3?i8^fw}I_vwOQ=_M9#sFadGK z;VCG9e`>-)4#h+u0h{{&`G+PtgM4 zgG`|vD`S@flrZdyfm6mYxnBYsazDYBxOJ7t)m9$~$F@2tKt)hyK(BH;1?gTh&v*o} zfgGvgN)$-bLGO#+7vJIJwFcN#CQ9T4UNHS5zA2M2#e|3~v(h=gd0theJJ{J-EEY*{ zI5Bp%^JI7L=}!2*4Kv#~V*knZ?Xw?j@9#d_+uePVyjNxKaBd9p=~+7m{A$4nM4^r{ zaPRhy>DUomd(EI>K) zoEgdmhR(DirTmJ4xt*ohR!7_Lc!qUO7cQdR*&I--}KPrU9iNHoUG$Ec$m|O6p_PW5T z#VZ-|e5Aq567-C5^pdgTpPw|?VMuv)>!{4iLkJBF_C4CLu6Df0J0f)r1(QWfGKXO? zjnShH9MiZK6_I!4!pqQsn8aD%tTfU;U*QBSfIeb6Mp8w6C;;ziON8w)U3-?47k(^H&5sVIxTcB zM36h^*>3!YjKSZKd%qz{K99Lzh*f$Tl3da7VOUrQ1X&jZ&4s4qQqQV6@^y?00=t|- z8{sK)6kA_l=;fe0Y4k*dM|@I4f=!PlbO|ZAe`K=?_4nEv%LDt6bR3F#0olM58V`dm z$s zquVk^r`jN4oPjGdrsnBm6<9L?d27}q554AEAfshuy=>9z(AyXzd9*`MYcw-HgjuXJ zE`yBOm1bf_t5nO9dxdAsK%=Oi6)AA(d7M{2e9pj(7rKKqoQj0 zhq!*+rm_r8ByMn#4A+gI-;KYT=NXQ8Jts|FLaqD5&h|cSg1JiOo{~tp4!cPjd+;yPOCH=3FY@UE)R6Li_+&1Rn`WU<+&Oi*|qIPI@Dx4_EbeLuWB(_F--!RXy*0!Tqed31iQk#mJ|LzwjN)zkmWe zp-VIR?tSD3gHIkY*zRtuwohP-j|c|#A2Fc#jfHo|AKq^G{ubRs$%ArlbewnLn5W;e zYgMle?-zQ?pL?&j19P<@oS>yZ#QuO~ZulaUEVBbOule0tl(V+Z3MP zaAop6;6KFr`oYE2m`?eKq<0cpV}nlp=-N5c6F7Ed7#Nzl*4KTF%3^D6#3h)&a3c)u zE@vvfX9z?Z`#fgU)59vjZ~zB)4_2$j`u65~Y=6?jWWZc9#*03eGnH{RFeVka2F9GU z{mes==Q|G6r;XpO>KVVV;~5A8A^#%vFU;~wydwMf$4`H7cyWvCA2ayWe)Z$+$ diff --git a/Server version/Documentation/Duniter/Manual.fr.txt b/Server version/Documentation/Duniter/Manual.fr.txt index 280125c..7a29e74 100644 --- a/Server version/Documentation/Duniter/Manual.fr.txt +++ b/Server version/Documentation/Duniter/Manual.fr.txt @@ -1,5 +1,5 @@ WotWizard : Mode d'emploi -Version autonome +Version serveur This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. @@ -9,50 +9,50 @@ You should have received a copy of the GNU General Public License along with thi WotWizard construit, à partir de la chaîne de blocs et de la piscine de Duniter, une prédiction des futures entrées des candidats dans la toile de confiance (Wot) de Duniter. Il utilise pour cela une simulation du mécanisme de Duniter. Lorsque plusieurs dates d'entrées sont possibles pour la même personne, chacune est affectée d'une probabilité. La liste affichée est mise à jour automatiquement toutes les cinq minutes, et tout changement est signalé par une marque visible. + +Attention : Il est nécessaire d'utiliser la version 1.6.29 de Duniter ou une version ultérieure de la série 1.6.x. Ne pas utiliser de version de la série 1.7.x. + Comment l'utiliser ? + Ce programme doit être utilisé sur un ordinateur faisant tourner un nœud Duniter. Ce programme tourne nativement sous Windows. Si votre ordinateur tourne sous Linux, installez d'abord "wine", et, dans un terminal, lancez "winecfg" et configurez les lecteurs de façon à pouvoir atteindre sans problème la base de données de Duniter (voir ci-dessous). -Copiez le fichier "WotWizard.exe" dans un répertoire vide, placez la dll Windows "sqlite3.dll" dans le même répertoire et lancez WotWizard en double-cliquant dessus ou avec la commande en ligne : + +Vous pouvez utiliser WotWizard uniquement comme serveur, si vous voulez assurer vous-même l'affichage de ses résultats, par exemple dans une page web. Dans ce cas, placez une copie de "WWServer.exe" dans un répertoire vide et placez la dll Windows "sqlite3.dll" dans le même répertoire. Vous aurez alors à lancer "WWServer.exe" aussi souvent que nécessaire avec la ligne de commande : - $wine WotWizard.exe + $wine WWServer.exe -La dll peut être téléchargée à l'adresse : +ou directement de votre application. La dll peut être téléchargée à l'adresse : https://www.sqlite.org/2015/sqlite-dll-win32-x86-3081002.zip -Choisissez votre langue dans "Édition -> Préférences...". -Ouvrez WotWizard avec "Duniter -> Nouvelle fenêtre WotWizard". Lorsque cette commande est utilisée pour la première fois, WotWizard demande où se trouve la base de données de Duniter. Une première fenêtre s'ouvre avec le texte "Ouvrez la base de données Duniter". Cliquez sur "OK". Une autre fenêtre s'ouvre alors et permet de naviguer jusqu'au fichier de la base. Par exemple, sur Linux, le chemin de ce fichier est : + +À la fin de son exécution, WWServer écrit deux fichiers, en syntaxe json : WWByDates.json, qui liste les entrées des nouveaux venus triées et groupées par dates, et WWMeta.json, qui donne quelques metadonnées sur le calcul et les données d'origine. + +Vous devez donner à WWServer deux informations : + - le chemin vers la base de données de Duniter. + Par défaut : + D:\.config\duniter\duniter_default\duniter.db + Vous pouvez changer cette donnée en créant (ou en modifiant) le fichier Duniter/Rsrc/Init.txt ; attention : le chemin doit être encadré par deux guillemets. Exemple : + "D:\.config\duniter\duniter_default\duniter.db" + - la taille maximale de mémoire en octets (approximativement) qu'il a le droit d'allouer. + Par défaut : 430000000 + Vous pouvez changer cette donnée en créant (ou en modifiant) le fichier Duniter/Rsrc/WW_Max_Stack.txt. + +Vous pouvez modifier la langue utilisée dans les fichiers de sortie à l'aide des options : + + $wine WWServer.exe -lang fr pour un sortie en français, ou + $wine WWServer.exe -lang en pour une sortie en anglais. + +Lors du premier lancement de WWServer, une partie des données de Duniter sont recopiées pour accélérer ensuite leur traitement. Cette opération peut être assez longue. + +Si vous voulez afficher en continu les résultats de WWServer, copiez le fichier "WotWizard.exe" dans le même répertoire que "WWServer.exe" et lancez WotWizard avec la ligne de commande : - ~/.config/duniter/duniter_default/duniter.db -Lors de la première ouverture de WotWizard, une partie des données de Duniter sont recopiées pour accélérer ensuite leur traitement. Cette opération peut être assez longue, et on peut voir, en bas de l'application, défiler les numéros des blocs copiés. + $wine WotWizard.exe + Vous pouvez : - - choisir la façon dont la liste est affichée (par noms ou par dates) + - choisir la façon dont la liste est affichée (par noms ou par dates, ou les métadonnées) - mettre à jour la liste manuellement (elle est mise à jour automatiquement toutes les cinq minutes) -Lorque la liste change, deux astérisques apparaissent, une de chaque côté du titre, et un nouveau bouton "Vérifier" est créé. En cliquant sur le bouton, on fait disparaître les marques et on peut comparer les anciennes et nouvelles listes (par dates et métadonnées) en cliquant sur le bouton "Comparer", ou en utilsant la commande de menu "Èdition -> Comparer les textes". -Vous pouvez changer la mémoire maximale allouée par WotWizard. Plus elle est grande, plus les prévisions de WotWizard seront précises, mais si elle est trop grande, WotWizard peut se bloquer. Par défaut, elle vaut 800000000 octets. Pour la changer, utilisez la commande de menu "Édition -> Changer la taille maximale de la pile". -Dans de rares cas, on peut vouloir changer le chemin vers la base de données de Duniter. Utiliser alors "Édition -> Changer la base de données Duniter". -On peut aussi, rarement, vouloir remettre à zéro la base de données que WotWizard construit à partir de celle de Duniter. Dans ce cas, on utilise "Édition -> Réinitialiser la base de données de WotWizard". Attention : cette opération peut être longue. -Explorateur de toile de confiance -Ouvrez l'explorateur avec la commande de menu "Toile de confiance -> chercher une identité". - -Voir la carte de l'explorateur. -On peut chercher n'importe quelle identité dans la chaîne de blocs ou dans la piscine en tapant ses premiers caractères ou les premiers caractères de sa clé publique dans le premier champ en haut de la fenêtre et en cliquant sur le bouton "Chercher". Les identités correspondantes s'affichent dans la liste en bas de la fenêtre : choisissez celle qui vous intéresse. Des informations apparaissent dans le cadre "Identité", ainsi que les certifications reçues et envoyées dans le cadre "Certifications". Il est possible de copier l'identité d'un émetteur ou d'un récepteur de certification dans le champ de recherche en cliquant sur bouton "Copier" correspondant. -Toutes les dates affichées sont des dates limites d'expiration, sauf la date de disponibilité de la prochaine certification émise, dans le champ "Disponibilité" ; si cette dernière est déjà disponible, elle est précédée d'un point d'exclamation (!). -Outils -Paramètres : Affiche les paramètres de base de la monnaie. -Imprimer les identités : Affiche toutes les identités présentes dans la chaîne de blocs, avec leurs clés publiques et la date de leurs derniers renouvellements de membre. -Certifications depuis... : Affiche toutes les certifications présentes dans la chaîne de blocs, triées par émetteurs, avec leurs dates d'inscription. -Certifications vers... : Affiche toutes les certifications présentes dans la chaîne de blocs, triées par récepteurs, avec leurs dates d'inscription. -Membres référents : Affiche les identités des membres référents. -Piscine : Affiche les identités et les certifications présentes dans la piscine ; - 1) Identités triées par leurs hashs, avec hash, clé publique, id et date d'expiration - 2) Identités triées par leurs clés publiques, avec clé publique et hash - 3) Identités triées par leurs ids, avec id et hash - 4) Certifications triées par les clés publiques de leurs émetteurs, avec date d'expiration - 5) Certifications triées par les clés publiques de leurs récepteurs, avec date d'expiration -Horloge : Donne l'heure UTC+0 de sa dernière mise à jour, ainsi que les champs "medianTime" et "Time" du bloc précédent. -Nombre de membres : Affiche la liste des numéros des jours et des nombres de membres corrspondants depuis le début de la monnaie. -Certificateurs : Affiche les nombres de certifications par émetteur dans la chaîne de blocs, triés par nombres de certifications émises. -Dates : Transforme les horodatages de la chaîne de blocs en dates et heures. + +Lorque la liste change, deux astérisques apparaissent, une de chaque côté du titre, et un nouveau bouton "Vérifier" est créé. En cliquant sur le bouton, on fait disparaître les marques. Vous pouvez alors comparer la nouvelle liste et l'ancienne en cliquant sur le bouton "Comparer", ou avec la commande de menu "Édition -> Comparer les textes". Use it and enjoy! - ¡Úsalos y disfrútalos! - Bonne utilisation - Приятного использованияn - Powodzenia - Viel Spaß diff --git a/Server version/Help/Manual.pdf b/Server version/Help/Manual.pdf index 01d310dc4ae89f83e583e17ad3af8e806982da5d..bb6636485afa3a63a534bf0781df090dbdc5593b 100644 GIT binary patch delta 252 zcmezMf%(@5<_*#xd5uz1lF|$ejdjfp(<~={_#{8s{bLq}sKVrXA1!!|bdAhH49%>J zEv!t mt) THEN diff --git a/Standalone version/Documentation/Duniter0/Manual.en.txt b/Standalone version/Documentation/Duniter0/Manual.en.txt index c3e32bf..b3e9a93 100644 --- a/Standalone version/Documentation/Duniter0/Manual.en.txt +++ b/Standalone version/Documentation/Duniter0/Manual.en.txt @@ -11,10 +11,12 @@ You should have received a copy of the GNU General Public License along with thi WotWizard builds, from the blockchain and sandbox of Duniter, a prediction of the future entries of candidates into the Duniter Web of Trust (WOT). It uses a simulation of the Duniter mechanism. When several possibilities may happen, each one is listed with its probability. The published lists are automatically updated every five minutes, and any change is signaled visually. The StandAlone Version contains several tools and a fast Web of Trust Explorer. +Warning: You should use the 1.6.29 version of duniter or any later version in the series 1.6.x. Don't use a 1.7.x version. + How to use it? This program needs a Duniter node running on the same computer. This program runs natively on Windows. If your computer runs on Linux, install "wine" first, and, in a terminal, run "winecfg" and configure the drives to be sure that the Duniter database (see below) can be reached. -Put the file "WotWizard.exe" into an empty directory, put the Windows dll "sqlite3.dll" into the same directory and run WotWizard with a double-click or with the line command from the directory (under Linux): +Put the file "WotWizard.exe" into an empty directory, put the Windows dll "sqlite3.dll" into the same directory and run WotWizard with a double-click or with the command line from the directory (under Linux): $wine WotWizard.exe @@ -58,7 +60,7 @@ Web of Trust Explorer Open the WoT Explorer with the menu command "Web of Trust -> Explorer". See the explorer map. -You can search any identity in the blockchain or the sandbox by typing its first characters or the first characters of its public key into the first top field and by clicking on the "Search" button. The possible identities appear in the list at the bottom: choose the one you want to look at. Some details appear in the "Identity" frame, and the certifications, received and sent, in the "Certifications" frame. You can look at the identity of one of the senders or receivers by clicking on the corresponding "Go" button; step back with the arrow buttons. You can also display a text of informations on certifiers or certified identities by clicking on one of the "D" buttons (list of present certifiers or certified identities, sorted by alphabetic order and by expiration dates of certifications, and list of all non-revoked certifiers or certified identities of all times, able to certify or be certified again). +You can search any identity in the blockchain or the sandbox by typing its first characters or the first characters of its public key into the first top field and by clicking on the "Search" button. The possible identities appear in the list at the bottom: choose the one you want to look at. Some details appear in the "Identity" frame, and the certifications, received and sent, in the "Certifications" frame. You can look at the identity of one of the senders or receivers by clicking on the corresponding "Go" button; step back with the arrow buttons. You can also display a text of informations on certifiers or certified identities by clicking on one of the "D" buttons (list of present certifiers or certified identities, sorted by alphabetic order, by expiration dates of membership (or limit date before revocation if the identity is no more member - "×" before her name) and by expiration dates of certifications, and list of all non-revoked certifiers or certified identities of all times, able to certify or be certified again). Displayed dates are member's registration date into the blockchain, expiration dates, of member's membership and of her certifications, and the availability date of the next sent certification in the field "Availability" (if already available, this date comes after an exclamation mark "!"). If member's end of membership has been requested, her expiration date of membership is preceded by a cross (×). In this case, she can no more get new certifications, and, without renewal of her membership, she will be excluded at this date. The degree of centrality c of a member is the number of oriented paths (certifier -> certified) of shortest lengths to which she belongs and whose length is, at most, stepMax (5) plus one steps from the certifier. The centrality level c' of a member is calculated from her degree of centrality c by the expression: diff --git a/Standalone version/Documentation/Duniter0/Manual.fr.txt b/Standalone version/Documentation/Duniter0/Manual.fr.txt index 8b96c69..6d1f5dc 100644 --- a/Standalone version/Documentation/Duniter0/Manual.fr.txt +++ b/Standalone version/Documentation/Duniter0/Manual.fr.txt @@ -10,6 +10,8 @@ You should have received a copy of the GNU General Public License along with thi WotWizard construit, à partir de la chaîne de blocs et de la piscine de Duniter, une prédiction des futures entrées des candidats dans la toile de confiance (TdC, ou Wot en anglais) de Duniter. Il utilise pour cela une simulation du mécanisme de Duniter. Lorsque plusieurs dates d'entrées sont possibles pour la même personne, chacune est affectée d'une probabilité. La liste affichée est mise à jour automatiquement toutes les cinq minutes, et tout changement est signalé par une marque visible. La version StandAlone (autonome) contient plusieurs outils supplémentaires et un Explorateur de Toile de Confiance rapide. + +Attention : Il est nécessaire d'utiliser la version 1.6.29 de Duniter ou une version ultérieure de la série 1.6.x. Ne pas utiliser de version de la série 1.7.x. Comment l'utiliser ? Ce programme doit être utilisé sur un ordinateur faisant tourner un nœud Duniter. Ce programme tourne nativement sous Windows. Si votre ordinateur tourne sous Linux, installez d'abord "wine", et, dans un terminal, lancez "winecfg" et configurez les lecteurs de façon à pouvoir atteindre sans problème la base de données de Duniter (voir ci-dessous). @@ -57,7 +59,7 @@ Explorateur de toile de confiance Ouvrez l'explorateur avec la commande de menu "Toile de confiance -> chercher une identité". Voir la carte de l'explorateur. -On peut chercher n'importe quelle identité dans la chaîne de blocs ou dans la piscine en tapant ses premiers caractères ou les premiers caractères de sa clé publique dans le premier champ en haut de la fenêtre et en cliquant sur le bouton "Chercher". Les identités correspondantes s'affichent dans la liste en bas de la fenêtre : choisissez celle qui vous intéresse. Des informations apparaissent dans le cadre "Identité", ainsi que les certifications reçues et envoyées dans le cadre "Certifications". Il est possible d'afficher l'identité d'un émetteur ou d'un récepteur de certification en cliquant sur bouton "Voir" correspondant ; on peut revenir en arrière avec les boutons fléchés. On peut aussi afficher un texte d'informations sur les certificateurs et certifiés en cliquant sur l'un des boutons "A" (liste des certificateurs ou certifiés actuels, classés par ordres alphabétiques et par dates limites de validité des certifications, et liste de tous les certificateurs ou certifiés ayant existé et non-révoqués et pouvant donc à nouveau soit certifier, soit être certifiés). +On peut chercher n'importe quelle identité dans la chaîne de blocs ou dans la piscine en tapant ses premiers caractères ou les premiers caractères de sa clé publique dans le premier champ en haut de la fenêtre et en cliquant sur le bouton "Chercher". Les identités correspondantes s'affichent dans la liste en bas de la fenêtre : choisissez celle qui vous intéresse. Des informations apparaissent dans le cadre "Identité", ainsi que les certifications reçues et envoyées dans le cadre "Certifications". Il est possible d'afficher l'identité d'un émetteur ou d'un récepteur de certification en cliquant sur bouton "Voir" correspondant ; on peut revenir en arrière avec les boutons fléchés. On peut aussi afficher un texte d'informations sur les certificateurs et certifiés en cliquant sur l'un des boutons "A" (liste des certificateurs ou certifiés actuels, classés par ordres alphabétiques, par date limite des demandes d'adhésion (ou date limite avant révocation si la personne concernée n'est plus membre - "×" devant le nom) et par dates limites de validité des certifications, et liste de tous les certificateurs ou certifiés ayant existé et non-révoqués et pouvant donc à nouveau soit certifier, soit être certifiés). Les dates affichées sont la date d'enregistrement du membre dans la chaîne de blocs, les dates limites d'expiration, pour l'inscription du membre et pour ses certifications, et la date de disponibilité de la prochaine certification émise dans le champ "Disponibilité" ; si cette dernière est déjà disponible, elle est précédée d'un point d'exclamation (!). Si le membre a demandé l'arrêt de son adhésion, la date limite de son inscription est précédée d'une croix (×). Dans ce cas, il ne peut plus recevoir de certifications, et, sauf renouvellement de son adhésion, il sera exclu à cette date. Le degré de centralité c d'un membre est le nombre de chemins orientés (certificateur -> certifié) les plus courts auxquels il appartient est dont la longueur est, au plus, stepMax (5) plus un depuis le certificateur. Le niveau de centralité c' d'un membre est calculé à partir de son degré de centralité c par l'expression : diff --git a/Standalone version/Help/Manual.en.pdf b/Standalone version/Help/Manual.en.pdf index 5ed065ad706b4f51362e6d94e85ea3c1e6274f19..d58ed75d897a1464ab565e5cec31670e3d53759a 100644 GIT binary patch delta 14146 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 Cv5DmX diff --git a/Standalone version/Help/Manual.fr.pdf b/Standalone version/Help/Manual.fr.pdf index a8a8130851bfb8cd32838195d9bf15f68dc44e69..6dfd3d3107f1c586dd6276562bd0a729398f238d 100644 GIT binary patch delta 23178 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 Y*n9b0^Ky1Uf-sI@d8CYt9!VehFO^zqasU7T diff --git a/Standalone version/Sources/Duniter0/Events.txt b/Standalone version/Sources/Duniter0/Events.txt index abb8c4c..9ce5083 100644 --- a/Standalone version/Sources/Duniter0/Events.txt +++ b/Standalone version/Sources/Duniter0/Events.txt @@ -438,9 +438,11 @@ MODULE Duniter0Events; END; f.WriteString(' '); f.WriteString(ms[i].id); + (* f.WriteString(' ('); f.WriteString(ms[i](CertifEnd).criticalCertifier); f.WriteString(")"); + *) f.WriteLn; END; Views.OpenAux(TextViews.dir.New(t), s); diff --git a/Standalone version/Sources/Duniter0/IdentitySearch.txt b/Standalone version/Sources/Duniter0/IdentitySearch.txt index fb01dea..8779136 100644 --- a/Standalone version/Sources/Duniter0/IdentitySearch.txt +++ b/Standalone version/Sources/Duniter0/IdentitySearch.txt @@ -157,11 +157,13 @@ MODULE Duniter0IdentitySearch; r: RingEl; BEGIN (*Push*) - NEW(r); - r.next := ring; r.prev := ring.pos; - ring.prev := r; ring.pos.next := r; - ring.pos := r; - NEW(r.item, LEN(item$) + 1); r.item^ := item$; + IF (ring.pos = ring) OR (ring.pos.item$ # item$) THEN + NEW(r); + r.next := ring; r.prev := ring.pos; + ring.prev := r; ring.pos.next := r; + ring.pos := r; + NEW(r.item, LEN(item$) + 1); r.item^ := item$; + END; END Push; PROCEDURE (ring: RingHd) Change (IN item: ARRAY OF CHAR), NEW; @@ -295,7 +297,7 @@ MODULE Duniter0IdentitySearch; NEW(idE); idE.uid := uid; idE.hash := hash; e := idE; - b := set.SearchIns(e, n); ASSERT(~b, 102); + b := set.SearchIns(e, n); (* ASSERT(~b, 102);*) INC(nF); IF identityDispFut THEN NEW(idE); @@ -914,10 +916,11 @@ MODULE Duniter0IdentitySearch; title: Views.Title; a: TextModels.Attributes; es: ExpSort; - p: B.Pubkey; + p, q: B.Pubkey; b, bb, m: BOOLEAN; h: B.Hash; uid: BA.String; + exp: LONGINT; BEGIN (*PrintCertifiers*) IF identity.fields[0] # "" THEN @@ -935,21 +938,29 @@ MODULE Duniter0IdentitySearch; NEW(es.ids, receivedCerts.len); NEW(es.dates, receivedCerts.len); NEW(es.exps, receivedCerts.len); + j := 0; FOR i := 0 TO receivedCerts.len - 1 DO receivedCerts.GetItem(i, item); f.WriteString(item); f.WriteLn; - es.ids[i] := item; + es.ids[j] := item; + b := item[0] # futureIcon; FilterItem(item); - b := B.IdUidComplete(item, p, m, h, bnb, es.exps[i]) OR S.IdHash(receivedHash[i], bb, p, uid, es.exps[i]); ASSERT(b, 100); - BA.TimestampToString(es.exps[i], es.dates[i]); + IF b OR B.IdUid(item, p) & B.IdUid(identity.fields[0], q) & ~B.Cert(p, q, bnb, exp) OR S.IdHash(identity.fields[5]$, bb, q, uid, exp) & ~bb THEN + b := B.IdUidComplete(item, p, m, h, bnb, es.exps[j]); ASSERT(b, 100); + IF ~m THEN + es.ids[j] := oldIcon + item; + END; + BA.TimestampToString(es.exps[j], es.dates[j]); + INC(j); + END; END; f.WriteLn; a := f.rider.attr; f.rider.SetAttr(TextModels.NewWeight(f.rider.attr, Fonts.bold)); f.WriteMsg("#Duniter0:SortedByMExpDates"); f.rider.SetAttr(a); f.WriteLn; f.WriteLn; - es.QuickSort(0, receivedCerts.len - 1); - FOR i := 0 TO receivedCerts.len - 1 DO + es.QuickSort(0, j - 1); + FOR i := 0 TO j - 1 DO f.WriteString(es.dates[i]); f.WriteTab; f.WriteString(es.ids[i]); f.WriteLn; @@ -1013,15 +1024,16 @@ MODULE Duniter0IdentitySearch; cert: B.StringArr; t: TextModels.Model; f: TextMappers.Formatter; - i, bnb: INTEGER; + i, bnb, j: INTEGER; item: Dialog.String; title: Views.Title; a: TextModels.Attributes; es: ExpSort; - p: B.Pubkey; + p, q: B.Pubkey; b, bb, m: BOOLEAN; h: B.Hash; uid: BA.String; + exp: LONGINT; BEGIN (*PrintCertified*) IF identity.fields[0] # "" THEN @@ -1039,21 +1051,32 @@ MODULE Duniter0IdentitySearch; NEW(es.ids, sentCerts.len); NEW(es.dates, sentCerts.len); NEW(es.exps, sentCerts.len); + j := 0; FOR i := 0 TO sentCerts.len - 1 DO sentCerts.GetItem(i, item); f.WriteString(item); f.WriteLn; - es.ids[i] := item; + es.ids[j] := item; + b := item[0] # futureIcon; FilterItem(item); - b := B.IdUidComplete(item, p, m, h, bnb, es.exps[i]) OR S.IdHash(sentHash[i], bb, p, uid, es.exps[i]); ASSERT(b, 100); - BA.TimestampToString(es.exps[i], es.dates[i]); + IF b OR B.IdUid(identity.fields[0], p) & B.IdUid(item, q) & ~B.Cert(p, q, bnb, exp) OR S.IdHash(sentHash[i], bb, q, uid, exp) & ~bb THEN + IF B.IdUidComplete(item, p, m, h, bnb, es.exps[j]) THEN + IF ~m THEN + es.ids[j] := oldIcon + item; + END; + ELSE + b := S.IdHash(sentHash[i], bb, p, uid, es.exps[j]); ASSERT(b, 100); + END; + BA.TimestampToString(es.exps[j], es.dates[j]); + INC(j); + END; END; f.WriteLn; a := f.rider.attr; f.rider.SetAttr(TextModels.NewWeight(f.rider.attr, Fonts.bold)); f.WriteMsg("#Duniter0:SortedByMExpDates"); f.rider.SetAttr(a); f.WriteLn; f.WriteLn; - es.QuickSort(0, sentCerts.len - 1); - FOR i := 0 TO sentCerts.len - 1 DO + es.QuickSort(0, j - 1); + FOR i := 0 TO j - 1 DO f.WriteString(es.dates[i]); f.WriteTab; f.WriteString(es.ids[i]); f.WriteLn; @@ -1175,8 +1198,20 @@ MODULE Duniter0IdentitySearch; END; END NbNotifier; + PROCEDURE Update (VAR changed: BOOLEAN); + + BEGIN (*Update*) + IF changed & (identity.fields[0] # "") THEN + hint.item := identity.fields[0]; + Search; + END; + END Update; + BEGIN (*Duniter0IdentitySearch*) identity.calcDist := TRUE; identity.calcQual := FALSE; identity.calcCentr := FALSE; identityDispOld := FALSE; identityDispMem := TRUE; identityDispFut := TRUE; InitRing(ring); + B.AddUpdateProc(Update) + CLOSE + B.RemoveUpdateProc(Update); END Duniter0IdentitySearch. diff --git a/Standalone version/Sources/Duniter0/Sandbox.txt b/Standalone version/Sources/Duniter0/Sandbox.txt index 792bda6..5dc38b8 100644 --- a/Standalone version/Sources/Duniter0/Sandbox.txt +++ b/Standalone version/Sources/Duniter0/Sandbox.txt @@ -572,7 +572,7 @@ MODULE Duniter0Sandbox; BEGIN (*MembershipIds*) t := d.NewTable(); ASSERT(t # NIL, 100); - REPEAT + REPEAT (* Membership applications *) t.Exec("SELECT m.idtyHash, m.membership, m.issuer, m.userid, m.expires_on FROM membership m INNER JOIN block b ON m.blockHash = b.hash WHERE NOT b.fork ORDER BY m.blockNumber ASC"); ASSERT(t.res IN {0, 6}, 101); UNTIL t.res = 0; @@ -587,18 +587,18 @@ MODULE Duniter0Sandbox; WITH e: IdHashE DO e.ref.pubkey := curOwn.pubkey; e.ref.uid := curOwn.uid; - e.ref.expires_on := MAX(e.ref.expires_on, curOwn.expires_on); + e.ref.expires_on := MAX(e.ref.expires_on, curOwn.expires_on); (* The last one is the good one *) END; - ELSE ASSERT(curOwn.inOrOut$ = "OUT", 103); + ELSE ASSERT(curOwn.inOrOut$ = "OUT", 103); (* Leaving *) b := tr.Delete(idH); END; END; A.New(idHashT); e := tr.Next(NIL); - WHILE e # NIL DO + WHILE e # NIL DO (* For every membership applications *) WITH e: IdHashE DO - IF B.IdHash(e.ref.hash, p) THEN - IF B.IdPubComplete(p, uid, b, h, bnb, exp) & ~b & (exp # BA.revoked) THEN + IF B.IdHash(e.ref.hash, p) THEN (* If identity already in BC... *) + IF B.IdPubComplete(p, uid, b, h, bnb, exp) & ~b & (exp # BA.revoked) THEN (* ... and if no more member but not revoked *) NEW(id); id.inBC := TRUE; id.hash := e.ref.hash; id.pubkey := p; id.uid := uid; id.bid := bnb; @@ -606,8 +606,8 @@ MODULE Duniter0Sandbox; NEW(idH); idH.ref := id; ee := idH; b := idHashT.SearchIns(ee, n); ASSERT(~b, 104); END; - ELSIF ~(B.IdPub(e.ref.pubkey, uid) OR B.IdUid(e.ref.uid, p)) THEN - REPEAT + ELSIF ~(B.IdPub(e.ref.pubkey, uid) OR B.IdUid(e.ref.uid, p)) THEN (* Not in BC *) + REPEAT (* New identities *) t.Exec("SELECT pubkey, uid, buid, expires_on FROM idty WHERE revocation_sig IS NULL AND hash = '" + e.ref.hash + "'"); ASSERT(t.res IN {0, 6}, 105); UNTIL t.res = 0; diff --git a/Standalone version/Sources/Duniter0/WotWizard.txt b/Standalone version/Sources/Duniter0/WotWizard.txt index c88c30d..50c6ec6 100644 --- a/Standalone version/Sources/Duniter0/WotWizard.txt +++ b/Standalone version/Sources/Duniter0/WotWizard.txt @@ -1008,7 +1008,7 @@ MODULE Duniter0WotWizard; ok, okP, b, idInBC: BOOLEAN; pos, posI: S.CertPos; - posB, posBI: B.CertPos; + posB, posBI, posBF: B.CertPos; from, to: B.Pubkey; toHash, h: S.Hash; i, j, nbCertifs, princCertif, bnb, n, cNbU: INTEGER; @@ -1036,7 +1036,7 @@ MODULE Duniter0WotWizard; posB := posBI; REPEAT okP := posB.CertNextPos(from, to); - IF okP THEN + IF okP & (~B.CertFrom(from, posBF) OR (posBF.CertPosLen() < B.pars.sigStock)) THEN (* Don't consider certifications sent by a member who already has sent sigStock (100) certifications *) b := B.Cert(from, to, bnb, exp) ; ASSERT(b, 101); FixCertNextDate(from, date); IF date <= exp THEN (* Not-expired certification *) @@ -1051,7 +1051,7 @@ MODULE Duniter0WotWizard; pos := posI; REPEAT okP := pos.CertNextPos(from, toHash); - IF okP THEN + IF okP & (~B.CertFrom(from, posBF) OR (posBF.CertPosLen() < B.pars.sigStock)) THEN b := S.Cert(from, toHash, to, exp) ; ASSERT(b, 102); FixCertNextDate(from, date); IF date <= exp THEN (* Not-expired certification *) @@ -1082,40 +1082,44 @@ MODULE Duniter0WotWizard; posB := posBI; okP := posB.CertNextPos(from, to); WHILE okP DO - b := B.Cert(from, to, bnb, exp); ASSERT(b, 104); + IF ~B.CertFrom(from, posBF) OR (posBF.CertPosLen() < B.pars.sigStock) THEN + b := B.Cert(from, to, bnb, exp); ASSERT(b, 104); + FixCertNextDate(from, date); + IF date <= exp THEN + NEW(ps); ps.p := from; e := ps; + b := useful.SearchIns(e, n); + NEW(c); NEW(c.fromP); + c.fromP^ := from; + b := B.IdPub(from, c.from); ASSERT(b, 105); + c.date := date; + c.limit := exp; + d.certifs[j] := c; + INC(j); + END; + END; + okP := posB.CertNextPos(from, to); + END; + END; + pos := posI; + okP := pos.CertNextPos(from, toHash); + WHILE okP DO + IF ~B.CertFrom(from, posBF) OR (posBF.CertPosLen() < B.pars.sigStock) THEN + b := S.Cert(from, toHash, to, exp); ASSERT(b, 106); FixCertNextDate(from, date); IF date <= exp THEN NEW(ps); ps.p := from; e := ps; b := useful.SearchIns(e, n); NEW(c); NEW(c.fromP); c.fromP^ := from; - b := B.IdPub(from, c.from); ASSERT(b, 105); + b := B.IdPub(from, c.from); ASSERT(b, 107); c.date := date; c.limit := exp; d.certifs[j] := c; INC(j); END; - okP := posB.CertNextPos(from, to); - END; - END; - pos := posI; - okP := pos.CertNextPos(from, toHash); - WHILE okP DO - b := S.Cert(from, toHash, to, exp); ASSERT(b, 106); - FixCertNextDate(from, date); - IF date <= exp THEN - NEW(ps); ps.p := from; e := ps; - b := useful.SearchIns(e, n); - NEW(c); NEW(c.fromP); - c.fromP^ := from; - b := B.IdPub(from, c.from); ASSERT(b, 107); - c.date := date; - c.limit := exp; - d.certifs[j] := c; - INC(j); END; okP := pos.CertNextPos(from, toHash); - END;; + END; END; END; END; @@ -1133,7 +1137,7 @@ MODULE Duniter0WotWizard; WHILE ok DO IF pos.CertNextPos(from, toHash) & S.Cert(from, toHash, to, exp) THEN REPEAT - IF B.IdPubComplete(to, uid, b, h, bnb, t) & b THEN + IF B.IdPubComplete(to, uid, b, h, bnb, t) & b & (~B.CertFrom(from, posBF) OR (posBF.CertPosLen() < B.pars.sigStock)) THEN FixCertNextDate(from, date); (* Si la certif n'est pas encore passée au dernier bloc alors qu'elle aurait dû passer à ce bloc ou avant, il y a peu de chance qu'elle passe plus tard et il vaut mieux l'enlever ; il faut aussi l'enlever si elle a dépassé sa date limite ; peut-être inutile maintenant *) IF (date <= exp) & (date > mt) THEN