Des oracles réellement aléatoires sur Chainlink

Collectionnez les articles du JDC en NFT

Collecter cet article

Dans l’écosystème Ethereum, les smart contracts sont rois. Malheureusement, leurs possibilités sont limitées et dans de nombreux cas, le recours à une ressource off-chain est nécessaire. C’est notamment le cas dans lors de la génération d’un nombre aléatoire, un problème que Chainlink souhaite résoudre avec Chainlink VRF.

L’enfer de l’aléatoire

Ceux qui sont familiers avec l’informatique le savent : la génération d’un nombre aléatoire de manière informatique est un vrai casse-tête. 

En effet, les nombres aléatoires se séparent en deux catégories :

  • Les nombres aléatoires purs, issus de l’observation d’un événement physique (jeté de dès, jeté de pièce, etc.)
  • Les nombres dits pseudo-aléatoires, issu d’une opération informatique.

Malheureusement pour les développeurs, l’utilisation de nombres pseudo aléatoires peut avoir de lourdes conséquences sur la sécurité de l’application. Élément d’autant plus important dans le cadre des blockchains, où les dapps doivent gérer des fonds.

Jusqu’à présent, les développeurs d’applications décentralisées avaient deux possibilités pour générer des nombres aléatoires :

  • Utiliser des informations on-chain comme le hash du dernier bloc ;
  • Utiliser un générateur d’aléatoire off-chain et communiquer sa valeur on-chain.

Cependant, aucune de ces deux solutions n’est optimale. D’un côté, la première ouvre un potentiel vecteur d’attaque dans lequel des acteurs mal intentionnés pourraient moduler les informations on-chain dans le but de forcer la génération d’un nombre particulier. De l’autre, la seconde solution ne permet pas de vérifier la validité de la donnée récupérée off-chain, rejoignant ainsi le problème des Oracles.

La solution : ChainLink VRF

Après avoir longuement étudié ces problèmes, ChainLink vient de dévoiler ChainLink VRF (On-chain Verifiable Randomness) une solution permettant de générer des nombres aléatoires purs qui peuvent être vérifiées on-chain.

« Grâce à Chainlink VRF, vous pouvez établir des smart contracts fiables pour toutes les applications qui nécessitent des résultats imprévisibles » statue la publication d’annonce. 

Pour utiliser le système, un smart contract doit envoyer une requête à Chainlink, accompagné d’une seed. Celle-ci est utilisée par l’Oracle pour générer un nombre aléatoire, qui sera renvoyé on-chain une fois généré, accompagné de la preuve cryptographique permettant de vérifier la fiabilité du nombre aléatoire.

Présentation du fonctionnement de Chainlink VRF.

Intégration avec PoolTogether

Preuve que la solution a un intérêt réel, ChainLink présente l’exemple de l’implémentation de VRF sur PoolTogether.

Pour rappel, PoolTogether est une loterie sans perte. Chaque participant dépose des fonds sur un smart contract, ces derniers sont mis en gage pour générer des intérêts sur les plateformes de lending décentralisé. Au bout d’un temps défini, un gagnant parmi les participants est tiré au sort et remporte les intérêts gérés. Une fois le tirage au sort réalisé, chaque participant récupère sa mise de base, d’où le caractère sans perte de la loterie.

Dans ce cas de figure, le tirage au sort du vainqueur nécessite l’utilisation d’un nombre aléatoire pure. PoolTogether a fait le choix d’intégrer ChainLink VRF, dans le but d’être en mesure de prouver à ses utilisateurs la véracité des tirages au sort.

Une fois de plus, ChainLink propose un produit extrêmement utile à la décentralisation d’Ethereum et de ses applications décentralisées. Reste maintenant à attendre la finalisation des phases de test sur le testnet avant une publication sur le mainnet. 

Renaud H.

Ingénieur en software et en systèmes distribués de formation, passionné de cryptos depuis 2013. Touche à tout, entre mining et développement, je cherche toujours à en apprendre plus sur l’univers des cryptomonnaies et à partager le fruit de mes recherches à travers mes articles.

Commentaires

Une réponse à “Des oracles réellement aléatoires sur Chainlink


meniere sébastien
pour que ce soit aléatoire, il faut que la seed soit aléatoire, car même seed, même nombre généré. De plus un nombre généré de façon algorithmique ne peut-être de facto que pseudo-aléatoire. Pouvez-vous préciser le sens de "aléatoire" dans le processus avec Chainlink?
Répondre · Il y a 4 ans

Votre email ne sera pas publié. En publiant un commentaire, vous acceptez notre politique de confidentialité.


Recevez un condensé d'information chaque jour