¿Cómo podemos agregar nuevos nodos bajo PoA?

Implementé un sistema PoA con éxito. Pero después de la configuración inicial (por ejemplo, dos nodos), ¿cómo se agregan nuevos nodos? Entiendo que la aceptación de un nuevo nodo es un proceso de votación, pero no estoy seguro de cómo se implementa.

Aquí está el enlace que usé para la configuración: https://hackernoon.com/setup-your-own-private-proof-of-authority-ethereum-network-with-geth-9a0a3750cda8

Salida de la máquina 2 (que tiene los nodos 3,4). Los nodos 1 y 2 están en la máquina 1 y ambos son firmantes. Muestra en el nodo 3 que la cuenta está desbloqueada pero no está autorizada.

más nohup.out INFO [04-14|17:22:17] Recuento máximo de pares
ETH=25 LES=0 total=25 INFO [04-14|17:22:17] Iniciando instancia de nodo peer-to-peer=Geth /v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4 INFO [04-14|17:22:17] Caché asignado y manejo de archivos base de
datos=/home/satoshimaca/blockchain2/node3/geth/chaindata cache=7 68 identificadores = 512 INFO [04-14|17:22:18] Configuración de cadena inicializada
config="{ChainID: 1515 Homestead: 1 DAO: DAOSupport: false EI P150: 2 EIP155: 3 EIP158: 3 Bizancio: 4 Constantinopla: Motor : clica}" INFO [04-14|17:22:18] Inicializando el protocolo Ethereum
versions="[63 62]" network=1515 INFO [04-14|17:22:18] Número de encabezado local más reciente cargado=0 hash=fdb68b…8a634f td=1 INFO [04-14|17:22:18 ] Número de bloque completo local más reciente cargado=0 hash=fdb68b…8a634f td=1 INFO [04-14|17:22:18] Número de bloque rápido local más reciente cargado=0 hash=fdb68b…8a634f td=1 INFO [04 -14|17:22:18] Transacciones del diario de transacciones locales cargadas=0 descartadas=0 INFO [04-14|17:22:18] Transacciones del diario de
transacciones locales regeneradas=0 cuentas=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 hasta
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] Punto final HTTP abierto url= http://localhost:8503
cors= vhosts=host local INFORMACIÓN [04-14|17:22:21]
Dirección de cuenta desbloqueada=0xC08832c6cB6df14340F3866B293a705FB9bc378B INFORMACIÓN [04-14|17:22 :21] Umbral de precio del grupo de transacciones actualizado precio=1 INFO [04-14|17:22:21] Etherbase configurada automáticamente
address=0xC08832c6cB6df14340F3866B293a705FB9bc378B INFO [04-14|17:22:21] Iniciando operación de minería INFO [04-14|17:22:21] Confirmar nuevo trabajo de minería number=1 txs=0 uncles=0 transcurrido=226.085µs WARN [04 -14|17:22:21] Falló el sellado del bloque
err=no autorizado

Aquí está la conexión para el nodo 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 en el nodo 1 proporciona estos pares y este enodo:

> admin

{ datadir: "/home/satoshimaca/blockchain/node1", nodeInfo: { enode: "enode://64793e6e791115d315550d651cda00342b688ba36728b3d8070b04f4513ff65eb15ffb8f66387f1733340d8732e6ca956f0825cd3fc4e67686e04f63c5d0abc4@[::]:30311", id: "64793e6e791115d315550d651cda00342b688ba36728b3d8070b04f4513ff65eb15ffb8f66387f1733340d8732e6ca956f0825cd3fc4e67686e04f63c5d0abc4", ip: "::", listenAddr: " [::]:30311", nombre: "Geth/v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4", puertos: { descubrimiento: 30311, oyente: 30311 }, protocolos: { 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", estático: falso, de confianza: falso}, protocolos: {

Desde el nodo 1: la cuenta 1 definitivamente es un firmante y está desbloqueada, pero luego no está autorizada.

> clique.getSigners()

["0xc08832c6cb6df14340f3866b293a705fb9bc378b", "0xfc1bdf06d1150e6eeeb229a8500b09df8ccdcbbd", "0xfcad53c780a4f6c66b3daca331fe72fc6559c367"]

Hice más comprobaciones y descubrí que se necesitan votos, lo que parece ser un proceso manual. Pero no estoy seguro de cómo se implementará una vez que se tome la decisión sobre quién tendrá un nuevo nodo maestro o nodo de minería.

Respuestas (1)

Agregar un nuevo nodo como sellador es tan simple como llamar:

clique.propose(<NEWSEALER>, true)

Necesitarás 50% + 1 votos.

Consulte ¿Cómo agregar un nuevo sellador en Geth 1.6 Prueba de autoridad? para más detalles.

Para obtener detalles sobre la especificación, consulte EIP 225 - https://github.com/ethereum/EIPs/issues/225

Si los nodos están en diferentes máquinas en la nube de Google, ¿cómo puede saber el nodo de firma sobre las otras cuentas? Tuve el problema antes cuando listAccounts solo mostraba algunas de las cuentas bajo PoW. ¿El firmante sabrá acerca de todas las cuentas debido al bootnode?
No necesita saber si la cuenta de sellador propuesta realmente existe. Es simplemente proponer una dirección.
Agregué clique.propose y se muestra en clique.proposals. Simplemente se sienta en las propuestas. Hice la propuesta en los dos nodos de firma. ¿Cómo se aprueba ahora la propuesta? ¿Existe un equivalente clique.approve?
Después de que ambos selladores hayan llamado a la función, debe esperar unos bloques hasta que surta efecto.
Puedo conectarme ahora desde el nodo remoto, pero dice que no está autorizado cuando intento minar. Puedo usar la máquina inicial que tiene los nodos 1 y 2, pero el nodo 3 no funciona de forma remota. ¿Hay alguna herramienta de diagnóstico para usar? Geth en la máquina inicial muestra 2 pares.
Su cuenta de sellador debe ser eth.coinbase y debe estar desbloqueada. Además, debe consultar a través del objeto clique quiénes son los selladores.
Agregué algo de salida de geth en la pregunta como una edición. Agregué clique y luego se borraron la dirección y las propuestas (supongo aceptadas). Debe haber una manera de verificar qué propuestas fueron aceptadas.
Creo que lo tengo: clique.getSigners. Solo estoy comprobando ahora.