🤖 AI Summary
Smart contract languages exhibit significant semantic differences that critically affect the feasibility, difficulty, and automation level of formal verification. Method: This work systematically compares Solidity and Move along these dimensions, constructing an open-source benchmark dataset of verification tasks and conducting the first empirical evaluation of Certora (for Solidity) and the Aptos Move Prover (for Move) across three canonical smart contract use cases. Contribution/Results: Move’s type safety, immutability guarantees, and pure-function design substantially improve verification coverage and automation. In contrast, Solidity’s mutable state, unrestricted external calls, and implicit side effects introduce pervasive verification pitfalls, markedly increasing manual annotation and intervention overhead. The study provides reproducible, evidence-based insights to guide smart contract language design, verification tool selection, and the practical adoption of formal methods in blockchain development.
📝 Abstract
Formal verification plays a crucial role in making smart contracts safer, being able to find bugs or to guarantee their absence, as well as checking whether the business logic is correctly implemented. For Solidity, even though there already exist several mature verification tools, the semantical quirks of the language can make verification quite hard in practice. Move, on the other hand, has been designed with security and verification in mind, and it has been accompanied since its early stages by a formal verification tool, the Move Prover. In this paper, we investigate through a comparative analysis: 1) how the different designs of the two contract languages impact verification, and 2) what is the state-of-the-art of verification tools for the two languages, and how do they compare on three paradigmatic use cases. Our investigation is supported by an open dataset of verification tasks performed in Certora and in the Aptos Move Prover.