Finding smart contract vulnerabilities with ConCert's property-based testing framework

08/01/2022
by   Mikkel Milo, et al.
0

We provide three detailed case studies of vulnerabilities in smart contracts, and show how property-based testing would have found them: 1. the Dexter1 token exchange; 2. the iToken; 3. the ICO of Brave's BAT token. The last example is, in fact, new, and was missed in the auditing process. We have implemented this testing in ConCert, a general executable model/specification of smart contract execution in the Coq proof assistant. ConCert contracts can be used to generate verified smart contracts in Tezos' LIGO and Concordium's rust language. We thus show the effectiveness of combining formal verification and property-based testing of smart contracts.

READ FULL TEXT

page 1

page 2

page 3

page 4

page 5

page 7

page 8

page 11

research
09/18/2019

Mi-Cho-Coq, a framework for certifying Tezos Smart Contracts

Tezos is a blockchain launched in June 2018. It is written in OCaml and ...
research
03/06/2023

Metamorphic Testing for Smart Contract Vulnerabilities Detection

Despite the rapid growth of smart contracts, they are suffering numerous...
research
07/27/2022

Declarative Smart Contracts

This paper presents DeCon, a declarative programming language for implem...
research
05/23/2023

Towards Automated Security Analysis of Smart Contracts based on Execution Property Graph

Identifying and mitigating vulnerabilities in smart contracts is crucial...
research
08/06/2020

A Survey of Smart Contract Formal Specification and Verification

A smart contract is a computer program which allows users to define and ...
research
03/11/2022

Formalising Decentralised Exchanges in Coq

The number of attacks and accidents leading to significant losses of cry...
research
03/16/2023

Smart Contract Generation for Inter-Organizational Process Collaboration

Currently, inter-organizational process collaboration (IOPC) has been wi...

Please sign up or login with your details

Forgot password? Click here to reset