2016-07-28 16 views
1

Meine Absicht ist die Marbles application, eine Hyperledger-Demo zu replizieren. Mit den Anweisungen von here konnte ich ein Blockchain-Netzwerk auf meiner Ubuntu-VM einrichten. Allerdings hatte ich den Chaincode nicht implementiert. Als ich die API anrief, um die Kette zu lesen, bekam ich einen Block; was ich denke, ist der Genese-Block. Es gab auch einige Protokolllisten, die ungefähr gleich waren.Genesis Block ohne Chaincode?

Meine Frage ist wie folgt. Wenn ich eine Blockchain ausführen möchte, um eine verteilte Anwendung (z. B. Marbles) zu starten, warum wird dann ohne den implementierten Chaincode ein Geneseblock abgebaut? Wenn keine Chaincode implementiert ist, kann das Blockchain-Netzwerk keine Transaktionen verarbeiten, daher könnten (sollten) keine Transaktionen im Block existieren.

Warum wird also ein Genese-Block ohne den verwendeten Chaincode abgebaut?

Antwort

2

Sie haben Recht, Genesis-Block wird als erster Block im Ledger automatisch von Validation Peers erstellt. Es enthält keine Transaktionen und hat ein eindeutiges Format. Ein Beispiel ist:

{"nonHashData":{"localLedgerCommitTimestamp":{"seconds":1469225503,"nanos":346624842}}} 

Wie Sie es hat keine „previousBlockHash“ Eigenschaft in sie sehen können. Sie können den Inhalt dieses Blocks in der Datei core.yaml anpassen, indem Sie ledger.blockchain.genesisBlock verwenden:

+0

Danke. Welche Szenarien werden Ihrer Meinung nach von einer Einstellung profitieren, die besagt, dass der Genese-Block mindestens eine Transaktion haben sollte (die den Genesis-Block sät)? – cogitoergosum

+0

Die erste Transaktion kann nur "Deploy" sein (die Antwort wurde mit Beispiel aktualisiert). Wir haben nur die Wahl, ob wir etwas beim ersten Start bereitstellen möchten oder später manuell. –

+0

Vielen Dank für die Erklärung! – cogitoergosum