General-grants-program: Crie uma configuração de nó sentinela para validadores Polkadot com guia

Criado em 11 jun. 2019  ·  82Comentários  ·  Fonte: w3f/General-Grants-Program

Os nós sentinela são uma maneira de proteger validadores de um ataque DOS, não os expondo diretamente à Internet. Nós sentinelas são nós completos que se conectam a outros validadores e à rede ponto a ponto e isolam o validador. O nó validador (aquele com as chaves de assinatura) é mantido isolado do resto da rede de fofocas e é conectado apenas ao(s) nó(s) sentinela.

Esta tarefa consiste em criar uma configuração e um script de nó sentinela que possa lançar dois nós separados e tê-los ligados entre si de modo a que um fique voltado para a rede p2p (o sentinela) e o outro só se ligue ao sentry (o validador ). O validador ainda deve poder participar do consenso da Polkadot na rede de teste Alexander. Quando tudo estiver funcionando, escreva um pequeno guia sobre como alguém o implantaria. Você pode basear o guia no guia do validador atual para Polkadot. No entanto, não repita o conteúdo já escrito lá, em vez disso, escreva seu guia como uma “extensão” para este já existente.

Bounty Bounty-s

Comentários muito úteis

lol desculpe, eu silenciei @gitcoinbot por 100 dias @agutsal

Todos 82 comentários

Status do problema: 1. Aberto 2. Iniciado 3. Enviado 4. Concluído


__Esta emissão agora tem um financiamento de 150,0 DAI (150,0 USD @ $ 1,0/DAI) associado a ela.__

Status do problema: 1. Aberto 2. Iniciado 3. Enviado 4. Concluído


__Trabalhadores se inscreveram para começar a trabalhar__.

Cada um desses usuários afirmou que pode concluir o trabalho em 12 meses a partir de agora.
Por favor, revise seus planos de ação abaixo:

1) gutsal-arsen se inscreveu para iniciar o trabalho _(Somente financiadores: aprovar trabalhador | rejeitar trabalhador )_.

Crie uma configuração de 2 nós (sentinela e validador), crie um guia de implantação.

Saiba mais na página Detalhes do problema do Gitcoin .

@Web3Foundation aplicado no Gitcoin. Você poderia aprovar?

Ei @agutsal gitcoin está inativo no momento, assim que a retomada dos serviços for revisada!

Status do problema: 1. Aberto 2. Iniciado 3. Enviado 4. Concluído


__O trabalho foi iniciado__.

Cada um desses usuários afirmou que pode concluir o trabalho em 9 meses, 1 semana a partir de agora.
Por favor, revise seus planos de ação abaixo:

1) gutsal-arsen foi aprovado para começar a trabalhar.

Crie uma configuração de 2 nós (sentinela e validador), crie um guia de implantação.

Saiba mais na página Detalhes do problema do Gitcoin .

@agutsal você foi aprovado para começar a trabalhar.

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot vivo, será atualizado em breve

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@agutsal ótimo ansioso por isso! :)

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot espere um pouco

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot funcionando

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@Web3Foundation tentou construir usando polkadot Dockerfile .
O comando docker build --tag polkadot -f Dockerfile . falha com:

image

Tentei duas vezes - mesmo resultado.

@agutsal Você está construindo a partir do branch master ou do branch v0.4? Pode ser melhor construir a partir de v0.4 pois é mais estável e se conectará à rede de teste Alexander.

Entre em contato com @logan:web3.foundation na Riot para uma comunicação mais imediata.

Pior ainda em v0.4 :
image

@lsaether @Web3Foundation

@lsaether o que é Riot? Manda o link pf

Parece que você não está compilando o binário Wasm antes de executar cargo build , tente executar o script em scripts/build.sh primeiro

@lsaether Estou apenas executando docker/build.sh ainda. Presumo que funcione, mas pelo que vejo não funciona ;)

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@lsaether @Web3Foundation parece que consertei o Dockerfile PR # 308

Por favor, mescle.

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot em andamento

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot falando no PR #308

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot cale a boca por favor

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gitcoinbot acabou de terminar a discussão sobre o recente WIP PR continua a funcionar

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

lol desculpe, eu silenciei @gitcoinbot por 100 dias @agutsal

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@Web3Foundation obrigado

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@Web3Foundation parece mudo não funciona ;(
@gitcoinbot sim, ainda estou trabalhando na configuração de rede do docker-compose para executar um nó atrás do outro. @Web3Foundation plz, confirme que é o que você espera.

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@gutsal-arsen Olá do Gitcoin Core - você ainda está trabalhando nesse problema? Envie um WIP PR ou comentário nos próximos 3 dias ou você será removido deste ticket e ele retornará ao status 'Aberto'. Por favor, deixe-nos saber se você tiver dúvidas!

  • [x] lembrete (3 dias)
  • [ ] escalação para mods (6 dias)

Somente financiadores: adiar avisos por 1 dia | 3 dias | 5 dias | 10 dias | 100 dias

@Web3Foundation Ainda estou aguardando sua resposta sobre minha explicação no comentário anterior acima. A configuração de rede virtual personalizada do docker-compose é o que você espera que tenha 2 nós executando um atrás do outro?

Ei @agutsal desculpe a longa resposta; @lsaether ou @fgimenez provavelmente poderiam entrar aqui para a pergunta sobre

"a configuração de rede virtual personalizada do docker-compose é o que você espera que tenha 2 nós executando um atrás do outro?"

Provavelmente @lsaether @fgimenez estão de férias, @Web3Foundation ? ;)

Vou pingar novamente agora, as coisas do @agutsal estão super ocupadas, peço desculpas novamente pela espera.

Correto, dois nós, um rodando "atrás" do outro. O nó sentinela está voltado para a rede pública (e se conecta ao restante da rede p2p). O nó validador está atrás de um firewall e só pode se comunicar com o nó sentinela.

* rede pública * <---> Nó sentinela <-- firewall --> Nó validador

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

Sinta-se à vontade para me enviar um ping se tiver outras perguntas.

@laboon mais uma vez - nós dois estamos falando sobre a configuração de rede privada do Compose.

Desculpe, acabei de apontar para isso e não entendi sua pergunta. Federico, que acredito ter feito este pedido, está de férias esta semana.

_"é a configuração de rede virtual personalizada do docker-compose o que você espera que tenha 2 nós executando um atrás do outro?""_

Usar o Docker Compose para criar uma rede privada isolada é certamente uma maneira de fazer isso e deve ser aceitável. No entanto, não sei se essa era a expectativa original (não vejo nada em contrário aqui - não tenho certeza se você tem comunicações privadas em outro lugar).

Sinta-se à vontade para me informar se não respondi sua pergunta.

@agutsal como eu vejo as redes de sobreposição criadas pelo docker-compose não são suficientes para isolar um nó validador do resto da rede polkadot; assim que o validador se conectar aos seus nós de inicialização, ele será conhecido pela rede e, se você não implementar nenhuma medida adicional, outros nós de mesmo nível poderão se conectar a ele. Você pode verificar tudo isso iniciando a rede com um arquivo de composição do 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 único nó possui um endereço IP interno, não declara nenhuma porta p2p para ser acessada de fora e não possui nenhum peer adicional na rede local de sobreposição. Quando eu inicio o nó:

$ 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

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

Você pode ver que outros peers podem se conectar a ele facilmente logo após o início.

No entanto, acho que a rede de sobreposição é um bom passo na direção certa, ela cria um espaço de endereço de rede conhecido apenas pelos membros da rede, e você pode configurar o validador e os nós públicos para restringir o acesso, talvez usando o binário polkadot opções listen-addr e reserved-nodes . Propusemos uma configuração de validador seguro que usa essa abordagem, mas, em vez de usar uma rede de sobreposição do docker para o espaço de endereço da rede privada, ela usa uma VPN para aumentar a segurança. Dê uma olhada aqui https://hackmd.io/QSJlqjZpQBihEU_ojmtR8g#Conclusions -and-Proposal

@fgimenez , conforme mencionado aqui , não funcionaria:

# 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 bem, eu consideraria essa abordagem após alguns dias de silêncio

@agutsal com certeza desculpe pela resposta tardia, combinar nós reservados e nós de inicialização é uma boa opção. Conforme declarado no meu comentário anterior, eu também introduziria o listen-addr no validador com o ip do validador na rede de sobreposição de composição do docker, para que você tenha certeza de que o validador só aceita conexões de pares nesse espaço de endereço.

Obrigado pela sua resposta. Pelo que vejo, eles usam a imagem do docker substrate que não somos.

Basicamente devo seguir isso:
docker run -ti parity/polkadot:v0.4.4 --chain=alex --alice <== executar sentinela
produz algo assim, onde eu deveria verificar Discovered external node address
image
em seguida, passe-o para o validador assim:
docker run -ti parity/polkadot:v0.4.4 --chain=local --validator --reserved-nodes /ip4/5.58.235.221/tcp/30333/p2p/QmVUPpkU2LoBMqhagLmF6H2Xnb4ShK8KV2ZzKeJkmGGBkX

Se estiver correto para onde passar bootnodes ? Se não - me corrija por favor, @fgimenez

A meu ver, você não deve usar nenhum endereço descoberto externo, em vez disso, se você deve usar um multiaddr que inclua o ip do nó público na rede de sobreposição de composição do docker. Não tenho certeza se você pode saber antes que a rede de composição do docker seja iniciada.

Eu só mencionei bootnodes porque eles apareceram no exemplo que você l8nked, você só precisa deles se for criar uma rede local. Se você vai se juntar a alex ou (o que seria melhor imo) kusama, os bootnodes já estão definidos no chainspec.

@fgimenez , conforme o requisito, o nó validador deve se conectar ao nó sentry. Eu preciso saber como fazer isso. É isso.

Sim, isso é feito definindo --reserved-nodes no validador com multiaddr dos nós públicos (um nó reservado por nó público). Deve ser melhor usar aqui o endereço privado do nó público para o multiaddr, isso faz sentido?

@fgimenez ;) poderia ser, só não sei o formato do parâmetro --reserved-nodes especificando o multiaddr. Agradeceria pela amostra.

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

Você deve definir o ip privado como aquele atribuído ao nó público na rede de sobreposição de composição do docker. O id do peer é atribuído aleatoriamente na inicialização se você não especificar uma chave de nó com --node-key . Essa chave de nó deve ser uma string de 64 caracteres hexadecimais, você pode tentar iniciar um nó localmente definindo uma chave de nó conhecida e, em seguida, verificando qual id de par é atribuído e use esse id de par para construir o nó reservado multiaddr.

Então, para cada nó público:

  • inicie um nó local com polkadot --node-key=<your_node_key>
  • tome nota do ID do peer atribuído
  • defina o comando public node start para incluir --node-key no valor anterior, para que você tenha certeza de que ele sempre terá o mesmo ID de peer
  • construa o multiaddr como /ip4/<private_ip>/tcp/30333/p2p/<peer_id>

e inicie o validador com um --reserved-nodes definido para cada multiaddr de nó público

Deixe-me saber se você precisar de mais alguma coisa.

@fgimenez Atualmente estou pensando em como fazer esse processo de 2 etapas em um único arquivo docker-compose.yml . Diga-me - <your_node_key> poderia ser gerado aleatoriamente como algum UUID?

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

Você pode usar uma das bibliotecas libp2p para gerar o peer id e o par de chaves associado, por exemplo https://github.com/libp2p/js-peer-id node-key é a chave privada, com 256 bits de comprimento.

@fgimenez plz, revise meu WIP PR

de dentro do diretório docker apenas execute docker-compose -f sentry-docker-compose.yml up e veja a saída. Parece que o validador se conecta com sucesso ao sentry como um peer.

Se aceito, adicionarei mais algumas configurações e enviarei para ser mesclado no master.

Claro que vai dar uma olhada na próxima semana :+1:

@fgimenez alguma atualização foi enviada para o meu WIP RP
Por favor, deixe-me saber após a revisão.

@agutsal parece bom, é bem parecido com https://github.com/paritytech/substrate/blob/master/scripts/sentry-node/docker-compose.yml , certo? Qual é o benefício de adicioná-lo ao repositório do polkadot?

Bem, @fgimenez , na verdade é baseado em sentry-node/docker-compose.yml mas tem diferenças significativas: podemos passar várias variáveis ​​de ambiente para controlar os dois contêineres:

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

Esta é uma obrigação para executar sentry/validator com NODE_KEY, RESERVED_NODES/BOOTNODES URI exclusivo na cadeia pública (não local).
Por padrão ele roda com 000000000000000000000000000000000000000000000000000000000000001
000000000000000000000000000000000000000000000000000000000000003

o que é bom para teste, mas não para produção. Também alguns parâmetros redundantes foram apagados.

Status do problema: 1. Aberto 2. Iniciado 3. Enviado 4. Concluído


__Trabalho por 150,0 DAI (150,0 USD @ $1,0/DAI) foi enviado por__:

  1. @gutsal-arsen

@Web3Foundation , dê uma olhada no trabalho enviado:

  • PR por @gutsal-arsen

Status do problema: 1. Aberto 2. Iniciado 3. Enviado 4. Concluído


__O financiamento de 150,0 DAI (150,0 USD @ $ 1,0/DAI) anexado a esta emissão foi aprovado e emitido para @gutsal-arsen.__

@Web3Foundation Obrigado pelo seu pagamento. No entanto, acho que também tenho que corrigir documentos no escopo do projeto atual. O repositório atual não contém documentos, devo clonar https://github.com/w3f/polkadot-wiki e corrigi-los lá?

@agutsal com certeza; houve um pouco de esforço repetido, pois @fgimenez criou uma ferramenta que talvez resolva com mais sucesso esse problema. Pagamos por causa de seus esforços repetidos no ecossistema e do respectivo tempo em andamento que você levou em contratos anteriores e este.

Sinta-se à vontade para alterar a documentação e deixar comentários para revisão.

Obrigado por me avisar. Trabalharia nisso hoje e informaria @fgimenez @Web3Foundation.

Fechando porque os nós sentinela foram descontinuados .

Esta página foi útil?
0 / 5 - 0 avaliações