Jak nastavit soukromý řetězec kvora s konsensem vorů (a dynamickým členstvím)

Ve skutečnosti je vše již v tomto repo https://github.com/Szkered/quorum-raft-cluster

0. Získejte stroj Ubuntu

1. Připravte závislost

(sudo) ./get-quorum.sh

To zhruba odpovídá oficiálnímu příkladu nastavení zde https://github.com/jpmorganchase/quorum-examples/blob/master/vagrant/bootstrap.sh

Změny, které jsem provedl: Používám nejnovější verzi kvora a souhvězdí (namísto v0.0.1-alfa verze souhvězdí a značky / v1.2.0 kvora v tomto příkladu nastavení), abychom si mohli užívat všech nejnovějších funkcí jako dynamické členství vor. Pozoruhodně konstelace má docela velké změny API v v.0.1.0.

2. Generujte instalační soubory

(sudo) ./raft-setup.sh

Zde pouze předběžně vytváříme informace o enodě, jak chceme, aby byla opravena. Informace o enodě jsou uloženy v raftu / static-nodes.json, který bude později použit raftu.

Přestože můžete nastavit https://github.com/jpmorganchase/quorum-examples klastr 7 uzlů, domnívám se, že generování klíčů uzlů není dobře zdokumentováno. Takže v instalačním skriptu jsem také zahrnul instrukci pro generování párů konstelačních klíčů a soukromého klíče účtu ethereum.

Než přejdeme na krok (3), budete muset předfinancovat veškerý účet, který chcete použít, řádnou konfigurací genesis.json. Nejprve opakujte (1) a (2) pro všechny stroje / VM ve vašem klastrovém / soukromém řetězci a poté předfinancujte všechny výchozí účty v bloku geneze následujícím způsobem:

V části přidělení vašeho souboru geneze financujte celý svůj účet pomocí určité rovnováhy etheru. Řekněme, že máte účet „6e4949d29fe2eee9007e4f5d6127b09e1eb98d15“ v uzlu 1 a „93ceb2a9e1ddc216de9befd994bf303e88379e2b“ v uzlu 2, pak budete mít:

"alloc": {
    "6e4949d29fe2eee9007e4f5d6127b09e1eb98d15": {
      "zůstatek": "100000000000000000000000000000"
    },
    "93ceb2a9e1ddc216de9befd994bf303e88379e2b": {
      "zůstatek": "100000000000000000000000000000"
    }
  },

Tento soubor geneze musí být stejný ve všech uzlech ve vašem clusteru.

Případně můžete mít ve svém genesis.json pouze jeden předfinancovaný účet, řekněme výchozí účet uzlu 1, a odeslat z tohoto účtu ethernetový zůstatek na účet všech ostatních uzlů.

3. Počáteční řetězec s instalačními soubory

(sudo) ./raft-init.sh

Toto právě inicializuje novou instanci kvora statickým enodem a klíči, které jsme vygenerovali výše.

4. Spusťte instance

Před spuštěním instance nakonfigurujte v souboru tm.conf pole othernodes, které by mělo obsahovat veřejný ip všech ostatních uzlů, ke kterým se chcete připojit. Z nějakého zvláštního důvodu, kterému nerozumím, musí každý uzel mít veřejný ip a port všech ostatních uzlů ve vašem clusteru.

Poté můžete spustit (sudo) ./constellation-start.sh Po prohlédnutí protokolu (který bude uložen atqdata / logs / constellation.log) a ujistěte se, že konstelační uzly jsou správně připojeny, můžete uzly kvora spustit (sudo) ) ./raft-start.sh

5. Přidejte partnera pomocí dynamického členství voru

Přihlaste se do konzole geth pomocí (sudo) geth attach qdata / geth.ipc a poté proveďte raft.addPeer ($ enodeInfo), kde enodeInfo je to, co je uvnitř static-nodes.j v každém počítači / instanci. N.B. V těchto enodeInfo musíte použít veřejný ip.

Nyní můžete zkontrolovat vzájemné připojení zadáním admin.peers do geth konzole každého uzlu. Můžete také provést testovací transakci s výchozím účtem pomocí eth.sendTransaction ({from: eth.accounts [0]}).

6. Pokud se něco pokazí ..

Nejprve zastavte všechny instance (sudo) ./stop.sh. Vymažte řetězová data a jednoduše je znovu inicializujte (sudo) ./raft-init.shPoté proveďte kroky 4 a 5