Ist das „gut genug“ Zufälligkeit?

Angenommen, ich wollte ein System im Ethereum-Netzwerk erstellen, um Wetten auf einen Preispool zu platzieren, der unter der aktuellen Blockbelohnung liegt, sagen wir 2,5 ETH.

Wären diese Schritte ein einigermaßen fairer Weg, um sicherzustellen, dass Spieler das System nicht spielen können?

1) 100 mögliche Eintritte in das Spiel haben

2) Sammeln Sie alle Adressen des Spielers und XOR sie zusammen

3) Stellen Sie beim 99. Eintrag sicher, dass diese Person nicht die Mehrheit der Einträge hat (Mehrfacheinträge sind zulässig)

4) Wenn die letzte Person eintritt, verwenden Sie die block.timestampFunktion als eine Art Startwert, um die Nummer aus den XOR-Adressen hinzuzufügen

5) Führen Sie eine Moduldivision durch 100 durch, um die Gewinnzahl zu finden und den Preis zu verteilen

Ich verstehe, dass die Blockzeit von Minern manipuliert werden kann, aber wenn der Preispool kleiner als die Blockbelohnung ist, ist dies eine praktikable Option, oder?

Antworten (1)

Das bedeutet, dass die 100. Einsendung über das Ergebnis entscheidet. Das 100. teilnehmende Konto sollte also immer der Gewinner sein, und daher sollten sich die früheren Teilnehmer nicht die Mühe machen, teilzunehmen (da sie wissen, dass sie nicht gewinnen können).

aber es gibt den Block-Zeitstempel, um ihm eine Art Zufälligkeit hinzuzufügen, wenn sie versuchen, es zu spielen
Es wäre besser, auf den 100. Eintrag zu warten und dann den Blockzeitstempel zu verwenden, um die Reihenfolge zu bestimmen, in der die Adressen XOR-verknüpft sind
Der letzte Eintrag erfolgt über einen Smart Contract. Es wird die gleiche Berechnung durchführen wie Sie und anhand des Ergebnisses entscheiden, ob Sie teilnehmen möchten oder nicht. Es spielt keine Rolle, welche Art von Mathe Sie tun. (Außerdem ist XOR kommutativ.)
Kurz gesagt, Zufallszahlen müssen aus der Zukunft kommen. Es ist einfach, die Vergangenheit vorherzusagen. Der Blockzeitstempel, die anderen Adressen, der vorherige Blockhash usw. wurden bereits bestimmt, bevor die Transaktionen in diesem Block ausgeführt werden.
Der Blockhash ist eine gute Quelle für Zufälligkeit. Das Problem dabei ist, dass es einem Teilnehmer bekannt sein kann, bevor die Lotterie geschlossen wird. Wie @smarx betont, wird dies gelöst, wenn die Lotterie schließt und dann (in einem Block vor der aktuellen) der Blockhash abgerufen wird.