「Entendendo a Ponte Darwinia 1–7」Um Guia prático sobre como operar um Bridger Node-II

kanbeok
Darwinia Network Brasil
8 min readJan 19, 2022

Este artigo é parte da sequência de Guias Práticos sobre como operar um Bridger Node. Aqui explicamos as melhorias no projeto anterior de Bridgers e a diferença nas operações do usuário.

Introdução

Desde o último lançamento de Bridgers, identificamos algumas questões que precisam ser abordadas.

  • No design anterior, todas as pontes foram colocadas em um único grande espaço de trabalho e gerenciadas em um único projeto. No entanto, como as pontes podem depender de diferentes versões de bibliotecas a montante, os conflitos de dependência foram frequentes. Além disto, pela mesma causa, o tempo de compilação torna-se maior à medida que o número de pontes aumenta, pois não conseguimos compilar um módulo de ponte específico separadamente.
  • O design anterior gerenciava todas as pontes como um servidor web, aumentando a sobrecarga de memória dos programas Bridger.

Para resolver estes problemas, lançamos uma atualização para o projeto de Bridgers. Conseguimos resolver os problemas acima mencionados, assim como otimizar algumas funcionalidades no novo design.

  • Cada bridger é executado como um binário independente;
  • Cada bridger pode ser compilado de modo independente;
  • Cada ponte é lançada separadamente em vez de ser gerenciada no design tipo Servidor Web;
  • A sobrecarga de memória é significativamente reduzida;

Outras otimizações incluem:

  • Os logs suportam o formato JSON que facilita o monitoramento do estado dos Bridgers;
  • Otimizar o conteúdo dos logs;
  • Agilizar os procedimentos CI/CD, o que permite a compilação cruzada para diferentes plataformas;
  • Centralizar a gestão do Subql/Subgraph e automatizar a implantação.

Migração

Toda vez que lançarmos uma nova versão da Bridger desde a v0.4.8, forneceremos um guia de atualização se algum arquivo de configuração for modificado. Os guias para os últimos lançamentos são os seguintes.

Guia de atualização para a versão v0.4.8 ou posterior (em inglês)

Guia de atualização para a versão v0.5.x (em inglês)

Utilização

De agora em diante, o guia de utilização será composto de duas partes, modo de desenvolvimento (local) e modo de produção. Primeiro, vamos dar uma olhada no helper.

$ bridger -h
bridger 0.5.0
Darwinia bridgerUSAGE:
bridger <SUBCOMMAND>FLAGS:
-h, --help Prints help information
-V, --version Prints version informationSUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
kv Kv options
list List all bridges
registry Registry option

Modo de produção

O modo de produção é o modo padrão da Bridger. Os usuários podem verificar(obter) ou definir através do comando registry.

$ bridger registry get
TYPE: Github
PATH: <https://github.com/darwinia-network/bridger>

Toda vez que uma nova versão do Bridger é lançada, o sistema CI/CD constrói automaticamente todos os executáveis e os carrega para a página de lançamento do Github. Por exemplo

https://github.com/darwinia-network/bridger/releases/tag/v0.5.0 (em inglês)

Você pode escolher a versão certa de acordo com seu sistema operacional e redes. Então, podemos continuar a lançar a bridger.

$ bridger pangolin-ropsten -h
2022-01-06 03:07:49 DEBUG bridger: Found subcommand (pangolin-ropsten) and args: -h
2022-01-06 03:07:49 TRACE bridger: Try execute external command
2022-01-06 03:07:49 TRACE bridger: Force mode: false
2022-01-06 03:07:49 TRACE bridger: Download package path is: /tmp/bg2/bridge-pangolin-ropsten-linux-x86_64.zip
Downloading `https://github.com/darwinia-network/bridger/releases/download/v0.5.0/bridge-pangolin-ropsten-linux-x86_64.zip`
2022-01-06 03:07:49 TRACE bridger: Response code is: 200
Downloaded
Start extract /tmp/bg2/bridge-pangolin-ropsten-linux-x86_64.zip
2022-01-06 03:07:49 DEBUG bridger: File 0 extracted to "/tmp/bg2/bridge-pangolin-ropsten" (27136024 bytes)
2022-01-06 03:07:50 INFO bridger::external::provider::common: Execute `bridge-pangolin-ropsten -h` in path: /tmp/bg2/
pangolin-ropsten 0.5.0
Bridge pangolin-ropstenUSAGE:
bridge-pangolin-ropsten <SUBCOMMAND>FLAGS:
-h, --help Prints help information
-V, --version Prints version informationSUBCOMMANDS:
affirm Affirm options
confirm Confirm options
ecdsa Ecdsa options
guard Guard
help Prints this message or the help of the given subcommand(s)
info Ecdsa options
keys Keys
mmr MMR options
parcel Basic command options
relay Relay options
start Start bridge pangolin-ropsten

$HOME/.bridger é o local padrão dos arquivos de configuração. Você também pode definir sua própria pasta de configuração, definindo a variável de ambienteBRIDGER_HOME.

Há também outras variáveis de ambiente para uso, as quais você pode consultar em Utilização (em inglês).

Copiar a configuração do modelo para o briger especificado para a pastaBRIDGER_HOME, substitua a chave privada pela sua própria.

e finalmente execute o comando start para criar a bridger.

$ bridger pangolin-ropsten start
2022-01-06 03:23:13 DEBUG bridger: Found subcommand (pangolin-ropsten) and args: start
2022-01-06 03:23:13 TRACE bridger: Try execute external command
2022-01-06 03:23:13 TRACE bridger: Force mode: false
2022-01-06 03:23:13 INFO bridger::external::provider::common: Execute `bridge-pangolin-ropsten start` in path: /tmp/bg2/
2022-01-06 03:23:13 INFO bridge_pangolin_ropsten::command::handler::start: Start bridge pangolin-ropsten
2022-01-06 03:23:13 DEBUG lifeline::dyn_bus::storage: BridgeState stored in PangolinRopstenBus
2022-01-06 03:23:13 DEBUG lifeline::dyn_bus::storage: ToExtrinsicsMessage linked in PangolinRopstenBus
2022-01-06 03:23:13 DEBUG lifeline::spawn: START AffirmService/task-pangolin-ropsten-service-affirm-scan
2022-01-06 03:23:13 DEBUG lifeline::spawn: START AffirmService/task-pangolin-ropsten-service-affirm-relay
2022-01-06 03:23:13 DEBUG lifeline::dyn_bus::storage: ToRelayMessage linked in PangolinRopstenBus
2022-01-06 03:23:13 DEBUG lifeline::spawn: START AffirmService/task-pangolin-ropsten-service-affirm-command
2022-01-06 03:23:13 DEBUG lifeline::spawn: START CheckService/task-pangolin-ropsten-service-check
2022-01-06 03:23:13 DEBUG lifeline::dyn_bus::storage: ToRedeemMessage linked in PangolinRopstenBus
2022-01-06 03:23:13 INFO pangolin-ropsten: SERVICE RESTARTING...
2022-01-06 03:23:13 DEBUG lifeline::spawn: START RedeemService/task-pangolin-ropsten-service-redeem-scan
2022-01-06 03:23:13 DEBUG lifeline::spawn: START RedeemService/task-pangolin-ropsten-service-redeem-command
2022-01-06 03:23:13 INFO pangolin-ropsten: SERVICE RESTARTING...
2022-01-06 03:23:13 DEBUG lifeline::dyn_bus::storage: ToGuardMessage linked in PangolinRopstenBus
2022-01-06 03:23:13 DEBUG lifeline::spawn: START GuardService/task-pangolin-ropsten-service-guard
2022-01-06 03:23:13 DEBUG lifeline::spawn: START PangolinService/task-pangolin-ropsten-service-pangolin-scan
2022-01-06 03:23:13 INFO pangolin-ropsten: SERVICE RESTARTING...
2022-01-06 03:23:13 DEBUG lifeline::spawn: START ExtrinsicsService/task-pangolin-ropsten-service-extrinsics
2022-01-06 03:23:13 DEBUG lifeline::dyn_bus::storage: DarwiniaEthereumMessage linked in PangolinRopstenBus
2022-01-06 03:23:13 INFO pangolin-ropsten: ROPSTEN CHECK SERVICE RESTARTING...
2022-01-06 03:23:13 INFO pangolin-ropsten: SERVICE RESTARTING...
2022-01-06 03:23:13 INFO pangolin-ropsten: SERVICE RESTARTING...
2022-01-06 03:23:13 INFO pangolin-ropsten: SERVICE RESTARTING...
2022-01-06 03:23:13 INFO pangolin-ropsten: EXTRINSICS SERVICE RESTARTING...

Módulo de Desenvolvimento

No modo de desenvolvimento, os desenvolvedores usam um script bridger.sh para especificar o bridger que pretendem compilar e executar. Além disso, o registro (registry) deve ser mudado para local, caso contrário, ele irá baixar o bridger atual do servidor como no modo de produção.

$ ./bridger.sh registry set --type local

Algumas convenções adicionais também precisam ser seguidas:

  • Todas as pontes embutidas devem ser colocadas nas pontes de pastas e nomeadas com os sub-comandos pretendidos (por exemplo, pangolin-pangoro/pangolin-ropsten);
  • Uma ponte é um projeto que utiliza a linguagem de programação Rust que vem com um suporte binário. A nomenclatura deve seguir o formato bridge-<BRIDGE_NAME> (por exemplo, bridge-pangolin-ropsten).

Agora você pode compilar e lançar a ponte especificada, executando bridger.sh

$ ./bridger.sh pangolin-ropsten -h
+ dirname ./bridger.sh
+ cd .
+ pwd -P
+ BIN_PATH=/data/bridger
+ cargo build --manifest-path /data/bridger/frame/Cargo.toml --package darwinia-bridger
Finished dev [unoptimized + debuginfo] target(s) in 0.44s
+ /data/bridger/frame/target/debug/bridger pangolin-ropsten -h
2022-01-06 04:13:40 DEBUG bridger: Found subcommand (pangolin-ropsten) and args: -h
2022-01-06 04:13:40 TRACE bridger: Try execute external command
2022-01-06 04:13:40 TRACE bridger: The execute path is: /data/bridger/frame/target/debug/
2022-01-06 04:13:40 TRACE bridger: Try detect binary fo path: /data/bridger/frame/target/debug/../../../bridges/pangolin-ropsten
2022-01-06 04:13:40 INFO bridger: Try compile bridge-pangolin-ropsten in path: /data/bridger/frame/target/debug/../../../bridges/pangolin-ropsten
2022-01-06 04:13:40 INFO bridger: Execute `cargo build -p bridge-pangolin-ropsten` in path: /data/bridger/frame/target/debug/../../../bridges/pangolin-ropsten
Compiling support-terminal v0.5.0 (/data/bridger/frame/supports/support-terminal)
Compiling support-primitives v0.5.0 (/data/bridger/frame/supports/support-primitives)
Compiling support-common v0.5.0 (/data/bridger/frame/supports/support-common)
Compiling support-lifeline v0.5.0 (/data/bridger/frame/supports/support-lifeline)
Compiling support-tracker v0.5.0 (/data/bridger/frame/supports/support-tracker)
Compiling component-http-client v0.5.0 (/data/bridger/frame/components/http-client)
Compiling component-thegraph-liketh v0.5.0 (/data/bridger/frame/components/thegraph-liketh)
Compiling component-subquery v0.5.0 (/data/bridger/frame/components/subquery)
Compiling support-ethereum v0.5.0 (/data/bridger/frame/supports/support-ethereum)
Compiling component-state v0.5.0 (/data/bridger/frame/components/state)
Compiling component-ethereum v0.5.0 (/data/bridger/frame/components/ethereum)
Compiling client-pangolin v0.5.0 (/data/bridger/bridges/pangolin-ropsten/client-pangolin)
Compiling component-shadow v0.5.0 (/data/bridger/frame/components/shadow)
Compiling bridge-pangolin-ropsten v0.5.0 (/data/bridger/bridges/pangolin-ropsten/bridge)
Finished dev [unoptimized + debuginfo] target(s) in 34.20s
2022-01-06 04:14:14 INFO bridger: Execute `bridge-pangolin-ropsten -h` in path: /data/bridger/frame/target/debug/../../../bridges/pangolin-ropstenUSAGE:
bridge-pangolin-ropsten <SUBCOMMAND>FLAGS:
-h, --help Prints help information
-V, --version Prints version informationSUBCOMMANDS:
affirm Affirm options
confirm Confirm options
ecdsa Ecdsa options
guard Guard
help Prints this message or the help of the given subcommand(s)
info Ecdsa options
keys Keys
mmr MMR options
parcel Basic command options
relay Relay options
start Start bridge pangolin-ropsten

Desenvolvimento

Lifeline é uma biblioteca para Event Bus desenvolvida em linguagem de programação Rust que se adequa ao desenvolvimento da Bridge. Uma descrição detalhada sobre como utilizá-la pode ser encontrada aqui. Há alguns casos de uso na documentação. As três partes a seguir são essenciais e precisam de mais atenção.

  • Criar um Bus
  • Criar uma Message
  • Criar um Service

Bus é o núcleo do Event Bus. Bus pode ser usado para mandar uma mensagem solicitando um Canal ou agendando um Service. Dividimos as responsabilidades de uma ponte em uma miríade de funções, cada uma das quais é realizada por um Service. Nos fornecemos uma template no repositório Bridger que pode ser usada para criar um novo projeto Bridge.

Como cada ponte se torna independente no novo projeto, a Lifeline não é a única maneira de construir uma ponte. Você é livre para implementar sua ponte em sua maneira favorita. Se você quiser que sua ponte seja programada por bridger (a parte de desenvolvimento), você deve armazenar e nomear sua ponte após a convenção.

Se você for um desenvolvedor externo, você pode implementar uma nova ponte em seu caminho e, em seguida, enviar um pedido para puxar para o repositório darwinia-network/bridger. Ou você pode criar seu próprio repositório

Por exemplo

$ bridger registry set --type server --path <https://github.com/fewensa/bridger>

Sobre a Rede Darwinia

A Rede Darwinia é uma rede descentralizada de pontes cross-chain construída em Substrate. A Darwinia é conhecida como o “polo de pontes cross-chain” do Metaverso Web 3.0. Ela fornece uma solução de ponte segura e geral, conecta-se a Polkadot, Ethereum, TRON e outras cadeias heterogêneas através da transferência de ativos em cadeia e chamadas em cadeia remotas.

A Darwinia Network ganhou uma alta reputação e reconhecimento ao longo de sua jornada voltada a construção de protocolos descentralizados de pontes entre cadeias. Em 2020, Darwinia foi mencionada light-paper da Polkadot como um dos amigos da Polkadot e do Substrate. E a Darwinia foi selecionada para participar do Substrate Builder Program e do Web3.0 Bootcamp, e pelo excelente trabalho no Substrate Builder Program, Darwinia Network recebeu oficialmente o título de Nível 2 da Parity. Os produtos e ferramentas desenvolvidos pela Darwinia foram premiados com três financiamentos W3F.

Darwinia tem contribuído para a compatibilidade e interoperabilidade do Metaverso.

As áreas de aplicação da Rede Darwinia incluem DeFi, trading cross-chain de NFTs, jogos, etc. Darwinia também desenvolve o jogo do Metaverso Evolution Land.

Tudo o que você precisa saber sobre Darwinia

[Website] [Twitter] [Telegram Oficial em Português] [GitHub] [Discord]

Traduzido do inglês para o português por Mariana Kanbe.

Link para acesso ao artigo original:

https://darwinianetwork.medium.com/understanding-darwinia-bridge-1-7-a-hands-on-guide-on-how-to-run-a-bridger-node-ii-2e602fc40e5

--

--