The Move Prover

The Libra blockchain is designed to store billions of dollars in assets, so the security of code that executes transactions is important. The Libra blockchain has a new language for implementing transactions, called “Move.” This paper describes the Move Prover, an automatic formal verification system for Move. We overview the unique features of the Move language and then describe the architecture of the Prover, including the language for formal specification and the translation to the Boogie intermediate verification language .

[1]  Massimo Bartoletti,et al.  A Survey of Attacks on Ethereum Smart Contracts (SoK) , 2017, POST.

[2]  Bor-Yuh Evan Chang,et al.  Boogie: A Modular Reusable Verifier for Object-Oriented Programs , 2005, FMCO.

[3]  Daniel Davis Wood,et al.  ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER , 2014 .

[4]  M. Nivat Fiftieth volume of theoretical computer science , 1988 .

[5]  Clark W. Barrett,et al.  The SMT-LIB Standard Version 2.0 , 2010 .

[6]  K. Rustan M. Leino,et al.  A Polymorphic Intermediate Verification Language: Design and Logical Encoding , 2010, TACAS.

[7]  Prateek Saxena,et al.  Making Smart Contracts Smarter , 2016, IACR Cryptol. ePrint Arch..

[8]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[9]  Prateek Saxena,et al.  Finding The Greedy, Prodigal, and Suicidal Contracts at Scale , 2018, ACSAC.

[10]  Emina Torlak,et al.  Crust: A Bounded Verifier for Rust (N) , 2015, 2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[11]  Timothy A. K. Zakian,et al.  The Libra Blockchain , 2019 .

[12]  Dejan Jovanovic,et al.  SMT-Friendly Formalization of the Solidity Memory Model , 2020, ESOP.

[13]  Nicholas D. Matsakis,et al.  The rust language , 2014, HILT '14.

[14]  Zvonimir Rakamaric,et al.  Verifying Rust Programs with SMACK , 2018, ATVA.

[15]  Grigore Rosu,et al.  An overview of the K semantic framework , 2010, J. Log. Algebraic Methods Program..

[16]  Ákos Hajdu,et al.  solc-verify: A Modular Verifier for Solidity Smart Contracts , 2019, VSTTE.

[17]  Hang Lei,et al.  FEther: An Extensible Definitional Interpreter for Smart-Contract Verifications in Coq , 2018, IEEE Access.

[18]  Per Lindgren,et al.  No Panic! Verification of Rust Programs by Symbolic Execution , 2018, 2018 IEEE 16th International Conference on Industrial Informatics (INDIN).

[19]  Yi Zhang,et al.  KEVM: A Complete Formal Semantics of the Ethereum Virtual Machine , 2018, 2018 IEEE 31st Computer Security Foundations Symposium (CSF).

[20]  Matteo Maffei,et al.  A Semantic Framework for the Security Analysis of Ethereum smart contracts , 2018, POST.

[21]  Hang Lei,et al.  Formal Process Virtual Machine for Smart Contracts Verification , 2018, ArXiv.

[22]  Peter Müller,et al.  Leveraging rust types for modular specification and verification , 2019, Proc. ACM Program. Lang..

[23]  Isil Dillig,et al.  Formal Specification and Verification of Smart Contracts for Azure Blockchain , 2018, ArXiv.

[24]  Robert Atkey,et al.  Dijkstra monads for all , 2019, Proc. ACM Program. Lang..

[25]  Nikhil Swamy,et al.  Formal Verification of Smart Contracts: Short Paper , 2016, PLAS@CCS.

[26]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[27]  Petar Tsankov,et al.  Securify: Practical Security Analysis of Smart Contracts , 2018, CCS.

[28]  K. Rustan M. Leino,et al.  Weakest-precondition of unstructured programs , 2005, PASTE '05.

[29]  Sam Blackshear,et al.  Resources: A Safe Language Abstraction for Money , 2020, ArXiv.

[30]  Christine Paulin-Mohring,et al.  The coq proof assistant reference manual , 2000 .

[31]  Patrick Lincoln,et al.  Linear logic , 1992, SIGA.

[32]  Peter Müller,et al.  Viper: A Verification Infrastructure for Permission-Based Reasoning , 2016, VMCAI.

[33]  Shouhuai Xu,et al.  A Survey on Ethereum Systems Security: Vulnerabilities, Attacks and Defenses , 2019 .

[34]  Leonardo Alt,et al.  SMT-Based Verification of Solidity Smart Contracts , 2018, ISoLA.

[35]  John Gough,et al.  Technical Overview of the Common Language Runtime , 2001 .