v0.4.7

MAIS RECENTE
2026-06-02

A mineração em pool no Mac agora é instantânea, sem nó para baixar e sem sincronizar.

O destaque é a velocidade. No modo pool, o easyBTX não baixa nem executa mais o nó BTX completo. A mineração em pool nunca precisou dele, e ele acrescentava um download de vários gigabytes, longas sincronizações de "atualizando" e uma falha de vez em quando. Agora você abre o app, seu endereço de pagamento já está preenchido, e seu Mac começa a minerar na hora. Se você já tinha o easyBTX, seu endereço de pagamento atual é mantido automaticamente, então não há nada para configurar de novo.

Alterado

  • A mineração em pool no Mac roda sem o nó BTX completo: ela inicia na hora, sem blockchain para baixar, nada para sincronizar e nenhum nó para falhar. A mineração solo no Mac está pausada por enquanto, enquanto focamos na mineração em pool; ela vai voltar.
  • Seu endereço de pagamento é preenchido automaticamente a partir da sua configuração anterior, então uma atualização nunca deixa o campo em branco.
  • A velocidade de mineração agora é exibida em N/s, a mesma unidade que o pool usa, então o número no app corresponde ao painel do seu pool.
  • O app sempre abre no seu layout alto, que cabe em qualquer tela.

Adicionado

  • Um botão verde "Get the BTX Wallet" em Transações e nas configurações de pagamento, com link para a carteira BTX independente.
  • Uma ação opcional para recuperar espaço em disco removendo os dados antigos do nó que você não precisa mais no modo pool. Suas carteiras nunca são tocadas.

v0.4.6

2026-06-01

A mineração em pool no Mac voltou a funcionar, mais um painel de estatísticas da GPU ao vivo.

O destaque é uma correção. A mineração em pool no Mac, que quebrou na 0.4.5, voltou a funcionar. Uma mudança feita ao trazer o easyBTX para o Windows apontou o Mac para o auxiliar de mineração errado, então a mineração não iniciava. Isto a restaura. Se você atualizou para a 0.4.5 e não conseguia iniciar a mineração, isto corrige, e o Mac se comporta exatamente como na 0.4.4.

Corrigido

  • A mineração em pool voltou a funcionar no Mac. Uma mudança da 0.4.5 para a versão do Windows apontou o motor de mineração do Mac para o auxiliar errado, então a mineração não iniciava. Restaurada para como funcionava na 0.4.4.

Adicionado

  • Um painel de estatísticas da GPU ao vivo na tela Sobre: uso, clocks, potência, temperatura, memória e ventoinha, atualizados enquanto o painel está aberto. O Mac mostra uso, potência e temperatura; o Windows mostra o conjunto completo lido da sua placa NVIDIA.

vWindows 0.4.4

2026-05-31

easyBTX chega ao Windows.

Esta é a primeira versão para Windows. O easyBTX agora minera BTX em PCs com Windows que tenham uma GPU NVIDIA RTX série 30 ou mais nova, com a mesma proposta de um app, um clique e autocustódia da versão para Mac. Você usa uma placa NVIDIA, escolhe um endereço de pagamento e sua GPU entra no pool. A versão para Mac (Apple Silicon, Metal, solo ou em pool) não muda.

v0.4.4

2026-05-30

Enviar funciona de novo, suas próprias estatísticas de mineração e janelas maiores e mais tranquilas.

Uma versão focada que se apoia na 0.4.3. O destaque é uma correção: enviar BTX pelo app voltou a funcionar, depois de uma build recente poder falhar um envio com uma mensagem enganosa. Junto disso, a tela Sobre agora mostra suas próprias estatísticas de mineração, os popups todos abrem no mesmo formato espaçoso, e copiar o link do explorer de uma transação é um toque só.

Adicionado

  • Sua mineração: um painel de estatísticas privado em Sobre que mostra quanto tempo você minerou no total, sua velocidade média, seus shares aceitos e o dia em que você começou. Fica só no seu Mac e nunca é enviado para lugar nenhum.
  • Um botão "Copiar link" em cada transação, para você copiar o link dela no explorer de blocos e colar onde quiser.

Alterado

  • Sobre, Configurações, Transações e os popups de informação agora abrem em uma única janela maior e consistente, mais fácil de ler.
  • As Configurações têm um menu lateral mais limpo. A seção Links agora aponta para o site oficial do protocolo BTX e, em separado, para um site de preço ao vivo (de terceiros; não é conselho financeiro, e o easyBTX é independente dele).

Corrigido

  • Enviar BTX pelo app voltou a funcionar. Uma build recente podia recusar um envio com uma mensagem enganosa de "verifique o endereço" mesmo quando o endereço estava correto; isso foi corrigido, e as mensagens de erro agora descrevem a causa real.

v0.4.3

2026-05-30

Pausar e retomar, um reinício mais tranquilo, mais privacidade e o seu Mac no painel do pool.

Esta versão se apoia no redesign 0.4.0 com um lote de melhorias do dia a dia. Parar agora mantém seu nó aquecido e oferece um Resume verde, a longa espera de "preparando" depois de um reinício se explica em vez de parecer travada, e você pode esconder seu saldo com um toque. Quem minera em pool agora pode mostrar os números de GPU ao vivo do seu Mac e o nome escolhido no painel do minebtx.

Adicionado

  • Pause e Resume. O controle exibe "Pause" enquanto você minera, depois um "Resume" verde em vez de um "Start" frio. Seu nó fica aquecido nesse meio-tempo, então você pode continuar de onde parou.
  • Um olho de privacidade ao lado do seu saldo o esconde atrás de pontinhos até você revelar, útil quando está compartilhando a tela ou em público. Sua escolha fica salva.
  • Casas decimais do saldo: mostre as 8 casas completas, ou 3 mais curtas para uma olhada rápida. Isso muda só a exibição, nunca o que você tem ou envia.
  • Um status ao vivo claro enquanto o nó se prepara depois de um reinício. Em vez de um "Trabalhando..." congelado, ele explica que está reconstruindo seu índice de saldo privado, mostra uma estimativa e o tempo decorrido, e avisa que a blockchain já está atualizada.
  • Verificações de CPU, GPU e pool-ou-solo na tela de mineração, para que de relance você veja seu Mac minerando na GPU e conectado do jeito que você espera.
  • Leituras de GPU ao vivo para o painel do pool minebtx. O easyBTX reporta o uso e a potência da GPU do seu Mac para o pool (sem precisar de direitos de administrador), então seu trabalhador pode mostrar números reais em vez de espaços em branco, e o nome que você definiu em Configurações identifica sua máquina.
  • Uma limpeza silenciosa em segundo plano que apaga restos antigos de reparo em instalações que ficaram rodando por muito tempo, para que eles não se acumulem no disco.

Alterado

  • Configurações agora abre no seu tema atual. Antes sempre aparecia no Light; agora acompanha o app, então um app no Dark mantém as Configurações no Dark também.
  • Configurações tem um layout de barra lateral mais limpo, com cartões de tema e uma escolha de "layout favorito na inicialização".
  • Os popups de informação ("Como a mineração funciona" e os demais) agora combinam com o estilo das Configurações: uma janela mais espaçosa e tranquila, que se lê com mais facilidade.

Corrigido

  • O painel de Fontes upstream em Configurações não mostra mais "Última versão indisponível" em todas as linhas. Ele volta a buscar as versões mais recentes reais.

v0.4.0

2026-05-29

Visual renovado, e a mineração em pool agora paga direto na sua carteira externa.

O easyBTX ganhou um novo design. O padrão agora é uma janela mais larga em "sala de controle", que distribui tudo em três colunas tranquilas, para nada sair da tela quando o nó estiver cheio de informações ao vivo. Há também um novo seletor de tema: o Dark continua como padrão, com a opção Light para quem preferir e uma opção Sistema que acompanha o Mac e muda sozinha. E a mineração em pool agora respeita seu endereço de pagamento externo, assim como a mineração solo já fazia, então você pode minerar num notebook que nunca guarda as chaves das suas moedas.

Adicionado

  • Um novo layout largo em "sala de controle", agora o padrão: o painel de status na esquerda, o display de mineração, potência e carteira no meio, e os dados ao vivo de rede e pool na direita. Os layouts antigos Tall, Compact e Mini continuam a um clique de distância.
  • Temas Dark, Light e Sistema. O Dark permanece o padrão; escolha Light se preferir, ou Sistema para acompanhar o Mac e mudar automaticamente. A preferência fica salva.
  • Um botão de atalho em Configurações para cada seção (Nó, Mineração, Aparência, Local dos dados, Carteiras, Pagamento, Backup, Atualizações, Manutenção, Nova conta, Fontes, Links). Toque em um para ir direto.

Alterado

  • A mineração em pool agora envia as recompensas para seu endereço de pagamento externo quando você tem um configurado. Antes, só a mineração solo fazia isso. De qualquer forma, as moedas nunca passam pela carteira deste Mac, então um notebook comprometido nunca teve as chaves.
  • A taxa de ferramenta do easyBTX agora é 4,99% das recompensas mineradas (era 3,5%). Ela continua sendo fatiada no tempo e informada desde o início, e a taxa do próprio pool (2,5%) não mudou, então a mineração em pool totaliza cerca de 7,5%. Todo o restante vai para sua carteira.
  • Configurações agora tem um visual em blocos limpos que ficam lado a lado quando há espaço, e lê bem nos modos Light e Dark.
  • "Auditoria / Visão geral" agora é simplesmente "Transações".
  • O checklist de configuração está mais claro. Cada etapa vira um check verde com um rótulo simples do que aconteceu ("Nó e cadeia BTX baixados", "Nó sincronizado com os últimos blocos", "Minerando"), em vez de continuar como uma pendência laranja.
  • O logotipo do easyBTX no cabeçalho está um pouco maior, em uma barra levemente mais fina.

Corrigido

  • "Recuperar espaço em disco" agora informa o valor real liberado, incluindo o grande snapshot inicial, em vez de subestimar e liberar o restante silenciosamente no próximo início.
  • Seu nó não parece mais que reiniciou do "bloco 0 de 0" depois de recuperar espaço em disco ou reiniciar. Ele lembra onde estava e exibe isso enquanto confirma, em vez de parecer uma sincronização do zero.
  • Um nó que voltou já sincronizado não fica mais em uma longa espera de inicialização depois de uma recuperação ou reinício.

v0.3.1

2026-05-29

Seu nó nunca parece quebrado enquanto está se atualizando. Depois de o easyBTX ficar fechado por um tempo, ou ser encerrado de forma abrupta (uma falha, um forçar saída, ou a substituição do app enquanto estava em execução), seu nó às vezes precisa de alguns minutos para se atualizar na próxima vez que você abre o app. Antes, o easyBTX podia confundir esse tempo de atualização com um problema real e mostrar um erro. Agora ele aguarda com calma, informa o que está acontecendo e mantém sua carteira e moedas intactas. Nunca vai oferecer um reparo enquanto o nó está simplesmente se atualizando. Não há nada que você precise fazer.

Corrigido

  • O easyBTX não mostra mais um erro de inicialização quando seu nó está apenas se atualizando. Ele agora distingue entre um nó que ainda está processando seus dados e um nó que realmente parou.
  • A ação destrutiva "Consertar o nó" não é mais oferecida enquanto o nó está se atualizando. Ela aparece apenas quando há um sinal genuíno de corrupção ou o processo do nó realmente saiu.
  • Sem falso passo "Baixar o nó e a cadeia BTX" enquanto um nó recuperado está apenas aquecendo com sua cadeia já no disco, para o checklist de configuração corresponder à realidade.
  • Removido o limite de tempo fixo que podia interromper um nó saudável. Um nó que está fazendo progresso real agora recebe o tempo necessário para terminar.

Melhorado

  • Uma mensagem mais clara e tranquila enquanto seu nó se atualiza, para que uma espera normal de alguns minutos não pareça uma falha.
  • Sua carteira e suas moedas nunca são tocadas durante a inicialização ou recuperação. O easyBTX restaura dados da cadeia a partir de um snapshot salvo, nunca suas chaves.

Nos bastidores

Quando seu nó reinicia depois de ficar offline por um tempo ou após um encerramento inesperado, ele reconstrói parte de seu estado interno antes de poder atender requisições. Nesse período o nó está ativo e funcionando, mas responde com um status "ainda aquecendo" (código RPC -28, retornado com HTTP 500). A versão anterior tratava isso como falha definitiva e desistia depois de um limite fixo de 360 segundos, jogando um nó perfeitamente saudável em uma tela de erro que também exibia um botão de reparo destrutivo. A versão 0.3.1 classifica cada sondagem de inicialização em três estados: pronto, aquecendo ou indisponível. Um nó aquecendo (o status -28, ou um log que mostra uma reconstrução em andamento) é tratado como "continuar aguardando" e recebe um limite generoso para terminar. Um nó que nunca responde ainda desiste em um limite razoável. O caminho de reparo destrutivo permanece bloqueado pelo mesmo sinal de corrupção confirmada que sempre usou, então só pode disparar quando algo está genuinamente errado, nunca porque a inicialização foi lenta. Todas as regras de segurança de recuperação permanecem inalteradas: sua carteira é sempre preservada, dados danificados são arquivados em vez de deletados, a recuperação roda no máximo uma vez por inicialização e recusa rodar se o disco estiver cheio.

Entrega

Entregue às instalações 0.3.0 existentes automaticamente pelo atualizador interno do app. Construído e publicado localmente; build indie sem assinatura, a notarização pela Apple está no roadmap.

v0.3.0

2026-05-28

O lançamento de "conformidade com pool e transparência". O pool dexbtx do shib passou para v5 em 2026-05-27 com uma exigência obrigatória de capacidade pre_hash_block_tier_v18 e um novo dict de extensão mining.subscribe com session_id e fingerprint de hardware por rig. O easyBTX v0.2.0 enviava apenas dois dos três campos obrigatórios, o que fazia os trabalhadores Mac se conectarem ao pool mas nunca aparecerem no painel de trabalhadores. O v0.3.0 inclui o handshake completo v0.3.x, adiciona o heartbeat worker.report_metrics que desbloqueia linhas ao vivo por rig no painel, e exibe o nome canônico atribuído pelo pool a cada rig para que os usuários possam identificar seu Mac na linha correspondente em /stats. Além disso, o primeiro recurso opt-in de autocustódia: recompensas mineradas em solo agora podem ser pagas para um endereço BTX externo sem chave neste Mac. E uma série de melhorias de UX pedidas pela base de usuários v0.2.0 no Telegram. cargo test: 195/195. tsc --noEmit: limpo. cargo build --release + npm run build: ambos verdes.

Correções críticas

  • O registro no pool dexbtx foi restaurado para trabalhadores Mac. O mining.subscribe agora envia o dict de extensão v0.3.x completo: protocol_compliant: ["pre_hash_block_tier_v18"], o fingerprint de hardware existente (estendido com solver_env: {BTX_MATMUL_BACKEND: "metal"}), e um session_id por sessão (32 caracteres hex minúsculos no formato uuid.uuid4().hex do miner de referência, construído a partir de SHA256("easybtx-session:" || nanos || pid || counter) para que sessões consecutivas nunca colidam). Sem session_id, o pool v5 excluía silenciosamente os trabalhadores Mac do painel e do bot /stats do Telegram. mining.set_canonical_name agora é tratado e a atribuição é persistida em ~/.easybtx/canonical_names.json para que o rótulo atribuído pelo pool (ex.: M2_PRO-BRAVO-1) sobreviva a reconexões. A linha "Trabalhador desta máquina:" na interface agora exibe esse rótulo assim que ele chega.
  • Atualizações de nó não demoram mais 8 minutos. NodeController::stop verifica Child::try_wait por até 90 segundos antes de recorrer ao SIGKILL. Antes, o kill imediato ocorria durante uma gravação no LevelDB do estado shielded btx1z, deixando um marcador de mutação em andamento que acionava EnsureShieldedStateInitialized: rebuilding full shielded state from chain na próxima inicialização (cronometrado em 7m 57s na prática). Uma saída limpa não deixa marcador e a inicialização volta a cerca de um segundo.
  • Quarentenas de "Reparar Nó" não vazam gigabytes para sempre. O novo prune_old_quarantines exclui diretórios _corrupt-* e _preserve-* com mais de 7 dias, mantendo o mais recente de cada padrão como evidência forense. Roda na inicialização do app (detecta quarentenas antigas de sessões passadas) e ao final de cada repair_node (detecta quarentenas antigas de reparos anteriores). Uma _corrupt-* antiga estava retendo 42 GB no computador do mantenedor. Inclui 6 novos testes unitários para a lógica de retenção.

Pagamento externo (autocustódia opt-in)

  • Recompensas mineradas em solo agora podem ser pagas para um endereço BTX externo sem chave neste Mac. Nova seção Configurações > Pagamento de mineração: mantenha o padrão (recompensas chegam na carteira local deste Mac) ou encaminhe para um endereço que você controla em outro lugar: uma hardware wallet, uma carteira no celular, um endereço frio. O ponto é a custódia. A ameaça realista a uma máquina de mineração é a execução de código pelo mesmo usuário (um stealer estilo AMOS que o usuário é induzido a rodar), e uma máquina deixada minerando 24/7, muitas vezes um notebook antigo reaproveitado para isso, é um alvo fácil. Encaminhar recompensas para um endereço externo significa que as moedas acumuladas nunca tiveram uma chave na máquina de mineração. Endereços colados são verificados no formato na fronteira IPC (bech32, aceita o prefixo pós-quântico btx1z...; detecta colagem de rede errada, espaços antes/depois e homoglifos como b/i/o) com um botão ao vivo "Testar formato"; o RPC validateaddress do nó faz a verificação completa do checksum quando está disponível.
  • A taxa de 3,5% divulgada ao desenvolvedor permanece inalterada. O motor de pagamento foi generalizado do antigo FeeAccrual binário usuário/dev para um round-robin ponderado com N destinatários (PayoutScheduler), com a taxa do dev como um destinatário obrigatório. Um teste unitário prova que a participação real do dev ainda converge para 3,5% ao longo de 1000 a 2000 chunks independentemente da configuração do usuário, então adicionar um pagamento externo nunca altera a divisão.
  • Somente solo nesta versão, e o app deixa isso claro. O v0.3.0 encaminha o pagamento externo apenas para coinbase minerado em solo: recompensas de pool ainda chegam na carteira local (pagamento externo para pool é o v0.3.2). Se um pagamento externo estiver configurado e você estiver no modo Pool, um banner vermelho na visualização principal deixa isso explícito, e o diálogo de troca Solo para Pool repete o aviso, para que um usuário preocupado com segurança nunca assuma silenciosamente que seus ganhos no pool estão saindo da máquina.
  • Escolher "Carteira local" reverte completamente. Selecionar o radio padrão agora apaga a divisão persistida (clear_payout_split), não apenas oculta o formulário, para que a mineração retorne à carteira local imediatamente em vez de continuar silenciosamente pagando o endereço externo configurado anteriormente.

Pool / protocolo de mineração

  • Heartbeats worker.report_metrics a cada 60 segundos. Novo branch tokio::time::interval no loop select do stratum envia {session_id, timestamp, cpu_util_pct, ram_gb_used, gpus: [{gpu_uuid, util_pct, power_w, temp_c}], solver_nps, shares_session_total} para que o painel do pool possa exibir contadores de CPU / RAM / shares por rig. CPU% e RAM usada vêm de uma chamada top -l 1 -n 0 executada em um subprocesso assíncrono com um tokio::time::timeout real de 4 segundos, para que um top travado nunca bloqueie o leitor stratum, o gerenciamento de processos filho do solver ou os envios ao pool. Util / potência / temperatura da GPU são reportados como null JSON no macOS porque powermetrics requer root (conforme nota do shib sobre métricas no macOS); a linha ainda aparece no painel, os campos de instrumentação ao vivo apenas mostram um traço.
  • Um clique para "Abrir esta máquina no painel do pool." O botão existente do painel do pool agora grava ?worker=<canonical_name> na URL assim que o pool atribui um nome canônico. O painel é um SPA atualmente, então o parâmetro de query é compatível com versões futuras; se o dexbtx adicionar roteamento por trabalhador mais tarde, começa a funcionar sem atualização do app.
  • solver_env: {BTX_MATMUL_BACKEND: "metal"} no fingerprint de hardware, para que o motor de recomendação de ajustes do pool saiba que não deve sugerir configurações exclusivas de CUDA (BTX_MATMUL_GPU_INPUTS, BTX_MATMUL_SOLVE_BATCH_SIZE, etc.) para rigs Mac. Compatível com versões futuras: o pool coloca chaves na lista de permissões no servidor, então a declaração atual de somente Metal é segura.

UX

  • Atualizações são impossíveis de ignorar agora. Um banner laranja proeminente no topo do painel aparece no instante em que a verificação de atualização no início encontra uma versão mais nova, junto com o indicador existente no canto. Clicar em Instalar aciona uma pergunta única: "Instalar também atualizações futuras automaticamente no início?" Perguntar no momento de maior disposição funciona muito melhor do que a caixa de seleção em Configurações que ninguém acessa; um flag easybtx-autoupdate-asked garante que nunca haverá nova pergunta se o usuário recusou. A verificação de atualização no início agora roda antes do first_run_setup, para que o banner apareça em cerca de 300 ms em vez de após o lento início do nó.
  • O easyBTX deixa claro que inclui seu próprio nó BTX. Um usuário no Telegram vendo "Progresso de sincronização 98,5%" ainda perguntou no canal "como configuro um nó?" Três pequenos pontos de contato agora respondem a pergunta antes que ela seja feita: o modal "Como a mineração funciona" abre com "o easyBTX executa o nó BTX completo para você, sem necessidade de configuração separada"; o checklist de etapas de configuração agora diz "Baixar o nó e a cadeia BTX" / "Sincronizar o nó com os últimos blocos"; a seção Configurações > Status do nó começa com "estas são as leituras ao vivo daquele nó, não de um serviço remoto."
  • Sugestão suave de backup da carteira. Um banner âmbar persistente acima do saldo aparece no momento em que você tiver realmente minerado algum BTX e ainda não tiver feito backup. "Salvar agora" abre Configurações e rola até "Salvar arquivo de recuperação." "Mais tarde" dispensa apenas para o início atual (a sugestão volta na próxima vez, porque perder uma carteira por causa de um único dispensar não é aceitável). Separado do gate inicial único na configuração, que disparava antes de o usuário ter algo a perder.
  • Slider de potência de mineração em uma linha. Rótulo, slider, botão MAX e o valor ao vivo colapsados de um layout em duas linhas para uma única linha flex. Economiza cerca de 28 px de espaço vertical. Mesmo acento laranja Bitcoin.
  • "Último share" atualiza ao vivo. Um setInterval de 1 segundo re-renderiza o tempo relativo no contador de shares em vez de congelá-lo entre as consultas de status a cada 3 segundos. Suspenso enquanto document.hidden para que um app em segundo plano não consuma bateria com atualizações invisíveis.
  • Configurações > Painel de fontes. Lista os componentes de código aberto nos quais o easyBTX se baseia (nó BTX btxchain/btx fixado em v0.30.1, MineBTX dexbtx/minebtx, Tauri v2, o repositório público EasyBTX-releases). Cada linha mostra a versão fixada versus a tag mais recente obtida ao vivo da API do GitHub, além de um badge Atual / Atualização disponível. Painel de manutenção para acompanhar quando as dependências nos ultrapassarem. Cacheado por 5 minutos; o botão Atualizar ignora o cache.
  • Sinais da comunidade no modal Sobre. Blocos ao vivo de instalações do easyBTX (soma das contagens de download de assets nas GitHub Releases), mineradores em pool online agora, blocos encontrados nas últimas 24 h e velocidade da rede. Atualizado ao abrir o modal, cacheado por 60 s. Texto honesto: o bloco "mineradores online" está rotulado como "incluindo easyBTX e outros clientes" porque a API do pool ainda não separa os trabalhadores por miner_version.

Marca

  • O easyBTX agora é consistentemente em minúsculas na prosa. 17 substituições em README, CHANGELOG, NOTICE e a pasta docs/. Caminhos de URL (MendeMatthias/EasyBTX-releases), o tipo Rust EasyBtxState e nomes de artefatos do pipeline de release (EasyBTX.dmg, EasyBTX.app) foram deliberadamente preservados.

Manutenção

  • Banner de aviso de disco com pouco espaço. Verifica o espaço livre a cada 3 s no mesmo ciclo de status que alimenta o resto da interface. Abaixo de 1 GB mostra um aviso âmbar; abaixo de 500 MB um aviso vermelho com piscar mais rápido. Ambos aparecem mesmo quando o RPC está fora do ar, que é exatamente quando o aviso é mais importante (o btxd acabou de travar com Fatal LevelDB error: No space left on device, o RPC está inacessível, o usuário não faz ideia do porquê).
  • Configurações > Manutenção > Recuperar espaço em disco. Recuperação com um clique que remove os índices btxd blockfilter / coinstats não utilizados, o snapshot assumeutxo pós-carga, e trunca o debug.log se tiver ultrapassado 50 MB. Para quando você precisa de espaço em disco mas não está pronto para mover o datadir para um volume externo.

Endurecimento pré-lançamento

  • A coleta worker.report_metrics é assíncrona. Substituído o std::process::Command::output() síncrono (sem timeout, bloqueia o worker do runtime tokio pelo tempo que o top levar) por tokio::process::Command com um tokio::time::timeout real de 4 segundos. Um top travado não bloqueia mais o leitor stratum, o gerenciamento de processos filho do solver ou os envios ao pool.
  • Leitura com guard único do status do pool no tick de métricas. Comprimido um bloqueio/desbloqueio em dois passos de status.lock().await em um único escopo protegido, para que shares_accepted e hashps sejam sempre observados na mesma geração de tick de status.

Documentação

  • docs/2026-05-28-btx-qid-self-custody.md. Pesquisa e plano em 4 fases para enraizar um "qID" pós-quântico e de autocustódia (passkey com divisão Shamir/MPC 2-de-3) em uma seed BTX, para que o endereço de pagamento externo acima possa ser futuramente controlado pelo usuário em um celular/passkey em vez de outra hot wallet. Planejamento prospectivo para a página bonuz HQ; nenhum código do app depende disso.

v0.2.0

2026-05-28

O lançamento "mega auditoria" de polimento. Uma auditoria de segurança /cso mais uma auditoria de bugs funcionais com 3 agentes encontrou 4 problemas CRÍTICOS, 10 ALTOS, 13 MÉDIOS e alguns BAIXOS no v0.1.13. Esta versão fecha todos eles em uma única passagem. cargo test: 149/149. tsc --noEmit: limpo. Nenhum IPC público foi removido, mas send_btx ganhou um parâmetro explícito subtract_fee: bool (o botão Max do frontend o passa); EasyBtxState ganhou três campos #[serde(default)] (arquivos de estado legados ainda carregam).

Correções críticas (perda de dados / processo órfão / ressincronização forçada)

  • Exclusão de múltiplas carteiras bloqueada na realocação do datadir. O relocate_datadir agora enumera todas as carteiras em src (qualquer diretório contendo wallet.dat) e falha de forma segura a menos que CADA uma esteja presente e não vazia em dest antes que remove_dir_all(src) seja executado. A verificação anterior de 97% de tamanho só validava miner/wallet.dat, o que toleraria a perda silenciosa de uma carteira secundária menor.
  • Pool e solver Metal agora são encerrados corretamente ao sair do app. stop_node_blocking sinaliza pool_stop, aguarda pool_handle com timeout de 3 segundos (abortando o JoinHandle se não responder) e limpa o status do pool. O Command do solver ganhou .kill_on_drop(true) para que um JoinHandle descartado encerre o subprocesso em vez de deixá-lo fixado em 100% de GPU após Sair.
  • Snapshot.dat não é mais deletado antes do loadtxoutset realmente ter sucesso. Um novo flag persistido EasyBtxState.snapshot_loaded é definido APENAS quando loadtxoutset tem sucesso (ou quando getchainstates já reporta um chainstate de snapshot). Todos os chamadores de disk::reclaim_disk agora leem esse flag verdadeiro em vez de setup_complete (que muda quando o RPC se liga, antes do carregamento em segundo plano do snapshot). Fechar o app durante o carregamento não apaga mais o snapshot e não força uma ressincronização completa desde o genesis.
  • Guard de saída do solver previne o colapso do cursor de nonce. solve_next_nonce agora avança apenas quando tries_used > 0 E nonce64_end >= solve_next_nonce (monotônico). Um {"found":false} degenerado com nonce64_end faltando costumava resetar o cursor para 1, gerando envios de share duplicados (código 22).

Correções de alto impacto

  • repair_node não troca mais silenciosamente para a carteira "miner". Agora lê state.active_wallet (espelhando o padrão de reclaim_disk_now) antes de reconstruir wallet_rpc: a correção H1 do PR #12 que ainda não havia sido aplicada aqui.
  • move_datadir_to recusa volumes exFAT / FAT. O aviso de list_external_volumes agora é aplicado na fronteira de movimentação, não apenas exibido como tooltip.
  • apply_node_update realmente troca para o novo binário btxd. Antes era uma operação sem efeito (nova instalação nunca reutilizada). Agora persiste a nova tag (EasyBtxState.btx_release_tag), para o controlador em execução e reinicia com os novos binários; check_node_update/get_node_status respeitam a tag persistida, então o banner de atualização para de aparecer.
  • Mudança de ntime durante um solve reseta o cursor de nonce. Quando uma notificação não limpa muda ntime ou merkleroot, o próximo solve recomeça do início da nossa janela de nonce (em vez de avançar além dos nonces baixos do novo header).
  • clean_jobs=true não compete mais com um solver recém-saído para um envio obsoleto. O caminho de kill limpo drena o stdout do processo filho morto e limpa solving_job, para que um resultado tardio do solver falhe de forma segura na porta de envio.
  • Colisão de arquivo _corrupt-<ts> não pode mais deletar permanentemente a cadeia. Timestamps com precisão abaixo de microssegundos mais um contador -N previnem a colisão; em caso de falha no rename do arquivo, agora retornamos Err e deixamos src no lugar (antes o fallback remove_dir_all(src) deletava permanentemente a cadeia corrompida, quebrando a promessa de "nunca deletar permanentemente").
  • A contabilidade de taxa do pool corresponde à disciplina do solo. Limites de parada / kill limpo / prazo não creditam mais o tempo de kill decorrido como mined_secs do dev; o acúmulo agora ocorre apenas no branch de espera pelo solver com saída analisável e tries_used > 0. A participação do dev de 3,5% não pode mais subir durante churning de paradas.
  • Share perdido na desconexão é exibido na interface. Um erro de escrita em mining.submit agora define last_event = "share perdido (desconexão)..." e incrementa o contador de obsoletos antes de retornar ao loop de reconexão.
  • Uma rede instável não pode mais deixar "janela de taxa do desenvolvedor..." travada. Um limite cumulativo de tempo de tentativa (300 s) força a próxima sessão para o pagamento do usuário se uma única janela de taxa continuar falhando ao conectar.
  • Na inicialização, retorna para o datadir padrão quando o ponteiro para drive externo não aponta para lugar nenhum. Antes, um drive removido entre a gravação do ponteiro e a exclusão do src deixava o app preso em um caminho inexistente.

Correções de mineração e pool

  • Falhas de subscribe / authorize agora são registradas e exibidas em last_event (antes eram silenciosamente ignoradas: uma mudança de schema no pool podia matar toda a mineração em pool sem nenhum feedback na interface).
  • submit_id inicializado a partir dos microssegundos da época no momento da conexão para que os ids não se repitam entre reconexões.
  • Solo: após um tick Paused, a próxima iteração pula o burst de taxa e minera para o usuário (o déficit é recuperado no próximo tick sem pausa). Previne que um único bloco solo caia no endereço do dev durante o flapping de pausa de sincronização.
  • A idempotência do snapshot agora verifica SHA de qualquer snapshot.dat existente cujo tamanho corresponda (antes um arquivo com conteúdo errado do tamanho exato era aceito sem verificação).

Carteira / envio / polimento de auditoria

  • Endereço de recebimento estável por carteira. EasyBtxState.wallet_addresses lembra o endereço de cada carteira; do_switch_wallet o reutiliza via address_is_mine em vez de gerar um novo a cada troca.
  • Exportações de auditoria / CSV com até 10.000 transações. (O limite anterior de 1.000 descartava silenciosamente as entradas mais antigas de mineradores de longa data.)
  • O "Max" do Send agora é um flag explícito, não uma heurística de tolerância em satoshis. O frontend rastreia o clique em Max; o backend de send_btx(.., subtract_fee) o respeita. Enviar exatamente seu saldo manualmente não encolhe mais silenciosamente.
  • O backend send_btx valida o valor e rejeita saques a descoberto. Valores não finitos, zero, negativos e amount > spendable são recusados na fronteira IPC (não apenas no btxd).
  • backup_wallet_cmd recusa caminhos que não consegue canonicalizar, e rejeita qualquer caminho com componentes ... A lacuna anterior de "pular se a canonicalização falhar" foi fechada.
  • Vírgulas decimais europeias no Send. parseFloat é precedido por replace(/,/g, ".") nos dois pontos de chamada do Send: 1,5 BTX agora é interpretado como 1.5, não como 1.
  • Verificação de prefixo btx1 em links do explorer. addrExplorerUrl agora corresponde ao regex do input de Send (^btx1[a-z0-9]{20,90}$/i), para que linhas de auditoria não possam vincular a páginas inexistentes no explorer.
  • O pagamento de pool revalida o endereço em cache com address_is_mine antes de entregá-lo ao stratum; gera um novo em caso de incompatibilidade.
  • A tarefa do pool é corretamente parada durante repair_node e relocate_datadir (antes continuava enviando contra uma cadeia apagada/em movimento).
  • persist_active_wallet está bloqueado. Um novo STATE_FILE_LOCK serializa a sequência carregar -> mutar -> salvar para que um duplo clique não perca atualizações.

Segurança (a auditoria /cso)

  • Log do pool movido para fora de /tmp e bloqueado. Os logs agora ficam em $HOME/.easybtx/pool.log (fallback para /tmp se HOME não estiver definido), aberto com mode(0o600) + O_NOFOLLOW. Superfície legível por todos / spoofável por link simbólico fechada.
  • O gpu_uuid enviado ao pool agora é um SHA-256 com salt, não o IOPlatformUUID bruto. O hash é estável por instalação (para que a correlação de trabalhadores no pool ainda funcione), mas o identificador de hardware bruto não sai mais da máquina.
  • RpcClient::for_wallet codifica o nome da carteira em percent-encoding no caminho. Atualmente seguro por convenção (todos os chamadores validam); agora aplicado na função em vez de depender da disciplina do revisor.

Interno / limpezas

  • Versão: 0.1.13 para 0.2.0 (package.json, tauri.conf.json, Cargo.toml).
  • EasyBtxState ganhou snapshot_loaded, btx_release_tag e wallet_addresses (todos #[serde(default)]; arquivos de estado legados continuam carregando).
  • STATE_FILE_LOCK introduzido em state.rs para serializar o padrão carregar -> mutar -> salvar; as gravações de estado em reset_account / restore_wallet / first_run_setup agora passam por ele.
  • Um link de doc conhecido como obsoleto TODO(H3-followup) deixado em apply_node_update apontando para o re-arm de RPC em sessão contínua (o caminho de tag persistida e reinício está incluído; a espera pelo cookie em sessão é o passo seguinte).

v0.1.13

2026-05-28

Adicionado

  • Linha de saldo recebendo. Um pagamento recebido que ainda não confirmou (untrusted_pending) agora aparece como uma linha clara "Recebendo... confirmando" em vez de parecer perdido até confirmar. O saldo disponível permanece apenas para valores confiáveis, então o Send nunca pode ir a descoberto.
  • Links para o explorer. IDs de transação e endereços em Send, Receber e na Auditoria/Visão geral abrem em explorer.minebtx.com (truncado + copiar + abrir). A tela de confirmação do Send mostra o endereço completo do destinatário para que você possa verificá-lo.
  • Send: botao "Max" e envio completo seguro. Um botão Max preenche seu saldo disponível completo, e um envio de saldo completo agora desconta a taxa de rede do valor em vez de falhar com "fundos insuficientes". O endereço do destinatário também é verificado antes da etapa de confirmação.
  • Recuperar espaco. Um botao em Configuracoes > Armazenamento (e uma passagem automatica na inicializacao) libera espaco em disco removendo blockfilterindex/coinstatsindex nao utilizados, o snapshot assumeutxo pos-carga e um debug.log muito grande. A blockchain e sua carteira nunca sao tocadas.

Pool

  • O popup de informações sobre pagamentos do pool agora mostra a política real (sextas-feiras semanais 18:00 UTC, mínimo de 0,0001 BTX, taxa do pool de 2,5%) em vez de texto vago.
  • O easyBTX agora se identifica ao pool como easybtx/<version> para que o pool possa segmentar mineradores eBTX nas estatísticas; as informações de hardware dão ao seu trabalhador um nome canônico no painel.

Corrigido

  • Pre_hash do block-tier no pool. O solver de shares Metal agora aplica o gate de pre_hash do block-tier (sigma <= block_target << epsilon) em vez de ignorá-lo para shares, para que shares de block-tier sejam blocos válidos e o submitblock do pool pare de falhar com "matmul phase2 proof of work failed". O easyBTX declara a capacidade pre_hash_block_tier_v18 no mining.subscribe. (A mudança no solver está em btx-main; veja docs/patches/btx-prehash-block-tier.patch.)

Alterado

  • A potência de mineração agora é um slider ao vivo no topo do card de estatísticas. Esquenta de verde para laranja-vermelho conforme você aumenta (passos de 5%, botão Max), e fica em sincronia com o slider em Configurações. As antigas linhas de velocidade/potência foram removidas, então o card ficou menor. Um icone no slider explica as melhores práticas (cerca de 50% para uso leve mantém o Mac frio e silencioso; 100% é o mais rápido, mas esquenta e drena a bateria).
  • A carteira ativa agora vem exclusivamente do backend (fonte única de verdade); o frontend não aplica mais uma carteira do localStorage, então o chip de carteira e o endereço não podem discordar momentaneamente.
  • O card de ganhos do pool está mais curto: o texto explicativo de pagamento foi movido para um popup ao lado de "Shares aceitos", e o trabalhador fica ao lado do link "Abrir painel do pool" para que sejam lidos como um par.