Mempool - A Solução
Neste artigo, Conrado explica as melhores formas de solucionar os problemas diários relacioandos a lentidão ao efetuar transações.
Ultimamente tivemos precenciando confusões sobre o que está acontecendo com a mempool e por que as transações estão demorando mais que o normal para serem confirmadas.
De antemão, hoje usaremos a explicação do desenvolvedor da Zcash Foundation, Conrado Gouvea, para exemplicarmos e facilitarmos o entendimento do problema.
1). As Wallets precisam atualizar suas taxas para seguir a especificação ZIP-317.
Se esses problemas estão incomodando você, peça (educadamente) ao desenvolvedor da sua carteira que a atualize.
Agora, para os detalhes, fique ciente de que é bem possível que eu tenha entendido algo errado, então espero que alguém me corrija se isso acontecer.
Ataque de spam / SandBlasting
Verifique este gráfico de block size
Por volta de junho de 2022, algum mau ator começou a fazer spam na blockchain doa Zcash com transações enormes. Isso aumentou o tamanho dos blocos e fez com que tanto os nós quanto as carteiras tivessem dificuldades para lidar com essa carga.
Devido à natureza de privacidade da Zcash, para que sua carteira encontre transações enviadas a você, ela precisa tentar descriptografar cada transação individual na cadeia de blocos. Com o ataque de spam, isso se tornou cada vez mais custoso.
2) ZIP-317
A Taxa Proporcional
Para tentar resolver esse problema, o ZIP-317 foi projetado e publicado em outubro de 2022. Ele altera a taxa padrão do Zcash de um valor fixo de 1000 zatoshis para uma taxa proporcional ao número de “ações lógicas” em uma transação. Falando de forma simplificada:
Cada input ou output transparente é uma ação lógica (mais precisamente, o número maior entre eles, levando em consideração também o tamanho da entrada/saída, já que ele pode variar).
Cada gasto ou output Sapling é uma ação lógica (novamente, mais precisamente, o número maior entre eles).
Cada Ação Orchard é uma ação lógica.
A nova taxa padrão é então de 5000 zatoshis por ação lógica, com um mínimo de 10000 zatoshis.
Note que uma transação regular, que normalmente possui 2 ações, terá uma taxa de 10000 zatoshis (aumento em relação aos anteriores 1000).
3) As Novas Regras de Taxa
Agora, o que acontece com as transações que não pagam essa taxa?
Se elas fossem bloqueadas, as carteiras parariam de funcionar quando o ZIP-317 fosse ativado. Portanto, essas regras foram criadas (estou simplificando algumas coisas para clareza, então isso não é 100% preciso):
Cada bloco pode ter transações com 50 “ações não pagas” (ou seja, número de ações em uma transação que não paga a nova taxa padrão). Essas transações são escolhidas ponderadamente com base em quanto elas “fracassam” em pagar a taxa padrão.
Se o mempool estiver cheio e uma nova transação for recebida, ela substitui uma transação existente, dando preferência a transações “não pagas” (ponderadas com base em quanto elas “fracassam” em pagar a taxa padrão).
Isso significa que transações legítimas de carteiras que não foram atualizadas com a nova taxa ainda poderão passar, dentro do limite de ações não pagas.
Certamente, transações de spam também podem entrar, mas, como são muito maiores, têm muito mais “ações não pagas” e, portanto, terão uma chance muito maior de serem substituídas.
As consequências dessas regras são:
Transações de spam demorarão muito mais para serem confirmadas e, assim, encherão o mempool. Ou seja, é muito provável que o mempool fique cheio enquanto o spam continuar.
Transações legítimas de carteiras com taxas antigas ainda entrarão no mempool e serão confirmadas, independentemente de o mempool estar cheio ou não.
Em alguns casos raros, as transações falharão totalmente em serem confirmadas - se tiverem mais de 50 ações lógicas (ou seja, você recebeu ZEC através de 50 transações e deseja enviar todo esse ZEC para algum lugar) e não pagarem a nova taxa.
4) Ativação do ZIP-317
O ZIP-317 foi efetivamente ativado em abril de 2023 com o zcashd 5.5.0 (não é uma regra de consenso, mas uma mudança de comportamento na mempool e no RPC de mineração).
Você pode ver no gráfico acima que ele se tornou efetivo. As carteiras continuaram funcionando.
Mas elas ainda precisavam atualizar para a nova taxa para garantir que as transações que geravam teriam prioridade na mempool e nos blocos minerados!
5) Mudança no Ataque de Spam
O atacante está certamente prestando atenção. Eles não podiam mais encher os blocos com transações de spam, a menos que pagassem taxas mais altas, e parece que eles não querem arcar com esse custo. Então, eles mudaram a natureza das transações de spam. Em vez de criar transações grandes, eles começaram a criar transações do tamanho mínimo possível, com cerca de ~50 ações não pagas.
Isso implica que a mempool agora pode estar completamente cheia de transações de spam (já que a mempool é limitada pelo tamanho). Como mencionei, isso não impedirá que transações legítimas com taxas antigas sejam confirmadas. Mas agora é menos provável que uma transação legítima seja escolhida para ser confirmada, uma vez que há muitas mais transações na mempool - mesmo que uma única transação de spam seja menos provável de ser escolhida, há muitas delas e a chance de que uma delas seja escolhida é alta.
Então, Qual é a Solução?
É relativamente simples: as carteiras precisam atualizar para a nova taxa do ZIP-317. Poderíamos tentar fazer ajustes nas regras da mempool, mas parece mais fácil atualizar as carteiras.
Por que Algumas Transações Estão Ficando Presas para Sempre?
Se a transação não pagar a nova taxa, ela levará muito mais tempo para ser confirmada - possivelmente indefinidamente, devido ao processo de seleção de transações de mineração probabilística. A solução para isso já existe no protocolo Zcash - as carteiras podem definir uma altura de expiração, e então a transação nunca será confirmada após a altura de expiração ser alcançada. Isso permite que os usuários tentem novamente com segurança (possivelmente com uma taxa ajustada). Aparentemente, algumas carteiras não fazem isso, então elas também devem ser atualizadas. (Não estou certo de quais)
Isso Resolve Tudo?
Infelizmente, ainda haverá um problema persistente. Com a mempool agora sempre cheia, enquanto as transações legítimas ainda poderão ser confirmadas, as carteiras que monitoram a mempool em busca de transações enviadas para o usuário terão mais dificuldade, já que precisam descriptografar todas elas.
Uma possível mitigação simples é que os mantenedores do lightwalletd reduzam o tamanho da mempool do nó Zcash que suporta o servidor lightwalletd. Devido às regras da mempool, é mais provável que transações legítimas entrem na mempool do nó em comparação com transações de spam.
E Quanto aos Tempos de Sincronização?
Infelizmente, as contas de carteira criadas antes do ataque de spam levarão muito tempo para sincronizar ao restaurar uma semente (ou se você não se lembrar do aniversário da carteira). Não há uma maneira fácil de contornar isso, exceto tentar otimizar o procedimento de sincronização para que seja mais rápido.
Novas contas devem ter um tempo mais fácil. (Observe que você pode criar uma nova carteira e transferir todos os seus fundos para ela e anotar o aniversário dela!)
Independentemente disso, há melhorias que podem ser feitas no procedimento de sincronização, e é exatamente isso que a ECC está trabalhando com o Spend Before Sync.
A longo prazo, pode haver maneiras de transferir a descriptografia de teste para servidores sem perda de privacidade, mas isso requer muito mais pesquisa.
Isso Poderia ter Sido Gerenciado de Forma Melhor?
A visão retrospectiva é clara, e eu valorizo todo o trabalho investido no ZIP-317, mas minha opinião pessoal é que sim.
O ZIP-317 poderia ter sido projetado e concluído mais rapidamente. Deveríamos ter interrompido tudo o mais para realizar isso o mais rápido possível.
O ZIP-317 poderia ter sido implantado mais rapidamente. Se me lembro corretamente, ele se emaranhou com outras atualizações do zcashd relacionadas a Gastos antes da Sincronização, mas deveríamos tê-lo feito antes disso.
O ZIP-317 deveria ter sido divulgado mais para que os desenvolvedores de carteiras tomassem conhecimento de sua importância e atualizassem as carteiras o mais rápido possível. Aparentemente, ninguém sabe sobre isso! Ou/também os desenvolvedores de carteiras poderiam ter tentado acompanhar mais de perto o que estava acontecendo. Em qualquer caso, definitivamente há um problema de comunicação.