Executar um Nó de Sequenciador com Systemd¶
Introdução¶
Uma das principais propostas do Tanssi é oferecer produção de blocos descentralizada e sem confiança para suas redes. O runtime do Tanssi gerencia a atribuição de sequenciadores para todas as redes ativas no ecossistema.
O algoritmo de atribuição distribui o conjunto disponível de sequenciadores a cada sessão, designando-os para uma cadeia aleatória. Assim, eles produzem blocos para a mesma rede por um período relativamente curto, aumentando a segurança geral do ecossistema.
Para isso, o binário do Tanssi (software usado para rodar nós) já possui um mecanismo embutido que alterna automaticamente a produção de blocos para a cadeia designada sem exigir alterações do operador. O binário inclui a lógica para sincronizar a nova cadeia e produzir blocos quando a sessão muda. Portanto, os sequenciadores precisam executar o binário do Tanssi, e não o das redes individuais (como fazem os nós completos).
Neste guia, você aprenderá como iniciar um sequenciador Tanssi para fazer parte do pool compartilhado de sequenciadores usando o binário estável mais recente e gerenciando o serviço com Systemd em sistemas Linux.
O artigo segue a boa prática de executar o serviço com uma conta não root e conceder a essa conta acesso de escrita a um diretório específico. Você pode adaptar as etapas e instruções deste artigo à configuração da sua infraestrutura, preferências e políticas de segurança.
Verificando os Pré-requisitos¶
Para começar, você precisará de um computador executando Ubuntu Linux com privilégios de root. Você também precisará de:
- Arquivo binário do nó - as instruções neste guia executam a versão estável mais recente oficial do
tanssi-node. No entanto, você pode compilar seu próprio arquivo a partir do código-fonte - Arquivo de especificação da rede Tanssi - o arquivo de especificação pode ser baixado deste repositório público do GitHub
Baixar a Última Versão¶
Para começar, faça o download e torne executável a versão mais recente do binário executando o seguinte comando:
Note
Recomenda-se usar as versões binárias otimizadas para as arquiteturas Skylake da Intel ou Zen3 da AMD para melhor desempenho.
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0-para/tanssi-node && \
chmod +x ./tanssi-node
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0-para/tanssi-node-skylake -O tanssi-node && \
chmod +x ./tanssi-node
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0-para/tanssi-node-znver3 -O tanssi-node && \
chmod +x ./tanssi-node
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0-para/tanssi-node && \
chmod +x ./tanssi-node
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0-para/tanssi-node-skylake -O tanssi-node && \
chmod +x ./tanssi-node
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0-para/tanssi-node-znver3 -O tanssi-node && \
chmod +x ./tanssi-node
Baixar o arquivo de especificação da cadeia Tanssi¶
O binário do nó também inclui o código necessário para executar um nó da cadeia de orquestração do Tanssi. Ao iniciar um sequenciador, é necessário fornecer o arquivo de especificação dessa cadeia como parâmetro.
Baixe o arquivo de especificação da cadeia de orquestração Tanssi executando:
wget https://raw.githubusercontent.com/moondance-labs/tanssi/75e576add204abd321c48cded556c8de14d65618/chains/orchestrator-relays/node/tanssi-relay-service/chain-specs/starlight-raw-specs.json
wget https://raw.githubusercontent.com/moondance-labs/tanssi/75e576add204abd321c48cded556c8de14d65618/chains/orchestrator-relays/node/tanssi-relay-service/chain-specs/dancelight-raw-specs.json
Configurar o serviço Systemd¶
O Systemd é um sistema de gerenciamento para Linux que controla serviços (daemons), iniciando-os automaticamente quando o computador liga ou reinicia, ou reiniciando-os em caso de falhas inesperadas.
Os comandos a seguir configuram uma nova conta, o diretório e movem os arquivos baixados para o local correto.
Crie uma nova conta para executar o serviço:
adduser tanssi_service --system --no-create-home
adduser dancelight_service --system --no-create-home
Crie um diretório para armazenar os arquivos e dados necessários:
mkdir /var/lib/tanssi-data
mkdir /var/lib/dancelight-data
Defina a propriedade da pasta para a conta que executará o serviço, garantindo permissão de escrita:
sudo chown -R tanssi_service /var/lib/tanssi-data
sudo chown -R dancelight_service /var/lib/dancelight-data
Mova o arquivo de especificação da cadeia para a pasta:
mv ./starlight-raw-specs.json /var/lib/tanssi-data
mv ./dancelight-raw-specs.json /var/lib/dancelight-data
Por fim, mova o binário para a pasta:
mv ./tanssi-node /var/lib/tanssi-data
mv ./tanssi-node /var/lib/dancelight-data
Gerar a Chave do Nó¶
A partir da versão runtime 700, os nós sequenciadores do Tanssi não geram as chaves de sessão automaticamente na inicialização. Para gerar e armazenar em disco as chaves de sessão que serão referenciadas no comando de start, execute:
/var/lib/tanssi-data/tanssi-node key generate-node-key --file /var/lib/tanssi-data/node-key
/var/lib/dancelight-data/tanssi-node key generate-node-key --file /var/lib/dancelight-data/node-key
Note
Esta etapa poderia ser evitada usando o parâmetro --unsafe-force-node-key-generation no comando de inicialização, embora essa não seja a prática recomendada.
Criar o Arquivo de Configuração do Systemd¶
O próximo passo é criar o arquivo de configuração do Systemd.
Você pode criar o arquivo executando o comando:
sudo touch /etc/systemd/system/tanssi.service
sudo touch /etc/systemd/system/dancelight.service
Agora abra o arquivo com seu editor de texto favorito (vim, emacs, nano etc.) e adicione a configuração do serviço, substituindo as tags INSERT_YOUR_TANSSI_NODE_NAME e INSERT_YOUR_SEQUENCER_NODE_NAME por nomes legíveis nos flags --name. Esses nomes ajudam a conectar entradas de log e métricas ao nó que as gera.
[Unit]
Description="Tanssi systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=tanssi_service
SyslogIdentifier=tanssi
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/tanssi-data/tanssi-node solo-chain \
--name=INSERT_YOUR_SEQUENCER_NODE_NAME \
--base-path=/var/lib/tanssi-data/container \
--node-key-file=/var/lib/tanssi-data/node-key \
--telemetry-url='wss://telemetry.polkadot.io/submit/ 0' \
--pool-type=fork-aware \
--database=paritydb \
--rpc-port=9944 \
--prometheus-port=9615 \
--prometheus-external \
--listen-addr=/ip4/0.0.0.0/tcp/30333 \
--state-pruning=2000 \
--blocks-pruning=2000 \
--db-cache=1024 \
--trie-cache-size=1073741824 \
--collator \
--in-peers=100 \
--detailed-log-output \
-- \
--chain=/var/lib/tanssi-data/starlight-raw-specs.json \
--name=INSERT_YOUR_TANSSI_NODE_NAME \
--sync=fast \
--base-path=/var/lib/tanssi-data/relay \
--node-key-file=/var/lib/tanssi-data/node-key \
--keystore-path=/var/lib/tanssi-data/session \
--database=paritydb \
--rpc-port=9945 \
--prometheus-port=9616 \
--prometheus-external \
--listen-addr=/ip4/0.0.0.0/tcp/30334 \
--pool-limit=0 \
--db-cache=128 \
--out-peers=15 \
--state-pruning=2000 \
--blocks-pruning=2000 \
--telemetry-url='wss://telemetry.polkadot.io/submit/ 0' \
--bootnodes=/dns4/deo-tanssi-boot-1.rv.tanssi.network/tcp/30334/p2p/12D3KooWNQ1cddxwvnZZUBG2gtByn9hirVGEn2yR37ztnGSi1VHu \
--bootnodes=/dns4/fro-tanssi-boot-1.rv.tanssi.network/tcp/30334/p2p/12D3KooWS3kv4PyNTxKS8CBxZsVrhMcNcXgxqVUHLrXixuz4DaSR \
--bootnodes=/dns4/qcl-tanssi-boot-1.rv.tanssi.network/tcp/30334/p2p/12D3KooWFDUJ1QZn18tmeJJZU4e6JbyQrLiAp4Xz7ongKzoSjadg \
--bootnodes=/dns4/qco-tanssi-boot-1.rv.tanssi.network/tcp/30334/p2p/12D3KooWBzJzAdAKNVXcsvfL3nHH8BSocNvxz7A8PkRAAJhTuQNm \
--bootnodes=/dns4/uko-tanssi-boot-1.rv.tanssi.network/tcp/30334/p2p/12D3KooWAexWR4uyhVPyxqPBNhhepJ5jRqUa885mu5dKPPVHSfpC
[Install]
WantedBy=multi-user.target
[Unit]
Description="Dancelight systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=dancelight_service
SyslogIdentifier=dancelight
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/dancelight-data/tanssi-node solo-chain \
--name=INSERT_YOUR_SEQUENCER_NODE_NAME \
--base-path=/var/lib/dancelight-data/container \
--node-key-file=/var/lib/dancelight-data/node-key \
--telemetry-url='wss://telemetry.polkadot.io/submit/ 0' \
--pool-type=fork-aware \
--database=paritydb \
--rpc-port=9944 \
--prometheus-port=9615 \
--prometheus-external \
--listen-addr=/ip4/0.0.0.0/tcp/30333 \
--state-pruning=2000 \
--blocks-pruning=2000 \
--db-cache=1024 \
--trie-cache-size=1073741824 \
--collator \
--in-peers=100 \
--detailed-log-output \
-- \
--chain=/var/lib/dancelight-data/dancelight-raw-specs.json \
--name=INSERT_YOUR_TANSSI_NODE_NAME \
--sync=fast \
--base-path=/var/lib/dancelight-data/relay \
--node-key-file=/var/lib/dancelight-data/node-key \
--keystore-path=/var/lib/dancelight-data/session \
--database=paritydb \
--rpc-port=9945 \
--prometheus-port=9616 \
--prometheus-external \
--listen-addr=/ip4/0.0.0.0/tcp/30334 \
--pool-limit=0 \
--db-cache=128 \
--out-peers=15 \
--state-pruning=2000 \
--blocks-pruning=2000 \
--telemetry-url='wss://telemetry.polkadot.io/submit/ 0' \
--bootnodes=/dns4/qco-dancelight-boot-1.rv.dancelight.tanssi.network/tcp/30334/p2p/12D3KooWCekAqk5hv2fZprhqVz8povpUKdJEiHSd3MALVDWNPFzY \
--bootnodes=/dns4/qco-dancelight-rpc-1.rv.dancelight.tanssi.network/tcp/30334/p2p/12D3KooWEwhUb3tVR5VhRBEqyH7S5hMpFoGJ9Anf31hGw7gpqoQY \
--bootnodes=/dns4/ukl-dancelight-rpc-1.rv.dancelight.tanssi.network/tcp/30334/p2p/12D3KooWPbVtdaGhcuDTTQ8giTUtGTEcUVWRg8SDWGdJEeYeyZcT
[Install]
WantedBy=multi-user.target
Flags de Execução¶
Os flags usados no comando ExecStart podem ser ajustados conforme suas preferências e configuração de hardware. Alguns dos mais importantes são:
--name INSERT_NAME- nome legível para este nó--rpc-port INSERT_PORT- define a porta TCP do JSON-RPC na qual o nó ouve--unsafe-rpc-external- expõe o serviço RPC em todas as interfaces--state-pruning INSERT_STATE_PRUNING_TYPE- define quando o estado da rede alimentada pelo Tanssi deve ser removido do banco de dados. Pode serarchive(nó atua como completo mantendo todo o estado),archive-canonical(mantém apenas estados de blocos finalizados) ou umnumber(quantidade de blocos cujos estados serão mantidos)--blocks-pruning INSERT_BLOCKS_PRUNING_TYPE- define quantos blocos devem ser mantidos no banco de dados. Pode serarchive(nó completo mantendo todos os blocos),archive-canonical(mantém apenas blocos finalizados) ou umnumber(quantidade de blocos finalizados a manter)--detailed-log-output- habilita saída detalhada de logs
Warning
O parâmetro --unsafe-rpc-external permite acesso externo à interface RPC do seu nó, tornando-a acessível de qualquer endereço IP. Certifique-se de que controles de segurança adequados estejam configurados.
Para ver a lista completa de flags disponíveis, descrição e valores possíveis, execute:
/var/lib/tanssi-data/tanssi-node --help
/var/lib/dancelight-data/tanssi-node --help
Executar o Serviço¶
Por fim, habilite o serviço e inicie-o pela primeira vez:
systemctl enable tanssi.service && \
systemctl start tanssi.service
systemctl enable dancelight.service && \
systemctl start dancelight.service
Você pode verificar se o serviço está em execução corretamente:
systemctl status tanssi.service
systemctl status dancelight.service
Se precisar verificar os logs, use:
journalctl -f -u tanssi.service
journalctl -f -u dancelight.service
| Criada: 9 de dezembro de 2025