General-grants-program: Cree una configuración de nodo centinela para validadores Polkadot con guía

Creado en 11 jun. 2019  ·  82Comentarios  ·  Fuente: w3f/General-Grants-Program

Los nodos centinela son una forma de proteger a los validadores de un ataque de DOS al no exponerlos directamente a Internet. Los nodos centinela son nodos completos que se conectan a otros validadores y a la red peer-to-peer y aíslan al validador. El nodo validador (el que tiene las claves de firma) se mantiene aislado del resto de la red de chismes y solo se conecta a los nodos centinela.

Esta tarea consiste en crear una configuración de nodo centinela y un script que pueda iniciar dos nodos separados y conectarlos entre sí para que uno esté orientado al público a la red p2p (el centinela) y el otro solo se conecte al centinela (el validador). ). El validador aún debería poder participar en el consenso de Polkadot en la red de prueba de Alexander. Cuando todo esté funcionando, escriba una breve guía sobre cómo alguien la implementaría. Puede basar la guía en la guía de validación actual para Polkadot. Sin embargo, no repita el contenido ya escrito allí, en su lugar, escriba su guía como una "extensión" de esta ya existente.

Bounty Bounty-s

Comentario más útil

lol, lo siento, he silenciado a @gitcoinbot durante 100 días @agutsal

Todos 82 comentarios

Estado del problema: 1. Abierto 2. Iniciado 3. Enviado 4. Terminado


__Esta emisión ahora tiene una financiación de 150.0 DAI (150.0 USD @ $1.0/DAI) adjunta.__

Estado del problema: 1. Abierto 2. Iniciado 3. Enviado 4. Terminado


__Los trabajadores han solicitado comenzar a trabajar__.

Cada uno de estos usuarios afirmó que pueden completar el trabajo dentro de 12 meses a partir de ahora.
Revise sus planes de acción a continuación:

1) gutsal-arsen ha solicitado comenzar a trabajar _(Solo financiadores: aprobar trabajador | rechazar trabajador )_.

Cree una configuración de 2 nodos (centinela y validador), cree una guía de implementación.

Obtenga más información en la página Detalles de emisión de Gitcoin .

@Web3Foundation aplicado en Gitcoin. ¿Podrías aprobar?

¡Hola, @agutsal gitcoin está inactivo en este momento una vez que se revise la reanudación de los servicios!

Estado del problema: 1. Abierto 2. Iniciado 3. Enviado 4. Terminado


__Se han iniciado las obras__.

Cada uno de estos usuarios afirmó que pueden completar el trabajo en 9 meses, 1 semana a partir de ahora.
Revise sus planes de acción a continuación:

1) gutsal-arsen ha sido aprobado para comenzar a trabajar.

Cree una configuración de 2 nodos (centinela y validador), cree una guía de implementación.

Obtenga más información en la página Detalles de emisión de Gitcoin .

@agutsal te han aprobado para empezar a trabajar.

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot vivo, se actualizará pronto

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@agutsal ¡Qué ganas! :)

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot espera un poco

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot trabajando

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@ Web3Foundation intentó compilar usando polkadot Dockerfile .
El comando docker build --tag polkadot -f Dockerfile . falla con:

image

Intenté dos veces, mismo resultado.

@agutsal ¿Estás construyendo desde la rama maestra o la rama v0.4? Podría ser mejor construir desde v0.4 ya que es más estable y se conectará a la red de prueba de Alexander.

Comuníquese con @ logan:web3.foundation en Riot para obtener una comunicación más inmediata.

Peor aún en v0.4 :
image

@lsaether @Web3Foundation

@lsaether, ¿qué es Riot? dame el enlace plz

Parece que no está compilando el binario Wasm antes de ejecutar cargo build , intente ejecutar el script en scripts/build.sh primero

@lsaether Solo estoy ejecutando docker/build.sh todavía. Supongo que funciona, pero por lo que veo no;)

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@lsaether @Web3Foundation parece que arreglé Dockerfile PR #308

Por favor fusiona.

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot en progreso

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot hablando sobre PR #308

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot cállate por favor

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gitcoinbot acaba de terminar la discusión sobre WIP PR reciente continúa trabajando

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

lol, lo siento, he silenciado a @gitcoinbot durante 100 días @agutsal

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@Web3Foundation gracias

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@Web3Foundation parece que el silencio no funciona ;(
@gitcoinbot sí, todavía estoy trabajando en la configuración de red docker-compose para ejecutar un nodo detrás de otro. @Web3Foundation por favor , confirme que eso es lo que espera.

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@gutsal-arsen Hola desde Gitcoin Core: ¿sigues trabajando en este problema? Envíe un WIP PR o un comentario dentro de los próximos 3 días o se le eliminará de este ticket y se le devolverá al estado 'Abierto'. Por favor, háganos saber si tiene preguntas.

  • [x] recordatorio (3 días)
  • [ ] escalada a mods (6 días)

Solo patrocinadores: advertencias de repetición durante 1 día | 3 días | 5 días | 10 días | 100 días

@ Web3Foundation Todavía estoy esperando su respuesta sobre mi explicación en el comentario anterior anterior. ¿Es la configuración de red virtual personalizada de docker-compose lo que espera tener 2 nodos ejecutándose uno detrás de otro?

Hola , @agutsal, perdón por la larga respuesta; @lsaether o @fgimenez probablemente podrían intervenir aquí a la pregunta sobre

"¿Es la configuración de red virtual personalizada de docker-compose lo que espera tener 2 nodos ejecutándose uno detrás de otro?"

Probablemente @lsaether @fgimenez ambos estén de vacaciones, @Web3Foundation ? ;)

Volveré a hacer ping ahora, las cosas de @agutsal han estado súper ocupadas, disculpas nuevamente por la espera.

Correcto, dos nodos, uno corriendo "detrás" del otro. El nodo centinela está frente a la red pública (y se conecta al resto de la red p2p). El nodo validador está detrás de un firewall y solo puede comunicarse con el nodo centinela.

* red pública * <---> Nodo centinela <-- cortafuegos --> Nodo validador

https://guide.kusama.network/en/latest/try/secure-validator-setup/

No dude en enviarme un ping si tiene otras preguntas.

@laboon una vez más: ambos estamos hablando de la configuración de red privada de Compose.

Disculpa, me acaban de señalar esto y entendí mal tu pregunta. Federico, quien creo que armó esta solicitud, está de vacaciones esta semana.

_"¿Es la configuración de red virtual personalizada de docker-compose lo que espera tener 2 nodos ejecutándose uno detrás de otro?""_

Usar Docker Compose para crear una red privada aislada es sin duda una forma de hacerlo y debería ser aceptable. Sin embargo, no sé si esa era la expectativa original (no veo nada en contrario aquí, no estoy seguro si tiene comunicaciones privadas en otro lugar).

Siéntase libre de dejarme saber si no respondí su pregunta.

@agutsal tal como lo veo, las redes superpuestas creadas por docker-compose no son suficientes para aislar un nodo validador del resto de la red polkadot; tan pronto como el validador se conecte a sus nodos de arranque, la red lo sabrá y, si no implementa ninguna medida adicional, otros nodos del mismo nivel podrán conectarse a él. Puede verificar todo esto iniciando la red con un archivo de composición docker como este:

version: '3'
services:
  node:
    image: parity/polkadot:v0.4.4
    container_name: polkadot-node 
    command: >
      --chain=alexander --validator 
    networks: 
      testing_net: 
        ipv4_address: 172.28.1.1 

networks:
  testing_net:
    ipam:        
      driver: default 
      config:            
        - subnet: 172.28.0.0/16  

Este nodo único tiene una dirección IP interna, no declara ningún puerto p2p para acceder desde el exterior y no tiene ningún par adicional en la red de superposición local. Cuando inicio el nodo:

$ docker-compose -f dcp.yml up --force-recreate 
Recreating polkadot-node ... done
Attaching to polkadot-node
polkadot-node | 2019-08-12 08:52:16 Parity Polkadot
polkadot-node | 2019-08-12 08:52:16   version 0.4.4-aa49754-x86_64-linux-gnu
polkadot-node | 2019-08-12 08:52:16   by Parity Team <[email protected]>, 2017-2019
polkadot-node | 2019-08-12 08:52:16 Chain specification: Alexander
polkadot-node | 2019-08-12 08:52:16 Node name: dcp-test
polkadot-node | 2019-08-12 08:52:16 Roles: AUTHORITY
polkadot-node | 2019-08-12 08:52:16 Generated a new keypair: 568dbb11bcc8f4bd1480d381e2ee87f9e1ff3798c99efa23f550dcce7417a506 (5E2C5Usq...)
polkadot-node | 2019-08-12 08:52:16 Initializing Genesis block/state (state: 0xb7d6…2707, header-hash: 0xdcd1…025b)
polkadot-node | 2019-08-12 08:52:16 Loaded block-time = 6 seconds from genesis on first-launch
polkadot-node | 2019-08-12 08:52:16 Loading GRANDPA authority set from genesis on what appears to be first startup.
polkadot-node | 2019-08-12 08:52:16 Best block: #0
polkadot-node | 2019-08-12 08:52:16 Local node identity is: QmWg2c4V6qq1hFYUcbkmckUgtMfWiC7aq5u9e8X5Sq45Tu
polkadot-node | 2019-08-12 08:52:16 Listening for new connections on 127.0.0.1:9944.
polkadot-node | 2019-08-12 08:52:17 Using authority key 5E2C5Usqi8UhQLCB1CGobhB5aGMg6zWxvg2h7Vq39tWbj14Q
polkadot-node | 2019-08-12 08:52:18 Discovered external node address: /ip4/92.176.206.107/tcp/30333/p2p/QmWg2c4V6qq1hFYUcbkmckUgtMfWiC7aq5u9e8X5Sq45Tu
polkadot-node | 2019-08-12 08:52:22 Syncing, target=#2614309 (2 peers), best: #256 (0x7e81…c0f7), finalized #0 (0xdcd1…025b), ⬇ 84.0kiB/s ⬆ 5.9kiB/s
polkadot-node | 2019-08-12 08:52:28 Syncing 93.9 bps, target=#2614310 (4 peers), best: #896 (0x6da8…cd8f), finalized #0 (0xdcd1…025b), ⬇ 30.6kiB/s ⬆ 1.7kiB/s
polkadot-node | 2019-08-12 08:52:35 Syncing 94.4 bps, target=#2614311 (5 peers), best: #1536 (0xf9b0…8351), finalized #0 (0xdcd1…025b), ⬇ 34.8kiB/s ⬆ 3.1kiB/s
polkadot-node | 2019-08-12 08:52:41 Syncing 93.9 bps, target=#2614312 (5 peers), best: #2048 (0xaa1c…3b27), finalized #0 (0xdcd1…025b), ⬇ 40.4kiB/s ⬆ 2.8kiB/s
polkadot-node | 2019-08-12 08:52:46 Syncing 93.4 bps, target=#2614313 (5 peers), best: #2515 (0x8bff…4f0b), finalized #0 (0xdcd1…025b), ⬇ 7.6kiB/s ⬆ 1.3kiB/s
polkadot-node | 2019-08-12 08:52:51 Syncing 93.2 bps, target=#2614314 (5 peers), best: #2981 (0x47ab…67bd), finalized #0 (0xdcd1…025b), ⬇ 6.0kiB/s ⬆ 0.3kiB/s

[..........]

Puede ver que otros compañeros pueden conectarse fácilmente justo después del inicio.

Sin embargo, creo que la red superpuesta es un buen paso en la dirección correcta, crea un espacio de direcciones de red que solo conocen los miembros de la red, y puede configurar el validador y los nodos públicos para restringir el acceso, tal vez usando el binario polkadot. opciones listen-addr y reserved-nodes . Propusimos una configuración de validación segura que usa este enfoque pero, en lugar de usar una red de superposición de ventana acoplable para el espacio de direcciones de la red privada, usa una VPN para mayor seguridad. Echa un vistazo aquí https://hackmd.io/QSJlqjZpQBihEU_ojmtR8g#Conclusiones-y-Propuesta

@fgimenez como se menciona aquí , ¿no funcionaría esto?

# Docker compose file to simulate a sentry node setup.
#
#
# Setup:
#
# Validator A is not supposed to be connected to the public internet. Instead it
# connects to a sentry node (sentry-a) which connects to the public internet.
# Validator B can reach validator A via sentry node A and vice versa.
#
#
# Usage:
#
# 1. Build `target/release/substrate` binary: `cargo build --release`
#
# 2. Start networks and containers: `sudo docker-compose -f scripts/sentry-node/docker-compose.yml up`
#
# 3. Reach:
#   - polkadot/apps on localhost:3000
#   - validator-a: localhost:9944
#   - validator-b: localhost:9945
#   - sentry-a: localhost:9946

version: "3.7"
services:

  validator-a:
    ports:
      - "9944:9944"
    volumes:
      - ../../target/release/substrate:/usr/local/bin/substrate
    image: parity/substrate
    networks:
      - network-a
    command:
      # Local node id: QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR
      - "--node-key"
      - "0000000000000000000000000000000000000000000000000000000000000001"
      - "--base-path"
      - "/tmp/alice"
      - "--chain=local"
      - "--key"
      - "//Alice"
      - "--port"
      - "30333"
      - "--validator"
      - "--name"
      - "AlicesNode"
      - "--reserved-nodes"
      - "/dns4/sentry-a/tcp/30333/p2p/QmV7EhW6J6KgmNdr558RH1mPx2xGGznW7At4BhXzntRFsi"
      # Not only bind to localhost.
      - "--ws-external"
      - "--rpc-external"
      # - "--log"
      # - "sub-libp2p=trace"
      # - "--log"
      # - "afg=trace"
      - "--no-telemetry"
      - "--rpc-cors"
      - "all"

  sentry-a:
    image: parity/substrate
    ports:
      - "9946:9944"
    volumes:
      - ../../target/release/substrate:/usr/local/bin/substrate
    networks:
      - network-a
      - internet
    command:
      # Local node id: QmV7EhW6J6KgmNdr558RH1mPx2xGGznW7At4BhXzntRFsi
      - "--node-key"
      - "0000000000000000000000000000000000000000000000000000000000000003"
      - "--base-path"
      - "/tmp/sentry"
      - "--chain=local"
      # Don't configure a key, as sentry-a is not a validator.
      # - "--key"
      # - "//Charlie"
      - "--port"
      - "30333"
      # sentry-a is not a validator.
      # - "--validator"
      - "--name"
      - "CharliesNode"
      - "--bootnodes"
      - "/dns4/validator-a/tcp/30333/p2p/QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR"
      - "--bootnodes"
      - "/dns4/validator-b/tcp/30333/p2p/QmSVnNf9HwVMT1Y4cK1P6aoJcEZjmoTXpjKBmAABLMnZEk"
      - "--no-telemetry"
      - "--rpc-cors"
      - "all"
      # Not only bind to localhost.
      - "--ws-external"
      - "--rpc-external"
      # Make sure sentry-a still participates as a grandpa voter to forward
      # grandpa finality gossip messages.
      - "--grandpa-voter"

  validator-b:
    image: parity/substrate
    ports:
      - "9945:9944"
    volumes:
      - ../../target/release/substrate:/usr/local/bin/substrate
    networks:
      - internet
    command:
      # Local node id: QmSVnNf9HwVMT1Y4cK1P6aoJcEZjmoTXpjKBmAABLMnZEk
      - "--node-key"
      - "0000000000000000000000000000000000000000000000000000000000000002"
      - "--base-path"
      - "/tmp/bob"
      - "--chain=local"
      - "--key"
      - "//Bob"
      - "--port"
      - "30333"
      - "--validator"
      - "--name"
      - "BobsNode"
      - "--bootnodes"
      - "/dns4/validator-a/tcp/30333/p2p/QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR"
      - "--bootnodes"
      - "/dns4/sentry-a/tcp/30333/p2p/QmV7EhW6J6KgmNdr558RH1mPx2xGGznW7At4BhXzntRFsi"
      - "--no-telemetry"
      - "--rpc-cors"
      - "all"
      # Not only bind to localhost.
      - "--ws-external"
      - "--rpc-external"

  ui:
    image: polkadot-js/apps
    ports:
      - "3000:80"

networks:
  network-a:
  internet:

@fgimenez bueno, consideraría ese enfoque después de unos días de silencio

@agutsal, lo siento por la respuesta tardía, combinar nodos reservados y nodos de arranque es una buena opción. Como dije en mi comentario anterior, también introduciría listen-addr en el validador con la ip del validador en la red superpuesta de docker compose, para asegurarse de que el validador solo acepte conexiones de pares en ese espacio de direcciones.

Gracias por su respuesta. Por lo que veo, usan la imagen acoplable substrate que nosotros no.

Básicamente debo seguir esto:
docker run -ti parity/polkadot:v0.4.4 --chain=alex --alice <== ejecutar centinela
produce algo como esto donde debería buscar Discovered external node address
image
luego pásalo al validador así:
docker run -ti parity/polkadot:v0.4.4 --chain=local --validator --reserved-nodes /ip4/5.58.235.221/tcp/30333/p2p/QmVUPpkU2LoBMqhagLmF6H2Xnb4ShK8KV2ZzKeJkmGGBkX

Si eso es correcto, ¿dónde pasar bootnodes ? Si no, arréglame por favor, @fgimenez

Tal como lo veo, no debe usar ninguna dirección descubierta externa, en su lugar, debe usar una dirección múltiple que incluya la IP del nodo público en la red de superposición de composición de la ventana acoplable. No estoy seguro si puede saberlo antes de que se inicie la red docker compose.

Solo mencioné los bootnodes porque aparecían en el ejemplo que vinculaste, solo los necesitas si vas a crear una red local. Si vas a unirte a alex o (lo que sería mejor en mi opinión) kusama, los bootnodes ya están definidos en chainspec.

@fgimenez según el requisito, el nodo del validador debe conectarse al nodo centinela. Necesito saber cómo hacer eso. Eso es.

Sí, esto se hace configurando --reserved-nodes en el validador con multidirección de los nodos públicos (un nodo reservado por nodo público). Debería ser mejor usar aquí la dirección privada del nodo público para el multiaddr, ¿tiene sentido?

@fgimenez ;) podría ser, simplemente no sé el formato del parámetro --reserved-nodes que especifica la dirección múltiple. Estaría agradecido por la muestra.

claro, algo como esto /ip4/<private_ip>/tcp/30333/p2p/<peer_id>

Debe configurar la IP privada como la asignada al nodo público en la red de superposición de composición de Docker. La identificación del par se asigna aleatoriamente en el arranque si no especifica una clave de nodo con --node-key . Esta clave de nodo debe ser una cadena de 64 caracteres hexadecimales, puede intentar iniciar un nodo localmente configurando una clave de nodo conocida y luego verificando qué ID de par está asignada, y use esa ID de par para construir el nodo reservado multiaddr.

Entonces, para cada nodo público:

  • iniciar un nodo local con polkadot --node-key=<your_node_key>
  • tome nota de la identificación del par asignado
  • configure el comando de inicio del nodo público para incluir --node-key en el valor anterior, de modo que se asegure de que siempre tendrá la misma identificación de pares
  • construye el multiaddr como /ip4/<private_ip>/tcp/30333/p2p/<peer_id>

e inicie el validador con un conjunto --reserved-nodes para cada multidirección de nodo público

Déjame saber si necesitas algo más.

@fgimenez Actualmente estoy pensando cómo hacer este proceso de 2 pasos en un solo archivo docker-compose.yml . Dígame: ¿ <your_node_key> podría generarse aleatoriamente como algún UUID?

Algo así: $(openssl rand -base64 500 | tr -dc 'a-zA-Z0-9' | fold -w 45 | head -n 1)

Puede usar una de las bibliotecas libp2p para generar la identificación del par y el par de claves asociado, por ejemplo, https://github.com/libp2p/js-peer-id node-key es la clave privada, con 256 bits de longitud.

@fgimenez por favor , revisa mi WIP PR

desde dentro del directorio docker simplemente ejecute docker-compose -f sentry-docker-compose.yml up y vea el resultado. Parece que el validador se conecta con éxito a Sentry como compañero.

Si se acepta, agregaré más configuraciones y presionaré para que se fusionen con el maestro.

Seguro le echaremos un vistazo la semana que viene :+1:

@fgimenez alguna actualización ha sido enviada a mi WIP RP
Por favor, hágamelo saber después de la revisión.

@agutsal se ve bien, es bastante similar a https://github.com/paritytech/substrate/blob/master/scripts/sentry-node/docker-compose.yml , ¿verdad? ¿Cuál es el beneficio de agregarlo al repositorio de polkadot?

Bueno, @fgimenez , en realidad se basa en sentry-node/docker-compose.yml pero tiene diferencias significativas: podemos pasar un montón de variables de entorno para controlar ambos contenedores:

{SENTRY,VALIDATOR}_NODE_KEY
{SENTRY,VALIDATOR}_BASE_PATH
{SENTRY,VALIDATOR}_CHAIN
{SENTRY,VALIDATOR}_PORT
{SENTRY,VALIDATOR}_NAME
VALIDATOR_RESERVED_NODES
SENTRY_BOOTNODES

Esto es imprescindible para ejecutar sentry/validator con NODE_KEY único, RESERVED_NODES/BOOTNODES URI en una cadena pública (no local).
Por defecto se ejecuta con 00000000000000000000000000000000000000000000000000000000000000001
00000000000000000000000000000000000000000000000000000000000000003

lo cual está bien para las pruebas, pero no para la producción. También se han borrado algunos parámetros redundantes.

Estado del problema: 1. Abierto 2. Iniciado 3. Enviado 4. Terminado


__Trabajo por 150.0 DAI (150.0 USD @ $1.0/DAI) ha sido presentado por__:

  1. @gutsal-arsen

@Web3Foundation , eche un vistazo al trabajo enviado:


Estado del problema: 1. Abierto 2. Iniciado 3. Enviado 4. Terminado


__La financiación de 150,0 DAI (150,0 USD @ $1,0/DAI) adjunta a este problema ha sido aprobada y emitida a @gutsal-arsen.__

@Web3Foundation Gracias por su pago. Sin embargo, creo que también tengo que corregir documentos en el ámbito del proyecto actual. El repositorio actual no contiene documentos, ¿debería clonar https://github.com/w3f/polkadot-wiki y corregirlos allí?

@agutsal seguro; hubo un poco de esfuerzo repetido ya que @fgimenez había creado una herramienta que quizás resuelve este problema con más éxito. Pagamos debido a sus repetidos esfuerzos en el ecosistema y el tiempo respectivo en curso que ha tomado en recompensas anteriores y esta.

Siéntase libre de modificar la documentación y dejar cualquier comentario para su revisión.

Gracias por hacérmelo saber. Trabajaría en eso hoy y te lo haré saber @fgimenez @Web3Foundation.

Cerrando desde que los nodos centinela han quedado obsoletos .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

EdwardAThomson picture EdwardAThomson  ·  9Comentarios

blokaly picture blokaly  ·  7Comentarios

EdwardAThomson picture EdwardAThomson  ·  14Comentarios

EdwardAThomson picture EdwardAThomson  ·  6Comentarios

ghuun picture ghuun  ·  7Comentarios