Haben die Kontrakte von Ethereum Zugriff auf die Nonce der Blöcke?

Mit dieser Frage meine ich, wenn wir versuchen, einen Glücksspielvertrag zu entwickeln, brauchen wir zufällige Eingaben. Können wir einfach die Nonce-Daten aus bestimmten Blöcken verwenden? (Ich fange gerade an, Blockchain zu lernen, ich komme aus China, es kann einige Sprachprobleme in Bezug auf meinen Ausdruck geben.)

Antworten (1)

Die Nonce-Daten sind innerhalb des Vertrages nicht verfügbar. Die im Vertragscode verfügbaren Variablen (von http://solidity.readthedocs.org/en/latest/miscellaneous.html#global-variables ) sind:

Globale Variablen

  • block.coinbase (Adresse): aktuelle Adresse des Blockminers

  • block.difficulty (uint): aktuelle Blockschwierigkeit

  • block.gaslimit (uint): aktuelle Blockgasgrenze

  • block.number (uint): aktuelle Blocknummer

  • block.blockhash (Funktion (uint) gibt (Bytes32) zurück): Hash des angegebenen Blocks - funktioniert nur für die 256 neuesten Blöcke

  • block.timestamp (uint): Zeitstempel des aktuellen Blocks

  • msg.data (Bytes): vollständige Anrufdaten

  • msg.gas (uint): verbleibendes Gas

  • msg.sender (Adresse): Absender der Nachricht (aktueller Anruf)

  • msg.value (uint): Anzahl der mit der Nachricht gesendeten Wei

  • now (uint): Zeitstempel des aktuellen Blocks (Alias ​​für block.timestamp)

  • tx.gasprice (uint): Gaspreis der Transaktion

  • tx.origin (Adresse): Absender der Transaktion (vollständige Aufrufkette)

  • sha3(...) gibt (bytes32) zurück: Berechnen Sie den Ethereum-SHA3-Hash der (dicht gepackten) Argumente

  • sha256(...) gibt (bytes32) zurück: berechnet den SHA256-Hash der (dicht gepackten) Argumente

  • reifemd160(...) liefert (bytes20): berechnet RIPEMD von 256 den (dicht gepackten) Argumenten

  • ecrecover(bytes32, uint8, bytes32, bytes32) gibt (Adresse) zurück: Stellt den öffentlichen Schlüssel aus der Signatur der elliptischen Kurve wieder her

  • addmod(uint x, uint y, uint k) gibt (uint) zurück: compute (x + y) % k wobei die Addition mit beliebiger Genauigkeit durchgeführt wird und nicht bei 2**256 umbricht.

  • mulmod(uint x, uint y, uint k) gibt (uint) zurück: compute (x * y) % k wobei die Multiplikation mit beliebiger Genauigkeit durchgeführt wird und nicht bei 2**256 umbricht.

  • this (aktueller Vertragstyp): der aktuelle Vertrag, der explizit in eine Adresse umgewandelt werden kann

  • super: der Vertrag eine Ebene höher in der Vererbungshierarchie

  • Selbstzerstörung (Adresse): Zerstöre den aktuellen Vertrag und sende sein Geld an die angegebene Adresse

  • .balance: Saldo der Adresse in Wei
  • .send(uint256) gibt zurück (bool): sendet die gegebene Menge an Wei an die Adresse, gibt bei einem Fehler „false“ zurück.

Sehen Sie sich Folgendes an, wenn Sie an der Generierung von (Pseudo-)Zufallszahlen interessiert sind:

Wenn die Adresse des Bergmanns verfügbar ist, können wir diese als zufällige Eingabe verwenden, denn ich denke, dass der Bergmann des Blocks, der bestimmte Glücksspieltransaktionen enthält, nicht im Voraus bekannt sein kann?
Es besteht derzeit eine Wahrscheinlichkeit von 35,2 %, dass die Miner-Adresse mit der Adresse von zwerg_1 etherchain.org/account/… ist . Siehe etherchain.org/statistics/miners für die Aufschlüsselung der Miner-Hashrate. Sie könnten die Adresse des Miners verwenden, um sie mit anderen zufälligen Eingaben zu kombinieren. Siehe den zweiten Link, wenn Sie einen vernünftigen Zufallszahlengenerator wollen.