Por Grigore Rosu, Everett Hildenbrandt, Daejun Park, Shuvendu Lahiri
"Testes mostram a presença, não a ausência de bugs" (Dijkstra, 1969). Embora um progresso notável tenha sido feito em testes durante os últimos 50 anos, testes exaustivos ainda são inviáveis na maioria dos casos e aprendemos, às vezes da maneira mais difícil, que os bugs restantes podem ter consequências catastróficas.
A natureza da blockchain, onde o código que acessa um estado compartilhado é público e pode ser invocado por qualquer um de qualquer lugar, amplifica tanto a velocidade com que os hackers encontram bugs quanto as consequências de suas explorações. Portanto, os testes são simplesmente insuficientes aqui. A verificação formal é a única alternativa viável conhecida.
Esta palestra explicará o que é a verificação formal no contexto de contratos inteligentes, tokens e protocolos de blockchain, por que está se tornando cada vez mais crítica, como é feita e quais ferramentas estão disponíveis. Várias abordagens são cobertas, desde as automatizadas e leves que encontram bugs até as interativas e abrangentes que analisam todos os comportamentos, desde o código-fonte de alto nível que os desenvolvedores escrevem e entendem até o bytecode de baixo nível que é executado pelos clientes de nó.
Esta palestra também tem como objetivo aumentar a conscientização de que, ao contrário do entendimento comum onde a verificação formal é confundida com auditoria de código, leva significativamente mais esforço para verificar formalmente um programa do que para escrever o programa em primeiro lugar. Pense em 9x mais! De fato, uma regra prática na NASA é que 20% do orçamento de um projeto vai para a escrita de código e 80% vai para verificação e validação; e o código da NASA não é público e ninguém além da NASA pode invocá-lo uma vez implantado.