Extracting Smart Contracts Tested and Verified in Coq Danil Annenkov Mikkel Milo
[email protected] [email protected] Concordium Blockchain Research Center, Aarhus Department of Computer Science, Aarhus University, University, Denmark Denmark Jakob Botsch Nielsen Bas Spitters
[email protected] [email protected] Concordium Blockchain Research Center, Aarhus Concordium Blockchain Research Center, Aarhus University, Denmark University, Denmark Abstract Keywords: smart contracts, blockchain, Coq, proof assis- We implement extraction of Coq programs to functional tants, code extraction, formal verification, property-based languages based on MetaCoq’s certified erasure. As part of testing, certified programming, software correctness this, we implement an optimisation pass removing unused ACM Reference Format: arguments. We prove the pass correct wrt. a conventional Danil Annenkov, Mikkel Milo, Jakob Botsch Nielsen, and Bas Spit- call-by-value operational semantics of functional languages. ters. 2021. Extracting Smart Contracts Tested and Verified in Coq. We apply this to two functional smart contract languages, In Proceedings of the 10th ACM SIGPLAN International Conference Liquidity and Midlang, and to the functional language Elm. on Certified Programs and Proofs (CPP ’21), January 18ś19, 2021, Our development is done in the context of the ConCert frame- Virtual, Denmark. ACM, New York, NY, USA, 17 pages. https://doi. work that enables smart contract verification. We contribute org/10.1145/3437992.3439934 a verified boardroom voting smart contract featuring max- 1 Introduction imum voter privacy such that each vote is kept private ex- cept under collusion of all other parties. We also integrate Smart contracts are programs running on top of a blockchain.