> For the complete documentation index, see [llms.txt](https://novacont.gitbook.io/nova-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://novacont.gitbook.io/nova-docs/novacont-docs/portugues/auditoria-e-seguranca/revisao-de-seguranca-do-novacont-lite.md).

# Revisão de segurança do NovaCont Lite

**Escopo**

* NovaCont\_Lite.tact

**Metodologia**

* Revisão manual de código, conduzida em duas rodadas: a primeira rodada examinou a arquitetura e a lógica de transição de estados, e as descobertas foram tratadas pelo desenvolvedor; a segunda rodada verificou as correções no nível do código-fonte.
* Análise estática: Misti

| Severidade      | Quantidade | Categoria                                                                                                                                                                                                        |
| --------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Critical / High | 0          | Nenhuma                                                                                                                                                                                                          |
| Medium          | 9          | SuboptimalSend: sugere usar o mais eficiente em gas message() em vez de send(), sem risco funcional                                                                                                              |
| Low             | 29         | PreferredStdlibApi (require -> throwUnless), PreferSenderFunction (context().sender -> sender()), EtaLikeSimplifications, UnusedMethodArgument. Tudo otimização de gas ou estilo, sem diferença de comportamento |

A análise estática com Misti não encontrou vulnerabilidades funcionais de segurança na base de código. Tudo o que foi marcado está no nível de otimização de gas ou preferência de API.

**Revisão manual**

Descobertas identificadas na primeira rodada de revisão, tratadas pelo desenvolvedor e verificadas no nível do código-fonte:

**Bug de ordem de mutação de estado em CancelEscrow \[Corrigido]**

Na versão inicial, a variável local "escrow\.state" era atualizada para "STATE\_CANCELLED" *antes* da verificação "escrow\.state == STATE\_CREATED" ser avaliada; portanto, esta verificação sempre avaliava como "false", já que a variável já havia sido mutada. Apenas a condição "acceptTime == 0" estava realmente em efeito, e esta condição era um proxy seguro para o estado "STATE\_CREATED", portanto o bug não teve impacto prático, mas a condição morta era um risco latente que poderia silenciosamente se tornar um bug real em uma refatoração futura. O estado original agora é capturado previamente em uma variável "wasNotYetAccepted: Bool", e este valor pré-capturado é usado após a mutação de estado.

**Risco de perda silenciosa de fundos via SendIgnoreErrors \[Corrigido]**

Todas as chamadas "send()" foram alteradas de "SendIgnoreErrors" (que silenciosamente engole uma transferência falhada) para "SendBounceIfActionFail". Uma transferência falhada agora rebote a transação, mantendo a atualização de estado consistente com o sucesso da transferência. Verificado em cada chamada "send()" na base de código.

**Centralização da lógica de distribuição de fundos \[Corrigido]**

Na versão inicial, o ramo de cancelamento com penalidade de "CancelEscrow" possuía sua própria lógica de divisão de fundos, independente de "distributeFunds". Esta duplicação carregava o risco de que uma correção aplicada a um caminho não fosse refletida no outro (e de fato, o bug anterior permaneceu confinado a este único ramo). "CancelEscrow" agora é roteado através de uma única função central via "distributeFunds(escrowId, escrow, 5000 or 10000)". Isso elimina a duplicação de código e garante que o cálculo de STORAGE\_RESERVE seja consistente em todos os cenários de distribuição de fundos.

**Ponto único de falha na resolução de disputas \[Corrigido]**

Na versão inicial, as disputas eram resolvidas através da dependência de uma única conta pessoal. Agora existe um pool de suporte gerenciado via "AddSupport"/"RemoveSupport", com distribuição round-robin através de "nextSupportAssign". Quando uma disputa é levantada ("RaiseDispute"), ela é atribuída a um membro de suporte em sequência. O padrão de troca com o último elemento em "RemoveSupport" preserva corretamente a sincronização de index/count/nextAssign.

> Nota: Isso não é uma correção de bug, mas uma melhoria de resiliência arquitetônica. Reduz o risco de centralização, mas não o elimina.

**Risco de colisão de EscrowId \[Corrigido]**

Na versão inicial, o cliente podia escolher seu próprio ID de escrow, criando um risco de colisão se dois clientes diferentes escolhessem o mesmo ID. "escrowId" agora é atribuído automática e sequencialmente via "self.escrowCount".

| Descoberta                                                               | Status                                                                                                                                       |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Perda por arredondamento em divisão inteira                              | Nível de poeira, sem impacto mensurável                                                                                                      |
| Sem verificação de comprimento máximo nos campos description/evidenceUrl | Baixa prioridade, relevante para previsibilidade de gas                                                                                      |
| Consistência na nomenclatura de eventos (EscrowCreated vs. outros)       | Cosmético, sem risco funcional                                                                                                               |
| Sem limite inferior mínimo definido para agreedTon                       | As verificações condicionais > STORAGE\_RESERVE em distributeFunds já previnem implicitamente o risco de uma transferência negativa/inválida |

**Conclusão**

Todas as seis descobertas da revisão inicial (incluindo uma descoberta de severidade High e uma Medium) foram verificadas como corrigidas na v1.1.0. A análise estática do Misti não encontrou vulnerabilidades funcionais de segurança na base de código. Após esta rodada de verificação, o NovaCont Lite atingiu um nível de maturidade comparável aos contratos principais do NovaCont. Uma auditoria independente de terceiros ainda é recomendada, mas a rigorosidade e velocidade do processo de revisão interna são um sinal positivo.
