Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/certora.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ jobs:
conf:
- ConsistentState
- DistinctIdentifiers
- ERC4626
- Enabled
- Immutability
- LastUpdated
Expand All @@ -28,6 +27,7 @@ jobs:
- Range
- Reentrancy
- Reverts
- Roundtrip
- Roles
- Timelock
- Tokens
Expand Down
19 changes: 0 additions & 19 deletions certora/confs/ERC4626.conf

This file was deleted.

10 changes: 10 additions & 0 deletions certora/confs/Roundtrip.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"files": [
"certora/helpers/MetaMorphoHarness.sol"
],
"solc": "solc-0.8.21",
"verify": "MetaMorphoHarness:certora/specs/Roundtrip.spec",
"loop_iter": "2",
"optimistic_loop": true,
"msg": "MetaMorpho Roundtrip"
}
26 changes: 11 additions & 15 deletions certora/specs/ERC4626.spec → certora/specs/Roundtrip.spec
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
// SPDX-License-Identifier: GPL-2.0-or-later

methods {
function convertToShares(uint256) external returns(uint256) envfree;
function convertToAssets(uint256) external returns(uint256) envfree;
function previewDeposit(uint256) external returns(uint256) envfree;
function previewMint(uint256) external returns(uint256) envfree;
function previewWithdraw(uint256) external returns(uint256) envfree;
function previewRedeem(uint256) external returns(uint256) envfree;

function MetaMorpho._accruedFeeShares() internal returns (uint256, uint256) => summaryAccruedFeeShares();
function convertToShares(uint256) external returns (uint256) envfree;
function convertToAssets(uint256) external returns (uint256) envfree;
function previewDeposit(uint256) external returns (uint256) envfree;
function previewMint(uint256) external returns (uint256) envfree;
function previewWithdraw(uint256) external returns (uint256) envfree;
function previewRedeem(uint256) external returns (uint256) envfree;

// Constant summary so that 2 preview calls get the same view on the accrued state.
// Only view functions are called in this spec, so this only assumes _accruedFeeShares is constant on the same state.
function MetaMorpho._accruedFeeShares() internal returns (uint256, uint256) => CONSTANT;
function ERC4626._decimalsOffset() internal returns (uint8) => summaryDecimalsOffset();
function Math.mulDiv(uint256 x, uint256 y, uint256 denominator, Math.Rounding rounding) internal returns (uint256) => cvlMulDiv(x, y, denominator, rounding);
}

ghost uint256 gTotalAssets;
ghost uint256 gFeeShares;
persistent ghost uint8 gDecimalsOffset;

function summaryAccruedFeeShares() returns (uint256, uint256) {
return (gFeeShares, gTotalAssets);
}

function summaryDecimalsOffset() returns uint8 {
require to_mathint(gDecimalsOffset) <= 18;
require gDecimalsOffset <= 18, "decimal offset is defined as 18.zeroFlooSub(...)";
return gDecimalsOffset;
}

Expand Down
Loading