La Drawchain™ régit l'intégralité des tirages effectués sur Pickaw et vous permet de vérifier que tout se déroule normalement. C'est le socle commun où repose toute la structure et la technique des tirages effectués sur Pickaw.
Pour commencer, voici un schéma représentatif de la Drawchain™ pour vous faire une image mentale et mieux comprendre la suite qui sera un peu plus technique.
La Drawchain™ régit l'ensemble des tirages effectués sur Pickaw grâce aux liens entre les seed pools.
À chaque jour correspond une Seed Pool étant à l'origine des seeds générées et utilisées par les tirages faits le jour-même.
Chaque seed est unique et peut être associée à un tirage pour en produire et reproduire le déroulement et l'issue.
Avant de rentrer dans le vif du sujet, voici une liste de définitions techniques pour vous familiariser avec les termes que vous rencontrerez à plusieurs reprises sur cette page :
master_seed : chaîne unique et aléatoire de 32 caractères en base62.seed_pool : liste finie de hash générés de manière consécutive.hash, global_hash, ending_hash : chaîne unique et aléatoire de 64 caractères hexadécimaux.seed : chaîne unique et aléatoire de 16 caractères en base62.sha256 : fonction de hashage standardisée et très sécurisée.base62 : codage de l'information sous 62 caractères.Il est temps de s'y mettre ! Comme décrit un peu plus haut, la Drawchain™ est un nom donné à la liste regroupant les Seed Pool. Nous allons donc voir maintenant ce qu'elle contient et comment les Seed Pool l'alimentent !
L'origine d'une seed_pool provient de la master_seed générée par Random.org à notre demande chaque soir peu de temps avant minuit UTC pour la journée suivante.
seedPool contient donc la liste de toutes les seeds des tirages définitifs d'une période de 24 heures.Cette master_seed est alors utilisée afin de générer une liste de hash suffisamment grande pour pouvoir servir tous les tirages au sort de la durée de vie de la seed_pool.
Voici les étapes de la génération de la liste de hash :
master_seed avec sha256 pour créer le hash #1hash #1 (sous forme hexadécimale textuelle) avec sha256 pour créer le hash #2hash suffisamment grandeTous les hash sont donc générés consécutivement et dépendent de la master_seed.
Le ending_hash est le dernier hash généré, il n'est pas utilisé et permet uniquement de s'assurer que la seed_pool ait un début (master_seed) et une fin (ending_hash) dans le but de prouver qu'elle n'a pas été altérée durant sa mise en service.
master_seed et les hash qui n'ont pas encore été utilisés sont volontairement non divulgués jusqu'à la mise hors-service de la seed_pool afin d'éviter toute prédiction de hash ou de seed et donc une possible altération de tirage.Une fois que les hash ont tous été générés, la seed_pool est enfin prête à être utilisée. La précédente est mise hors-service et la nouvelle prend le relai ; la master_seed précédente est désormais publique et peut être vérifiée (voir ci-dessous).
Lorsqu'un tirage au sort est demandé sur Pickaw, un hash est dépilé de la seed_pool en service et permet de générer une seed unique qui sera attribuée et utilisée pour le tirage.
hash sont consommés en partant de la fin de la seed_pool afin de s'assurer que les suivants ne puissent pas être prédits pour altérer les tirages (pour rappel les hash n'ayant pas encore été utilisés ne sont pas visibles publiquement).Voici les étapes de génération d'une seed :
hash est converti en base 10 puis divisé par la valeur limite d'une seed (6216) pour ne garder que le reste de la division (cette opération est également appelée modulo)base62, préfixée par autant de zéros que nécessaires pour produire une chaîne de 16 caractères : on obtient donc la seedLa seed générée est enregistrée et peut désormais être utilisée pour donner lieu au tirage... et ainsi de suite jusqu'à la mise hors-service de la seed_pool.
On peut voir sur cette représentation que 4 seed ont été générées (à partir des derniers hash de la seed_pool) jusqu'à sa mise hors-service. Les autres hash sont inutilisés et n'ont pas donné lieu à la création de seed.
Maintenant que vous savez comment les seed_pool et seed sont générées, nous arrivons à la partie intéressante et intéractive : comment nous prouvons que les gagnants proviennent bien des fruits du hasard. Hasard que vous pouvez vérifier par vous-même !
La vérification peut se faire à partir de n'importe quel niveau de la Drawchain™ et de plusieurs manière différentes que nous vous listons ci-dessous.
master_seedPour commencer, vous pouvez vérifier que la master_seed que nous utilisons pour générer les hash d'une seed_pool est bien celle issue de Random.org grâce au lien joint à la master_seed directement depuis la Drawchain™ ou la Seed Pool en question.
seed_pool dont provient la master_seed.seed_poolÉgalement, vous pouvez vérifier à n'importe quel moment que la liste des hash générés n'a pas été altérée et suit bien la logique décrite plus haut. Afin de vous en assurer, nous avons créé un JSFiddle disponible ci-dessous pour pouvoir reproduire notre génération :
Comment l'utiliser ?
master_seed (ou un hash d'une seed_pool) dans le champ "Start hash"ending_hash (ou un hash postérieur) au sein de la même seed_pool dans le champ "End hash*"seedEnfin, les positions des personnes tirées au sort sont vérifiables à n'importe quel moment à partir de la seed dès lors qu'un tirage est terminé. Afin de vous en assurer, nous avons créé un JSFiddle disponible ci-dessous pour pouvoir reproduire la génération des positions :
Comment l'utiliser ?
seed du tirage dans le champ "Seed of the draw"Voilà, désormais la Drawchain™ et son mécanisme qui ont nécessité plusieurs mois de travail à eux seuls n'ont plus de secrets pour vous ! Nous espérons que ces explications ont été claires et qu'elles ne vous ont pas perdu.