Skip to main content
Try out the RareSkills ZK AI Tutor!

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.

Last updated onFeb 13, 2026
Read Article

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.

Last updated onFeb 13, 2026
Read Article

14 min read

Invariants for ERC-721

In previous chapters, we explored how CVL invariants work: properties that must hold throughout all contract execution.

Last updated onFeb 13, 2026
Read Article

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.

Last updated onFeb 13, 2026
Read Article

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.

Last updated onFeb 13, 2026
Read Article

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.

Last updated onFeb 13, 2026
Read Article

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…

Last updated onFeb 13, 2026
Read Article

10 min read

Constraining Ghosts in Invariants

In the previous chapter, we saw how unconstrained ghost variables can lead to false positives.

Last updated onFeb 13, 2026
Read Article

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.

Last updated onFeb 13, 2026
Read Article

10 min read

Implication Operator

The implication operator is frequently used as a substitute for the if statement since it is cleaner.

Last updated onFeb 13, 2026
Read Article

5 min read

Biconditional Operator

The biconditional operator enables us to assert if-and-only-if relationships between boolean values.

Last updated onFeb 13, 2026
Read Article

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…

Last updated onFeb 13, 2026
Read Article