So richten Sie eine Quorum-Privatkette mit Floßkonsens (und dynamischer Mitgliedschaft) ein

Eigentlich ist schon alles in diesem Repo https://github.com/Szkered/quorum-raft-cluster

0. Holen Sie sich eine Ubuntu-Maschine

1. Bereiten Sie die Abhängigkeit vor

(sudo) ./get-quorum.sh

Dies folgt in etwa dem offiziellen Beispiel-Setup unter https://github.com/jpmorganchase/quorum-examples/blob/master/vagrant/bootstrap.sh

Von mir vorgenommene Änderungen: Ich verwende die neueste Version von Quorum und Constellation (anstelle der v0.0.1-alpha-Version von Constellation und der Tags / v1.2.0 von Quorum in diesem Beispielsetup), damit wir die neuesten Funktionen nutzen können wie Floß dynamische Mitgliedschaft. Insbesondere Constellation hat in v0.1.0 eine ziemlich große API-Änderung erfahren.

2. Erstellen Sie Setup-Dateien

(sudo) ./raft-setup.sh

Hier generieren wir nur die Enode-Informationen vor, da wir möchten, dass sie behoben werden. Die Enode-Informationen werden in raft / static-nodes.json gespeichert, die später von raft verwendet werden.

Obwohl Sie einen Cluster mit 7 Knoten einrichten können, der https://github.com/jpmorganchase/quorum-examples folgt, ist die Erstellung von Knotenschlüsseln meines Erachtens nicht sehr gut dokumentiert. Daher habe ich auch die Anweisung zum Generieren des privaten Schlüssels für das Konstellationsschlüsselpaar und das Astraleum-Konto in das Setup-Skript aufgenommen.

Bevor wir mit Schritt (3) fortfahren, müssen Sie das gesamte Konto, das Sie verwenden möchten, vorab aufladen, indem Sie genesis.json richtig konfigurieren. Wiederholen Sie zuerst (1) und (2) für alle Maschinen / VMs in Ihrem Cluster / Ihrer privaten Kette und füllen Sie dann alle Standardkonten im Genesis-Block wie folgt vorab auf:

Zahlen Sie im Zuweisungsabschnitt Ihrer Genesis-Datei Ihrem gesamten Konto etwas Ätherguthaben ein. Angenommen, Sie haben das Konto "6e4949d29fe2eee9007e4f5d6127b09e1eb98d15" in Knoten1 und "93ceb2a9e1ddc216de9befd994bf303e88379e2b" in Knoten2. Dann haben Sie:

"alloc": {
    "6e4949d29fe2eee9007e4f5d6127b09e1eb98d15": {
      Kontostand: 1000000000000000000000000000
    },
    "93ceb2a9e1ddc216de9befd994bf303e88379e2b": {
      Kontostand: 1000000000000000000000000000
    }
  },

Diese Genesis-Datei muss auf allen Knoten in Ihrem Cluster identisch sein.

Alternativ können Sie nur ein vorfinanziertes Konto in Ihrer genesis.json haben, z. B. das Standardkonto von Knoten1, und den Restbetrag von diesem Konto an das Konto aller anderen Knoten senden.

3. Init-Kette mit Setup-Dateien

(sudo) ./raft-init.sh

Dies initialisiert lediglich eine neue Quorum-Instanz mit dem oben generierten statischen Enode und den Schlüsseln.

4. Starten Sie Ihre Instanzen

Bevor Sie die Instanz starten, konfigurieren Sie bitte das Feld othernodes in Ihrer Datei tm.conf, das die öffentliche IP aller anderen Knoten enthalten sollte, zu denen Sie eine Verbindung herstellen möchten. Aus irgendeinem merkwürdigen Grund, den ich nicht verstehe, muss jeder Knoten die öffentliche IP und den Port aller anderen Knoten in Ihrem Cluster haben.

Anschließend können Sie (sudo) ./constellation-start.sh ausführen. Nachdem Sie das Protokoll (das unter qdata / logs / constellation.log gespeichert wird) überprüft und sichergestellt haben, dass die Konstellationsknoten ordnungsgemäß verbunden sind, können Sie die Quorumknoten mit (sudo) starten ) ./raft-start.sh

5. Fügen Sie Peer mithilfe der dynamischen Mitgliedschaft für Flöße hinzu

Melden Sie sich bei geth console an, indem Sie (sudo) geth attach qdata / geth.ipc und dann raft.addPeer ($ enodeInfo) ausführen, wobei enodeInfo das ist, was in static-node.j auf jeder Maschine / Instanz enthalten ist. N.B. Sie müssen public ip in diesen enodeInfo verwenden.

Jetzt können Sie die Peer-Konnektivität überprüfen, indem Sie admin.peers in die Geth-Konsole der einzelnen Knoten eingeben. Sie können auch eine Testtransaktion mit Ihrem Standardkonto über eth.sendTransaction ({from: eth.accounts [0]}) durchführen.

6. Wenn etwas schief geht ..

Stoppen Sie zuerst alle Instanzen mit (sudo) ./stop.sh. Löschen Sie die Daten der Kette und initialisieren Sie sie einfach mit (sudo) ./raft-init.sh. Führen Sie dann die Schritte (4) und (5) aus.