Skip to content

Commit

Permalink
Idem
Browse files Browse the repository at this point in the history
  • Loading branch information
gerard94 committed Feb 26, 2019
1 parent 4a2bfb1 commit b4e0ebf
Show file tree
Hide file tree
Showing 15 changed files with 173 additions and 124 deletions.
Binary file modified Server version/Documentation/Duniter/Manual.en.txt
Binary file not shown.
70 changes: 35 additions & 35 deletions Server version/Documentation/Duniter/Manual.fr.txt
Original file line number Diff line number Diff line change
@@ -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.

Expand All @@ -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ß

Expand Down
Binary file modified Server version/Help/Manual.pdf
Binary file not shown.
16 changes: 8 additions & 8 deletions Server version/Sources/Duniter/Sandbox.txt
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,7 @@ MODULE DuniterSandbox;

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;
Expand All @@ -587,27 +587,27 @@ MODULE DuniterSandbox;
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;
id.expires_on := MIN(ABS(exp), e.ref.expires_on);
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;
Expand Down
2 changes: 1 addition & 1 deletion Server version/Sources/Duniter/Server.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ MODULE DuniterServer;

CONST

version = "2.8.5se";
version = "2.8.6se";
rsrcDir = "Duniter/Rsrc"; (* Directory for the two following files *)
parametersName = "Parameters.txt"; (* File containing the greatest allowed allocated memory size for W.CalcPermutations *)
runningName = "Running.odc"; (* File whose existence shows that WWServer.exe is running *)
Expand Down
2 changes: 1 addition & 1 deletion Server version/Sources/Duniter/ServerML.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ MODULE DuniterServerML;

CONST

version = "2.8.5se";
version = "2.8.6se";

textConv = "CpcUtf8Conv.ExportUtf8";

Expand Down
52 changes: 28 additions & 24 deletions Server version/Sources/Duniter/WotWizard.txt
Original file line number Diff line number Diff line change
Expand Up @@ -932,7 +932,7 @@ MODULE DuniterWotWizard;

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;
Expand Down Expand Up @@ -961,7 +961,7 @@ MODULE DuniterWotWizard;
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 *)
Expand All @@ -976,7 +976,7 @@ MODULE DuniterWotWizard;
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 *)
Expand All @@ -1001,37 +1001,41 @@ MODULE DuniterWotWizard;
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;
Expand All @@ -1053,7 +1057,7 @@ MODULE DuniterWotWizard;
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
Expand Down
6 changes: 4 additions & 2 deletions Standalone version/Documentation/Duniter0/Manual.en.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down
Loading

0 comments on commit b4e0ebf

Please sign in to comment.