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