Was bedeuten die einzelnen genesis.json-Parameter?

Ich versuche, genesis.json für mein privates Netzwerk einzurichten. Was bedeuten die einzelnen Parameter und welchen Wert kann ich in genesis.json festlegen?

  • nonce: irgendwelche daten?
  • Zeitstempel: Jederzeit?
  • parentHash: Irgendein Hash?
  • extraData: Geben Sie irgendwelche Daten ein, wenn Sie hinzufügen möchten? Was ist die maximale Größe?
  • gasLimit: Was ist die maximale Anzahl?
  • Schwierigkeit: Was ist die niedrigste Zahl?
  • Mixhash: Was ist das?
  • Coinbase: Ethereum-Adresse für Coinbase, richtig?
  • alloc: erste Ether-Zuweisung

Beispiel einer Genesis-JSON-Datei aus How To Create A Private Ethereum Chain . Das offizielle Dokument für privates Netzwerk genesis json ist hier. Verbinden mit dem Netzwerk

{
    "nonce": "0xdeadbeefdeadbeef",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x0",
    "gasLimit": "0x8000000",
    "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {
    }
}

Antworten (2)

Genesis-Block Erklärung

Mixhash Ein 256-Bit-Hash, der zusammen mit der nonce, beweist, dass an diesem Block eine ausreichende Menge an Berechnungen durchgeführt wurde: der Proof-of-Work (PoW). Die Kombination von nonceund mixhashmuss eine im Yellowpaper, 4.3.4 beschriebene mathematische Bedingung erfüllen. Block-Header-Gültigkeit, (44). Es erlaubt zu überprüfen, ob der Block wirklich kryptografisch geschürft wurde, also unter diesem Aspekt gültig ist.

nonce Ein 64-Bit-Hash, der in Kombination mit dem Mix-Hash beweist, dass auf diesem Block ausreichend Rechenarbeit geleistet wurde: der Proof-of-Work (PoW). Die Kombination von nonceund mixhashmuss eine im Yellowpaper, 4.3.4 beschriebene mathematische Bedingung erfüllen. Block Header Validity, (44), und erlaubt zu verifizieren, dass der Block wirklich kryptografisch geschürft wurde und somit unter diesem Aspekt gültig ist. Das nonceist der kryptografisch sichere Mining Proof-of-Work, der zweifelsfrei beweist, dass bei der Ermittlung dieses Token-Wertes ein bestimmter Rechenaufwand aufgewendet wurde. (Yellowpager, 11.5. Mining Proof-of-Work).

Schwierigkeit Ein Skalarwert, der dem Schwierigkeitsgrad entspricht, der beim nonceEntdecken dieses Blocks angewendet wird. Es definiert das Mining-Target, das aus dem Schwierigkeitsgrad des vorherigen Blocks und dem Zeitstempel berechnet werden kann. Je höher die Schwierigkeit, desto mehr Berechnungen muss ein Miner statistisch durchführen, um einen gültigen Block zu entdecken. Dieser Wert wird verwendet, um die Blockgenerierungszeit einer Blockchain zu steuern und die Blockgenerierungshäufigkeit innerhalb eines Zielbereichs zu halten. Im Testnetzwerk halten wir diesen Wert niedrig, um Wartezeiten während der Tests zu vermeiden, da die Erkennung eines gültigen Blocks erforderlich ist, um eine Transaktion auf der Blockchain auszuführen.

alloc Ermöglicht das Definieren einer Liste mit vorbefüllten Wallets. Das ist eine Ethereum-spezifische Funktion zur Handhabung der „Ether-Vorverkaufs“-Periode. Da wir lokalen Ether schnell abbauen können, verwenden wir diese Option nicht.

Coinbase Die 160-Bit-Adresse, an die alle Belohnungen (in Ether) übertragen wurden, die durch das erfolgreiche Mining dieses Blocks gesammelt wurden. Sie sind eine Summe aus der Mining-Belohnung selbst und den Rückerstattungen für die Ausführung der Vertragstransaktion. In den Spezifikationen oft als „Begünstigter“ bezeichnet, in der Online-Dokumentation manchmal als „Etherbase“. Dies kann alles im Genesis-Block sein, da der Wert durch die Einstellung des Miners festgelegt wird, wenn ein neuer Block erstellt wird.

timestamp Ein skalarer Wert, der der angemessenen Ausgabe der Unix time()-Funktion zu Beginn dieses Blocks entspricht. Dieser Mechanismus erzwingt eine Homöostase in Bezug auf die Zeit zwischen den Blöcken. Ein kleinerer Zeitraum zwischen den letzten beiden Blöcken führt zu einer Erhöhung des Schwierigkeitsgrades und damit zu einer zusätzlichen Berechnung, die erforderlich ist, um den nächsten gültigen Block zu finden. Wenn der Zeitraum zu groß ist, werden die Schwierigkeit und die erwartete Zeit bis zum nächsten Block verringert. Der Zeitstempel ermöglicht auch die Überprüfung der Blockreihenfolge innerhalb der Kette (Yellowpaper, 4.3.4. (43)).

parentHash Der Keccak-256-Bit-Hash des gesamten übergeordneten Block-Headers (einschließlich seines nonceund mixhash). Zeiger auf den übergeordneten Block, wodurch die Blockkette effektiv aufgebaut wird. Im Fall des Genesis-Blocks, und nur in diesem Fall, ist es 0.

extraData Ein optionaler kostenloser, aber max. 32 Byte langer Speicherplatz, um intelligente Dinge für die Ewigkeit aufzubewahren. :)

gasLimit Ein skalarer Wert, der der aktuellen kettenweiten Grenze des Gasverbrauchs pro Block entspricht. Hoch in unserem Fall, um während der Tests nicht durch diese Schwelle eingeschränkt zu werden. Hinweis: Dies bedeutet nicht, dass wir den Gasverbrauch unserer Verträge nicht beachten sollten.

Was bedeutet "config" wie "config": { "homesteadBlock": "10" }?

Zusätzlich zu den von niksmac beschriebenen Feldern:

config Konfiguration, um die Kette selbst zu beschreiben. Insbesondere die Ketten-ID, die zu verwendenden Konsens-Engines sowie die Blocknummern aller relevanten Hard Forks.


Die Bedeutung/Spezifikation von „config“ in genesis.json

Siehe config.go:

type ChainConfig struct {
    ChainId *big.Int `json:"chainId"` // Chain id identifies the current chain and is used for replay protection

    HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead)
    DAOForkBlock   *big.Int `json:"daoForkBlock,omitempty"`   // TheDAO hard-fork switch block (nil = no fork)
    DAOForkSupport bool     `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork

    // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150)
    EIP150Block *big.Int    `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork)
    EIP150Hash  common.Hash `json:"eip150Hash,omitempty"`  // EIP150 HF hash (fast sync aid)

    EIP155Block *big.Int `json:"eip155Block,omitempty"` // EIP155 HF block
    EIP158Block *big.Int `json:"eip158Block,omitempty"` // EIP158 HF block

    // Various consensus engines
    Ethash *EthashConfig `json:"ethash,omitempty"`
    Clique *CliqueConfig `json:"clique,omitempty"`
}
Damit ist meine Antwort abgeschlossen. +1
Danke :-) Ich denke, dieses Feld war möglicherweise nicht vorhanden, als Sie ursprünglich Ihre sehr umfassende Antwort geschrieben haben.
@niksmac Kannst du "minGasLimit" zu deiner Liste hinzufügen? Außerdem: Kann "nonce" irgendein Wert sein?
@niksmac Etwas abseits des Themas, aber Sie wissen vielleicht: Gibt es eine Möglichkeit, das "Blockgaslimit" in der Genesis-Datei festzulegen?