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

Blog

The technical content top engineers rely on to level up.

5 min read

Overflow and Mathint

Overflow and Mathint In CVL, the type represents unbounded integers, unlike Solidity’s fixed-size types such as . It performs arithmetic without overflow or underflow, which allows reasoning based on...

Last updated onFeb 13, 2026
Read Article

5 min read

Testing msg.sender and msg.value in CVL

Testing msg.sender and msg.value in CVL Introduction In this chapter, we introduce the variable in CVL, which enables us to make rules for functions that depend on , , and other global variables in...

Last updated onFeb 13, 2026
Read Article

10 min read

Introduction to Formal Verification

Introduction to Formal Verification Formal verification is the process of mathematically proving a program adheres to a specification. This article introduces conceptually how formal verification...

Last updated onFeb 13, 2026
Read Article

7 min read

Testing Revert Call In Certora

Testing Revert Call In Certora In this chapter, we will learn how to use method tags ( and ) and the special variable in CVL to verify expected reverts in smart contract execution. Setting Up...

Last updated onFeb 13, 2026
Read Article

5 min read

Biconditional Operator

Biconditional Operator Introduction The biconditional operator enables us to assert if-and-only-if relationships between boolean values. Implication () states that if condition P is satisfied, then Q...

Last updated onFeb 13, 2026
Read Article

6 min read

Formally Verifying a Counter

Formally Verifying a Counter In the previous chapter, we learned the theoretical side of formal verification, including what it is and how it works. In this module, we’ll move beyond theory and learn...

Last updated onFeb 13, 2026
Read Article

13 min read

Certora Require, Assert, and Satisfy

Certora Require, Assert, and Satisfy In the previous chapter, we learned that a specification is a piece of code written in CVL that describes the expected behavior of a smart contract. A...

Last updated onFeb 13, 2026
Read Article

6 min read

Formally Verifying Ownable.sol

Formally Verifying Ownable.sol Ownable is an abstract contract that provides owner-based access control. When inherited, it restricts specific functions to the owner using the modifier. It has three...

Last updated onFeb 17, 2026
Read Article

7 min read

Understanding the Spec File in Certora CVL

Understanding the Spec File in Certora CVL In the last chapter, we saw that to perform formal verification using Certora Prover, we need to provide the Prover with the following key items: Smart...

Last updated onFeb 13, 2026
Read Article

6 min read

Formally Verifying Address Balance

Formally Verifying Address Balance In the previous chapter, we covered how to reason about environment-dependent functions in CVL by focusing on in non-payable contexts. In those examples, access...

Last updated onFeb 13, 2026
Read Article

4 min read

Formally Verifying Nonces.Sol in OpenZeppelin

Formally Verifying Nonces.Sol in OpenZeppelin Nonces, which stands for "number used once" are used in digital signature schemes to prevent replay attacks. For the purposes of this article, we assume...

Last updated onFeb 17, 2026
Read Article

4 min read

Formally verifying Initializable.sol

Formally verifying Initializable.sol This article describes how Certora formally verified the Initializable.sol OpenZeppelin contract. We assume the reader is already familiar with how this contract...

Last updated onFeb 17, 2026
Read Article