Da última vez que carreguei fundos para a exchange, depois de copiar o endereço eu verifiquei o memo mais duas vezes, com medo de o dinheiro chegar e não ser reconhecido como meu. Depois, ao ler a documentação de integração da exchange para a @Dusk , entendi que os requisitos da Dusk para depósitos são mais detalhados do que “preencher a observação corretamente”: primeiro selecionar o modelo de conta pública Moonlight, depois decidir se cada pessoa terá uma conta própria, ou se haverá conta compartilhada com memo.

Se usar conta compartilhada, o memo serve apenas para o sistema saber “a quem essa quantia deve ser atribuída”, mas não é adequado como prova única para evitar reentrada (duplicidade). Dois usuários podem preencher o mesmo memo por engano, e a mesma informação pode ser reprocessada devido a uma reinicialização do backend. Por isso, a documentação oficial recomenda usar o ID de transação da Dusk como chave de idempotência; em linguagem simples, é como colocar em cada depósito um “cadeado que só deixa registrar uma vez”. #dusk

Há também um limite fácil de ignorar: a exchange não deve creditar o usuário imediatamente só porque percebeu que o saldo do Moonlight aumentou. Ela precisa varrer o histórico arquivado já finalizado, identificar transferências diretas e, quando houver memo ausente, formato inválido, valores desconhecidos ou depósitos repetidos, colocá-los primeiro em uma área de isolamento (buffer), em vez de fazer um crédito automático por suposição.

Mais ainda: o backend deve gravar o registro do depósito e avançar o checkpoint de verificação de blocos dentro da mesma transação do banco de dados. Avançar o checkpoint antes de creditar pode fazer com que, se o serviço cair, o dinheiro do usuário seja pulado; creditar antes e não salvar o progresso pode fazer com que, ao revarrer, o processamento aconteça duas vezes. A conversão Phoenix, pagamentos por contrato e saques de staking também precisam ter regras de eventos separadas; não podem ser misturados com um depósito comum.

Essa lógica é bem parecida com um armazém de encomendas: o memo é a etiqueta do destinatário, o transaction ID é o número de rastreio que não se repete, e o “finalized” é quando o pacote realmente entra no depósito. Se você olhar só para uma parte, pode acabar com encomenda perdida ou entrega duplicada.

Por isso, ao analisar a adaptação da exchange para a $DUSK , não é só ver “se dá para depositar e sacar”, mas sim se o backend consegue garantir que, depois da finalização, faça o crédito corretamente, elimine duplicidades pelo transaction ID, sincronize checkpoint e razão contábil (ledger) na submissão conjunta. A experiência realmente no nível financeiro não é a rotação rápida na tela, e sim garantir que reinícios do backend e novas varreduras não vão creditar a mais nem a menos um centavo ao usuário. #dusk