Lotterie-Zufallsgewinner-Generator

Ich erstelle einen Smart Contract, der ein Lotteriespiel simuliert: Benutzer kaufen Tickets aus einem festen Pool von Tickets, und am Ende wird eine zufällige Ticketnummer für den Gewinner gezogen. Ich befasse mich jetzt mit dem Prozess der Auswahl der zufälligen Losnummer, die das Gewinnlos ist.

Ich habe diesen Beitrag gelesen: Wie kann ich sicher eine Zufallszahl in meinem Smart Contract generieren?

und ich verstehe immer noch nicht, warum ich nicht einfach eine Zufallszahl im Bereich generieren 1 - amount of ticketsund diese als Gewinnscheine zuweisen kann, indem ich Folgendes verwende:

randomNum = 1 + (int)(Math.random() * amount_of_tickets); 

Das klingt sehr trivial, aber ich sehe nicht, wie es unfair wäre oder wie es manipuliert werden könnte, da jedes Ticket die gleiche Chance hätte, ausgewählt zu werden. Es wurde auch vorgeschlagen, dass ich den Hash des Kettenkopfes in dieser Berechnung verwenden sollte, wieder verstehe ich nicht, warum dies vorteilhaft oder notwendig wäre.

Antworten (3)

Sie können auf Ethereum keine Zufallszahlen direkt erstellen . Sie können einen Dienst wie Oraclize verwenden, um es zu generieren. Hier ist ein Tutorial, das ich vor nicht allzu langer Zeit mit den Implementierungsdetails geschrieben habe: https://hackernoon.com/building-a-raffle-contract-using-oraclize-e746e5edff6b

Sie können nicht verwenden, Math.randomweil Ethereum keine hat Math.random.

Ethereum hat nein Math.random, weil alle Berechnungen deterministisch sein müssen, damit sie von verschiedenen Knoten im Netzwerk validiert werden können, was nicht funktioniert, wenn sie alle unterschiedliche Zahlen ergeben.

Es gibt kein Math.random auf der Ethereum-Blockchain. Wenn dies der Fall wäre, könnten Miner das System spielen und in Math.random hineinschauen, bevor sie einen Block senden. Wenn das Senden des Blocks bedeutet, dass sie 100.000 ETH verlieren, werden sie es einfach nicht senden und versuchen, einen Block zu erstellen, der sie zum Gewinnen bringt. Sie könnten das System leicht betrügen.

Die gebräuchlichste Lösung hierfür sind Oracles. Ein Off-Chain-Dienst, der „zufällige“ (wenn Sie ihnen vertrauen) Werte in die Blockchain einfügt. Der beliebteste Anbieter von On-Chain-Zufallswerten ist wahrscheinlich Oraclize (Anmerkung: Ich habe keine Verbindung zu Oraclize)