Uma mentalidade diferente de design

O desenvolvimento de aplicações em um ambiente blockchain possui suas particularidades — por exemplo, o fato de que o custo de falhas é extremamente alto. Nesse sentido, ele se assemelha mais ao desenvolvimento de hardware do que ao de software tradicional.

Por isso, é necessário adotar uma mentalidade de design específica, com base nos seguintes princípios:

Esteja preparado para falhas: Seu código deve estar pronto para lidar com cenários de erro e vulnerabilidades, tratando-os de forma adequada.

  • Implemente um “disjuntor” (circuit breaker) que permita pausar o contrato quando algo der errado.

  • Gerencie o valor em risco, por exemplo, limitando o número de transações por endereço IP em determinado período (rate limiting).

  • Planeje uma rota de atualização (upgrade) para corrigir bugs e implementar melhorias.

Mantenha-se atualizado: Acompanhe os avanços mais recentes em segurança.

  • Revise seus contratos assim que novas vulnerabilidades forem identificadas.

  • Atualize para a última versão de qualquer ferramenta ou biblioteca o quanto antes.

  • Adote práticas de segurança que se provem eficazes.

Mantenha a simplicidade: Complexidade aumenta a probabilidade de erros.

  • Garanta que a lógica dos seus contratos seja simples e direta.

  • Modularize o código, mantendo contratos e funções pequenos.

  • Utilize bibliotecas testadas pelo tempo.

  • Prefira clareza à performance sempre que possível.

  • Use blockchain apenas quando a descentralização fizer sentido.

Teste seu código: Detectar falhas cedo é sempre melhor.

  • Teste seus contratos exaustivamente e adicione novos testes conforme surgirem vetores de ataque.

  • Se possível, promova bug bounties.

  • Faça um desdobramento em fases (deployment incremental), com testes e atividade crescente a cada etapa.

Tenha em mente as características da blockchain: a Ethereum possui suas particularidades e elas não devem ser esquecidas.

  • Tenha em mente as características da blockchain: a Ethereum possui suas particularidades e elas não devem ser esquecidas.

  • Tenha extremo cuidado com chamadas a contratos externos, pois estes podem executar código malicioso e alterar o fluxo de controle.

  • Lembre-se de que suas funções públicas são acessíveis por qualquer pessoa e podem ser chamadas de forma maliciosa e em qualquer ordem. Além disso, os dados privados em contratos inteligentes são visíveis para qualquer um.

  • Considere os custos de gás e o limite de gás por bloco.

  • A aleatoriedade não é algo resolvido na blockchain; a maioria das abordagens para geração de números aleatórios é manipulável.

Considere as características da blockchain: A Ethereum possui suas particularidades, e é fundamental não esquecê-las.

  • Tenha extremo cuidado com chamadas a contratos externos, pois eles podem executar código malicioso e alterar o fluxo de controle do contrato chamador.

  • Lembre-se de que suas funções públicas são acessíveis a qualquer pessoa e podem ser chamadas de maneira maliciosa e em qualquer ordem. Além disso, os dados "privados" nos contratos inteligentes são visíveis publicamente — qualquer pessoa pode acessá-los diretamente no estado da blockchain.

  • Considere sempre os custos de gás e o limite de gás por bloco, pois eles afetam diretamente a viabilidade e performance da execução do contrato.

  • A aleatoriedade ainda é um desafio não resolvido em blockchain. A maioria das abordagens para gerar números aleatórios pode ser manipulada por atores maliciosos.

Last updated