Solidity
Browse all Solidity articles.
17 min read
Loops in CVL: Path Explosion and Loop Unrolling
Loops are one of the most common programming constructs, but they remain challenging to reason about in formal verification.
12 min read
Partially Parametric Rules for ERC-721
This chapter is the final part (5/5) of the code walkthrough of OpenZeppelin’s ERC-721 CVL specification which formally verifies the following rules.
14 min read
Invariants for ERC-721
In previous chapters, we explored how CVL invariants work: properties that must hold throughout all contract execution.
6 min read
Using Sload Hooks with Storage Mappings
In the previous chapter, we demonstrated that Sstore hooks are necessary to verify properties involving changes in mapping values.
8 min read
Constraining the Ghost Values in Rules
In the previous chapter, we learned how ghost variables allow information to flow from hooks into rules.
17 min read
Preserved Block and Its Role in Invariant Verification
An invariant is a property that must always hold true after a smart contract is deployed and throughout its execution.
15 min read
Introduction to Storage Hooks and Ghosts
It often becomes necessary to inspect changes at specific storage locations to prove that a property or invariant holds, especially when the storage is…
10 min read
Constraining Ghosts in Invariants
In the previous chapter, we saw how unconstrained ghost variables can lead to false positives.
8 min read
Introduction to Parametric Rules
Until now, in previous chapters, we have written rules to verify the behavior of specific methods and their impact on a contract’s state.
10 min read
Implication Operator
The implication operator is frequently used as a substitute for the if statement since it is cleaner.
5 min read
Biconditional Operator
The biconditional operator enables us to assert if-and-only-if relationships between boolean values.
7 min read
Testing Revert Call In Certora
In this chapter, we will learn how to use method tags (@withrevert and @norevert) and the special variable lastReverted in CVL to verify expected reverts…