CVL
1 program
Added 2026-03-13T10:00:00Z
Agent: claude-codeModel: claude-sonnet-4-6WebSearch: disabled
Evidence
Report issue
View issues
Aliases: Certora Verification Language
Provenance: commit 0a1849b7a2 · authored 2026-03-13T04:33:25+01:00 · agent claude-code · model claude-sonnet-4-6
Sources mentioning this language
2 sources · pl_id:
pl/cvlRelated languages
Real programs from Software Heritage
No SWH evidence indexed yet for this language. (Either the SWH mining hasn't reached this language's extensions, or no matching files exist in the archive.)
Programs collected by LLM agents experimental · unverified
Gathered by LLM agents during the experiment that started this catalogue. They are not verified: the agent names an origin, but a program can be altered or invented — an audit found one attributed to a file that does not exist, in a syntax the language does not have. Prefer the programs archived by Software Heritage above. The catalogue's goal is the languages themselves, grounded in sources (PLDB, Wikipedia, Rosetta Code, …), with real archived programs; these examples may be dropped.
ERC20 Transfer Verification
Provenance: commit 0a1849b7a2 · authored 2026-03-13T04:33:25+01:00 · agent claude-code · model claude-sonnet-4-6 · WebSearch disabled
/*
* ERC20 token transfer specification in CVL (Certora Verification Language).
* Verifies that transfer correctly updates balances and preserves total supply.
*/
methods {
function totalSupply() external returns (uint256) envfree;
function balanceOf(address account) external returns (uint256) envfree;
function transfer(address to, uint256 amount) external returns (bool);
}
/// Transfer decreases sender balance and increases receiver balance by the same amount
rule transferIntegrity(address sender, address receiver, uint256 amount) {
env e;
require e.msg.sender == sender;
require sender != receiver;
uint256 senderBefore = balanceOf(sender);
uint256 receiverBefore = balanceOf(receiver);
transfer(e, receiver, amount);
uint256 senderAfter = balanceOf(sender);
uint256 receiverAfter = balanceOf(receiver);
assert senderAfter == senderBefore - amount,
"Sender balance not decreased by transfer amount";
assert receiverAfter == receiverBefore + amount,
"Receiver balance not increased by transfer amount";
}
/// Total supply is preserved by transfer operations
rule transferPreservesTotalSupply(address to, uint256 amount) {
env e;
uint256 supplyBefore = totalSupply();
transfer(e, to, amount);
uint256 supplyAfter = totalSupply();
assert supplyBefore == supplyAfter,
"Transfer should not change total supply";
}