Skip to content

Commit

Permalink
Merge pull request #713 from liquity/certora
Browse files Browse the repository at this point in the history
Upstream Certora Specifications (fixed build)
  • Loading branch information
danielattilasimon authored Jan 19, 2025
2 parents dda7cc1 + c4965c5 commit c57c5e4
Show file tree
Hide file tree
Showing 34 changed files with 4,010 additions and 0 deletions.
67 changes: 67 additions & 0 deletions contracts/certora/confs/BO_equivalence_partial.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/ERC20Like/DummyWeth.sol",
"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
"certora/harnesses/Utilities.sol",
"src/BorrowerOperations.sol",
"src/TroveManager.sol",
"src/StabilityPool.sol",
"src/BoldToken.sol",
"src/SortedTroves.sol",
"src/CollSurplusPool.sol",
"src/GasPool.sol",
"src/ActivePool.sol",
"src/DefaultPool.sol",
"src/TroveNFT.sol",
"src/Dependencies/AddRemoveManagers.sol"
],
"java_args": [
" -ea -Dlevel.setup.helpers=info"
],
"link": [
"BorrowerOperations:collToken=SafeERC20",
"BorrowerOperations:WETH=DummyWeth",
"BorrowerOperations:troveManager=TroveManager",
"BorrowerOperations:activePool=ActivePool",
"BorrowerOperations:defaultPool=DefaultPool",
"BorrowerOperations:gasPoolAddress=GasPool",
"BorrowerOperations:collSurplusPool=CollSurplusPool",
"BorrowerOperations:sortedTroves=SortedTroves",
"BorrowerOperations:boldToken=BoldToken",
"BorrowerOperations:troveNFT=TroveNFT",
"TroveManager:activePool=ActivePool",
"TroveManager:defaultPool=DefaultPool",
"TroveManager:sortedTroves=SortedTroves",
"TroveManager:troveNFT=TroveNFT",
"TroveManager:borrowerOperations=BorrowerOperations",
"ActivePool:boldToken=BoldToken",
"ActivePool:stabilityPool=StabilityPool",
"ActivePool:defaultPoolAddress=DefaultPool",
"DefaultPool:activePoolAddress=ActivePool",
"SortedTroves:troveManager=TroveManager",
"AddRemoveManagers:troveNFT=TroveNFT"
],
"optimistic_fallback": true,
"optimistic_loop": true,
"packages": [
"openzeppelin-contracts=lib/openzeppelin-contracts"
],
"parametric_contracts": [
"BorrowerOperations",
"ActivePool",
"TroveManager"
],
"process": "emv",
"prover_args": [
"-mediumTimeout 20 -lowTimeout 20 -tinyTimeout 20 -depth 20",
"-s [yices:def,z3:arith2{randomSeed=1},z3:arith2{randomSeed=2},z3:arith1{randomSeed=3},z3:arith1{randomSeed=4},z3:lia1{randomSeed=5},z3:lia1{randomSeed=6},z3:eq1,z3:eq2,z3:def]",
"-divideNoRemainder true"
],
"rule_sanity": "basic",
"server": "staging",
"smt_timeout": "36000",
"global_timeout": "36000",
"solc": "solc8.18",
"verify": "BorrowerOperations:certora/specs/BO_equivalence_partial.spec"
}
61 changes: 61 additions & 0 deletions contracts/certora/confs/BatchManagementFee.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/ERC20Like/DummyWeth.sol",
"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
"certora/harnesses/Utilities.sol",
"src/BorrowerOperations.sol",
"src/TroveManager.sol",
"src/StabilityPool.sol",
"src/BoldToken.sol",
"src/SortedTroves.sol",
"src/CollSurplusPool.sol",
"src/GasPool.sol",
"src/ActivePool.sol",
"src/DefaultPool.sol",
"src/TroveNFT.sol",
"src/Dependencies/AddRemoveManagers.sol"
],
"link": [
"BorrowerOperations:collToken=SafeERC20",
"BorrowerOperations:WETH=DummyWeth",
"BorrowerOperations:troveManager=TroveManager",
"BorrowerOperations:activePool=ActivePool",
"BorrowerOperations:defaultPool=DefaultPool",
"BorrowerOperations:gasPoolAddress=GasPool",
"BorrowerOperations:collSurplusPool=CollSurplusPool",
"BorrowerOperations:sortedTroves=SortedTroves",
"BorrowerOperations:boldToken=BoldToken",
"BorrowerOperations:troveNFT=TroveNFT",
"TroveManager:activePool=ActivePool",
"TroveManager:defaultPool=DefaultPool",
"TroveManager:sortedTroves=SortedTroves",
"TroveManager:troveNFT=TroveNFT",
"ActivePool:boldToken=BoldToken",
"ActivePool:stabilityPool=StabilityPool",
"DefaultPool:activePoolAddress=ActivePool",
"SortedTroves:troveManager=TroveManager",
"AddRemoveManagers:troveNFT=TroveNFT"
],
"msg": "troves in batch share management fee",
"optimistic_fallback": true,
"optimistic_loop": true,
"packages": [
"openzeppelin-contracts=lib/openzeppelin-contracts"
],
"process": "emv",
"prover_args": [
"-backendStrategy singleRace",
"-smt_useLIA false",
"-smt_useNIA true",
"-s [yices,z3:def{randomSeed=1},z3:def{randomSeed=2},z3:def{randomSeed=3},z3:def{randomSeed=4},z3:def{randomSeed=5},z3:def{randomSeed=6},z3:def{randomSeed=7},z3:def{randomSeed=8},z3:def{randomSeed=9},z3:def{randomSeed=10},z3:def{randomSeed=21},z3:def{randomSeed=32},z3:def{randomSeed=43},z3:def{randomSeed=54},z3:def{randomSeed=65},z3:def{randomSeed=66}]"
],
"prover_version": "master",
"rule": [
"troves_in_batch_share_management_fee"
],
"rule_sanity": "basic",
"solc": "solc8.18",
"verify": "BorrowerOperations:certora/specs/BorrowerOperations.spec",
"build_cache": true,
}
59 changes: 59 additions & 0 deletions contracts/certora/confs/BatchUpfrontFee.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{
"assert_autofinder_success": true,
"build_cache": true,
"files": [
"certora/harnesses/ERC20Like/DummyWeth.sol",
"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
"certora/harnesses/Utilities.sol",
"src/BorrowerOperations.sol",
"src/TroveManager.sol",
"src/StabilityPool.sol",
"src/BoldToken.sol",
"src/SortedTroves.sol",
"src/CollSurplusPool.sol",
"src/GasPool.sol",
"src/ActivePool.sol",
"src/DefaultPool.sol",
"src/TroveNFT.sol",
"src/Dependencies/AddRemoveManagers.sol"
],
"link": [
"BorrowerOperations:collToken=SafeERC20",
"BorrowerOperations:WETH=DummyWeth",
"BorrowerOperations:troveManager=TroveManager",
"BorrowerOperations:activePool=ActivePool",
"BorrowerOperations:defaultPool=DefaultPool",
"BorrowerOperations:gasPoolAddress=GasPool",
"BorrowerOperations:collSurplusPool=CollSurplusPool",
"BorrowerOperations:sortedTroves=SortedTroves",
"BorrowerOperations:boldToken=BoldToken",
"BorrowerOperations:troveNFT=TroveNFT",
"TroveManager:activePool=ActivePool",
"TroveManager:defaultPool=DefaultPool",
"TroveManager:sortedTroves=SortedTroves",
"TroveManager:troveNFT=TroveNFT",
"ActivePool:boldToken=BoldToken",
"ActivePool:stabilityPool=StabilityPool",
"DefaultPool:activePoolAddress=ActivePool",
"SortedTroves:troveManager=TroveManager",
"AddRemoveManagers:troveNFT=TroveNFT"
],
"msg": "Batch troves share the same upront fee",
"optimistic_fallback": true,
"optimistic_loop": true,
"packages": [
"openzeppelin-contracts=lib/openzeppelin-contracts"
],
"process": "emv",
"prover_args": [
" -destructiveOptimizations enable -split false"
],
"smt_timeout": "7200",
"prover_version": "master",
"rule": [
"troves_in_batch_share_upfront_fee"
],
"rule_sanity": "basic",
"solc": "solc8.18",
"verify": "BorrowerOperations:certora/specs/BorrowerOperations.spec"
}
67 changes: 67 additions & 0 deletions contracts/certora/confs/BorrowerOperations.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/ERC20Like/DummyWeth.sol",
"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
"certora/harnesses/Utilities.sol",
"src/BorrowerOperations.sol",
"src/TroveManager.sol",
"src/StabilityPool.sol",
"src/BoldToken.sol",
"src/SortedTroves.sol",
"src/CollSurplusPool.sol",
"src/GasPool.sol",
"src/ActivePool.sol",
"src/DefaultPool.sol",
"src/TroveNFT.sol",
"src/Dependencies/AddRemoveManagers.sol",
],
"link": [
"BorrowerOperations:collToken=SafeERC20",
"BorrowerOperations:WETH=DummyWeth",
"BorrowerOperations:troveManager=TroveManager",
"BorrowerOperations:activePool=ActivePool",
"BorrowerOperations:defaultPool=DefaultPool",
"BorrowerOperations:gasPoolAddress=GasPool",
"BorrowerOperations:collSurplusPool=CollSurplusPool",
"BorrowerOperations:sortedTroves=SortedTroves",
"BorrowerOperations:boldToken=BoldToken",
"BorrowerOperations:troveNFT=TroveNFT",

"TroveManager:activePool=ActivePool",
"TroveManager:defaultPool=DefaultPool",
"TroveManager:sortedTroves=SortedTroves",
"TroveManager:troveNFT=TroveNFT",

"ActivePool:boldToken=BoldToken",
"ActivePool:stabilityPool=StabilityPool",

"DefaultPool:activePoolAddress=ActivePool",
"SortedTroves:troveManager=TroveManager",
"AddRemoveManagers:troveNFT=TroveNFT"
],
"optimistic_fallback": true,
"optimistic_loop": true,
"packages": [
"openzeppelin-contracts=lib/openzeppelin-contracts"
],
"process": "emv",
"prover_args": [
"-divideNoRemainder true"
],
"rule": [
"collateral_adjust_effects",
"troves_in_batch_use_batch_structure",
"debt_adjust_effects",
"sameInterestRateForBatchTroves",
"troves_in_batch_accrue_interest_at_same_rate"
],
"server":"production",
"prover_version": "master",
"solc": "solc8.18",
"solc_via_ir": false,
"rule_sanity": "basic",
"build_cache": true,
"smt_timeout": "7200",
"verify": "BorrowerOperations:certora/specs/BorrowerOperations.spec",
}
20 changes: 20 additions & 0 deletions contracts/certora/confs/SortedTroves.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"assert_autofinder_success": true,
"files": [
"src/SortedTroves.sol",
],
"optimistic_fallback": false,
"optimistic_loop": true,
"loop_iter": "2",
"build_cache": true,
"packages": [
"openzeppelin-contracts=lib/openzeppelin-contracts"
],
"parametric_contracts":["SortedTroves"],
"process": "emv",
"server": "production",
"solc": "solc8.18",
"rule_sanity":"basic",
"verify": "SortedTroves:certora/specs/DoubleLinkedList.spec",
"msg":"SortedTroves",
}
58 changes: 58 additions & 0 deletions contracts/certora/confs/SumOfTroves.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/ERC20Like/DummyWeth.sol",
"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
"certora/harnesses/Utilities.sol",
"src/BorrowerOperations.sol",
"src/TroveManager.sol",
"src/StabilityPool.sol",
"src/BoldToken.sol",
"src/SortedTroves.sol",
"src/CollSurplusPool.sol",
"src/GasPool.sol",
"src/ActivePool.sol",
"src/DefaultPool.sol",
"src/TroveNFT.sol",
"src/Dependencies/AddRemoveManagers.sol"
],
"link": [
"BorrowerOperations:collToken=SafeERC20",
"BorrowerOperations:WETH=DummyWeth",
"BorrowerOperations:troveManager=TroveManager",
"BorrowerOperations:activePool=ActivePool",
"BorrowerOperations:defaultPool=DefaultPool",
"BorrowerOperations:gasPoolAddress=GasPool",
"BorrowerOperations:collSurplusPool=CollSurplusPool",
"BorrowerOperations:sortedTroves=SortedTroves",
"BorrowerOperations:boldToken=BoldToken",
"BorrowerOperations:troveNFT=TroveNFT",
"TroveManager:activePool=ActivePool",
"TroveManager:defaultPool=DefaultPool",
"TroveManager:sortedTroves=SortedTroves",
"TroveManager:troveNFT=TroveNFT",
"ActivePool:boldToken=BoldToken",
"ActivePool:stabilityPool=StabilityPool",
"DefaultPool:activePoolAddress=ActivePool",
"SortedTroves:troveManager=TroveManager",
"AddRemoveManagers:troveNFT=TroveNFT"
],
"msg": "sum of batch trove debts is batch debt",
"optimistic_fallback": true,
"optimistic_loop": true,
"packages": [
"openzeppelin-contracts=lib/openzeppelin-contracts"
],
"process": "emv",
"build_cache": true,
"prover_args": [
"-splitParallel true",
"-divideNoRemainder true"
],
"rule": [
"sum_of_trove_debts"
],
"rule_sanity": "basic",
"solc": "solc8.18",
"verify": "BorrowerOperations:certora/specs/BorrowerOperations.spec"
}
Loading

0 comments on commit c57c5e4

Please sign in to comment.