Ich habe ein PoA-System erfolgreich implementiert. Aber wie werden nach der Ersteinrichtung (z. B. zwei Knoten) neue Knoten hinzugefügt? Ich verstehe, dass die Annahme eines neuen Knotens ein Abstimmungsprozess ist, aber ich bin mir nicht sicher, wie das implementiert wird.
Hier ist der Link, den ich für die Einrichtung verwendet habe – https://hackernoon.com/setup-your-own-private-proof-of-authority-ethereum-network-with-geth-9a0a3750cda8
Ausgabe von Maschine 2 (mit den Knoten 3,4). Die Knoten 1,2 befinden sich auf Maschine 1 und beide sind Unterzeichner. Auf Knoten 3 wird angezeigt, dass das Konto entsperrt, aber nicht autorisiert ist.
mehr nohup.out INFO [14.04.|17:22:17] Maximale Peer-Anzahl
ETH=25 LES=0 total=25 INFO [14.04.|17:22:17] Peer-to-Peer-Knoteninstanz starten=Geth /v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4 INFO [04-14|17:22:17] Zugewiesener Cache und
Dateihandles database=/home/satoshimaca/blockchain2/node3/geth/chaindata cache=7 68 handle=512 INFO [04-14|17:22:18] Initialisierte Kettenkonfiguration
config="{ChainID: 1515 Homestead: 1 DAO: DAOSupport: false EI P150: 2 EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople: Engine : clique}" INFO [04-14|17:22:18] Initialisierung des Ethereum-Protokolls
versions="[63 62]" network=1515 INFO [04-14|17:22:18] Geladene neueste lokale Headernummer=0 hash=fdb68b…8a634f td=1 INFO [04-14|17:22:18 ] Geladene neueste lokale vollständige Blocknummer = 0 Hash = fdb68b…8a634f td=1 INFO [04-14|17:22:18] Geladene neueste lokale schnelle Blocknummer = 0 Hash = fdb68b…8a634f td=1 INFO [04 -14|17:22:18] Geladene lokale Transaktionsjournaltransaktionen=0 gelöscht=0 INFO [04-14|17:22:18] Regenerierte lokale Transaktionsjournaltransaktionen
=0 Konten=0 INFO [04-14|17:22 :18] Starting P2P networking INFO [04-14|17:22:20] UDP listener up
self=enode://7b13a6dc2fd5de476b2a579d702a36ec37587dad1cef7f99501835 4928a279a7733635e3cbd3b2fa1a261c2b37638f2aa46195bc7e1ebfa3c1875c84ecbc8087@[::]:30313 INFO [04-14|17:22:20] RLPx listener hoch
self=enode://7b13a6dc2fd5de476b2a579d702a36ec37587dad1cef7f99501835 4928a279a7733635e3cbd3b2fa1a261c2b37638f2aa46195bc7e1ebfa3c1875c84ecbc8087@[::]:30313 INFO [04-14|17:22:20] IPC endpoint opened
url=/home/satoshimaca/blockchain2/node3/geth.ipc INFO [04-14| 17:22:20] HTTP-Endpunkt geöffnet url= http://localhost:8503 cors
= vhosts=lokaler Host INFO [14.04
:21] Preisschwelle des Transaktionspools aktualisiert Preis=1 INFO [04-14|17:22:21] Etherbase automatisch konfiguriert
address=0xC08832c6cB6df14340F3866B293a705FB9bc378B INFO [14.04.|17:22:21] Bergbaubetrieb starten INFO [14.04 -14|17:22:21] Blockversiegelung fehlgeschlagen
err=unauthorized
Hier ist die Verbindung für Knoten 3 -
nohup geth --datadir node3/ --syncmode 'full' --port 30313 --rpc --rpcaddr 'localhost' --rpcport 8503 --rpcapi 'personal,db,eth,ne t,web3,txpool,miner' - -bootnodes 'enode://601ade737b81f16abdd0ce9983b63eb12050c4ef89c46b8fdbf3e3e6c951cc02dffe36f87200033107cf8b00 7355e780fba16b67d1d46603b1321f07314ea46b@10.132.0.2:30310' --networkid 1515 --gasprice '1' -unlock 'c08832c6cb6df14340f3866b293a70 5fb9bc378b' --password node3/pwdnode3.txt --mine &
Geth auf Knoten 1 gibt diese Peers und diese Enode -
> admin
{ datadir: "/home/satoshimaca/blockchain/node1", nodeInfo: { enode: "enode://64793e6e791115d315550d651cda00342b688ba36728b3d8070b04f4513ff65eb15ffb8f66387f1733340d8732e6ca956f0825cd3fc4e67686e04f63c5d0abc4@[::]:30311", id: "64793e6e791115d315550d651cda00342b688ba36728b3d8070b04f4513ff65eb15ffb8f66387f1733340d8732e6ca956f0825cd3fc4e67686e04f63c5d0abc4", ip: "::", listenAddr: " [::]:30311", Name: "Geth/v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4", Ports: { Discovery: 30311, Listener: 30311 }, Protokolle: { eth: { config: {...}, difficulty: 15290, genesis: "0x702d8ca9647d171a6596a775888f71c7c0f3ddb011fbffcb921be685b2ef33b7", head: "0x574671023088dd06c2127cee4e2a70e30782ed3f525d28b537294ac0f3297099", network: 1515 } } }, peers: [{ caps: ["eth/62", "eth/63"], id: "d889d565b3ddc37491d131aed1c23d0a7b30a185bb925f325c7830b2ae710bc127010487f39f32d889afd1284ea31aa893adddda2197f2763485926970620381", name: "Geth/v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4", network: { inbound: true, localAddress: "127.0.0.1:30311", remoteAddress: " 127.0.0.1:54108", statisch: falsch, vertrauenswürdig: falsch }, Protokolle: {
Von Knoten 1 - Konto 1 ist definitiv ein Unterzeichner und wird entsperrt, ist dann aber nicht autorisiert.
> clique.getSigners()
["0xc08832c6cb6df14340f3866b293a705fb9bc378b", "0xfc1bdf06d1150e6eeeb229a8500b09df8ccdcbbd", "0xfcad53c780a4f6c66b3daca331fe72fc6559c367"]
Das Hinzufügen eines neuen Knotens als Sealer ist so einfach wie der Aufruf:
clique.propose(<NEWSEALER>, true)
Sie benötigen 50% + 1 Stimmen.
Siehe Wie füge ich einen neuen Sealer in Geth 1.6 Proof of Authority hinzu? für mehr Details.
Einzelheiten zur Spezifikation finden Sie unter EIP 225 – https://github.com/ethereum/EIPs/issues/225
Trevor Oakley