Como Configurar o TRON Staking Engine do Zero
Leitura: ~18 min
- Você vai configurar 4 serviços externos (Google Cloud, Google Sheets, Telegram e TronScan/TronGrid) e conectar tudo via GitHub Secrets — sem nenhum dado sensível no código.
- A chave SSH
tron_deploy_keyé o que permite o robô fazer push automático para o seu repositório com segurança total, sem usar sua senha. - O bot do Telegram só envia mensagens para destinos que já interagiram com ele — por isso o
/starté obrigatório, e grupos/canais exigem adicionar o bot como Administrador.
Aviso Financeiro: Este conteúdo é estritamente educacional. Automação de staking envolve riscos de perda de capital. Nunca configure este sistema com fundos que você não possa perder. Consulte um profissional habilitado antes de decisões financeiras.
Nota Técnica: Scripts e automações deste tutorial têm fins exclusivamente educacionais. Teste sempre em modo DRY-RUN antes de executar transações reais. O @CanalQb não se responsabiliza por perdas decorrentes do uso indevido. Conteúdo gerado com auxílio de IA — revisado e validado na prática.
Você tem o código, tem a ideia, mas travou no setup. São 4 serviços externos para configurar, uma dezena de secrets para criar, chaves SSH que parecem magia negra e ainda tem o Telegram que simplesmente não recebe mensagem. Aqui no @CanalQb, validamos cada um desses passos até o sistema rodar sozinho por semanas sem falhar uma vez.
Aqui está o detalhe que a maioria ignora: a ordem dos passos importa muito. Se você criar o GitHub Secret antes de compartilhar a planilha com a Service Account, o motor vai rodar e travar silenciosamente sem nenhum erro óbvio. Vamos resolver isso do jeito certo, na sequência certa.
Quais sites e serviços você vai precisar configurar?
Antes de executar qualquer linha de código, você precisa ter contas ativas e configuradas em exatamente 6 destinos. Cada um tem uma função específica no ecossistema do motor:
Google Cloud — APIs e Service Account
O Google Cloud é o ponto de partida porque é de lá que sai a credencial que permite o motor escrever na planilha automaticamente. Sem ela, toda execução do GitHub Actions vai travar no primeiro acesso ao Sheets.
Como criar o projeto
Acesse console.cloud.google.com, clique no seletor de projetos no topo e depois em "Novo projeto". Dê um nome descritivo (ex: tron-staking-engine) e clique em Criar. Aguarde alguns segundos até o projeto ser provisionado.
Quais APIs ativar?
Com o projeto selecionado, vá em APIs e serviços → Biblioteca. Você precisa ativar exatamente duas:
Google Drive API — necessária para localizar a planilha pelo ID. Sem ela, o acesso é bloqueado mesmo com Sheets API ativa.
Pesquise cada uma pelo nome e clique em Ativar. Sem as duas ativas simultaneamente, o motor retorna erro 403.
Criar a Service Account (conta de serviço)
Vá em APIs e serviços → Credenciais → + Criar credenciais → Conta de serviço. Preencha:
- Nome:
tron-staking-bot(ou qualquer nome descritivo) - Papel/Role: selecione
Editor - Clique em Concluído
Após criar, clique no e-mail gerado da conta de serviço (formato: nome@projeto.iam.gserviceaccount.com). Vá na aba Chaves → Adicionar chave → Criar nova chave → JSON → Criar. Um arquivo .json será baixado. Esse é o arquivo mais sensível de todo o setup — guarde-o fora do repositório Git.
Como alimentar esse dado no GitHub
Abra o arquivo .json em um editor de texto (Bloco de Notas, VS Code, qualquer um). Selecione todo o conteúdo (Ctrl+A), copie (Ctrl+C). No GitHub, vá em Settings → Secrets and variables → Actions → New repository secret, nomeie como GDRIVE_CREDENTIALS e cole o JSON completo no valor.
Google Sheets — Dashboard e Compartilhamento
A planilha funciona como o "banco de dados" do motor — registra histórico de votos, estados da máquina e o dashboard de performance. O ponto crítico aqui é o compartilhamento: a Service Account precisa ter permissão de Editor antes do motor rodar.
Criando a planilha
Acesse sheets.google.com e crie uma planilha em branco. Dentro dela, crie 4 abas com os nomes exatos abaixo (o motor busca por nome):
DASHBOARD → Visão geral: saldo, APR atual, último ciclo
VOTE_LOG → Histórico de todas as trocas e reinvestimentos
SR_SCORES → Ranking de SRs com score calculado pelo motor
STATE_LOCKS → Memória de estado da Máquina de Estados (não edite manualmente)
Compartilhar com o e-mail da Service Account
Aqui está o detalhe que trava mais gente: você precisa compartilhar a planilha com o e-mail da Service Account, não com a sua conta Google pessoal. Esse e-mail está disponível em Google Cloud → Credenciais → Contas de serviço.
- Na planilha, clique em "Compartilhar" (canto superior direito)
- Cole o e-mail da Service Account (ex:
tron-staking-bot@seu-projeto.iam.gserviceaccount.com) - Defina como "Editor"
- Desmarque "Notificar pessoas" e confirme
Como obter o ID da planilha
A URL da planilha tem o formato abaixo. O ID é a sequência de caracteres entre /d/ e /edit:
https://docs.google.com/spreadsheets/d/SEU_ID_AQUI/edit#gid=0
▲──────────▲
Copie isso
Esse valor vai para o Secret ID_PLANILHA_GOOGLE no GitHub.
Rede TRON — TronScan e TronGrid
O motor consulta a rede TRON por dois caminhos diferentes, com funções complementares. Aqui no @CanalQb, testamos as duas integrações e cada uma tem um papel específico que não pode ser substituído pela outra.
TronScan — Dados de mercado e votos
Site: tronscan.org — é o explorador oficial da rede TRON. O motor usa a API do TronScan para:
- Listar os Super Representantes do Top 27
- Coletar dados de APR, produtividade e ranking de cada SR
- Consultar recompensas pendentes (
rewardNum) como referência secundária
Para obter a API Key do TronScan, acesse tronscan.org/#/setting/api, faça login e gere uma chave. Essa chave aumenta o rate limit e evita bloqueios por excesso de requisições. O motor funciona sem ela, mas pode ser limitado em ciclos intensos.
TronGrid — Transações on-chain
Site: trongrid.io — é o provedor de infraestrutura oficial da TRON Foundation. O motor usa a API do TronGrid para:
- Construir e broadcast de transações reais (Claim, Stake, Vote)
- Consultar saldo e recursos da carteira (Energy, Bandwidth, allowance)
- Assinar e enviar transações on-chain com a chave privada
Para a API Key do TronGrid, acesse trongrid.io/dashboard, crie uma conta e gere uma chave. As chaves de ambos os serviços são opcionais mas altamente recomendadas — sem elas, o motor usa endpoints públicos com rate limit bem mais restritivo.
Telegram — BotFather, /start e Chat ID
O Telegram é onde você vai receber os alertas em tempo real. E o melhor? Funciona de graça. Mas tem um porém: o bot só envia mensagem para destinos que ele conhece. E ele só "conhece" você depois do /start.
Criando o bot com o BotFather
- Abra o Telegram e pesquise por
@BotFather(conta oficial, tem selo azul) - Envie o comando
/newbot - Escolha um nome amigável para exibição (ex: Tron Staking Monitor)
- Escolha um username único que termine em
bot(ex:tron_staking_monitor_bot) - O BotFather responderá com o Token de Acesso no formato:
1234567890:AAExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Por que o /start é obrigatório?
Por uma regra de privacidade do Telegram: bots não podem iniciar conversas com usuários arbitrários. O usuário precisa dar o primeiro passo. Sem o /start, qualquer mensagem enviada pelo motor retorna o erro 400 - chat not found, mesmo com token e Chat ID corretos.
Para ativar: pesquise seu bot pelo username criado (ex: @tron_staking_monitor_bot), abra a conversa e clique em "Iniciar" ou envie /start. Pronto — o bot agora pode te enviar mensagens.
Como obter o Chat ID numérico (mensagens diretas)
Para DMs (mensagem direta para você), o Telegram exige o Chat ID numérico, não o @username. Usernames são aceitos apenas para canais e grupos públicos.
- No Telegram, pesquise por
@userinfobot - Envie qualquer mensagem para ele
- Ele responderá com seu Id: (um número como
683972422) - Esse número vai para o Secret
TELEGRAM_CHAT_ID
Enviando para um grupo ou canal
Se você preferir receber os alertas em um canal privado (o que facilita manter histórico organizado), o processo é diferente:
- Crie um canal ou grupo privado no Telegram
- Adicione seu bot como Administrador com permissão de "Postar mensagens"
- Envie qualquer mensagem no canal/grupo
- Acesse no navegador:
https://api.telegram.org/botSEU_TOKEN/getUpdates - No JSON retornado, localize:
"chat": {"id": -1001234567890} - Esse número negativo é o ID do canal — use-o no Secret
TELEGRAM_CHAT_ID
getUpdates retornar "result": [] (array vazio), é porque o bot ainda não tem mensagens para processar. Envie uma mensagem de teste no canal/grupo após adicionar o bot como admin e tente novamente.
O que são tron_deploy_key e tron_deploy_key.pub?
Esse é o ponto que mais confunde quem está começando. A tron_deploy_key é uma chave SSH dedicada para o repositório — ela permite que o motor faça git push automaticamente, sem precisar da sua senha do GitHub.
Pense assim: é como uma crachá de acesso exclusivo para o robô entrar no repositório e postar atualizações. Se esse crachá for comprometido, você revoga e emite um novo — sem afetar sua conta GitHub principal.
Como gerar o par de chaves do zero
Execute no terminal do seu computador (Linux, macOS ou WSL no Windows):
# Gera o par de chaves SSH sem passphrase (necessário para automação)
ssh-keygen -t ed25519 -f tron_deploy_key -C "tron-staking-deploy" -N ""
# Dois arquivos serão criados:
# tron_deploy_key → chave PRIVADA (fica no GitHub Secret)
# tron_deploy_key.pub → chave PÚBLICA (fica no GitHub como Deploy Key)
Onde cada arquivo vai
| Arquivo | Destino | Como usar |
|---|---|---|
tron_deploy_key.pub |
GitHub → Settings → Deploy keys | Cole o conteúdo e marque "Allow write access" |
tron_deploy_key |
GitHub → Settings → Secrets → DEPLOY_KEY |
Cole o conteúdo completo incluindo o cabeçalho -----BEGIN... |
Proteger as chaves localmente
Após configurar no GitHub, nunca suba esses arquivos para o repositório. Certifique-se que o .gitignore contém:
tron_deploy_key
tron_deploy_key.pub
*.pem
*.json
.env
GitHub Secrets — O que colocar em cada um
Os Secrets são a cofre do projeto. Tudo que é sensível fica aqui — nunca no código. Para acessar: seu repositório → Settings → Secrets and variables → Actions → New repository secret.
| Secret | Tipo | O que colocar |
|---|---|---|
TRON_PRIVATE_KEY |
Obrigatório | Chave privada da carteira TRON em formato hexadecimal (64 caracteres). Obtida no TronLink ao exportar a carteira. |
TRON_VOTER_ADDRESS |
Obrigatório | Endereço público da carteira em formato Base58 — começa com T. Ex: TXyz1234...abc |
TELEGRAM_TOKEN |
Obrigatório | Token do bot gerado pelo @BotFather. Formato: 1234567890:AAExxxx... |
TELEGRAM_CHAT_ID |
Obrigatório | ID numérico do destino. Para DM: número positivo (obtido via @userinfobot). Para canal: número negativo (obtido via getUpdates). |
ID_PLANILHA_GOOGLE |
Obrigatório | ID da planilha Google Sheets — a sequência entre /d/ e /edit na URL. |
GDRIVE_CREDENTIALS |
Obrigatório | Conteúdo JSON completo da Service Account do Google Cloud. Cole o arquivo inteiro, incluindo chaves e aspas. |
TRONSCAN_MIN_WALLET |
Opcional | Saldo mínimo de TRX a manter disponível na carteira. Padrão se omitido: 49 |
TRON_MIN_REWARD_CLAIM |
Opcional | Valor mínimo em TRX para acionar o resgate de recompensas. Padrão: 2 |
TRON_PERSISTENCE_THRESHOLD |
Opcional | Número de ciclos consecutivos de má performance para trocar um SR. Padrão: 4 |
DRY_RUN |
Opcional | Use true para ativar o modo simulação. Sem transações reais. Recomendado para os primeiros testes. |
TRONSCAN_API_KEY |
Opcional | Chave de API do TronScan para aumentar o rate limit das consultas de mercado. |
TRONGRID_API_KEY |
Opcional | Chave de API do TronGrid para aumentar o rate limit das transações on-chain. |
TELEGRAM_CHAT_PROFILE |
Opcional | Destino alternativo para o Telegram (username de canal público). Funciona como fallback se o CHAT_ID falhar. |
Como o motor é acionado no GitHub Actions
O projeto tem 4 workflows distintos no GitHub Actions. Cada um tem um propósito específico e só executa quando você quer (exceto o principal, que é agendado).
Workflow principal — motor completo
O arquivo main.yml configura dois gatilhos simultâneos:
on:
schedule:
- cron: "0 */6 * * *" # Executa automaticamente a cada 6 horas
workflow_dispatch: # Executa manualmente quando você quiser
O cron: "0 */6 * * *" significa: toda vez que o minuto for 0 e a hora for divisível por 6 (00h, 06h, 12h, 18h UTC). Para disparar manualmente, vá em Actions → TRON Staking Engine → Run workflow.
Workflows de teste (execução manual)
Os três workflows de teste só rodam quando você clica em "Run workflow" — nunca automaticamente. E todos têm a opção de escolher entre DRY-RUN e execução real antes de rodar:
| Workflow | Arquivo | O que testa |
|---|---|---|
| 🧪 Test Telegram Connectivity | test_telegram.yml |
Envia uma mensagem de teste para o destino configurado |
| 🎁 Test Reward Claim | test_reward.yml |
Consulta recompensas pendentes e (opcionalmente) resgata |
| 🧊 Test Staking & Vote | test_staking.yml |
Verifica saldo, calcula excedente e (opcionalmente) executa stake e voto |
Sistemas de proteção implementados
O motor não é apenas automação — é automação com defesas em camadas. Aqui estão os mecanismos que evitam perda de TRX e comportamento inesperado:
Proteção de Energy e Bandwidth
Antes de qualquer transação, o motor executa has_enough_resources(). Se Energy ou Bandwidth estiverem abaixo do mínimo para a operação específica, o ciclo é pulado por completo — nenhuma ação, nenhum TRX gasto em taxa. O motor tenta novamente 6 horas depois.
| Operação | Energy mínima | Bandwidth mínima |
|---|---|---|
| Claim (Resgate) | 1.000 | 300 |
| Stake (Congelar) | 1.500 | 300 |
| Vote (Votar/Swap) | 2.000 | 300 |
Máquina de Estados com cooldowns
O motor usa a aba STATE_LOCKS da planilha para lembrar o que já foi feito. Cada fase tem cooldown próprio — Claim, Stake e Vote nunca executam no mesmo ciclo. Isso evita gasto duplo de recursos e garante que o motor siga exatamente a sequência correta de 24h entre cada operação.
Anti-Churn com BadCount
Para evitar trocas desnecessárias de SR (o que gastaria Energy e poderia reduzir ganhos), o motor só substitui um SR quando ele apresenta performance abaixo do limiar por 4 ciclos consecutivos. Uma queda pontual é ignorada — apenas queda persistente aciona a troca.
Buffer de 49 TRX
O motor nunca usa mais do que o excedente — sempre mantém 49 TRX disponíveis para cobrir eventuais taxas manuais ou situações inesperadas de rede. O cálculo é simples: surplus = int(saldo) - 49. Se der zero ou negativo, nenhum stake é feito.
Delta mínimo de score (+3 pontos)
Uma troca de SR só acontece se o novo SR for pelo menos 3 pontos melhor no score composto. Isso evita que o motor fique rotacionando SRs por diferenças insignificantes que não representam ganho real de APR.
Limpeza automática de logs
Cada workflow inclui um step final que deleta execuções antigas do GitHub Actions — mantém o histórico limpo e dentro dos limites de armazenamento do GitHub.
Perguntas Frequentes
O motor precisa ficar rodando no meu computador 24 horas?
Por que o Telegram retorna erro "chat not found" mesmo com token correto?
Preciso de conta paga no Google Cloud para o projeto funcionar?
Quanto TRX devo congelar em Energy antes de ativar o motor?
O que acontece se eu editar manualmente os votos no TronScan enquanto o motor está rodando?
Como testar tudo com segurança antes de ativar transações reais?
Fontes e Referências
Google Cloud Console — APIs e Service Account Google Sheets API — Documentação oficial TronScan — Explorador oficial da rede TRON TronGrid — Infraestrutura de API TRON Telegram Bot Tutorial — Documentação oficial GitHub Encrypted Secrets — Documentação oficialGostou do tutorial? Acompanhe mais conteúdos sobre automação cripto em @CanalQb no YouTube e explore mais guias práticos em canalqb.com.br.

Comentários
Comente só assim vamos crescer juntos!