Pour qu'un bloc soit considéré comme valide dans un système basé sur la Proof of Justice, une ou plusieurs entités ayant un rôle d'exécuteur (Pa1) doivent comparer la liste de transactions (T1) du générateur avec sa propre liste de transactions (T2), comme si Pa1 générait lui-même un bloc, et fournir finalement le résultat de la comparaison (ou sa preuve) (Cr1) au générateur, ledit générateur comprenant alors Cr1 dans ledit bloc.
Il n'est pas recommandé qu'une grande quantité d'Exécuteurs vérifie et signe chaque liste de transactions proposée par chaque Générateur donné, car cela pourrait conduire à de graves problèmes d'évolutivité et de performance à terme. Par conséquent, tout comme le(s) partenaire(s) d'un demandeur, un sous-ensemble d'un ou plusieurs responsables de l'application doit être sélectionné de manière déterminée et traçable pour un générateur donné, en trouvant un équilibre entre la sécurité statistique et la performance.
Selon l'étape 302 de la figure 3, tout d'abord, Pa1 est sélectionné à l'aide du processus de sélection d'entités susmentionné. Le Peterson (P1) du générateur, selon la mise en œuvre de la Proof of Justice, est également introduit dans ledit processus de sélection d'entités.
Selon l'étape 304, une fois que Pa1 a été sélectionné, le générateur envoie un message (M1) à Pa1, dans lequel M1 contient PT1. Une fois que Pa1 reçoit M1, il génère son propre Peterson (P2) en utilisant le processus Peterson -> procédé de génération mentionné ci-dessus. Pa1 évalue ensuite M1 et détermine la validité de M1 en l'analysant. L'analyse peut varier considérablement en fonction des informations de pré-blocage qui y sont incluses, mais elle implique toujours Pa1 :
-
Générer sa propre liste de transactions (T2) à partir de son propre "mempool" ;
-
S'assurer que T2 est organisé de la même manière que T1 l'a été ; et
-
Établir la différence (ou l'indication/la preuve de celle-ci) (D1) entre T1 et T2.
Une partie importante de la validation qui devrait être dans toutes les implémentations de Proof of Justice est de déterminer et d'évaluer la distance entre P1 et P2. Pour ce faire, Pa1 utiliserait le processus Peterson -> Suivi mentionné ci-dessus pour P1, puis déterminerait la distance en blocs entre P1 et le bloc que le Peterson a utilisé pour générer P2.
Selon l'étape 306, Pa1 inclut ensuite P2 et D1 dans un message de réponse (M2). Dans une mise en œuvre donnée de la Proof of Justice, M2 comprendrait également des informations supplémentaires, telles que le hachage d'au moins une partie pertinente de M1. M2 est ensuite signé et renvoyé au générateur.
Dans une ou plusieurs mises en œuvre, un mécanisme où les transactions (ou leurs indications) dans M2 sont considérées comme validées lorsqu'elles sont incluses par le générateur dans le nouveau bloc (car, dans plusieurs mises en œuvre, les transactions dans M2, une fois incluses dans le bloc, seraient utilisées comme référence uniquement et sans être considérées comme validées et confirmées).
Selon l'étape 308, il est déterminé si le générateur (ou son Pa1, dans une ou plusieurs implémentations) a besoin d'un ou plusieurs autres Exécuteurs. En effet, dans une ou plusieurs mises en oeuvre, il pourrait être jugé qu'un Exécuteur aurait besoin de se faire "exécuter" lui-même afin d'augmenter la sécurité. La nécessité de sélectionner un autre Exécuteur et le nombre d'Exécuteurs à sélectionner peuvent être déterminés par divers moyens, selon la mise en œuvre de la Proof of Justice, tels que le niveau du Générateur (ou de l'Exécuteur), un paramètre de Proof of Justice, un ratio d'augmentation de l'activité malveillante détectée dans le réseau établi en analysant le nombre d'entités punies sur un nombre donné de blocs, une recommandation par un ou plusieurs Exécuteur(s), et/ou similaire. Dans une ou plusieurs mises en œuvre, le besoin d'un ou plusieurs Exécuteur(s) est inclus par le Générateur (ou son Exécuteur précédent, si et quand cela est applicable) dans M1.
Selon l'étape 310, dans une mise en œuvre donnée, le générateur sélectionnerait ensuite, de la même manière qu'à l'étape 302, un autre agent d'exécution (PaN+1). Dans une autre mise en œuvre, PaN (où Pa1 est pour la première itération) serait celui qui sélectionne PaN+1 à la place du générateur. Cela peut être fait comme un moyen de résilience supplémentaire contre les activités malveillantes qui pourraient être tentées par les générateurs (ou leur(s) précédent(s) Exécuteur(s)) dans le réseau.
Selon l'étape 312, une fois que PaN+1 a été sélectionné, PaN envoie un message (MN) à PaN+1, dans lequel MN contient M1 (ou une version signée de PT1, selon l'implémentation). Dans une ou plusieurs implémentations, MN contiendrait également des informations sur les Exécuteurs précédemment sélectionnés, le nombre d'Exécuteurs restant à sélectionner pour le Générateur (et/ou l'un de ses Exécuteurs précédents), les informations de chaînage actuelles (l'ordre de sélection des Exécuteurs) et/ou des informations similaires. Lorsque PaN+1 reçoit MN, il génère son propre Peterson (PN+1) en utilisant le processus Peterson -> procédé de génération mentionné ci-dessus. PaN+1 évalue ensuite MN et détermine la validité de MN en l'analysant. L'analyse peut varier considérablement en fonction des informations de pré-blocage incluses, mais elle implique toujours PaN+1 :
-
Générer sa propre liste de transactions (TN+1) à partir de son propre "mempool" ;
-
S'assurer que TN+1 est organisée de la même manière que T1 (et TN, le cas échéant, de celle-ci) a été organisée ; et
-
Établissement de la différence (ou indication/preuve de celle-ci) (DN+1) entre T1 (ou TN de celle-ci) et TN+1. Dans une ou plusieurs mises en oeuvre, au lieu de comparer T1 (ou TN de celle-ci) à TN+1, DN est comparé à TN+1. Dans une ou plusieurs mises en oeuvre, le résultat d'une comparaison entre DN+1 et DN est renvoyé à la place de DN+1.
Dans une ou plusieurs implémentations, si DN+1 contient un nombre de différences supérieur à un seuil déterminé, le bloc est considéré comme invalide, et le processus est donc terminé. Il est recommandé qu'une pluralité d'Exécuteurs doivent arriver à une conclusion similaire avant de mettre fin au processus, afin d'empêcher d'éventuelles attaques sur le réseau par les Exécuteurs. Dans une ou plusieurs implémentations, les Exécuteurs qui arrivent à des conclusions anormales sont éventuellement punis par une ou plusieurs règles.
Dans une ou plusieurs mises en œuvre, la moyenne de chaque conclusion de l'Exécuteur est considérée comme la différence finale selon T1 et TN+X. Dans une ou plusieurs mises en œuvre, les conclusions anormales sont exclues du calcul de la moyenne.
Une partie importante de la validation qui devrait être dans toutes les implémentations de Proof of Justice est de déterminer et d'évaluer la distance entre P1, PN, et PN+1. Pour ce faire, PaN+1 utiliserait le processus Peterson -> Suivi mentionné ci-dessus pour P1, puis déterminerait la distance en blocs entre P1 et le bloc que Peterson a utilisé pour générer PN+1. Il fait ensuite de même pour PN et PN+1. Il est entendu que le temps de latence entre la demande M1 initiale et les demandes ultérieures est destiné à être pris en compte lors de la détermination de DN+1. Ainsi, dans une ou plusieurs mises en œuvre, un seuil de latence d'acceptation est utilisé, ledit seuil pouvant être déterminé par divers moyens. Par exemple, il peut être calculé :
-
Basé sur le nombre d'Exécuteurs(s) à utiliser pour un bloc donné ;
-
Basé sur la latence moyenne globale du réseau signalée par une ou plusieurs entités ayant un rôle spécialisé donné ;
-
Sur la base d'un paramètre de Proof of Justice ; et/ou
tout autre calcul jugé pertinent pour une mise en œuvre donnée de Proof of Justice.
Selon l'étape 314, PaN+1 inclut ensuite DN+1, PN+1 (et/ou PN-X, selon une ou plusieurs mises en œuvre) (et P1, selon une ou plusieurs mises en œuvre) dans un message de réponse (MN+1). Dans une mise en œuvre donnée de la Proof of Justice, MN+1 comprendrait également des informations supplémentaires, telles que le hachage d'au moins une partie pertinente de M1 (et/ou MN, selon la mise en œuvre). Le MN+1 est ensuite signé et renvoyé au générateur (ou à PaN, qui le transmet à PaN-1 et PaN-1 compile les informations avant de les transmettre à PaN-2 et ainsi de suite jusqu'à Pa1, qui transmet les informations compilées au générateur).
Ensuite, l'étape 308 est exécutée à nouveau. S'il est déterminé à l'étape 308 qu'un agent d'exécution supplémentaire est nécessaire, les étapes 310 à 314 sont répétées. Sinon, l'étape 316 est traitée.
Selon l'étape 316, le Générateur compile ensuite les informations reçues par tous les Exécuteurs.
Figure 3.