From 9b6b349fd6b500d3010da34c1c640c2ffab95d75 Mon Sep 17 00:00:00 2001 From: jayesh yadav Date: Fri, 17 Jul 2026 21:31:00 +0530 Subject: [PATCH] chore: recover invariant + crash-scenario suites onto main PR #8's commits (stateful invariant suite, Oct-10/March-2020/depeg/ staleness crash replays, CPPIController.lastFloor()) were stranded on the feat/invariants branch: GitHub recorded the PR merged at its own tip during the stacked-PR rebase, but that commit never reached main. Restores the files verbatim plus the simulateYield mock helper they depend on. Suite 95 -> 110. --- artifacts/project_facts.json | 22766 +++++++++++++++++++++++++++++++++ src/CPPIController.sol | 5 + test/CrashScenarios.t.sol | 260 + test/Invariants.t.sol | 253 + test/SafeLegManager.t.sol | 7 + 5 files changed, 23291 insertions(+) create mode 100644 artifacts/project_facts.json create mode 100644 test/CrashScenarios.t.sol create mode 100644 test/Invariants.t.sol diff --git a/artifacts/project_facts.json b/artifacts/project_facts.json new file mode 100644 index 0000000..61e8d5f --- /dev/null +++ b/artifacts/project_facts.json @@ -0,0 +1,22766 @@ +{ + "_pydantic_type": { + "is_list": false, + "model_name": "ProjectFacts" + }, + "_cache_version": "1.1.0", + "_checksum": "623e4d1be32ea959cd604525f05d240ac7956b53b50adf9a6c241a826e3b7e70", + "data": { + "contracts": { + "Ownable@lib!solady!src!auth!Ownable.sol": { + "name": "Ownable", + "key": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "path": "lib/solady/src/auth/Ownable.sol", + "is_abstract": true, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "functions_declared": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 14, + "line_end": 278, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 48 + }, + { + "name": "_OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 52 + }, + { + "name": "_OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 56 + }, + { + "name": "_OWNER_SLOT", + "type_str": "bytes32", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 69 + }, + { + "name": "_HANDOVER_SLOT_SEED", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 78 + } + ], + "events": [ + { + "name": "OwnershipTransferred", + "parameters": [ + { + "name": "oldOwner", + "type_str": "address", + "indexed": true + }, + { + "name": "newOwner", + "type_str": "address", + "indexed": true + } + ], + "line_number": 39 + }, + { + "name": "OwnershipHandoverRequested", + "parameters": [ + { + "name": "pendingOwner", + "type_str": "address", + "indexed": true + } + ], + "line_number": 42 + }, + { + "name": "OwnershipHandoverCanceled", + "parameters": [ + { + "name": "pendingOwner", + "type_str": "address", + "indexed": true + } + ], + "line_number": 45 + } + ] + }, + "ERC20@lib!solady!src!tokens!ERC20.sol": { + "name": "ERC20", + "key": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "path": "lib/solady/src/tokens/ERC20.sol", + "is_abstract": true, + "is_fully_implemented": false, + "is_interface": false, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + } + ], + "functions_declared": { + "name()": { + "signature": "name()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "string" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 132, + "line_end": 132, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "symbol()": { + "signature": "symbol()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "string" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 135, + "line_end": 135, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "decimals()": { + "signature": "decimals()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint8" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 138, + "line_end": 140, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalSupply()": { + "signature": "totalSupply()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 147, + "line_end": 152, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "balanceOf(address)": { + "signature": "balanceOf(address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 155, + "line_end": 162, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "allowance(address,address)": { + "signature": "allowance(address,address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 165, + "line_end": 181, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "approve(address,uint256)": { + "signature": "approve(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 186, + "line_end": 209, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transfer(address,uint256)": { + "signature": "transfer(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 217, + "line_end": 246, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferFrom(address,address,uint256)": { + "signature": "transferFrom(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 257, + "line_end": 347, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)", + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_constantNameHash()": { + "signature": "_constantNameHash()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 355, + "line_end": 355, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_versionHash()": { + "signature": "_versionHash()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 358, + "line_end": 360, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_incrementNonce(address)": { + "signature": "_incrementNonce(address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 363, + "line_end": 371, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "nonces(address)": { + "signature": "nonces(address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 375, + "line_end": 383, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "signature": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256", + "uint256", + "uint8", + "bytes32", + "bytes32" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 389, + "line_end": 469, + "callees": { + "internal_callees": [ + "ERC20._versionHash()", + "ERC20.name()", + "ERC20._constantNameHash()", + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "DOMAIN_SEPARATOR()": { + "signature": "DOMAIN_SEPARATOR()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 472, + "line_end": 487, + "callees": { + "internal_callees": [ + "ERC20._versionHash()", + "ERC20.name()", + "ERC20._constantNameHash()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_mint(address,uint256)": { + "signature": "_mint(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 496, + "line_end": 520, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_burn(address,uint256)": { + "signature": "_burn(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 529, + "line_end": 552, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_transfer(address,address,uint256)": { + "signature": "_transfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 559, + "line_end": 587, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_spendAllowance(address,address,uint256)": { + "signature": "_spendAllowance(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 594, + "line_end": 617, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_approve(address,address,uint256)": { + "signature": "_approve(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 622, + "line_end": 644, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_beforeTokenTransfer(address,address,uint256)": { + "signature": "_beforeTokenTransfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 652, + "line_end": 652, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_afterTokenTransfer(address,address,uint256)": { + "signature": "_afterTokenTransfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 656, + "line_end": 656, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_givePermit2InfiniteAllowance()": { + "signature": "_givePermit2InfiniteAllowance()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 667, + "line_end": 669, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 21, + "line_end": 670, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "_TRANSFER_EVENT_SIGNATURE", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 61 + }, + { + "name": "_APPROVAL_EVENT_SIGNATURE", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 65 + }, + { + "name": "_TOTAL_SUPPLY_SLOT", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 73 + }, + { + "name": "_BALANCE_SLOT_SEED", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 81 + }, + { + "name": "_ALLOWANCE_SLOT_SEED", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 90 + }, + { + "name": "_NONCES_SLOT_SEED", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 98 + }, + { + "name": "_NONCES_SLOT_SEED_WITH_SIGNATURE_PREFIX", + "type_str": "uint256", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 105 + }, + { + "name": "_DOMAIN_TYPEHASH", + "type_str": "bytes32", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 108 + }, + { + "name": "_DEFAULT_VERSION_HASH", + "type_str": "bytes32", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 113 + }, + { + "name": "_PERMIT_TYPEHASH", + "type_str": "bytes32", + "visibility": "private", + "is_constant": true, + "is_immutable": false, + "line_number": 117 + }, + { + "name": "_PERMIT2", + "type_str": "address", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 125 + } + ], + "events": [ + { + "name": "Transfer", + "parameters": [ + { + "name": "from", + "type_str": "address", + "indexed": true + }, + { + "name": "to", + "type_str": "address", + "indexed": true + }, + { + "name": "amount", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 55 + }, + { + "name": "Approval", + "parameters": [ + { + "name": "owner", + "type_str": "address", + "indexed": true + }, + { + "name": "spender", + "type_str": "address", + "indexed": true + }, + { + "name": "amount", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 58 + } + ] + }, + "FixedPointMathLib@lib!solady!src!utils!FixedPointMathLib.sol": { + "name": "FixedPointMathLib", + "key": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": true, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + } + ], + "functions_declared": { + "mulWad(uint256,uint256)": { + "signature": "mulWad(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 64, + "line_end": 76, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "sMulWad(int256,int256)": { + "signature": "sMulWad(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 79, + "line_end": 90, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawMulWad(uint256,uint256)": { + "signature": "rawMulWad(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 93, + "line_end": 98, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawSMulWad(int256,int256)": { + "signature": "rawSMulWad(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 101, + "line_end": 106, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "mulWadUp(uint256,uint256)": { + "signature": "mulWadUp(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 109, + "line_end": 122, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawMulWadUp(uint256,uint256)": { + "signature": "rawMulWadUp(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 125, + "line_end": 130, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "divWad(uint256,uint256)": { + "signature": "divWad(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 133, + "line_end": 143, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "sDivWad(int256,int256)": { + "signature": "sDivWad(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 146, + "line_end": 157, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawDivWad(uint256,uint256)": { + "signature": "rawDivWad(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 160, + "line_end": 165, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawSDivWad(int256,int256)": { + "signature": "rawSDivWad(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 168, + "line_end": 173, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "divWadUp(uint256,uint256)": { + "signature": "divWadUp(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 176, + "line_end": 186, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawDivWadUp(uint256,uint256)": { + "signature": "rawDivWadUp(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 189, + "line_end": 194, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "powWad(int256,int256)": { + "signature": "powWad(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 199, + "line_end": 202, + "callees": { + "internal_callees": [ + "FixedPointMathLib.lnWad(int256)", + "FixedPointMathLib.expWad(int256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "expWad(int256)": { + "signature": "expWad(int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 207, + "line_end": 272, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "lnWad(int256)": { + "signature": "lnWad(int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 277, + "line_end": 347, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "lambertW0Wad(int256)": { + "signature": "lambertW0Wad(int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 353, + "line_end": 434, + "callees": { + "internal_callees": [ + "FixedPointMathLib.lnWad(int256)", + "FixedPointMathLib.expWad(int256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "fullMulEq(uint256,uint256,uint256,uint256)": { + "signature": "fullMulEq(uint256,uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 441, + "line_end": 450, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "fullMulDiv(uint256,uint256,uint256)": { + "signature": "fullMulDiv(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 455, + "line_end": 512, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "fullMulDivUnchecked(uint256,uint256,uint256)": { + "signature": "fullMulDivUnchecked(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 517, + "line_end": 542, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "fullMulDivUp(uint256,uint256,uint256)": { + "signature": "fullMulDivUp(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 548, + "line_end": 560, + "callees": { + "internal_callees": [ + "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "fullMulDivN(uint256,uint256,uint8)": { + "signature": "fullMulDivN(uint256,uint256,uint8)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint8" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 566, + "line_end": 591, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "mulDiv(uint256,uint256,uint256)": { + "signature": "mulDiv(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 595, + "line_end": 606, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "mulDivUp(uint256,uint256,uint256)": { + "signature": "mulDivUp(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 610, + "line_end": 621, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "invMod(uint256,uint256)": { + "signature": "invMod(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 624, + "line_end": 641, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "divUp(uint256,uint256)": { + "signature": "divUp(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 645, + "line_end": 654, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "zeroFloorSub(uint256,uint256)": { + "signature": "zeroFloorSub(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 657, + "line_end": 662, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "saturatingSub(uint256,uint256)": { + "signature": "saturatingSub(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 665, + "line_end": 670, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "saturatingAdd(uint256,uint256)": { + "signature": "saturatingAdd(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 673, + "line_end": 678, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "saturatingMul(uint256,uint256)": { + "signature": "saturatingMul(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 681, + "line_end": 686, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ternary(bool,uint256,uint256)": { + "signature": "ternary(bool,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "bool", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 689, + "line_end": 694, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ternary(bool,bytes32,bytes32)": { + "signature": "ternary(bool,bytes32,bytes32)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "bool", + "bytes32", + "bytes32" + ], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 697, + "line_end": 702, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ternary(bool,address,address)": { + "signature": "ternary(bool,address,address)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "bool", + "address", + "address" + ], + "returns": [ + "address" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 705, + "line_end": 710, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "coalesce(uint256,uint256)": { + "signature": "coalesce(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 713, + "line_end": 718, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "coalesce(bytes32,bytes32)": { + "signature": "coalesce(bytes32,bytes32)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "bytes32", + "bytes32" + ], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 721, + "line_end": 726, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "coalesce(address,address)": { + "signature": "coalesce(address,address)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "address" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 729, + "line_end": 734, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rpow(uint256,uint256,uint256)": { + "signature": "rpow(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 738, + "line_end": 772, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "sqrt(uint256)": { + "signature": "sqrt(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 775, + "line_end": 826, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cbrt(uint256)": { + "signature": "cbrt(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 833, + "line_end": 854, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "sqrtWad(uint256)": { + "signature": "sqrtWad(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 857, + "line_end": 867, + "callees": { + "internal_callees": [ + "FixedPointMathLib.sqrt(uint256)", + "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cbrtWad(uint256)": { + "signature": "cbrtWad(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 872, + "line_end": 896, + "callees": { + "internal_callees": [ + "FixedPointMathLib.cbrt(uint256)", + "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "mulSqrt(uint256,uint256)": { + "signature": "mulSqrt(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 899, + "line_end": 906, + "callees": { + "internal_callees": [ + "FixedPointMathLib.saturatingMul(uint256,uint256)", + "FixedPointMathLib.sqrt(uint256)", + "FixedPointMathLib.rawDiv(uint256,uint256)", + "FixedPointMathLib.avg(uint256,uint256)", + "FixedPointMathLib.rawAdd(uint256,uint256)", + "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256)", + "FixedPointMathLib.rawMul(uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "factorial(uint256)": { + "signature": "factorial(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 909, + "line_end": 919, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "log2(uint256)": { + "signature": "log2(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 924, + "line_end": 936, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "log2Up(uint256)": { + "signature": "log2Up(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 940, + "line_end": 946, + "callees": { + "internal_callees": [ + "FixedPointMathLib.log2(uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "log10(uint256)": { + "signature": "log10(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 950, + "line_end": 971, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "log10Up(uint256)": { + "signature": "log10Up(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 975, + "line_end": 981, + "callees": { + "internal_callees": [ + "FixedPointMathLib.log10(uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "log256(uint256)": { + "signature": "log256(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 985, + "line_end": 994, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "log256Up(uint256)": { + "signature": "log256Up(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 998, + "line_end": 1004, + "callees": { + "internal_callees": [ + "FixedPointMathLib.log256(uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "sci(uint256)": { + "signature": "sci(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256", + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1008, + "line_end": 1043, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "packSci(uint256)": { + "signature": "packSci(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1053, + "line_end": 1063, + "callees": { + "internal_callees": [ + "FixedPointMathLib.sci(uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "unpackSci(uint256)": { + "signature": "unpackSci(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1066, + "line_end": 1070, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "avg(uint256,uint256)": { + "signature": "avg(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1073, + "line_end": 1077, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "avg(int256,int256)": { + "signature": "avg(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1080, + "line_end": 1084, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "abs(int256)": { + "signature": "abs(int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1087, + "line_end": 1091, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "dist(uint256,uint256)": { + "signature": "dist(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1094, + "line_end": 1099, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "dist(int256,int256)": { + "signature": "dist(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1102, + "line_end": 1107, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "min(uint256,uint256)": { + "signature": "min(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1110, + "line_end": 1115, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "min(int256,int256)": { + "signature": "min(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1118, + "line_end": 1123, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "max(uint256,uint256)": { + "signature": "max(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1126, + "line_end": 1131, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "max(int256,int256)": { + "signature": "max(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1134, + "line_end": 1139, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "clamp(uint256,uint256,uint256)": { + "signature": "clamp(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1142, + "line_end": 1152, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "clamp(int256,int256,int256)": { + "signature": "clamp(int256,int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1155, + "line_end": 1161, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "gcd(uint256,uint256)": { + "signature": "gcd(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1164, + "line_end": 1173, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "lerp(uint256,uint256,uint256,uint256,uint256)": { + "signature": "lerp(uint256,uint256,uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1179, + "line_end": 1191, + "callees": { + "internal_callees": [ + "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "lerp(int256,int256,int256,int256,int256)": { + "signature": "lerp(int256,int256,int256,int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256", + "int256", + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1197, + "line_end": 1212, + "callees": { + "internal_callees": [ + "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "isEven(uint256)": { + "signature": "isEven(uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1215, + "line_end": 1217, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawAdd(uint256,uint256)": { + "signature": "rawAdd(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1224, + "line_end": 1228, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawAdd(int256,int256)": { + "signature": "rawAdd(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1231, + "line_end": 1235, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawSub(uint256,uint256)": { + "signature": "rawSub(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1238, + "line_end": 1242, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawSub(int256,int256)": { + "signature": "rawSub(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1245, + "line_end": 1249, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawMul(uint256,uint256)": { + "signature": "rawMul(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1252, + "line_end": 1256, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawMul(int256,int256)": { + "signature": "rawMul(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1259, + "line_end": 1263, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawDiv(uint256,uint256)": { + "signature": "rawDiv(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1266, + "line_end": 1271, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawSDiv(int256,int256)": { + "signature": "rawSDiv(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1274, + "line_end": 1279, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawMod(uint256,uint256)": { + "signature": "rawMod(uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1282, + "line_end": 1287, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawSMod(int256,int256)": { + "signature": "rawSMod(int256,int256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "int256", + "int256" + ], + "returns": [ + "int256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1290, + "line_end": 1295, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawAddMod(uint256,uint256,uint256)": { + "signature": "rawAddMod(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1298, + "line_end": 1303, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rawMulMod(uint256,uint256,uint256)": { + "signature": "rawMulMod(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 1306, + "line_end": 1311, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/utils/FixedPointMathLib.sol", + "line_start": 7, + "line_end": 1312, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "WAD", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 57 + } + ], + "events": [] + }, + "SafeTransferLib@lib!solady!src!utils!SafeTransferLib.sol": { + "name": "SafeTransferLib", + "key": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": true, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + } + ], + "functions_declared": { + "safeTransferETH(address,uint256)": { + "signature": "safeTransferETH(address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 95, + "line_end": 103, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeTransferAllETH(address)": { + "signature": "safeTransferAllETH(address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 106, + "line_end": 115, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "forceSafeTransferETH(address,uint256,uint256)": { + "signature": "forceSafeTransferETH(address,uint256,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 118, + "line_end": 132, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "forceSafeTransferAllETH(address,uint256)": { + "signature": "forceSafeTransferAllETH(address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 135, + "line_end": 145, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "forceSafeTransferETH(address,uint256)": { + "signature": "forceSafeTransferETH(address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 148, + "line_end": 162, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "forceSafeTransferAllETH(address)": { + "signature": "forceSafeTransferAllETH(address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 165, + "line_end": 176, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "trySafeTransferETH(address,uint256,uint256)": { + "signature": "trySafeTransferETH(address,uint256,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 179, + "line_end": 187, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "trySafeTransferAllETH(address,uint256)": { + "signature": "trySafeTransferAllETH(address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 190, + "line_end": 198, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeMoveETH(address,uint256)": { + "signature": "safeMoveETH(address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [ + "address" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 203, + "line_end": 243, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeTransferFrom(address,address,address,uint256)": { + "signature": "safeTransferFrom(address,address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 254, + "line_end": 272, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "trySafeTransferFrom(address,address,address,uint256)": { + "signature": "trySafeTransferFrom(address,address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 277, + "line_end": 295, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeTransferAllFrom(address,address,address)": { + "signature": "safeTransferAllFrom(address,address,address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 301, + "line_end": 334, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeTransfer(address,address,uint256)": { + "signature": "safeTransfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 338, + "line_end": 354, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeTransferAll(address,address)": { + "signature": "safeTransferAll(address,address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 358, + "line_end": 386, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeApprove(address,address,uint256)": { + "signature": "safeApprove(address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 390, + "line_end": 405, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeApproveWithRetry(address,address,uint256)": { + "signature": "safeApproveWithRetry(address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 411, + "line_end": 438, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "balanceOf(address,address)": { + "signature": "balanceOf(address,address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 442, + "line_end": 456, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "checkBalanceOf(address,address)": { + "signature": "checkBalanceOf(address,address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "bool", + "uint256" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 461, + "line_end": 477, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalSupply(address)": { + "signature": "totalSupply(address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 481, + "line_end": 493, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "safeTransferFrom2(address,address,address,uint256)": { + "signature": "safeTransferFrom2(address,address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 500, + "line_end": 504, + "callees": { + "internal_callees": [ + "SafeTransferLib.trySafeTransferFrom(address,address,address,uint256)", + "SafeTransferLib.permit2TransferFrom(address,address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "permit2TransferFrom(address,address,address,uint256)": { + "signature": "permit2TransferFrom(address,address,address,uint256)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 508, + "line_end": 533, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "signature": "permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "uint256", + "uint256", + "uint8", + "bytes32", + "bytes32" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 538, + "line_end": 592, + "callees": { + "internal_callees": [ + "SafeTransferLib.simplePermit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "simplePermit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "signature": "simplePermit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "uint256", + "uint256", + "uint8", + "bytes32", + "bytes32" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 595, + "line_end": 645, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "permit2Approve(address,address,uint160,uint48)": { + "signature": "permit2Approve(address,address,uint160,uint48)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint160", + "uint48" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 648, + "line_end": 665, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "permit2Lockdown(address,address)": { + "signature": "permit2Lockdown(address,address)", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 668, + "line_end": 682, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/utils/SafeTransferLib.sol", + "line_start": 11, + "line_end": 683, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "GAS_STIPEND_NO_STORAGE_WRITES", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 48 + }, + { + "name": "GAS_STIPEND_NO_GRIEF", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 52 + }, + { + "name": "DAI_DOMAIN_SEPARATOR", + "type_str": "bytes32", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 55 + }, + { + "name": "WETH9", + "type_str": "address", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 59 + }, + { + "name": "PERMIT2", + "type_str": "address", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 64 + }, + { + "name": "ETH_MOVER", + "type_str": "address", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 69 + } + ], + "events": [] + }, + "CPPIController@src!CPPIController.sol": { + "name": "CPPIController", + "key": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "path": "src/CPPIController.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + } + ], + "functions_declared": { + "constructor(address,uint256,FloorPolicy.Config,RebalancePolicy.Config)": { + "signature": "constructor(address,uint256,FloorPolicy.Config,RebalancePolicy.Config)", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "uint256", + "FloorPolicy.Config", + "RebalancePolicy.Config" + ], + "returns": [], + "path": "src/CPPIController.sol", + "line_start": 50, + "line_end": 64, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "FloorPolicy.validate(FloorPolicy.Config)", + "RebalancePolicy.validate(RebalancePolicy.Config)" + ], + "has_low_level_calls": false + } + }, + "startTerm(uint64,uint64,uint256)": { + "signature": "startTerm(uint64,uint64,uint256)", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIController.onlyVault()" + ], + "arguments": [ + "uint64", + "uint64", + "uint256" + ], + "returns": [], + "path": "src/CPPIController.sol", + "line_start": 68, + "line_end": 80, + "callees": { + "internal_callees": [ + "CPPIController.onlyVault()" + ], + "external_callees": [], + "library_callees": [ + "FloorPolicy.validate(FloorPolicy.Config)", + "FloorPolicy.initialize(FloorPolicy.State,FloorPolicy.Config,uint256)" + ], + "has_low_level_calls": false + } + }, + "settleTerm(uint256)": { + "signature": "settleTerm(uint256)", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIController.onlyVault()" + ], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIController.sol", + "line_start": 83, + "line_end": 90, + "callees": { + "internal_callees": [ + "CPPIController.onlyVault()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "assess(uint256,uint256,uint256)": { + "signature": "assess(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIController.onlyVault()" + ], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "CPPIController.Assessment" + ], + "path": "src/CPPIController.sol", + "line_start": 106, + "line_end": 119, + "callees": { + "internal_callees": [ + "CPPIController._clampRate(uint256)", + "CPPIController.onlyVault()" + ], + "external_callees": [], + "library_callees": [ + "RebalancePolicy.classify(RebalancePolicy.Config,uint256,uint256,uint256,uint256)", + "CPPIMath.targetRisky(uint256,uint256,uint256)", + "CPPIMath.driftBps(uint256,uint256,uint256)", + "CPPIMath.cushionBps(uint256,uint256)", + "FloorPolicy.currentFloor(FloorPolicy.State,FloorPolicy.Config,uint256,uint256,uint256)", + "CPPIMath.cushion(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "recordRebalance(RebalancePolicy.Trigger,uint256,uint256)": { + "signature": "recordRebalance(RebalancePolicy.Trigger,uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIController.onlyVault()" + ], + "arguments": [ + "RebalancePolicy.Trigger", + "uint256", + "uint256" + ], + "returns": [], + "path": "src/CPPIController.sol", + "line_start": 122, + "line_end": 125, + "callees": { + "internal_callees": [ + "CPPIController.onlyVault()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "protectedAmount()": { + "signature": "protectedAmount()", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIController.sol", + "line_start": 129, + "line_end": 131, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "lastFloor()": { + "signature": "lastFloor()", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIController.sol", + "line_start": 134, + "line_end": 136, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "maxSurvivableGapBps()": { + "signature": "maxSurvivableGapBps()", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIController.sol", + "line_start": 138, + "line_end": 140, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "CPPIMath.maxSurvivableGapBps(uint256)" + ], + "has_low_level_calls": false + } + }, + "floorConfigView()": { + "signature": "floorConfigView()", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "FloorPolicy.Config" + ], + "path": "src/CPPIController.sol", + "line_start": 142, + "line_end": 144, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_clampRate(uint256)": { + "signature": "_clampRate(uint256)", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIController.sol", + "line_start": 150, + "line_end": 156, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIController.sol", + "line_start": 16, + "line_end": 157, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyVault()": { + "signature": "onlyVault()", + "implementation_contract": { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIController.sol", + "line_start": 45, + "line_end": 48, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "multiplierWad", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 19 + }, + { + "name": "vault", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 20 + }, + { + "name": "floorConfig", + "type_str": "FloorPolicy.Config", + "visibility": "internal", + "is_constant": false, + "is_immutable": false, + "line_number": 22 + }, + { + "name": "rebalConfig", + "type_str": "RebalancePolicy.Config", + "visibility": "internal", + "is_constant": false, + "is_immutable": false, + "line_number": 23 + }, + { + "name": "floorState", + "type_str": "FloorPolicy.State", + "visibility": "internal", + "is_constant": false, + "is_immutable": false, + "line_number": 24 + }, + { + "name": "lastRebalanceAt", + "type_str": "uint64", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 26 + }, + { + "name": "termNumber", + "type_str": "uint64", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 27 + }, + { + "name": "termActive", + "type_str": "bool", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 28 + }, + { + "name": "MAX_RATE_WAD", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 30 + }, + { + "name": "MAX_RATE_STEP_WAD", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 31 + }, + { + "name": "lastRateWad", + "type_str": "uint256", + "visibility": "internal", + "is_constant": false, + "is_immutable": false, + "line_number": 32 + } + ], + "events": [ + { + "name": "TermStarted", + "parameters": [ + { + "name": "termNumber", + "type_str": "uint64", + "indexed": true + }, + { + "name": "termStart", + "type_str": "uint64", + "indexed": false + }, + { + "name": "termEnd", + "type_str": "uint64", + "indexed": false + }, + { + "name": "nav", + "type_str": "uint256", + "indexed": false + }, + { + "name": "protectedAmount", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 34 + }, + { + "name": "TermSettled", + "parameters": [ + { + "name": "termNumber", + "type_str": "uint64", + "indexed": true + }, + { + "name": "nav", + "type_str": "uint256", + "indexed": false + }, + { + "name": "protectedAmount", + "type_str": "uint256", + "indexed": false + }, + { + "name": "shortfall", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 37 + }, + { + "name": "RebalanceRecorded", + "parameters": [ + { + "name": "termNumber", + "type_str": "uint64", + "indexed": true + }, + { + "name": "trigger", + "type_str": "RebalancePolicy.Trigger", + "indexed": false + }, + { + "name": "floor", + "type_str": "uint256", + "indexed": false + }, + { + "name": "target", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 38 + } + ] + }, + "IOracleHealth@src!CPPIVault.sol": { + "name": "IOracleHealth", + "key": { + "contract_name": "IOracleHealth", + "path": "src/CPPIVault.sol" + }, + "path": "src/CPPIVault.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IOracleHealth", + "path": "src/CPPIVault.sol" + }, + { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IOracleHealth", + "path": "src/CPPIVault.sol" + } + ], + "functions_declared": { + "healthy()": { + "signature": "healthy()", + "implementation_contract": { + "contract_name": "IOracleHealth", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "src/CPPIVault.sol", + "line_start": 13, + "line_end": 13, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "CPPIVault@src!CPPIVault.sol": { + "name": "CPPIVault", + "key": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "path": "src/CPPIVault.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [ + { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "scopes": [ + { + "contract_name": "IOracleHealth", + "path": "src/CPPIVault.sol" + }, + { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "CPPIController", + "path": "src/CPPIController.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + } + ], + "functions_declared": { + "constructor(address,uint8,address)": { + "signature": "constructor(address,uint8,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "uint8", + "address" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 111, + "line_end": 116, + "callees": { + "internal_callees": [ + "Ownable._initializeOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "name()": { + "signature": "name()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "override", + "view", + "pure" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "string" + ], + "path": "src/CPPIVault.sol", + "line_start": 118, + "line_end": 120, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "symbol()": { + "signature": "symbol()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "override", + "view", + "pure" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "string" + ], + "path": "src/CPPIVault.sol", + "line_start": 122, + "line_end": 124, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setController(CPPIController)": { + "signature": "setController(CPPIController)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "CPPIController" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 128, + "line_end": 131, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setPeriphery(ILeg,ILeg,IExecutionModule,IRateOracle)": { + "signature": "setPeriphery(ILeg,ILeg,IExecutionModule,IRateOracle)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "ILeg", + "ILeg", + "IExecutionModule", + "IRateOracle" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 133, + "line_end": 139, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.safeApprove(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "setRoles(address,address)": { + "signature": "setRoles(address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address", + "address" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 141, + "line_end": 144, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setHealthSource(IOracleHealth)": { + "signature": "setHealthSource(IOracleHealth)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "IOracleHealth" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 146, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setFees(uint16,uint16,address)": { + "signature": "setFees(uint16,uint16,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "uint16", + "uint16", + "address" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 150, + "line_end": 157, + "callees": { + "internal_callees": [ + "CPPIVault._accrueManagementFee()", + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setPaused(bool)": { + "signature": "setPaused(bool)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "bool" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 159, + "line_end": 163, + "callees": { + "internal_callees": [ + "Ownable.owner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalNav()": { + "signature": "totalNav()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 168, + "line_end": 170, + "callees": { + "internal_callees": [ + "CPPIVault._idleWad()" + ], + "external_callees": [ + "ILeg.value()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "shareholderNav()": { + "signature": "shareholderNav()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 174, + "line_end": 176, + "callees": { + "internal_callees": [ + "CPPIVault.totalNav()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "navPerShare()": { + "signature": "navPerShare()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 178, + "line_end": 181, + "callees": { + "internal_callees": [ + "ERC20.totalSupply()", + "CPPIVault.shareholderNav()" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "setOperator(address,bool)": { + "signature": "setOperator(address,bool)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address", + "bool" + ], + "returns": [ + "bool" + ], + "path": "src/CPPIVault.sol", + "line_start": 185, + "line_end": 189, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestDeposit(uint256)": { + "signature": "requestDeposit(uint256)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 191, + "line_end": 193, + "callees": { + "internal_callees": [ + "CPPIVault._requestDeposit(uint256,address,address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestDeposit(uint256,address,address)": { + "signature": "requestDeposit(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 197, + "line_end": 200, + "callees": { + "internal_callees": [ + "CPPIVault._requestDeposit(uint256,address,address)", + "CPPIVault._authControllerOrOperator(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestRedeem(uint256)": { + "signature": "requestRedeem(uint256)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 202, + "line_end": 204, + "callees": { + "internal_callees": [ + "CPPIVault._requestRedeem(uint256,address,address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestRedeem(uint256,address,address)": { + "signature": "requestRedeem(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 206, + "line_end": 209, + "callees": { + "internal_callees": [ + "CPPIVault._requestRedeem(uint256,address,address)", + "CPPIVault._authControllerOrOperator(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_requestDeposit(uint256,address,address)": { + "signature": "_requestDeposit(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 211, + "line_end": 224, + "callees": { + "internal_callees": [ + "CPPIVault._requireOracleHealthy()" + ], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.safeTransferFrom(address,address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "_requestRedeem(uint256,address,address)": { + "signature": "_requestRedeem(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 226, + "line_end": 238, + "callees": { + "internal_callees": [ + "CPPIVault._requireOracleHealthy()", + "ERC20._transfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "settleEpoch()": { + "signature": "settleEpoch()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIVault.onlyKeeper()" + ], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 246, + "line_end": 270, + "callees": { + "internal_callees": [ + "CPPIVault._idleWad()", + "ERC20._mint(address,uint256)", + "ERC20._burn(address,uint256)", + "CPPIVault._accrueManagementFee()", + "CPPIVault.navPerShare()", + "CPPIVault.onlyKeeper()" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "claimShares()": { + "signature": "claimShares()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 272, + "line_end": 274, + "callees": { + "internal_callees": [ + "CPPIVault._claimDeposit(address,address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "claimAssets()": { + "signature": "claimAssets()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 276, + "line_end": 278, + "callees": { + "internal_callees": [ + "CPPIVault._claimRedeem(address,address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "deposit(uint256,address,address)": { + "signature": "deposit(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 283, + "line_end": 287, + "callees": { + "internal_callees": [ + "CPPIVault.claimableDepositRequest(uint256,address)", + "CPPIVault._claimDeposit(address,address)", + "CPPIVault._authControllerOrOperator(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "mint(uint256,address,address)": { + "signature": "mint(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 289, + "line_end": 296, + "callees": { + "internal_callees": [ + "CPPIVault._claimDeposit(address,address)", + "CPPIVault._authControllerOrOperator(address)" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "redeem(uint256,address,address)": { + "signature": "redeem(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 298, + "line_end": 303, + "callees": { + "internal_callees": [ + "CPPIVault._claimRedeem(address,address)", + "CPPIVault._authControllerOrOperator(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "withdraw(uint256,address,address)": { + "signature": "withdraw(uint256,address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 305, + "line_end": 313, + "callees": { + "internal_callees": [ + "CPPIVault._claimRedeem(address,address)", + "CPPIVault._authControllerOrOperator(address)" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_claimDeposit(address,address)": { + "signature": "_claimDeposit(address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 315, + "line_end": 325, + "callees": { + "internal_callees": [ + "ERC20._transfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_claimRedeem(address,address)": { + "signature": "_claimRedeem(address,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 327, + "line_end": 339, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.safeTransfer(address,address,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "pendingDepositRequest(uint256,address)": { + "signature": "pendingDepositRequest(uint256,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 343, + "line_end": 346, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "claimableDepositRequest(uint256,address)": { + "signature": "claimableDepositRequest(uint256,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 348, + "line_end": 351, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "pendingRedeemRequest(uint256,address)": { + "signature": "pendingRedeemRequest(uint256,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 353, + "line_end": 356, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "claimableRedeemRequest(uint256,address)": { + "signature": "claimableRedeemRequest(uint256,address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 358, + "line_end": 361, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalAssets()": { + "signature": "totalAssets()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 363, + "line_end": 365, + "callees": { + "internal_callees": [ + "CPPIVault.shareholderNav()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "share()": { + "signature": "share()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "src/CPPIVault.sol", + "line_start": 368, + "line_end": 370, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "supportsInterface(bytes4)": { + "signature": "supportsInterface(bytes4)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "bytes4" + ], + "returns": [ + "bool" + ], + "path": "src/CPPIVault.sol", + "line_start": 372, + "line_end": 377, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "startTerm(uint64)": { + "signature": "startTerm(uint64)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIVault.onlyKeeper()" + ], + "arguments": [ + "uint64" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 381, + "line_end": 383, + "callees": { + "internal_callees": [ + "CPPIVault.onlyKeeper()", + "CPPIVault.shareholderNav()" + ], + "external_callees": [ + "CPPIController.startTerm(uint64,uint64,uint256)" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "settleTerm()": { + "signature": "settleTerm()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIVault.onlyKeeper()" + ], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 385, + "line_end": 397, + "callees": { + "internal_callees": [ + "ERC20._mint(address,uint256)", + "CPPIVault.shareholderNav()", + "CPPIVault._accrueManagementFee()", + "CPPIVault.navPerShare()", + "CPPIVault.onlyKeeper()" + ], + "external_callees": [ + "CPPIController.settleTerm(uint256)", + "CPPIController.protectedAmount()" + ], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "rebalance()": { + "signature": "rebalance()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "RebalancePolicy.Trigger" + ], + "path": "src/CPPIVault.sol", + "line_start": 404, + "line_end": 417, + "callees": { + "internal_callees": [ + "Ownable.owner()", + "CPPIVault.shareholderNav()" + ], + "external_callees": [ + "ILeg.value()", + "CPPIController.recordRebalance(RebalancePolicy.Trigger,uint256,uint256)", + "IRateOracle.rateWad()", + "CPPIController.assess(uint256,uint256,uint256)", + "IExecutionModule.executeRebalance(int256,uint256)" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "freeAssets(uint256)": { + "signature": "freeAssets(uint256)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "CPPIVault.onlyKeeper()" + ], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 420, + "line_end": 422, + "callees": { + "internal_callees": [ + "CPPIVault.onlyKeeper()" + ], + "external_callees": [ + "IExecutionModule.freeAssets(uint256)" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_accrueManagementFee()": { + "signature": "_accrueManagementFee()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 429, + "line_end": 440, + "callees": { + "internal_callees": [ + "ERC20.totalSupply()", + "ERC20._mint(address,uint256)", + "CPPIVault.navPerShare()", + "CPPIVault.shareholderNav()" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_authControllerOrOperator(address)": { + "signature": "_authControllerOrOperator(address)", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 442, + "line_end": 444, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_requireOracleHealthy()": { + "signature": "_requireOracleHealthy()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 446, + "line_end": 448, + "callees": { + "internal_callees": [], + "external_callees": [ + "IOracleHealth.healthy()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_idleWad()": { + "signature": "_idleWad()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/CPPIVault.sol", + "line_start": 450, + "line_end": 452, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "slitherConstructorVariables()": { + "signature": "slitherConstructorVariables()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 27, + "line_end": 453, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 27, + "line_end": 453, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyKeeper()": { + "signature": "onlyKeeper()", + "implementation_contract": { + "contract_name": "CPPIVault", + "path": "src/CPPIVault.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/CPPIVault.sol", + "line_start": 106, + "line_end": 109, + "callees": { + "internal_callees": [ + "Ownable.owner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "name()": { + "signature": "name()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "string" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 132, + "line_end": 132, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "symbol()": { + "signature": "symbol()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "string" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 135, + "line_end": 135, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "decimals()": { + "signature": "decimals()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint8" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 138, + "line_end": 140, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalSupply()": { + "signature": "totalSupply()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 147, + "line_end": 152, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "balanceOf(address)": { + "signature": "balanceOf(address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 155, + "line_end": 162, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "allowance(address,address)": { + "signature": "allowance(address,address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 165, + "line_end": 181, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "approve(address,uint256)": { + "signature": "approve(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 186, + "line_end": 209, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transfer(address,uint256)": { + "signature": "transfer(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 217, + "line_end": 246, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferFrom(address,address,uint256)": { + "signature": "transferFrom(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 257, + "line_end": 347, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)", + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_constantNameHash()": { + "signature": "_constantNameHash()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 355, + "line_end": 355, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_versionHash()": { + "signature": "_versionHash()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 358, + "line_end": 360, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_incrementNonce(address)": { + "signature": "_incrementNonce(address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 363, + "line_end": 371, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "nonces(address)": { + "signature": "nonces(address)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 375, + "line_end": 383, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "signature": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256", + "uint256", + "uint8", + "bytes32", + "bytes32" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 389, + "line_end": 469, + "callees": { + "internal_callees": [ + "ERC20._versionHash()", + "CPPIVault.name()", + "ERC20._constantNameHash()", + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "DOMAIN_SEPARATOR()": { + "signature": "DOMAIN_SEPARATOR()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bytes32" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 472, + "line_end": 487, + "callees": { + "internal_callees": [ + "ERC20._versionHash()", + "CPPIVault.name()", + "ERC20._constantNameHash()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_mint(address,uint256)": { + "signature": "_mint(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 496, + "line_end": 520, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_burn(address,uint256)": { + "signature": "_burn(address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 529, + "line_end": 552, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_transfer(address,address,uint256)": { + "signature": "_transfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 559, + "line_end": 587, + "callees": { + "internal_callees": [ + "ERC20._afterTokenTransfer(address,address,uint256)", + "ERC20._beforeTokenTransfer(address,address,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_spendAllowance(address,address,uint256)": { + "signature": "_spendAllowance(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 594, + "line_end": 617, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_approve(address,address,uint256)": { + "signature": "_approve(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 622, + "line_end": 644, + "callees": { + "internal_callees": [ + "ERC20._givePermit2InfiniteAllowance()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_beforeTokenTransfer(address,address,uint256)": { + "signature": "_beforeTokenTransfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 652, + "line_end": 652, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_afterTokenTransfer(address,address,uint256)": { + "signature": "_afterTokenTransfer(address,address,uint256)", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256" + ], + "returns": [], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 656, + "line_end": 656, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_givePermit2InfiniteAllowance()": { + "signature": "_givePermit2InfiniteAllowance()", + "implementation_contract": { + "contract_name": "ERC20", + "path": "lib/solady/src/tokens/ERC20.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/tokens/ERC20.sol", + "line_start": 667, + "line_end": 669, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "state_variables": [ + { + "name": "asset", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 33 + }, + { + "name": "assetScale", + "type_str": "uint256", + "visibility": "internal", + "is_constant": false, + "is_immutable": true, + "line_number": 34 + }, + { + "name": "controller", + "type_str": "CPPIController", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 36 + }, + { + "name": "safeLeg", + "type_str": "ILeg", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 37 + }, + { + "name": "riskyLeg", + "type_str": "ILeg", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 38 + }, + { + "name": "executor", + "type_str": "IExecutionModule", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 39 + }, + { + "name": "rateOracle", + "type_str": "IRateOracle", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 40 + }, + { + "name": "keeper", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 42 + }, + { + "name": "guardian", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 43 + }, + { + "name": "paused", + "type_str": "bool", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 44 + }, + { + "name": "healthSource", + "type_str": "IOracleHealth", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 45 + }, + { + "name": "managementFeeBps", + "type_str": "uint16", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 48 + }, + { + "name": "performanceFeeBps", + "type_str": "uint16", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 49 + }, + { + "name": "feeRecipient", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 50 + }, + { + "name": "lastMgmtAccrualAt", + "type_str": "uint64", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 51 + }, + { + "name": "MAX_MANAGEMENT_FEE_BPS", + "type_str": "uint16", + "visibility": "public", + "is_constant": true, + "is_immutable": false, + "line_number": 52 + }, + { + "name": "MAX_PERFORMANCE_FEE_BPS", + "type_str": "uint16", + "visibility": "public", + "is_constant": true, + "is_immutable": false, + "line_number": 53 + }, + { + "name": "SCHEDULED_SLIPPAGE_BPS", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 55 + }, + { + "name": "EMERGENCY_SLIPPAGE_BPS", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 56 + }, + { + "name": "isOperator", + "type_str": "mapping(address => mapping(address => bool))", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 66 + }, + { + "name": "currentEpoch", + "type_str": "uint64", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 68 + }, + { + "name": "epochNavPerShare", + "type_str": "mapping(uint64 => uint256)", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 69 + }, + { + "name": "depositRequests", + "type_str": "mapping(address => CPPIVault.Request)", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 70 + }, + { + "name": "redeemRequests", + "type_str": "mapping(address => CPPIVault.Request)", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 71 + }, + { + "name": "totalPendingDepositsWad", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 72 + }, + { + "name": "totalPendingRedeemShares", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 73 + }, + { + "name": "totalReservedPayoutsWad", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 74 + } + ], + "events": [ + { + "name": "DepositRequested", + "parameters": [ + { + "name": "user", + "type_str": "address", + "indexed": true + }, + { + "name": "epoch", + "type_str": "uint64", + "indexed": true + }, + { + "name": "assetsWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 78 + }, + { + "name": "RedeemRequested", + "parameters": [ + { + "name": "user", + "type_str": "address", + "indexed": true + }, + { + "name": "epoch", + "type_str": "uint64", + "indexed": true + }, + { + "name": "shares", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 79 + }, + { + "name": "EpochSettled", + "parameters": [ + { + "name": "epoch", + "type_str": "uint64", + "indexed": true + }, + { + "name": "navPerShare", + "type_str": "uint256", + "indexed": false + }, + { + "name": "depositsWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "redeemShares", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 80 + }, + { + "name": "SharesClaimed", + "parameters": [ + { + "name": "user", + "type_str": "address", + "indexed": true + }, + { + "name": "epoch", + "type_str": "uint64", + "indexed": true + }, + { + "name": "shares", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 81 + }, + { + "name": "AssetsClaimed", + "parameters": [ + { + "name": "user", + "type_str": "address", + "indexed": true + }, + { + "name": "epoch", + "type_str": "uint64", + "indexed": true + }, + { + "name": "assetsWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 82 + }, + { + "name": "Rebalanced", + "parameters": [ + { + "name": "trigger", + "type_str": "RebalancePolicy.Trigger", + "indexed": false + }, + { + "name": "deltaWad", + "type_str": "int256", + "indexed": false + }, + { + "name": "floor", + "type_str": "uint256", + "indexed": false + }, + { + "name": "target", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 83 + }, + { + "name": "PausedSet", + "parameters": [ + { + "name": "paused", + "type_str": "bool", + "indexed": false + } + ], + "line_number": 84 + }, + { + "name": "FeesSet", + "parameters": [ + { + "name": "managementBps", + "type_str": "uint16", + "indexed": false + }, + { + "name": "performanceBps", + "type_str": "uint16", + "indexed": false + }, + { + "name": "recipient", + "type_str": "address", + "indexed": false + } + ], + "line_number": 85 + }, + { + "name": "ManagementFeeAccrued", + "parameters": [ + { + "name": "feeShares", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 86 + }, + { + "name": "PerformanceFeeCharged", + "parameters": [ + { + "name": "feeShares", + "type_str": "uint256", + "indexed": false + }, + { + "name": "gainWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 87 + }, + { + "name": "OperatorSet", + "parameters": [ + { + "name": "controller", + "type_str": "address", + "indexed": true + }, + { + "name": "operator", + "type_str": "address", + "indexed": true + }, + { + "name": "approved", + "type_str": "bool", + "indexed": false + } + ], + "line_number": 88 + } + ] + }, + "IVaultAccounting@src!ExecutionModule.sol": { + "name": "IVaultAccounting", + "key": { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + "path": "src/ExecutionModule.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + } + ], + "functions_declared": { + "totalPendingDepositsWad()": { + "signature": "totalPendingDepositsWad()", + "implementation_contract": { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/ExecutionModule.sol", + "line_start": 13, + "line_end": 13, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalReservedPayoutsWad()": { + "signature": "totalReservedPayoutsWad()", + "implementation_contract": { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/ExecutionModule.sol", + "line_start": 14, + "line_end": 14, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "totalPendingRedeemShares()": { + "signature": "totalPendingRedeemShares()", + "implementation_contract": { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/ExecutionModule.sol", + "line_start": 15, + "line_end": 15, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "navPerShare()": { + "signature": "navPerShare()", + "implementation_contract": { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/ExecutionModule.sol", + "line_start": 16, + "line_end": 16, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "ExecutionModule@src!ExecutionModule.sol": { + "name": "ExecutionModule", + "key": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "path": "src/ExecutionModule.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [ + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "scopes": [ + { + "contract_name": "IVaultAccounting", + "path": "src/ExecutionModule.sol" + }, + { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + } + ], + "functions_declared": { + "constructor(address,address,address,address,address)": { + "signature": "constructor(address,address,address,address,address)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "address", + "address" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 62, + "line_end": 68, + "callees": { + "internal_callees": [ + "Ownable._initializeOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setPeriphery(SafeLegManager,RiskyLegManager,IPriceSource,ISwapRouter02,address)": { + "signature": "setPeriphery(SafeLegManager,RiskyLegManager,IPriceSource,ISwapRouter02,address)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "SafeLegManager", + "RiskyLegManager", + "IPriceSource", + "ISwapRouter02", + "address" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 70, + "line_end": 85, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.safeApprove(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "executeRebalance(int256,uint256)": { + "signature": "executeRebalance(int256,uint256)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "override" + ], + "visibility": "external", + "function_modifiers": [ + "ExecutionModule.onlyVault()" + ], + "arguments": [ + "int256", + "uint256" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 89, + "line_end": 97, + "callees": { + "internal_callees": [ + "ExecutionModule._buyRisky(uint256,uint256)", + "ExecutionModule.onlyVault()", + "ExecutionModule._sellRisky(uint256,uint256)", + "ExecutionModule._sweepIdle()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "freeAssets(uint256)": { + "signature": "freeAssets(uint256)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "override" + ], + "visibility": "external", + "function_modifiers": [ + "ExecutionModule.onlyVault()" + ], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 104, + "line_end": 115, + "callees": { + "internal_callees": [ + "ExecutionModule.onlyVault()", + "ExecutionModule._sellRisky(uint256,uint256)" + ], + "external_callees": [ + "SafeLegManager.value()", + "RiskyLegManager.value()", + "SafeLegManager.provide(uint256,address)" + ], + "library_callees": [ + "FixedPointMathLib.min(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "rebalanceComposition(uint256,uint256)": { + "signature": "rebalanceComposition(uint256,uint256)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 121, + "line_end": 149, + "callees": { + "internal_callees": [ + "ExecutionModule._swap(address,address,uint24,uint256,uint256,address)", + "Ownable.owner()" + ], + "external_callees": [ + "IPriceSource.wstethBuyAllowed()", + "RiskyLegManager.provide(uint256,address)", + "IPriceSource.ethUsdWad()", + "IPriceSource.wstethUsdWad()", + "RiskyLegManager.wstethTargetBps", + "RiskyLegManager.wstethShareBps()", + "RiskyLegManager.provideToken(address,uint256,address)", + "RiskyLegManager.value()" + ], + "library_callees": [ + "FixedPointMathLib.min(uint256,uint256)", + "FixedPointMathLib.divWad(uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)", + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "_buyRisky(uint256,uint256)": { + "signature": "_buyRisky(uint256,uint256)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 153, + "line_end": 169, + "callees": { + "internal_callees": [ + "ExecutionModule._swap(address,address,uint24,uint256,uint256,address)", + "ExecutionModule._vaultFreeIdleWad()" + ], + "external_callees": [ + "SafeLegManager.provide(uint256,address)", + "IPriceSource.ethUsdWad()" + ], + "library_callees": [ + "FixedPointMathLib.min(uint256,uint256)", + "FixedPointMathLib.divWad(uint256,uint256)", + "SafeTransferLib.safeTransferFrom(address,address,address,uint256)", + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "_sellRisky(uint256,uint256)": { + "signature": "_sellRisky(uint256,uint256)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 171, + "line_end": 187, + "callees": { + "internal_callees": [ + "ExecutionModule._swap(address,address,uint24,uint256,uint256,address)" + ], + "external_callees": [ + "IPriceSource.wstethUsdWad()", + "RiskyLegManager.provide(uint256,address)", + "SafeLegManager.onInflow()", + "IPriceSource.ethUsdWad()" + ], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_swap(address,address,uint24,uint256,uint256,address)": { + "signature": "_swap(address,address,uint24,uint256,uint256,address)", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint24", + "uint256", + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/ExecutionModule.sol", + "line_start": 191, + "line_end": 210, + "callees": { + "internal_callees": [], + "external_callees": [ + "ISwapRouter02.exactInputSingle(ISwapRouter02.ExactInputSingleParams)" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_sweepIdle()": { + "signature": "_sweepIdle()", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 215, + "line_end": 221, + "callees": { + "internal_callees": [ + "ExecutionModule._vaultFreeIdleWad()" + ], + "external_callees": [ + "SafeLegManager.onInflow()" + ], + "library_callees": [ + "SafeTransferLib.safeTransferFrom(address,address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "_vaultFreeIdleWad()": { + "signature": "_vaultFreeIdleWad()", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/ExecutionModule.sol", + "line_start": 227, + "line_end": 233, + "callees": { + "internal_callees": [], + "external_callees": [ + "IVaultAccounting.navPerShare()", + "IVaultAccounting.totalReservedPayoutsWad()", + "IVaultAccounting.totalPendingDepositsWad()", + "IVaultAccounting.totalPendingRedeemShares()" + ], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)", + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "slitherConstructorVariables()": { + "signature": "slitherConstructorVariables()", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 29, + "line_end": 234, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 29, + "line_end": 234, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyVault()": { + "signature": "onlyVault()", + "implementation_contract": { + "contract_name": "ExecutionModule", + "path": "src/ExecutionModule.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/ExecutionModule.sol", + "line_start": 57, + "line_end": 60, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "executeRebalance(int256,uint256)": { + "signature": "executeRebalance(int256,uint256)", + "implementation_contract": { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "int256", + "uint256" + ], + "returns": [], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 15, + "line_end": 15, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "freeAssets(uint256)": { + "signature": "freeAssets(uint256)", + "implementation_contract": { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 18, + "line_end": 18, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "state_variables": [ + { + "name": "vault", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 33 + }, + { + "name": "usdc", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 34 + }, + { + "name": "weth", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 35 + }, + { + "name": "wsteth", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 36 + }, + { + "name": "USDC_SCALE", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 37 + }, + { + "name": "safeLeg", + "type_str": "SafeLegManager", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 39 + }, + { + "name": "riskyLeg", + "type_str": "RiskyLegManager", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 40 + }, + { + "name": "priceSource", + "type_str": "IPriceSource", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 41 + }, + { + "name": "router", + "type_str": "ISwapRouter02", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 42 + }, + { + "name": "keeper", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 43 + }, + { + "name": "primaryFee", + "type_str": "uint24", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 45 + }, + { + "name": "fallbackFee", + "type_str": "uint24", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 46 + }, + { + "name": "wstethPoolFee", + "type_str": "uint24", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 47 + } + ], + "events": [ + { + "name": "RebalanceExecuted", + "parameters": [ + { + "name": "deltaWad", + "type_str": "int256", + "indexed": false + }, + { + "name": "usdcMoved", + "type_str": "uint256", + "indexed": false + }, + { + "name": "wethMoved", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 49 + }, + { + "name": "CompositionRebalanced", + "parameters": [ + { + "name": "wethToWstethWad", + "type_str": "int256", + "indexed": false + } + ], + "line_number": 50 + }, + { + "name": "AssetsFreed", + "parameters": [ + { + "name": "amountWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 51 + } + ] + }, + "IChainlinkFeed@src!OracleHub.sol": { + "name": "IChainlinkFeed", + "key": { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + "path": "src/OracleHub.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + } + ], + "functions_declared": { + "latestRoundData()": { + "signature": "latestRoundData()", + "implementation_contract": { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint80", + "int256", + "uint256", + "uint256", + "uint80" + ], + "path": "src/OracleHub.sol", + "line_start": 11, + "line_end": 14, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "decimals()": { + "signature": "decimals()", + "implementation_contract": { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint8" + ], + "path": "src/OracleHub.sol", + "line_start": 15, + "line_end": 15, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IWstETHRate@src!OracleHub.sol": { + "name": "IWstETHRate", + "key": { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + }, + "path": "src/OracleHub.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + } + ], + "functions_declared": { + "stEthPerToken()": { + "signature": "stEthPerToken()", + "implementation_contract": { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/OracleHub.sol", + "line_start": 19, + "line_end": 19, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IUniV3PoolSlot0@src!OracleHub.sol": { + "name": "IUniV3PoolSlot0", + "key": { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + }, + "path": "src/OracleHub.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + } + ], + "functions_declared": { + "slot0()": { + "signature": "slot0()", + "implementation_contract": { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint160", + "int24", + "uint16", + "uint16", + "uint16", + "uint8", + "bool" + ], + "path": "src/OracleHub.sol", + "line_start": 23, + "line_end": 34, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "OracleHub@src!OracleHub.sol": { + "name": "OracleHub", + "key": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "path": "src/OracleHub.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [ + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "scopes": [ + { + "contract_name": "IChainlinkFeed", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IWstETHRate", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IUniV3PoolSlot0", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + } + ], + "functions_declared": { + "constructor(address,address,address,bool,address)": { + "signature": "constructor(address,address,address,bool,address)", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "bool", + "address" + ], + "returns": [], + "path": "src/OracleHub.sol", + "line_start": 67, + "line_end": 73, + "callees": { + "internal_callees": [ + "Ownable._initializeOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setPtAdapter(IPTAdapter)": { + "signature": "setPtAdapter(IPTAdapter)", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "IPTAdapter" + ], + "returns": [], + "path": "src/OracleHub.sol", + "line_start": 75, + "line_end": 77, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setParams(uint256,uint256)": { + "signature": "setParams(uint256,uint256)", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [], + "path": "src/OracleHub.sol", + "line_start": 79, + "line_end": 84, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "refresh()": { + "signature": "refresh()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/OracleHub.sol", + "line_start": 91, + "line_end": 97, + "callees": { + "internal_callees": [ + "OracleHub._freshEthUsd()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ethUsdWad()": { + "signature": "ethUsdWad()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/OracleHub.sol", + "line_start": 101, + "line_end": 106, + "callees": { + "internal_callees": [ + "OracleHub._freshEthUsd()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "wstethUsdWad()": { + "signature": "wstethUsdWad()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/OracleHub.sol", + "line_start": 110, + "line_end": 118, + "callees": { + "internal_callees": [ + "OracleHub._poolWethPerWsteth()", + "OracleHub._basisBps(uint256,uint256)", + "OracleHub.ethUsdWad()" + ], + "external_callees": [ + "IWstETHRate.stEthPerToken()" + ], + "library_callees": [ + "FixedPointMathLib.min(uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "wstethBuyAllowed()": { + "signature": "wstethBuyAllowed()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "src/OracleHub.sol", + "line_start": 120, + "line_end": 126, + "callees": { + "internal_callees": [ + "OracleHub._poolWethPerWsteth()", + "OracleHub._basisBps(uint256,uint256)", + "OracleHub._freshEthUsd()" + ], + "external_callees": [ + "IWstETHRate.stEthPerToken()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "healthy()": { + "signature": "healthy()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "src/OracleHub.sol", + "line_start": 129, + "line_end": 132, + "callees": { + "internal_callees": [ + "OracleHub._freshEthUsd()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rateWad()": { + "signature": "rateWad()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/OracleHub.sol", + "line_start": 136, + "line_end": 138, + "callees": { + "internal_callees": [], + "external_callees": [ + "IPTAdapter.impliedRateWad()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_freshEthUsd()": { + "signature": "_freshEthUsd()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256", + "bool" + ], + "path": "src/OracleHub.sol", + "line_start": 142, + "line_end": 150, + "callees": { + "internal_callees": [], + "external_callees": [ + "IChainlinkFeed.latestRoundData()", + "IChainlinkFeed.decimals()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_poolWethPerWsteth()": { + "signature": "_poolWethPerWsteth()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/OracleHub.sol", + "line_start": 154, + "line_end": 159, + "callees": { + "internal_callees": [], + "external_callees": [ + "IUniV3PoolSlot0.slot0()" + ], + "library_callees": [ + "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_basisBps(uint256,uint256)": { + "signature": "_basisBps(uint256,uint256)", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/OracleHub.sol", + "line_start": 161, + "line_end": 166, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.min(uint256,uint256)", + "FixedPointMathLib.max(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "slitherConstructorVariables()": { + "signature": "slitherConstructorVariables()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/OracleHub.sol", + "line_start": 46, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "OracleHub", + "path": "src/OracleHub.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/OracleHub.sol", + "line_start": 46, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "rateWad()": { + "signature": "rateWad()", + "implementation_contract": { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 23, + "line_end": 23, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ethUsdWad()": { + "signature": "ethUsdWad()", + "implementation_contract": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 7, + "line_end": 7, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "wstethUsdWad()": { + "signature": "wstethUsdWad()", + "implementation_contract": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 8, + "line_end": 8, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "wstethBuyAllowed()": { + "signature": "wstethBuyAllowed()", + "implementation_contract": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 11, + "line_end": 11, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "state_variables": [ + { + "name": "ethUsdFeed", + "type_str": "IChainlinkFeed", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 49 + }, + { + "name": "wsteth", + "type_str": "IWstETHRate", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 50 + }, + { + "name": "wstethWethPool", + "type_str": "IUniV3PoolSlot0", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 51 + }, + { + "name": "ptAdapter", + "type_str": "IPTAdapter", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 52 + }, + { + "name": "wstethIsToken0", + "type_str": "bool", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 53 + }, + { + "name": "maxFeedAge", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 55 + }, + { + "name": "maxBasisBps", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 56 + }, + { + "name": "snapshotEthUsdWad", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 58 + }, + { + "name": "snapshotAt", + "type_str": "uint64", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 59 + } + ], + "events": [ + { + "name": "Refreshed", + "parameters": [ + { + "name": "ethUsdWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 61 + }, + { + "name": "ParamsSet", + "parameters": [ + { + "name": "maxFeedAge", + "type_str": "uint256", + "indexed": false + }, + { + "name": "maxBasisBps", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 62 + } + ] + }, + "IERC20DecimalsLike@src!PendlePTAdapter.sol": { + "name": "IERC20DecimalsLike", + "key": { + "contract_name": "IERC20DecimalsLike", + "path": "src/PendlePTAdapter.sol" + }, + "path": "src/PendlePTAdapter.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IERC20DecimalsLike", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "IERC20DecimalsLike", + "path": "src/PendlePTAdapter.sol" + } + ], + "functions_declared": { + "decimals()": { + "signature": "decimals()", + "implementation_contract": { + "contract_name": "IERC20DecimalsLike", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint8" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 32, + "line_end": 32, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IERC4626Like@src!PendlePTAdapter.sol": { + "name": "IERC4626Like", + "key": { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + }, + "path": "src/PendlePTAdapter.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IERC20DecimalsLike", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + } + ], + "functions_declared": { + "asset()": { + "signature": "asset()", + "implementation_contract": { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 36, + "line_end": 36, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "redeem(uint256,address,address)": { + "signature": "redeem(uint256,address,address)", + "implementation_contract": { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 37, + "line_end": 37, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "PendlePTAdapter@src!PendlePTAdapter.sol": { + "name": "PendlePTAdapter", + "key": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "path": "src/PendlePTAdapter.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [ + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "scopes": [ + { + "contract_name": "IERC20DecimalsLike", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "IERC4626Like", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + } + ], + "functions_declared": { + "constructor(address,address,address,address,address,uint8,uint32,address)": { + "signature": "constructor(address,address,address,address,address,uint8,uint32,address)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address", + "address", + "address", + "uint8", + "uint32", + "address" + ], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 81, + "line_end": 101, + "callees": { + "internal_callees": [ + "Ownable._initializeOwner(address)", + "PendlePTAdapter._bindMarket(address)" + ], + "external_callees": [ + "IERC4626Like.asset()" + ], + "library_callees": [ + "SafeTransferLib.safeApprove(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "setManager(address)": { + "signature": "setManager(address)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 103, + "line_end": 106, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setMaxSlippage(uint256)": { + "signature": "setMaxSlippage(uint256)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 108, + "line_end": 112, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 117, + "line_end": 121, + "callees": { + "internal_callees": [ + "PendlePTAdapter._rate()" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)", + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "impliedRateWad()": { + "signature": "impliedRateWad()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 125, + "line_end": 131, + "callees": { + "internal_callees": [ + "PendlePTAdapter._rate()" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)", + "FixedPointMathLib.lnWad(int256)" + ], + "has_low_level_calls": false + } + }, + "deposit(uint256)": { + "signature": "deposit(uint256)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "override" + ], + "visibility": "external", + "function_modifiers": [ + "PendlePTAdapter.onlyManager()" + ], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 133, + "line_end": 135, + "callees": { + "internal_callees": [ + "PendlePTAdapter.onlyManager()", + "PendlePTAdapter._buyPt(uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "withdraw(uint256,address)": { + "signature": "withdraw(uint256,address)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "override" + ], + "visibility": "external", + "function_modifiers": [ + "PendlePTAdapter.onlyManager()" + ], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 137, + "line_end": 149, + "callees": { + "internal_callees": [ + "PendlePTAdapter.onlyManager()", + "PendlePTAdapter._minAssetsOut(uint256,uint256)", + "PendlePTAdapter._exitPt(uint256,bool,uint256)", + "PendlePTAdapter._rate()" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)", + "SafeTransferLib.safeTransfer(address,address,uint256)", + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "rollToMarket(address)": { + "signature": "rollToMarket(address)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "PendlePTAdapter.onlyManager()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 157, + "line_end": 170, + "callees": { + "internal_callees": [ + "PendlePTAdapter.onlyManager()", + "PendlePTAdapter._exitPt(uint256,bool,uint256)", + "PendlePTAdapter._bindMarket(address)", + "PendlePTAdapter._rate()", + "PendlePTAdapter._minAssetsOut(uint256,uint256)", + "PendlePTAdapter._buyPt(uint256)" + ], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "_bindMarket(address)": { + "signature": "_bindMarket(address)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 174, + "line_end": 192, + "callees": { + "internal_callees": [], + "external_callees": [ + "IERC20DecimalsLike.decimals()", + "IPendlePYLpOracle.getOracleState(address,uint32)", + "IStandardizedYield.isValidTokenOut(address)", + "IPendleMarket.readTokens()", + "IPendleMarket.increaseObservationsCardinalityNext(uint16)", + "IPendleMarket.expiry()", + "IStandardizedYield.isValidTokenIn(address)" + ], + "library_callees": [ + "SafeTransferLib.safeApprove(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "_buyPt(uint256)": { + "signature": "_buyPt(uint256)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 194, + "line_end": 211, + "callees": { + "internal_callees": [ + "PendlePTAdapter._emptyLimit()", + "PendlePTAdapter._rate()" + ], + "external_callees": [ + "IPendleRouter.swapExactTokenForPt(address,address,uint256,ApproxParams,TokenInput,LimitOrderData)" + ], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_minAssetsOut(uint256,uint256)": { + "signature": "_minAssetsOut(uint256,uint256)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 213, + "line_end": 216, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "_rate()": { + "signature": "_rate()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 218, + "line_end": 220, + "callees": { + "internal_callees": [], + "external_callees": [ + "IPendlePYLpOracle.getPtToAssetRate(address,uint32)" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_exitPt(uint256,bool,uint256)": { + "signature": "_exitPt(uint256,bool,uint256)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "bool", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 226, + "line_end": 242, + "callees": { + "internal_callees": [ + "PendlePTAdapter._tokenOutput(uint256)", + "PendlePTAdapter._emptyLimit()" + ], + "external_callees": [ + "IERC4626Like.redeem(uint256,address,address)", + "IPendleRouter.swapExactPtForToken(address,address,uint256,TokenOutput,LimitOrderData)", + "IPendleRouter.redeemPyToToken(address,address,uint256,TokenOutput)" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_tokenOutput(uint256)": { + "signature": "_tokenOutput(uint256)", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "TokenOutput" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 244, + "line_end": 252, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_emptyLimit()": { + "signature": "_emptyLimit()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "LimitOrderData" + ], + "path": "src/PendlePTAdapter.sol", + "line_start": 254, + "line_end": 254, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorVariables()": { + "signature": "slitherConstructorVariables()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 40, + "line_end": 255, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 40, + "line_end": 255, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyManager()": { + "signature": "onlyManager()", + "implementation_contract": { + "contract_name": "PendlePTAdapter", + "path": "src/PendlePTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/PendlePTAdapter.sol", + "line_start": 76, + "line_end": 79, + "callees": { + "internal_callees": [ + "Ownable.owner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 11, + "line_end": 11, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "impliedRateWad()": { + "signature": "impliedRateWad()", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 14, + "line_end": 14, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "deposit(uint256)": { + "signature": "deposit(uint256)", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 18, + "line_end": 18, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "withdraw(uint256,address)": { + "signature": "withdraw(uint256,address)", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 22, + "line_end": 22, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "maturity()": { + "signature": "maturity()", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 25, + "line_end": 25, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "state_variables": [ + { + "name": "router", + "type_str": "IPendleRouter", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 44 + }, + { + "name": "oracle", + "type_str": "IPendlePYLpOracle", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 45 + }, + { + "name": "asset", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 46 + }, + { + "name": "redeemToken", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 49 + }, + { + "name": "assetScale", + "type_str": "uint256", + "visibility": "internal", + "is_constant": false, + "is_immutable": true, + "line_number": 50 + }, + { + "name": "twapDuration", + "type_str": "uint32", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 51 + }, + { + "name": "market", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 53 + }, + { + "name": "pt", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 54 + }, + { + "name": "yt", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 55 + }, + { + "name": "maturity", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 56 + }, + { + "name": "ptScale", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 57 + }, + { + "name": "manager", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 59 + }, + { + "name": "maxSlippageBps", + "type_str": "uint256", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 60 + }, + { + "name": "YEAR", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 62 + } + ], + "events": [ + { + "name": "Deposited", + "parameters": [ + { + "name": "assets", + "type_str": "uint256", + "indexed": false + }, + { + "name": "ptOut", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 64 + }, + { + "name": "Withdrawn", + "parameters": [ + { + "name": "amountWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "ptIn", + "type_str": "uint256", + "indexed": false + }, + { + "name": "assetsOut", + "type_str": "uint256", + "indexed": false + }, + { + "name": "viaRedemption", + "type_str": "bool", + "indexed": false + } + ], + "line_number": 65 + }, + { + "name": "Rolled", + "parameters": [ + { + "name": "fromMarket", + "type_str": "address", + "indexed": true + }, + { + "name": "toMarket", + "type_str": "address", + "indexed": true + }, + { + "name": "assetsMoved", + "type_str": "uint256", + "indexed": false + }, + { + "name": "ptOut", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 66 + }, + { + "name": "SlippageSet", + "parameters": [ + { + "name": "bps", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 67 + } + ] + }, + "RiskyLegManager@src!RiskyLegManager.sol": { + "name": "RiskyLegManager", + "key": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "path": "src/RiskyLegManager.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [ + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "scopes": [ + { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + } + ], + "functions_declared": { + "constructor(address,address,address)": { + "signature": "constructor(address,address,address)", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "address" + ], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 44, + "line_end": 48, + "callees": { + "internal_callees": [ + "Ownable._initializeOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setPeriphery(IPriceSource,address,address)": { + "signature": "setPeriphery(IPriceSource,address,address)", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "IPriceSource", + "address", + "address" + ], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 50, + "line_end": 54, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setWstethTarget(uint16)": { + "signature": "setWstethTarget(uint16)", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "uint16" + ], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 56, + "line_end": 60, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/RiskyLegManager.sol", + "line_start": 64, + "line_end": 66, + "callees": { + "internal_callees": [ + "RiskyLegManager._wethBal()", + "RiskyLegManager._wstethBal()" + ], + "external_callees": [ + "IPriceSource.ethUsdWad()", + "IPriceSource.wstethUsdWad()" + ], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "wstethShareBps()": { + "signature": "wstethShareBps()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/RiskyLegManager.sol", + "line_start": 70, + "line_end": 74, + "callees": { + "internal_callees": [ + "RiskyLegManager.value()", + "RiskyLegManager._wstethBal()" + ], + "external_callees": [ + "IPriceSource.wstethUsdWad()" + ], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "provide(uint256,address)": { + "signature": "provide(uint256,address)", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "RiskyLegManager.onlyFlow()" + ], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256", + "uint256" + ], + "path": "src/RiskyLegManager.sol", + "line_start": 81, + "line_end": 100, + "callees": { + "internal_callees": [ + "RiskyLegManager._wethBal()", + "RiskyLegManager._wstethBal()", + "RiskyLegManager.onlyFlow()" + ], + "external_callees": [ + "IPriceSource.wstethUsdWad()", + "IPriceSource.ethUsdWad()" + ], + "library_callees": [ + "FixedPointMathLib.divWad(uint256,uint256)", + "SafeTransferLib.safeTransfer(address,address,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "provideToken(address,uint256,address)": { + "signature": "provideToken(address,uint256,address)", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "RiskyLegManager.onlyFlow()" + ], + "arguments": [ + "address", + "uint256", + "address" + ], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 103, + "line_end": 106, + "callees": { + "internal_callees": [ + "RiskyLegManager.onlyFlow()" + ], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.safeTransfer(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "_wethBal()": { + "signature": "_wethBal()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/RiskyLegManager.sol", + "line_start": 110, + "line_end": 112, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "_wstethBal()": { + "signature": "_wstethBal()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/RiskyLegManager.sol", + "line_start": 114, + "line_end": 116, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "slitherConstructorVariables()": { + "signature": "slitherConstructorVariables()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 18, + "line_end": 117, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 18, + "line_end": 117, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyFlow()": { + "signature": "onlyFlow()", + "implementation_contract": { + "contract_name": "RiskyLegManager", + "path": "src/RiskyLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/RiskyLegManager.sol", + "line_start": 39, + "line_end": 42, + "callees": { + "internal_callees": [ + "Ownable.owner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 6, + "line_end": 6, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "state_variables": [ + { + "name": "weth", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 22 + }, + { + "name": "wsteth", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 23 + }, + { + "name": "priceSource", + "type_str": "IPriceSource", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 24 + }, + { + "name": "executor", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 25 + }, + { + "name": "keeper", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 26 + }, + { + "name": "wstethTargetBps", + "type_str": "uint16", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 29 + }, + { + "name": "WSTETH_CAP_BPS", + "type_str": "uint16", + "visibility": "public", + "is_constant": true, + "is_immutable": false, + "line_number": 30 + } + ], + "events": [ + { + "name": "Provided", + "parameters": [ + { + "name": "to", + "type_str": "address", + "indexed": true + }, + { + "name": "amountWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "wethOut", + "type_str": "uint256", + "indexed": false + }, + { + "name": "wstethOut", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 32 + }, + { + "name": "WstethTargetSet", + "parameters": [ + { + "name": "bps", + "type_str": "uint16", + "indexed": false + } + ], + "line_number": 33 + } + ] + }, + "INavSource@src!SafeLegManager.sol": { + "name": "INavSource", + "key": { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + }, + "path": "src/SafeLegManager.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + } + ], + "functions_declared": { + "totalNav()": { + "signature": "totalNav()", + "implementation_contract": { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/SafeLegManager.sol", + "line_start": 11, + "line_end": 11, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "SafeLegManager@src!SafeLegManager.sol": { + "name": "SafeLegManager", + "key": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "path": "src/SafeLegManager.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": false, + "directly_inherits": [ + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + } + ], + "scopes": [ + { + "contract_name": "INavSource", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "SafeTransferLib", + "path": "lib/solady/src/utils/SafeTransferLib.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + } + ], + "functions_declared": { + "constructor(address,address,uint8,address)": { + "signature": "constructor(address,address,uint8,address)", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint8", + "address" + ], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 53, + "line_end": 58, + "callees": { + "internal_callees": [ + "Ownable._initializeOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setPeriphery(IPTAdapter,address,address)": { + "signature": "setPeriphery(IPTAdapter,address,address)", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "IPTAdapter", + "address", + "address" + ], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 60, + "line_end": 64, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "setBands(uint16,uint16,uint16)": { + "signature": "setBands(uint16,uint16,uint16)", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "uint16", + "uint16", + "uint16" + ], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 66, + "line_end": 72, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [ + "override", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/SafeLegManager.sol", + "line_start": 76, + "line_end": 78, + "callees": { + "internal_callees": [ + "SafeLegManager.bufferWad()" + ], + "external_callees": [ + "IPTAdapter.value()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "bufferWad()": { + "signature": "bufferWad()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/SafeLegManager.sol", + "line_start": 80, + "line_end": 82, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "SafeTransferLib.balanceOf(address,address)" + ], + "has_low_level_calls": false + } + }, + "impliedRateWad()": { + "signature": "impliedRateWad()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/SafeLegManager.sol", + "line_start": 84, + "line_end": 86, + "callees": { + "internal_callees": [], + "external_callees": [ + "IPTAdapter.impliedRateWad()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onInflow()": { + "signature": "onInflow()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "SafeLegManager.onlyFlow()" + ], + "arguments": [], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 92, + "line_end": 105, + "callees": { + "internal_callees": [ + "SafeLegManager.bufferWad()", + "SafeLegManager.onlyFlow()", + "SafeLegManager._bandWad(uint256)" + ], + "external_callees": [ + "IPTAdapter.deposit(uint256)" + ], + "library_callees": [ + "SafeTransferLib.safeTransfer(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "provide(uint256,address)": { + "signature": "provide(uint256,address)", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "SafeLegManager.onlyFlow()" + ], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/SafeLegManager.sol", + "line_start": 112, + "line_end": 137, + "callees": { + "internal_callees": [ + "SafeLegManager.value()", + "SafeLegManager.bufferWad()", + "SafeLegManager.onlyFlow()", + "SafeLegManager._bandWad(uint256)" + ], + "external_callees": [ + "IPTAdapter.value()", + "IPTAdapter.withdraw(uint256,address)" + ], + "library_callees": [ + "SafeTransferLib.safeTransfer(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "rebalanceBuffer()": { + "signature": "rebalanceBuffer()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [ + "SafeLegManager.onlyFlow()" + ], + "arguments": [], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 141, + "line_end": 161, + "callees": { + "internal_callees": [ + "SafeLegManager.bufferWad()", + "SafeLegManager.onlyFlow()", + "SafeLegManager._bandWad(uint256)" + ], + "external_callees": [ + "IPTAdapter.withdraw(uint256,address)", + "IPTAdapter.deposit(uint256)", + "IPTAdapter.value()" + ], + "library_callees": [ + "SafeTransferLib.safeTransfer(address,address,uint256)" + ], + "has_low_level_calls": false + } + }, + "_bandWad(uint256)": { + "signature": "_bandWad(uint256)", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/SafeLegManager.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [ + "INavSource.totalNav()" + ], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorVariables()": { + "signature": "slitherConstructorVariables()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 22, + "line_end": 168, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 22, + "line_end": 168, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyFlow()": { + "signature": "onlyFlow()", + "implementation_contract": { + "contract_name": "SafeLegManager", + "path": "src/SafeLegManager.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/SafeLegManager.sol", + "line_start": 46, + "line_end": 51, + "callees": { + "internal_callees": [ + "Ownable.owner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": { + "_guardInitializeOwner()": { + "signature": "_guardInitializeOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 85, + "line_end": 85, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_initializeOwner(address)": { + "signature": "_initializeOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 94, + "line_end": 121, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_setOwner(address)": { + "signature": "_setOwner(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 124, + "line_end": 148, + "callees": { + "internal_callees": [ + "Ownable._guardInitializeOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_checkOwner()": { + "signature": "_checkOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 151, + "line_end": 160, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "_ownershipHandoverValidFor()": { + "signature": "_ownershipHandoverValidFor()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint64" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 165, + "line_end": 167, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "transferOwnership(address)": { + "signature": "transferOwnership(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 174, + "line_end": 183, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "renounceOwnership()": { + "signature": "renounceOwnership()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 186, + "line_end": 188, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "requestOwnershipHandover()": { + "signature": "requestOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 192, + "line_end": 205, + "callees": { + "internal_callees": [ + "Ownable._ownershipHandoverValidFor()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "cancelOwnershipHandover()": { + "signature": "cancelOwnershipHandover()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 208, + "line_end": 218, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "completeOwnershipHandover(address)": { + "signature": "completeOwnershipHandover(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "payable" + ], + "visibility": "public", + "function_modifiers": [ + "Ownable.onlyOwner()" + ], + "arguments": [ + "address" + ], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 222, + "line_end": 238, + "callees": { + "internal_callees": [ + "Ownable.onlyOwner()", + "Ownable._setOwner(address)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "owner()": { + "signature": "owner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 245, + "line_end": 250, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "ownershipHandoverExpiresAt(address)": { + "signature": "ownershipHandoverExpiresAt(address)", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual", + "view" + ], + "visibility": "public", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "uint256" + ], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 253, + "line_end": 267, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 6, + "line_end": 6, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "onlyOwner()": { + "signature": "onlyOwner()", + "implementation_contract": { + "contract_name": "Ownable", + "path": "lib/solady/src/auth/Ownable.sol" + }, + "solidity_modifiers": [ + "virtual" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "lib/solady/src/auth/Ownable.sol", + "line_start": 274, + "line_end": 277, + "callees": { + "internal_callees": [ + "Ownable._checkOwner()" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "state_variables": [ + { + "name": "vault", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 25 + }, + { + "name": "asset", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": true, + "line_number": 26 + }, + { + "name": "assetScale", + "type_str": "uint256", + "visibility": "internal", + "is_constant": false, + "is_immutable": true, + "line_number": 27 + }, + { + "name": "pt", + "type_str": "IPTAdapter", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 29 + }, + { + "name": "executor", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 30 + }, + { + "name": "keeper", + "type_str": "address", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 31 + }, + { + "name": "bufferTargetBps", + "type_str": "uint16", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 33 + }, + { + "name": "bufferMinBps", + "type_str": "uint16", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 34 + }, + { + "name": "bufferMaxBps", + "type_str": "uint16", + "visibility": "public", + "is_constant": false, + "is_immutable": false, + "line_number": 35 + } + ], + "events": [ + { + "name": "Inflow", + "parameters": [ + { + "name": "assetsWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "toBufferWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "toPtWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 37 + }, + { + "name": "Provided", + "parameters": [ + { + "name": "to", + "type_str": "address", + "indexed": true + }, + { + "name": "amountWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "fromBufferWad", + "type_str": "uint256", + "indexed": false + }, + { + "name": "fromPtWad", + "type_str": "uint256", + "indexed": false + } + ], + "line_number": 38 + }, + { + "name": "BufferRebalanced", + "parameters": [ + { + "name": "deltaWad", + "type_str": "int256", + "indexed": false + } + ], + "line_number": 39 + }, + { + "name": "BandsSet", + "parameters": [ + { + "name": "minBps", + "type_str": "uint16", + "indexed": false + }, + { + "name": "targetBps", + "type_str": "uint16", + "indexed": false + }, + { + "name": "maxBps", + "type_str": "uint16", + "indexed": false + } + ], + "line_number": 40 + } + ] + }, + "IPriceSource@src!interfaces!IExecutionPeriphery.sol": { + "name": "IPriceSource", + "key": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "path": "src/interfaces/IExecutionPeriphery.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + } + ], + "functions_declared": { + "ethUsdWad()": { + "signature": "ethUsdWad()", + "implementation_contract": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 7, + "line_end": 7, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "wstethUsdWad()": { + "signature": "wstethUsdWad()", + "implementation_contract": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 8, + "line_end": 8, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "wstethBuyAllowed()": { + "signature": "wstethBuyAllowed()", + "implementation_contract": { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 11, + "line_end": 11, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "ISwapRouter02@src!interfaces!IExecutionPeriphery.sol": { + "name": "ISwapRouter02", + "key": { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "path": "src/interfaces/IExecutionPeriphery.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPriceSource", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + } + ], + "functions_declared": { + "exactInputSingle(ISwapRouter02.ExactInputSingleParams)": { + "signature": "exactInputSingle(ISwapRouter02.ExactInputSingleParams)", + "implementation_contract": { + "contract_name": "ISwapRouter02", + "path": "src/interfaces/IExecutionPeriphery.sol" + }, + "solidity_modifiers": [ + "payable" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "ISwapRouter02.ExactInputSingleParams" + ], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IExecutionPeriphery.sol", + "line_start": 26, + "line_end": 26, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IPTAdapter@src!interfaces!IPTAdapter.sol": { + "name": "IPTAdapter", + "key": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "path": "src/interfaces/IPTAdapter.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + } + ], + "functions_declared": { + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 11, + "line_end": 11, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "impliedRateWad()": { + "signature": "impliedRateWad()", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 14, + "line_end": 14, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "deposit(uint256)": { + "signature": "deposit(uint256)", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 18, + "line_end": 18, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "withdraw(uint256,address)": { + "signature": "withdraw(uint256,address)", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256", + "address" + ], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 22, + "line_end": 22, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "maturity()": { + "signature": "maturity()", + "implementation_contract": { + "contract_name": "IPTAdapter", + "path": "src/interfaces/IPTAdapter.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IPTAdapter.sol", + "line_start": 25, + "line_end": 25, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "ILeg@src!interfaces!IVaultPeriphery.sol": { + "name": "ILeg", + "key": { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "path": "src/interfaces/IVaultPeriphery.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + } + ], + "functions_declared": { + "value()": { + "signature": "value()", + "implementation_contract": { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 6, + "line_end": 6, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IExecutionModule@src!interfaces!IVaultPeriphery.sol": { + "name": "IExecutionModule", + "key": { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "path": "src/interfaces/IVaultPeriphery.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + } + ], + "functions_declared": { + "executeRebalance(int256,uint256)": { + "signature": "executeRebalance(int256,uint256)", + "implementation_contract": { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "int256", + "uint256" + ], + "returns": [], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 15, + "line_end": 15, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "freeAssets(uint256)": { + "signature": "freeAssets(uint256)", + "implementation_contract": { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 18, + "line_end": 18, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IRateOracle@src!interfaces!IVaultPeriphery.sol": { + "name": "IRateOracle", + "key": { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "path": "src/interfaces/IVaultPeriphery.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "ILeg", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IExecutionModule", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + } + ], + "functions_declared": { + "rateWad()": { + "signature": "rateWad()", + "implementation_contract": { + "contract_name": "IRateOracle", + "path": "src/interfaces/IVaultPeriphery.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/IVaultPeriphery.sol", + "line_start": 23, + "line_end": 23, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IPendleRouter@src!interfaces!pendle!IPendle.sol": { + "name": "IPendleRouter", + "key": { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "path": "src/interfaces/pendle/IPendle.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + } + ], + "functions_declared": { + "swapExactTokenForPt(address,address,uint256,ApproxParams,TokenInput,LimitOrderData)": { + "signature": "swapExactTokenForPt(address,address,uint256,ApproxParams,TokenInput,LimitOrderData)", + "implementation_contract": { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "payable" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256", + "ApproxParams", + "TokenInput", + "LimitOrderData" + ], + "returns": [ + "uint256", + "uint256", + "uint256" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 88, + "line_end": 95, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "swapExactPtForToken(address,address,uint256,TokenOutput,LimitOrderData)": { + "signature": "swapExactPtForToken(address,address,uint256,TokenOutput,LimitOrderData)", + "implementation_contract": { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256", + "TokenOutput", + "LimitOrderData" + ], + "returns": [ + "uint256", + "uint256", + "uint256" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 97, + "line_end": 103, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "redeemPyToToken(address,address,uint256,TokenOutput)": { + "signature": "redeemPyToToken(address,address,uint256,TokenOutput)", + "implementation_contract": { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address", + "address", + "uint256", + "TokenOutput" + ], + "returns": [ + "uint256", + "uint256" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 105, + "line_end": 107, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IPendleMarket@src!interfaces!pendle!IPendle.sol": { + "name": "IPendleMarket", + "key": { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "path": "src/interfaces/pendle/IPendle.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + } + ], + "functions_declared": { + "readTokens()": { + "signature": "readTokens()", + "implementation_contract": { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "address", + "address", + "address" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 111, + "line_end": 111, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "increaseObservationsCardinalityNext(uint16)": { + "signature": "increaseObservationsCardinalityNext(uint16)", + "implementation_contract": { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "uint16" + ], + "returns": [], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 112, + "line_end": 112, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "expiry()": { + "signature": "expiry()", + "implementation_contract": { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "uint256" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 113, + "line_end": 113, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "isExpired()": { + "signature": "isExpired()", + "implementation_contract": { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [], + "returns": [ + "bool" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 114, + "line_end": 114, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IStandardizedYield@src!interfaces!pendle!IPendle.sol": { + "name": "IStandardizedYield", + "key": { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "path": "src/interfaces/pendle/IPendle.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + } + ], + "functions_declared": { + "isValidTokenIn(address)": { + "signature": "isValidTokenIn(address)", + "implementation_contract": { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "bool" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 118, + "line_end": 118, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "isValidTokenOut(address)": { + "signature": "isValidTokenOut(address)", + "implementation_contract": { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address" + ], + "returns": [ + "bool" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 119, + "line_end": 119, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "IPendlePYLpOracle@src!interfaces!pendle!IPendle.sol": { + "name": "IPendlePYLpOracle", + "key": { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "path": "src/interfaces/pendle/IPendle.sol", + "is_abstract": false, + "is_fully_implemented": false, + "is_interface": true, + "is_library": false, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "IPendleRouter", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendleMarket", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IStandardizedYield", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + } + ], + "functions_declared": { + "getPtToAssetRate(address,uint32)": { + "signature": "getPtToAssetRate(address,uint32)", + "implementation_contract": { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address", + "uint32" + ], + "returns": [ + "uint256" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 123, + "line_end": 123, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "getOracleState(address,uint32)": { + "signature": "getOracleState(address,uint32)", + "implementation_contract": { + "contract_name": "IPendlePYLpOracle", + "path": "src/interfaces/pendle/IPendle.sol" + }, + "solidity_modifiers": [ + "view" + ], + "visibility": "external", + "function_modifiers": [], + "arguments": [ + "address", + "uint32" + ], + "returns": [ + "bool", + "uint16", + "bool" + ], + "path": "src/interfaces/pendle/IPendle.sol", + "line_start": 124, + "line_end": 127, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + }, + "CPPIMath@src!libraries!CPPIMath.sol": { + "name": "CPPIMath", + "key": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "path": "src/libraries/CPPIMath.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": true, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + } + ], + "functions_declared": { + "floorValue(uint256,uint256,uint256)": { + "signature": "floorValue(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/CPPIMath.sol", + "line_start": 22, + "line_end": 26, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.expWad(int256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "cushion(uint256,uint256)": { + "signature": "cushion(uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/CPPIMath.sol", + "line_start": 28, + "line_end": 30, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "targetRisky(uint256,uint256,uint256)": { + "signature": "targetRisky(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/CPPIMath.sol", + "line_start": 33, + "line_end": 36, + "callees": { + "internal_callees": [ + "CPPIMath.cushion(uint256,uint256)" + ], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.min(uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "driftBps(uint256,uint256,uint256)": { + "signature": "driftBps(uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/CPPIMath.sol", + "line_start": 39, + "line_end": 43, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.dist(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "cushionBps(uint256,uint256)": { + "signature": "cushionBps(uint256,uint256)", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/CPPIMath.sol", + "line_start": 46, + "line_end": 49, + "callees": { + "internal_callees": [ + "CPPIMath.cushion(uint256,uint256)" + ], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "maxSurvivableGapBps(uint256)": { + "signature": "maxSurvivableGapBps(uint256)", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/CPPIMath.sol", + "line_start": 53, + "line_end": 55, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/libraries/CPPIMath.sol", + "line_start": 14, + "line_end": 56, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "WAD", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 15 + }, + { + "name": "BPS", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 16 + }, + { + "name": "YEAR", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 17 + } + ], + "events": [] + }, + "FloorPolicy@src!libraries!FloorPolicy.sol": { + "name": "FloorPolicy", + "key": { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + "path": "src/libraries/FloorPolicy.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": true, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + { + "contract_name": "FixedPointMathLib", + "path": "lib/solady/src/utils/FixedPointMathLib.sol" + }, + { + "contract_name": "CPPIMath", + "path": "src/libraries/CPPIMath.sol" + }, + { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + } + ], + "functions_declared": { + "validate(FloorPolicy.Config)": { + "signature": "validate(FloorPolicy.Config)", + "implementation_contract": { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "FloorPolicy.Config" + ], + "returns": [], + "path": "src/libraries/FloorPolicy.sol", + "line_start": 50, + "line_end": 61, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "initialize(FloorPolicy.State,FloorPolicy.Config,uint256)": { + "signature": "initialize(FloorPolicy.State,FloorPolicy.Config,uint256)", + "implementation_contract": { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "FloorPolicy.State", + "FloorPolicy.Config", + "uint256" + ], + "returns": [], + "path": "src/libraries/FloorPolicy.sol", + "line_start": 63, + "line_end": 68, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "currentFloor(FloorPolicy.State,FloorPolicy.Config,uint256,uint256,uint256)": { + "signature": "currentFloor(FloorPolicy.State,FloorPolicy.Config,uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "FloorPolicy.State", + "FloorPolicy.Config", + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/FloorPolicy.sol", + "line_start": 74, + "line_end": 103, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "CPPIMath.floorValue(uint256,uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "previewFloor(FloorPolicy.State,FloorPolicy.Config,uint256,uint256,uint256)": { + "signature": "previewFloor(FloorPolicy.State,FloorPolicy.Config,uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "FloorPolicy.State", + "FloorPolicy.Config", + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "uint256" + ], + "path": "src/libraries/FloorPolicy.sol", + "line_start": 106, + "line_end": 129, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [ + "CPPIMath.floorValue(uint256,uint256,uint256)", + "FixedPointMathLib.mulWad(uint256,uint256)" + ], + "has_low_level_calls": false + } + }, + "slitherConstructorConstantVariables()": { + "signature": "slitherConstructorConstantVariables()", + "implementation_contract": { + "contract_name": "FloorPolicy", + "path": "src/libraries/FloorPolicy.sol" + }, + "solidity_modifiers": [], + "visibility": "internal", + "function_modifiers": [], + "arguments": [], + "returns": [], + "path": "src/libraries/FloorPolicy.sol", + "line_start": 15, + "line_end": 130, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [ + { + "name": "MAX_STEPS_PER_UPDATE", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 44 + }, + { + "name": "MIN_STEP", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 45 + }, + { + "name": "WAD", + "type_str": "uint256", + "visibility": "internal", + "is_constant": true, + "is_immutable": false, + "line_number": 46 + } + ], + "events": [] + }, + "RebalancePolicy@src!libraries!RebalancePolicy.sol": { + "name": "RebalancePolicy", + "key": { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + "path": "src/libraries/RebalancePolicy.sol", + "is_abstract": false, + "is_fully_implemented": true, + "is_interface": false, + "is_library": true, + "directly_inherits": [], + "scopes": [ + { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + } + ], + "functions_declared": { + "validate(RebalancePolicy.Config)": { + "signature": "validate(RebalancePolicy.Config)", + "implementation_contract": { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "RebalancePolicy.Config" + ], + "returns": [], + "path": "src/libraries/RebalancePolicy.sol", + "line_start": 29, + "line_end": 33, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + }, + "classify(RebalancePolicy.Config,uint256,uint256,uint256,uint256)": { + "signature": "classify(RebalancePolicy.Config,uint256,uint256,uint256,uint256)", + "implementation_contract": { + "contract_name": "RebalancePolicy", + "path": "src/libraries/RebalancePolicy.sol" + }, + "solidity_modifiers": [ + "view", + "pure" + ], + "visibility": "internal", + "function_modifiers": [], + "arguments": [ + "RebalancePolicy.Config", + "uint256", + "uint256", + "uint256", + "uint256" + ], + "returns": [ + "RebalancePolicy.Trigger" + ], + "path": "src/libraries/RebalancePolicy.sol", + "line_start": 38, + "line_end": 54, + "callees": { + "internal_callees": [], + "external_callees": [], + "library_callees": [], + "has_low_level_calls": false + } + } + }, + "functions_inherited": {}, + "state_variables": [], + "events": [] + } + }, + "project_dir": "/Users/jayeshyadav/Desktop/github/cppi-vault", + "detector_results": { + "arbitrary-send-erc20": [ + { + "detector_name": "arbitrary-send-erc20", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High", + "description": "ExecutionModule._sweepIdle() (src/ExecutionModule.sol#215-221) uses arbitrary from in transferFrom: usdc.safeTransferFrom(vault,address(safeLeg),assets) (src/ExecutionModule.sol#219)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 215, + "end_line": 221 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 219, + "end_line": 219 + } + ] + }, + { + "detector_name": "arbitrary-send-erc20", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High", + "description": "ExecutionModule._buyRisky(uint256,uint256) (src/ExecutionModule.sol#153-169) uses arbitrary from in transferFrom: usdc.safeTransferFrom(vault,address(this),fromIdleUsdc) (src/ExecutionModule.sol#158)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 153, + "end_line": 169 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 158, + "end_line": 158 + } + ] + } + ], + "assembly": [ + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.mulWadUp(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#109-122) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#111-121)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 109, + "end_line": 122 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 111, + "end_line": 121 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.fullMulEq(uint256,uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#441-450) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#447-449)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 441, + "end_line": 450 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 447, + "end_line": 449 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawDivWad(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#160-165) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#162-164)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 160, + "end_line": 165 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 162, + "end_line": 164 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.balanceOf(address,address) (lib/solady/src/utils/SafeTransferLib.sol#442-456) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#444-455)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 442, + "end_line": 456 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 444, + "end_line": 455 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.trySafeTransferFrom(address,address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#277-295) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#282-294)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 277, + "end_line": 295 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 282, + "end_line": 294 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1010-1042)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1010, + "end_line": 1042 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeTransferETH(address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#95-103) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#97-102)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 95, + "end_line": 103 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 97, + "end_line": 102 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.gcd(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1164-1173) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1166-1172)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1164, + "end_line": 1173 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1166, + "end_line": 1172 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.totalSupply(address) (lib/solady/src/utils/SafeTransferLib.sol#481-493) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#483-492)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 481, + "end_line": 493 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 483, + "end_line": 492 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.trySafeTransferETH(address,uint256,uint256) (lib/solady/src/utils/SafeTransferLib.sol#179-187) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#184-186)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 179, + "end_line": 187 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 184, + "end_line": 186 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.log2Up(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#940-946) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#943-945)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 940, + "end_line": 946 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 943, + "end_line": 945 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.max(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1126-1131) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1128-1130)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1126, + "end_line": 1131 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1128, + "end_line": 1130 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (lib/solady/src/tokens/ERC20.sol#389-469) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#400-406)\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#413-468)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 389, + "end_line": 469 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 400, + "end_line": 406 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 413, + "end_line": 468 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.lambertW0Wad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#353-434) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#368-377)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#381-386)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#391-394)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#399-401)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#408-412)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#417-419)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#425-427)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#430-432)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 353, + "end_line": 434 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 368, + "end_line": 377 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 381, + "end_line": 386 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 391, + "end_line": 394 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 399, + "end_line": 401 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 408, + "end_line": 412 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 417, + "end_line": 419 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 425, + "end_line": 427 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 430, + "end_line": 432 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20._incrementNonce(address) (lib/solady/src/tokens/ERC20.sol#363-371) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#365-370)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 363, + "end_line": 371 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 365, + "end_line": 370 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.permit2Lockdown(address,address) (lib/solady/src/utils/SafeTransferLib.sol#668-682) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#670-681)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 668, + "end_line": 682 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 670, + "end_line": 681 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.lnWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#277-347) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#279-346)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 277, + "end_line": 347 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 279, + "end_line": 346 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable.owner() (lib/solady/src/auth/Ownable.sol#245-250) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#247-249)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 245, + "end_line": 250 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 247, + "end_line": 249 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#457-511)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 457, + "end_line": 511 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.permit2TransferFrom(address,address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#508-533) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#512-532)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 508, + "end_line": 533 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 512, + "end_line": 532 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.ternary(bool,address,address) (lib/solady/src/utils/FixedPointMathLib.sol#705-710) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#707-709)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 705, + "end_line": 710 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 707, + "end_line": 709 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.mulWad(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#64-76) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#66-75)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 64, + "end_line": 76 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 66, + "end_line": 75 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.divUp(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#645-654) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#647-653)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 645, + "end_line": 654 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 647, + "end_line": 653 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.dist(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1094-1099) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1096-1098)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1094, + "end_line": 1099 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1096, + "end_line": 1098 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20._transfer(address,address,uint256) (lib/solady/src/tokens/ERC20.sol#559-587) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#562-585)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 559, + "end_line": 587 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 562, + "end_line": 585 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.totalSupply() (lib/solady/src/tokens/ERC20.sol#147-152) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#149-151)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 147, + "end_line": 152 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 149, + "end_line": 151 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.forceSafeTransferAllETH(address) (lib/solady/src/utils/SafeTransferLib.sol#165-176) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#167-175)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 165, + "end_line": 176 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 167, + "end_line": 175 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.mulDivUp(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#610-621) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#612-620)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 610, + "end_line": 621 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 612, + "end_line": 620 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawSMod(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#1290-1295) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1292-1294)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1290, + "end_line": 1295 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1292, + "end_line": 1294 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawSDiv(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#1274-1279) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1276-1278)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1274, + "end_line": 1279 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1276, + "end_line": 1278 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.DOMAIN_SEPARATOR() (lib/solady/src/tokens/ERC20.sol#472-487) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#478-486)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 472, + "end_line": 487 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 478, + "end_line": 486 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable._checkOwner() (lib/solady/src/auth/Ownable.sol#151-160) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#153-159)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 151, + "end_line": 160 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 153, + "end_line": 159 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.permit2Approve(address,address,uint160,uint48) (lib/solady/src/utils/SafeTransferLib.sol#648-665) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#652-664)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 648, + "end_line": 665 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 652, + "end_line": 664 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20._burn(address,uint256) (lib/solady/src/tokens/ERC20.sol#529-552) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#532-550)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 529, + "end_line": 552 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 532, + "end_line": 550 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.forceSafeTransferAllETH(address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#135-145) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#137-144)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 135, + "end_line": 145 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 137, + "end_line": 144 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeApprove(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#390-405) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#392-404)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 390, + "end_line": 405 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 392, + "end_line": 404 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable.ownershipHandoverExpiresAt(address) (lib/solady/src/auth/Ownable.sol#253-267) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#260-266)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 253, + "end_line": 267 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 260, + "end_line": 266 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawMulWadUp(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#125-130) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#127-129)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 125, + "end_line": 130 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 127, + "end_line": 129 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.balanceOf(address) (lib/solady/src/tokens/ERC20.sol#155-162) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#157-161)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 155, + "end_line": 162 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 157, + "end_line": 161 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#196-203)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 196, + "end_line": 203 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable._setOwner(address) (lib/solady/src/auth/Ownable.sol#124-148) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#127-135)\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#138-146)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 124, + "end_line": 148 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 127, + "end_line": 135 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 138, + "end_line": 146 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawMulMod(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1306-1311) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1308-1310)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1306, + "end_line": 1311 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1308, + "end_line": 1310 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rpow(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#738-772) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#740-771)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 738, + "end_line": 772 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 740, + "end_line": 771 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.transfer(address,uint256) (lib/solady/src/tokens/ERC20.sol#217-246) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#220-243)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 217, + "end_line": 246 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 220, + "end_line": 243 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawMod(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1282-1287) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1284-1286)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1282, + "end_line": 1287 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1284, + "end_line": 1286 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeTransferAll(address,address) (lib/solady/src/utils/SafeTransferLib.sol#358-386) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#360-385)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 358, + "end_line": 386 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 360, + "end_line": 385 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.allowance(address,address) (lib/solady/src/tokens/ERC20.sol#165-181) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#175-180)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 165, + "end_line": 181 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 175, + "end_line": 180 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.coalesce(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#713-718) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#715-717)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 713, + "end_line": 718 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 715, + "end_line": 717 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20._mint(address,uint256) (lib/solady/src/tokens/ERC20.sol#496-520) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#499-518)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 496, + "end_line": 520 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 499, + "end_line": 518 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeMoveETH(address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#203-243) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#205-242)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 203, + "end_line": 243 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 205, + "end_line": 242 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.saturatingMul(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#681-686) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#683-685)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 681, + "end_line": 686 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 683, + "end_line": 685 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.max(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#1134-1139) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1136-1138)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1134, + "end_line": 1139 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1136, + "end_line": 1138 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawMulWad(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#93-98) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#95-97)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 93, + "end_line": 98 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 95, + "end_line": 97 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.sDivWad(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#146-157) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#148-156)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 146, + "end_line": 157 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 148, + "end_line": 156 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeTransferAllFrom(address,address,address) (lib/solady/src/utils/SafeTransferLib.sol#301-334) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#306-333)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 301, + "end_line": 334 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 306, + "end_line": 333 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.log10Up(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#975-981) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#978-980)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 975, + "end_line": 981 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 978, + "end_line": 980 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.log2(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#924-936) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#926-935)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 924, + "end_line": 936 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 926, + "end_line": 935 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.min(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1110-1115) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1112-1114)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1110, + "end_line": 1115 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1112, + "end_line": 1114 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawSMulWad(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#101-106) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#103-105)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 101, + "end_line": 106 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 103, + "end_line": 105 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.sMulWad(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#79-90) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#81-89)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 79, + "end_line": 90 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 81, + "end_line": 89 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20._spendAllowance(address,address,uint256) (lib/solady/src/tokens/ERC20.sol#594-617) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#599-616)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 594, + "end_line": 617 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 599, + "end_line": 616 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.trySafeTransferAllETH(address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#190-198) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#195-197)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 190, + "end_line": 198 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 195, + "end_line": 197 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.sqrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#775-826) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#777-825)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 775, + "end_line": 826 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 777, + "end_line": 825 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#835-853)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 835, + "end_line": 853 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.fullMulDivN(uint256,uint256,uint8) (lib/solady/src/utils/FixedPointMathLib.sol#566-591) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#568-590)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 566, + "end_line": 591 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 568, + "end_line": 590 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.forceSafeTransferETH(address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#148-162) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#150-161)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 148, + "end_line": 162 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 150, + "end_line": 161 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.nonces(address) (lib/solady/src/tokens/ERC20.sol#375-383) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#377-382)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 375, + "end_line": 383 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 377, + "end_line": 382 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.coalesce(address,address) (lib/solady/src/utils/FixedPointMathLib.sol#729-734) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#731-733)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 729, + "end_line": 734 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 731, + "end_line": 733 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#523-541)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 523, + "end_line": 541 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.packSci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1053-1063) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1056-1062)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1053, + "end_line": 1063 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1056, + "end_line": 1062 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeTransfer(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#338-354) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#340-353)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 338, + "end_line": 354 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 340, + "end_line": 353 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawDiv(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1266-1271) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1268-1270)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1266, + "end_line": 1271 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1268, + "end_line": 1270 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.saturatingAdd(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#673-678) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#675-677)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 673, + "end_line": 678 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 675, + "end_line": 677 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.coalesce(bytes32,bytes32) (lib/solady/src/utils/FixedPointMathLib.sol#721-726) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#723-725)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 721, + "end_line": 726 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 723, + "end_line": 725 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.approve(address,uint256) (lib/solady/src/tokens/ERC20.sol#186-209) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#189-195)\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#198-207)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 186, + "end_line": 209 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 189, + "end_line": 195 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 198, + "end_line": 207 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.simplePermit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32) (lib/solady/src/utils/SafeTransferLib.sol#595-645) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#606-644)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 595, + "end_line": 645 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 606, + "end_line": 644 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#176-181)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 176, + "end_line": 181 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.min(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#1118-1123) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1120-1122)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1118, + "end_line": 1123 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1120, + "end_line": 1122 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20.transferFrom(address,address,uint256) (lib/solady/src/tokens/ERC20.sol#257-347) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#262-302)\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#305-343)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 257, + "end_line": 347 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 262, + "end_line": 302 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 305, + "end_line": 343 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.saturatingSub(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#665-670) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#667-669)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 665, + "end_line": 670 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 667, + "end_line": 669 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.clamp(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1142-1152) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1148-1151)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1142, + "end_line": 1152 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1148, + "end_line": 1151 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeTransferFrom(address,address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#254-272) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#256-271)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 254, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 256, + "end_line": 271 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.divWad(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#133-143) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#135-142)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 133, + "end_line": 143 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 135, + "end_line": 142 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawDivWadUp(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#189-194) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#191-193)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 189, + "end_line": 194 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 191, + "end_line": 193 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.fullMulDivUp(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#548-560) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#551-559)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 548, + "end_line": 560 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 551, + "end_line": 559 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.sqrtWad(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#857-867) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#864-866)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 857, + "end_line": 867 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 864, + "end_line": 866 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.log256(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#985-994) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#987-993)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 985, + "end_line": 994 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 987, + "end_line": 993 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.ternary(bool,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#689-694) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#691-693)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 689, + "end_line": 694 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 691, + "end_line": 693 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.clamp(int256,int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#1155-1161) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1157-1160)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1155, + "end_line": 1161 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1157, + "end_line": 1160 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeTransferAllETH(address) (lib/solady/src/utils/SafeTransferLib.sol#106-115) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#108-114)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 106, + "end_line": 115 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 108, + "end_line": 114 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "ERC20._approve(address,address,uint256) (lib/solady/src/tokens/ERC20.sol#622-644) uses assembly\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#625-631)\n\t- INLINE ASM (lib/solady/src/tokens/ERC20.sol#634-643)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 622, + "end_line": 644 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 625, + "end_line": 631 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 634, + "end_line": 643 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.dist(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#1102-1107) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1104-1106)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1102, + "end_line": 1107 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1104, + "end_line": 1106 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable._initializeOwner(address) (lib/solady/src/auth/Ownable.sol#94-121) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#97-109)\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#112-119)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 94, + "end_line": 121 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 97, + "end_line": 109 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 112, + "end_line": 119 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.checkBalanceOf(address,address) (lib/solady/src/utils/SafeTransferLib.sol#461-477) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#467-476)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 461, + "end_line": 477 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 467, + "end_line": 476 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.forceSafeTransferETH(address,uint256,uint256) (lib/solady/src/utils/SafeTransferLib.sol#118-132) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#120-131)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 118, + "end_line": 132 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 120, + "end_line": 131 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#214-221)\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#253-258)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 214, + "end_line": 221 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 253, + "end_line": 258 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#224-236)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 224, + "end_line": 236 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.invMod(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#624-641) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#626-640)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 624, + "end_line": 641 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 626, + "end_line": 640 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawAddMod(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1298-1303) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1300-1302)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1298, + "end_line": 1303 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1300, + "end_line": 1302 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.divWadUp(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#176-186) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#178-185)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 176, + "end_line": 186 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 178, + "end_line": 185 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.rawSDivWad(int256,int256) (lib/solady/src/utils/FixedPointMathLib.sol#168-173) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#170-172)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 168, + "end_line": 173 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 170, + "end_line": 172 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.mulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#595-606) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#597-605)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 595, + "end_line": 606 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 597, + "end_line": 605 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32) (lib/solady/src/utils/SafeTransferLib.sol#538-592) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#550-590)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 538, + "end_line": 592 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 550, + "end_line": 590 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218) uses assembly\n\t- INLINE ASM (lib/solady/src/auth/Ownable.sol#210-217)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 210, + "end_line": 217 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.ternary(bool,bytes32,bytes32) (lib/solady/src/utils/FixedPointMathLib.sol#697-702) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#699-701)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 697, + "end_line": 702 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 699, + "end_line": 701 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#952-970)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 952, + "end_line": 970 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "SafeTransferLib.safeApproveWithRetry(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#411-438) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/SafeTransferLib.sol#413-437)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 411, + "end_line": 438 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 413, + "end_line": 437 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.zeroFloorSub(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#657-662) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#659-661)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 657, + "end_line": 662 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 659, + "end_line": 661 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.cbrtWad(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#872-896) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#879-895)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 872, + "end_line": 896 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 879, + "end_line": 895 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.factorial(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#909-919) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#911-918)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 909, + "end_line": 919 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 911, + "end_line": 918 + } + ] + }, + { + "detector_name": "assembly", + "check": "assembly", + "impact": "Informational", + "confidence": "High", + "description": "FixedPointMathLib.log256Up(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#998-1004) uses assembly\n\t- INLINE ASM (lib/solady/src/utils/FixedPointMathLib.sol#1001-1003)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 998, + "end_line": 1004 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1001, + "end_line": 1003 + } + ] + } + ], + "pragma": [ + { + "detector_name": "pragma", + "check": "pragma", + "impact": "Informational", + "confidence": "High", + "description": "2 different versions of Solidity are used:\n\t- Version constraint ^0.8.4 is used by:\n\t\t-^0.8.4 (lib/solady/src/auth/Ownable.sol#2)\n\t\t-^0.8.4 (lib/solady/src/tokens/ERC20.sol#2)\n\t\t-^0.8.4 (lib/solady/src/utils/FixedPointMathLib.sol#2)\n\t\t-^0.8.4 (lib/solady/src/utils/SafeTransferLib.sol#2)\n\t- Version constraint ^0.8.24 is used by:\n\t\t-^0.8.24 (src/CPPIController.sol#2)\n\t\t-^0.8.24 (src/CPPIVault.sol#2)\n\t\t-^0.8.24 (src/ExecutionModule.sol#2)\n\t\t-^0.8.24 (src/OracleHub.sol#2)\n\t\t-^0.8.24 (src/PendlePTAdapter.sol#2)\n\t\t-^0.8.24 (src/RiskyLegManager.sol#2)\n\t\t-^0.8.24 (src/SafeLegManager.sol#2)\n\t\t-^0.8.24 (src/interfaces/IExecutionPeriphery.sol#2)\n\t\t-^0.8.24 (src/interfaces/IPTAdapter.sol#2)\n\t\t-^0.8.24 (src/interfaces/IVaultPeriphery.sol#2)\n\t\t-^0.8.24 (src/interfaces/pendle/IPendle.sol#2)\n\t\t-^0.8.24 (src/libraries/CPPIMath.sol#2)\n\t\t-^0.8.24 (src/libraries/FloorPolicy.sol#2)\n\t\t-^0.8.24 (src/libraries/RebalancePolicy.sol#2)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/CPPIController.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/interfaces/IExecutionPeriphery.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/interfaces/IPTAdapter.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/interfaces/IVaultPeriphery.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/interfaces/pendle/IPendle.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/libraries/CPPIMath.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/libraries/FloorPolicy.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "src/libraries/RebalancePolicy.sol", + "start_line": 2, + "end_line": 2 + } + ] + } + ], + "constable-states": [ + { + "detector_name": "constable-states", + "check": "constable-states", + "impact": "Optimization", + "confidence": "High", + "description": "ExecutionModule.wstethPoolFee (src/ExecutionModule.sol#47) should be constant \n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 47, + "end_line": 47 + } + ] + }, + { + "detector_name": "constable-states", + "check": "constable-states", + "impact": "Optimization", + "confidence": "High", + "description": "ExecutionModule.primaryFee (src/ExecutionModule.sol#45) should be constant \n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 45, + "end_line": 45 + } + ] + }, + { + "detector_name": "constable-states", + "check": "constable-states", + "impact": "Optimization", + "confidence": "High", + "description": "ExecutionModule.fallbackFee (src/ExecutionModule.sol#46) should be constant \n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 46, + "end_line": 46 + } + ] + } + ], + "divide-before-multiply": [ + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- inv_fullMulDivUnchecked_asm_0 = inv_fullMulDivUnchecked_asm_0 * 2 - d * inv_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#534)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 534, + "end_line": 534 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- y = ((y * x) >> 96) + 57155421227552351082224309758442 (lib/solady/src/utils/FixedPointMathLib.sol#239)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 239, + "end_line": 239 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- inv_fullMulDivUnchecked_asm_0 = 2 ^ 3 * d (lib/solady/src/utils/FixedPointMathLib.sol#530)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 530, + "end_line": 530 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- inv_fullMulDiv_asm_0 = inv_fullMulDiv_asm_0 * 2 - d * inv_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#493)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 493, + "end_line": 493 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- inv_fullMulDiv_asm_0 = 2 ^ 3 * d (lib/solady/src/utils/FixedPointMathLib.sol#489)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 489, + "end_line": 489 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- p = p * x + (4385272521454847904659076985693276 << 96) (lib/solady/src/utils/FixedPointMathLib.sol#242)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 242, + "end_line": 242 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#850)\n\t- z = z - x / z * z < z (lib/solady/src/utils/FixedPointMathLib.sol#852)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 850, + "end_line": 850 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 852, + "end_line": 852 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#847)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#848)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 847, + "end_line": 847 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 848, + "end_line": 848 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- inv_fullMulDiv_asm_0 = inv_fullMulDiv_asm_0 * 2 - d * inv_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#494)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 494, + "end_line": 494 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.rpow(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#738-772) performs a multiplication on the result of a division:\n\t- x = xxRound_rpow_asm_0 / b (lib/solady/src/utils/FixedPointMathLib.sol#754)\n\t- zx_rpow_asm_0 = z * x (lib/solady/src/utils/FixedPointMathLib.sol#757)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 738, + "end_line": 772 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 754, + "end_line": 754 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 757, + "end_line": 757 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#849)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#850)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 849, + "end_line": 849 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 850, + "end_line": 850 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#846)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#847)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 846, + "end_line": 846 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 847, + "end_line": 847 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- z = p1_fullMulDiv_asm_0 - r_fullMulDiv_asm_0 > z * 0 - t_fullMulDiv_asm_0 / t_fullMulDiv_asm_0 + 1 | z - r_fullMulDiv_asm_0 / t_fullMulDiv_asm_0 * 2 - d * inv_fullMulDiv_asm_0 * inv_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#498-505)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 498, + "end_line": 505 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#848)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#849)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 848, + "end_line": 848 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 849, + "end_line": 849 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter._buyPt(uint256) (src/PendlePTAdapter.sol#194-211) performs a multiplication on the result of a division:\n\t- expectedPt = (assets * assetScale).divWad(_rate()) / ptScale (src/PendlePTAdapter.sol#196)\n\t- minPtOut = expectedPt * (10_000 - maxSlippageBps) / 10_000 (src/PendlePTAdapter.sol#197)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 194, + "end_line": 211 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 196, + "end_line": 196 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 197, + "end_line": 197 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- q = ((q * x) >> 96) - 533845033583426703283633433725380 (lib/solady/src/utils/FixedPointMathLib.sol#247)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 247, + "end_line": 247 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- inv_fullMulDiv_asm_0 = inv_fullMulDiv_asm_0 * 2 - d * inv_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#496)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 496, + "end_line": 496 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter._buyPt(uint256) (src/PendlePTAdapter.sol#194-211) performs a multiplication on the result of a division:\n\t- expectedPt = (assets * assetScale).divWad(_rate()) / ptScale (src/PendlePTAdapter.sol#196)\n\t- approx = ApproxParams(minPtOut,expectedPt * 110 / 100,0,30,1e14) (src/PendlePTAdapter.sol#208)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 194, + "end_line": 211 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 196, + "end_line": 196 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 208, + "end_line": 208 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- z = p1_fullMulDivUnchecked_asm_0 - r_fullMulDivUnchecked_asm_0 > z * 0 - t_fullMulDivUnchecked_asm_0 / t_fullMulDivUnchecked_asm_0 + 1 | z - r_fullMulDivUnchecked_asm_0 / t_fullMulDivUnchecked_asm_0 * 2 - d * inv_fullMulDivUnchecked_asm_0 * inv_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#536-540)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 536, + "end_line": 540 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- q = ((q * x) >> 96) - 14423608567350463180887372962807573 (lib/solady/src/utils/FixedPointMathLib.sol#249)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 249, + "end_line": 249 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = 0xf << 0xf < x >> r_cbrt_asm_0 << r_cbrt_asm_0 / 3 / 7 ^ r_cbrt_asm_0 % 3 (lib/solady/src/utils/FixedPointMathLib.sol#842)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#844)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 842, + "end_line": 842 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 844, + "end_line": 844 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- inv_fullMulDivUnchecked_asm_0 = inv_fullMulDivUnchecked_asm_0 * 2 - d * inv_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#533)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 533, + "end_line": 533 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- q = ((q * x) >> 96) + 26449188498355588339934803723976023 (lib/solady/src/utils/FixedPointMathLib.sol#250)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 250, + "end_line": 250 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- inv_fullMulDivUnchecked_asm_0 = inv_fullMulDivUnchecked_asm_0 * 2 - d * inv_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#532)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 532, + "end_line": 532 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#845)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#846)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 845, + "end_line": 845 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 846, + "end_line": 846 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) performs a multiplication on the result of a division:\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#844)\n\t- z = x / z * z + z + z / 3 (lib/solady/src/utils/FixedPointMathLib.sol#845)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 844, + "end_line": 844 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 845, + "end_line": 845 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.invMod(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#624-641) performs a multiplication on the result of a division:\n\t- q_invMod_asm_0 = g_invMod_asm_0 / r_invMod_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#630)\n\t- y_invMod_asm_0 = u_invMod_asm_0 - y_invMod_asm_0 * q_invMod_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#636)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 624, + "end_line": 641 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 630, + "end_line": 630 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 636, + "end_line": 636 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- inv_fullMulDivUnchecked_asm_0 = inv_fullMulDivUnchecked_asm_0 * 2 - d * inv_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#535)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 535, + "end_line": 535 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.invMod(uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#624-641) performs a multiplication on the result of a division:\n\t- q_invMod_asm_0 = g_invMod_asm_0 / r_invMod_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#630)\n\t- r_invMod_asm_0 = t_invMod_asm_0 - r_invMod_asm_0 * q_invMod_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#633)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 624, + "end_line": 641 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 630, + "end_line": 630 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 633, + "end_line": 633 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.lambertW0Wad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#353-434) performs a multiplication on the result of a division:\n\t- t_lambertW0Wad_asm_2 = w * e / wad (lib/solady/src/utils/FixedPointMathLib.sol#392)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 353, + "end_line": 434 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 392, + "end_line": 392 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- q = ((q * x) >> 96) + 3604857256930695427073651918091429 (lib/solady/src/utils/FixedPointMathLib.sol#248)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 248, + "end_line": 248 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.expWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#207-272) performs a multiplication on the result of a division:\n\t- x = (x << 78) / 5 ** 18 (lib/solady/src/utils/FixedPointMathLib.sol#226)\n\t- q = ((q * x) >> 96) + 50020603652535783019961831881945 (lib/solady/src/utils/FixedPointMathLib.sol#246)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 207, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 246, + "end_line": 246 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrtWad(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#872-896) performs a multiplication on the result of a division:\n\t- z = (fullMulDivUnchecked(x,10 ** 36,z * z) + z + z) / 3 (lib/solady/src/utils/FixedPointMathLib.sol#876)\n\t- t_cbrtWad_asm_0 = mulmod(uint256,uint256,uint256)(z * z,z,p_cbrtWad_asm_0) (lib/solady/src/utils/FixedPointMathLib.sol#893)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 872, + "end_line": 896 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 876, + "end_line": 876 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 893, + "end_line": 893 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- inv_fullMulDiv_asm_0 = inv_fullMulDiv_asm_0 * 2 - d * inv_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#495)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 495, + "end_line": 495 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "SafeLegManager.rebalanceBuffer() (src/SafeLegManager.sol#141-161) performs a multiplication on the result of a division:\n\t- assets = excess / assetScale (src/SafeLegManager.sol#146)\n\t- BufferRebalanced(- int256(assets * assetScale)) (src/SafeLegManager.sol#150)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 141, + "end_line": 161 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 146, + "end_line": 146 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 150, + "end_line": 150 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#483)\n\t- inv_fullMulDiv_asm_0 = inv_fullMulDiv_asm_0 * 2 - d * inv_fullMulDiv_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#497)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 483, + "end_line": 483 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 497, + "end_line": 497 + } + ] + }, + { + "detector_name": "divide-before-multiply", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) performs a multiplication on the result of a division:\n\t- d = d / t_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#529)\n\t- inv_fullMulDivUnchecked_asm_0 = inv_fullMulDivUnchecked_asm_0 * 2 - d * inv_fullMulDivUnchecked_asm_0 (lib/solady/src/utils/FixedPointMathLib.sol#531)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 529, + "end_line": 529 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 531, + "end_line": 531 + } + ] + } + ], + "incorrect-exp": [ + { + "detector_name": "incorrect-exp", + "check": "incorrect-exp", + "impact": "High", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) has bitwise-xor operator ^ instead of the exponentiation operator **: \n\t - z = 0xf << 0xf < x >> r_cbrt_asm_0 << r_cbrt_asm_0 / 3 / 7 ^ r_cbrt_asm_0 % 3 (lib/solady/src/utils/FixedPointMathLib.sol#842)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 842, + "end_line": 842 + } + ] + }, + { + "detector_name": "incorrect-exp", + "check": "incorrect-exp", + "impact": "High", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDiv(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#455-512) has bitwise-xor operator ^ instead of the exponentiation operator **: \n\t - inv_fullMulDiv_asm_0 = 2 ^ 3 * d (lib/solady/src/utils/FixedPointMathLib.sol#489)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 455, + "end_line": 512 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 489, + "end_line": 489 + } + ] + }, + { + "detector_name": "incorrect-exp", + "check": "incorrect-exp", + "impact": "High", + "confidence": "Medium", + "description": "FixedPointMathLib.fullMulDivUnchecked(uint256,uint256,uint256) (lib/solady/src/utils/FixedPointMathLib.sol#517-542) has bitwise-xor operator ^ instead of the exponentiation operator **: \n\t - inv_fullMulDivUnchecked_asm_0 = 2 ^ 3 * d (lib/solady/src/utils/FixedPointMathLib.sol#530)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 517, + "end_line": 542 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 530, + "end_line": 530 + } + ] + } + ], + "solc-version": [ + { + "detector_name": "solc-version", + "check": "solc-version", + "impact": "Informational", + "confidence": "High", + "description": "Version constraint ^0.8.4 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables.\nIt is used by:\n\t- ^0.8.4 (lib/solady/src/auth/Ownable.sol#2)\n\t- ^0.8.4 (lib/solady/src/tokens/ERC20.sol#2)\n\t- ^0.8.4 (lib/solady/src/utils/FixedPointMathLib.sol#2)\n\t- ^0.8.4 (lib/solady/src/utils/SafeTransferLib.sol#2)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 2, + "end_line": 2 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 2, + "end_line": 2 + } + ] + } + ], + "incorrect-equality": [ + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault.navPerShare() (src/CPPIVault.sol#178-181) uses a dangerous strict equality:\n\t- supply == 0 (src/CPPIVault.sol#180)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 178, + "end_line": 181 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 180, + "end_line": 180 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault._claimRedeem(address,address) (src/CPPIVault.sol#327-339) uses a dangerous strict equality:\n\t- price == 0 (src/CPPIVault.sol#331)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 327, + "end_line": 339 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 331, + "end_line": 331 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault.pendingRedeemRequest(uint256,address) (src/CPPIVault.sol#353-356) uses a dangerous strict equality:\n\t- r.epoch == requestId && epochNavPerShare[r.epoch] == 0 (src/CPPIVault.sol#355)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 353, + "end_line": 356 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 355, + "end_line": 355 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault._claimDeposit(address,address) (src/CPPIVault.sol#315-325) uses a dangerous strict equality:\n\t- price == 0 (src/CPPIVault.sol#319)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 315, + "end_line": 325 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 319, + "end_line": 319 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault._accrueManagementFee() (src/CPPIVault.sol#429-440) uses a dangerous strict equality:\n\t- elapsed == 0 (src/CPPIVault.sol#434)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 429, + "end_line": 440 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 434, + "end_line": 434 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "OracleHub._basisBps(uint256,uint256) (src/OracleHub.sol#161-166) uses a dangerous strict equality:\n\t- hi == 0 (src/OracleHub.sol#164)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 161, + "end_line": 166 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 164, + "end_line": 164 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault.pendingDepositRequest(uint256,address) (src/CPPIVault.sol#343-346) uses a dangerous strict equality:\n\t- r.epoch == requestId && epochNavPerShare[r.epoch] == 0 (src/CPPIVault.sol#345)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 343, + "end_line": 346 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 345, + "end_line": 345 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault._accrueManagementFee() (src/CPPIVault.sol#429-440) uses a dangerous strict equality:\n\t- managementFeeBps == 0 || feeRecipient == address(0) || last == 0 || totalSupply() == 0 (src/CPPIVault.sol#432)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 429, + "end_line": 440 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 432, + "end_line": 432 + } + ] + }, + { + "detector_name": "incorrect-equality", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High", + "description": "CPPIVault._accrueManagementFee() (src/CPPIVault.sol#429-440) uses a dangerous strict equality:\n\t- feeWad == 0 (src/CPPIVault.sol#436)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 429, + "end_line": 440 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 436, + "end_line": 436 + } + ] + } + ], + "shadowing-local": [ + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.pendingRedeemRequest(uint256,address).controller (src/CPPIVault.sol#353) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 353, + "end_line": 353 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault._claimDeposit(address,address).controller (src/CPPIVault.sol#315) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 315, + "end_line": 315 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.requestDeposit(uint256,address,address).controller (src/CPPIVault.sol#197) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 197, + "end_line": 197 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.claimableRedeemRequest(uint256,address).controller (src/CPPIVault.sol#358) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 358, + "end_line": 358 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault._requestDeposit(uint256,address,address).controller (src/CPPIVault.sol#211) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 211, + "end_line": 211 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIController.settleTerm(uint256).protectedAmount (src/CPPIController.sol#86) shadows:\n\t- CPPIController.protectedAmount() (src/CPPIController.sol#129-131) (function)\n", + "source_locations": [ + { + "file_path": "src/CPPIController.sol", + "start_line": 86, + "end_line": 86 + }, + { + "file_path": "src/CPPIController.sol", + "start_line": 129, + "end_line": 131 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.requestRedeem(uint256,address,address).controller (src/CPPIVault.sol#206) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 206, + "end_line": 206 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.redeem(uint256,address,address).controller (src/CPPIVault.sol#298) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 298, + "end_line": 298 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault._authControllerOrOperator(address).controller (src/CPPIVault.sol#442) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 442, + "end_line": 442 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.claimableDepositRequest(uint256,address).controller (src/CPPIVault.sol#348) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 348, + "end_line": 348 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault._requestRedeem(uint256,address,address).controller (src/CPPIVault.sol#226) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 226, + "end_line": 226 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.pendingDepositRequest(uint256,address).controller (src/CPPIVault.sol#343) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 343, + "end_line": 343 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.mint(uint256,address,address).controller (src/CPPIVault.sol#289) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 289, + "end_line": 289 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.withdraw(uint256,address,address).controller (src/CPPIVault.sol#305) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 305, + "end_line": 305 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault._claimRedeem(address,address).controller (src/CPPIVault.sol#327) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 327, + "end_line": 327 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + }, + { + "detector_name": "shadowing-local", + "check": "shadowing-local", + "impact": "Low", + "confidence": "High", + "description": "CPPIVault.deposit(uint256,address,address).controller (src/CPPIVault.sol#283) shadows:\n\t- CPPIVault.controller (src/CPPIVault.sol#36) (state variable)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 283, + "end_line": 283 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 36, + "end_line": 36 + } + ] + } + ], + "locked-ether": [ + { + "detector_name": "locked-ether", + "check": "locked-ether", + "impact": "Medium", + "confidence": "High", + "description": "Contract locking ether found:\n\tContract ExecutionModule (src/ExecutionModule.sol#29-234) has payable functions:\n\t - Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183)\n\t - Ownable.renounceOwnership() (lib/solady/src/auth/Ownable.sol#186-188)\n\t - Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205)\n\t - Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218)\n\t - Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238)\n\tBut does not have a function to withdraw the ether\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 29, + "end_line": 234 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 186, + "end_line": 188 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + } + ] + }, + { + "detector_name": "locked-ether", + "check": "locked-ether", + "impact": "Medium", + "confidence": "High", + "description": "Contract locking ether found:\n\tContract PendlePTAdapter (src/PendlePTAdapter.sol#40-255) has payable functions:\n\t - Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183)\n\t - Ownable.renounceOwnership() (lib/solady/src/auth/Ownable.sol#186-188)\n\t - Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205)\n\t - Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218)\n\t - Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238)\n\tBut does not have a function to withdraw the ether\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 40, + "end_line": 255 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 186, + "end_line": 188 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + } + ] + }, + { + "detector_name": "locked-ether", + "check": "locked-ether", + "impact": "Medium", + "confidence": "High", + "description": "Contract locking ether found:\n\tContract SafeLegManager (src/SafeLegManager.sol#22-168) has payable functions:\n\t - Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183)\n\t - Ownable.renounceOwnership() (lib/solady/src/auth/Ownable.sol#186-188)\n\t - Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205)\n\t - Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218)\n\t - Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238)\n\tBut does not have a function to withdraw the ether\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 22, + "end_line": 168 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 186, + "end_line": 188 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + } + ] + }, + { + "detector_name": "locked-ether", + "check": "locked-ether", + "impact": "Medium", + "confidence": "High", + "description": "Contract locking ether found:\n\tContract CPPIVault (src/CPPIVault.sol#27-453) has payable functions:\n\t - Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183)\n\t - Ownable.renounceOwnership() (lib/solady/src/auth/Ownable.sol#186-188)\n\t - Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205)\n\t - Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218)\n\t - Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238)\n\tBut does not have a function to withdraw the ether\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 27, + "end_line": 453 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 186, + "end_line": 188 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + } + ] + }, + { + "detector_name": "locked-ether", + "check": "locked-ether", + "impact": "Medium", + "confidence": "High", + "description": "Contract locking ether found:\n\tContract OracleHub (src/OracleHub.sol#46-167) has payable functions:\n\t - Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183)\n\t - Ownable.renounceOwnership() (lib/solady/src/auth/Ownable.sol#186-188)\n\t - Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205)\n\t - Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218)\n\t - Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238)\n\tBut does not have a function to withdraw the ether\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 46, + "end_line": 167 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 186, + "end_line": 188 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + } + ] + }, + { + "detector_name": "locked-ether", + "check": "locked-ether", + "impact": "Medium", + "confidence": "High", + "description": "Contract locking ether found:\n\tContract RiskyLegManager (src/RiskyLegManager.sol#18-117) has payable functions:\n\t - Ownable.transferOwnership(address) (lib/solady/src/auth/Ownable.sol#174-183)\n\t - Ownable.renounceOwnership() (lib/solady/src/auth/Ownable.sol#186-188)\n\t - Ownable.requestOwnershipHandover() (lib/solady/src/auth/Ownable.sol#192-205)\n\t - Ownable.cancelOwnershipHandover() (lib/solady/src/auth/Ownable.sol#208-218)\n\t - Ownable.completeOwnershipHandover(address) (lib/solady/src/auth/Ownable.sol#222-238)\n\tBut does not have a function to withdraw the ether\n", + "source_locations": [ + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 18, + "end_line": 117 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 174, + "end_line": 183 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 186, + "end_line": 188 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 192, + "end_line": 205 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 208, + "end_line": 218 + }, + { + "file_path": "lib/solady/src/auth/Ownable.sol", + "start_line": 222, + "end_line": 238 + } + ] + } + ], + "events-access": [ + { + "detector_name": "events-access", + "check": "events-access", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.setRoles(address,address) (src/CPPIVault.sol#141-144) should emit an event for: \n\t- keeper = keeper_ (src/CPPIVault.sol#142) \n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 141, + "end_line": 144 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 142, + "end_line": 142 + } + ] + }, + { + "detector_name": "events-access", + "check": "events-access", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.setManager(address) (src/PendlePTAdapter.sol#103-106) should emit an event for: \n\t- manager = manager_ (src/PendlePTAdapter.sol#105) \n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 103, + "end_line": 106 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 105, + "end_line": 105 + } + ] + }, + { + "detector_name": "events-access", + "check": "events-access", + "impact": "Low", + "confidence": "Medium", + "description": "SafeLegManager.setPeriphery(IPTAdapter,address,address) (src/SafeLegManager.sol#60-64) should emit an event for: \n\t- executor = executor_ (src/SafeLegManager.sol#62) \n\t- keeper = keeper_ (src/SafeLegManager.sol#63) \n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 60, + "end_line": 64 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 62, + "end_line": 62 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 63, + "end_line": 63 + } + ] + }, + { + "detector_name": "events-access", + "check": "events-access", + "impact": "Low", + "confidence": "Medium", + "description": "RiskyLegManager.setPeriphery(IPriceSource,address,address) (src/RiskyLegManager.sol#50-54) should emit an event for: \n\t- executor = executor_ (src/RiskyLegManager.sol#52) \n\t- keeper = keeper_ (src/RiskyLegManager.sol#53) \n", + "source_locations": [ + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 50, + "end_line": 54 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 52, + "end_line": 52 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 53, + "end_line": 53 + } + ] + } + ], + "missing-inheritance": [ + { + "detector_name": "missing-inheritance", + "check": "missing-inheritance", + "impact": "Informational", + "confidence": "High", + "description": "OracleHub (src/OracleHub.sol#46-167) should inherit from IOracleHealth (src/CPPIVault.sol#12-14)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 46, + "end_line": 167 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 12, + "end_line": 14 + } + ] + }, + { + "detector_name": "missing-inheritance", + "check": "missing-inheritance", + "impact": "Informational", + "confidence": "High", + "description": "CPPIVault (src/CPPIVault.sol#27-453) should inherit from INavSource (src/SafeLegManager.sol#10-12)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 27, + "end_line": 453 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 10, + "end_line": 12 + } + ] + } + ], + "missing-zero-check": [ + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "ExecutionModule.constructor(address,address,address,address,address).wsteth_ (src/ExecutionModule.sol#62) lacks a zero-check on :\n\t\t- wsteth = wsteth_ (src/ExecutionModule.sol#66)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 62, + "end_line": 62 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 66, + "end_line": 66 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.constructor(address,uint8,address).asset_ (src/CPPIVault.sol#111) lacks a zero-check on :\n\t\t- asset = asset_ (src/CPPIVault.sol#113)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 111, + "end_line": 111 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 113, + "end_line": 113 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "RiskyLegManager.constructor(address,address,address).weth_ (src/RiskyLegManager.sol#44) lacks a zero-check on :\n\t\t- weth = weth_ (src/RiskyLegManager.sol#45)\n", + "source_locations": [ + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 44, + "end_line": 44 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 45, + "end_line": 45 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "RiskyLegManager.setPeriphery(IPriceSource,address,address).executor_ (src/RiskyLegManager.sol#50) lacks a zero-check on :\n\t\t- executor = executor_ (src/RiskyLegManager.sol#52)\n", + "source_locations": [ + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 50, + "end_line": 50 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 52, + "end_line": 52 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.setManager(address).manager_ (src/PendlePTAdapter.sol#103) lacks a zero-check on :\n\t\t- manager = manager_ (src/PendlePTAdapter.sol#105)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 103, + "end_line": 103 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 105, + "end_line": 105 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.setRoles(address,address).keeper_ (src/CPPIVault.sol#141) lacks a zero-check on :\n\t\t- keeper = keeper_ (src/CPPIVault.sol#142)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 141, + "end_line": 141 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 142, + "end_line": 142 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.constructor(address,address,address,address,address,uint8,uint32,address).redeemToken_ (src/PendlePTAdapter.sol#86) lacks a zero-check on :\n\t\t- redeemToken = redeemToken_ (src/PendlePTAdapter.sol#94)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 86, + "end_line": 86 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 94, + "end_line": 94 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.setRoles(address,address).guardian_ (src/CPPIVault.sol#141) lacks a zero-check on :\n\t\t- guardian = guardian_ (src/CPPIVault.sol#143)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 141, + "end_line": 141 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 143, + "end_line": 143 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "RiskyLegManager.constructor(address,address,address).wsteth_ (src/RiskyLegManager.sol#44) lacks a zero-check on :\n\t\t- wsteth = wsteth_ (src/RiskyLegManager.sol#46)\n", + "source_locations": [ + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 44, + "end_line": 44 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 46, + "end_line": 46 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.setFees(uint16,uint16,address).recipient (src/CPPIVault.sol#150) lacks a zero-check on :\n\t\t- feeRecipient = recipient (src/CPPIVault.sol#155)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 150, + "end_line": 150 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 155, + "end_line": 155 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.constructor(address,address,address,address,address,uint8,uint32,address).asset_ (src/PendlePTAdapter.sol#85) lacks a zero-check on :\n\t\t- asset = asset_ (src/PendlePTAdapter.sol#93)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 85, + "end_line": 85 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 93, + "end_line": 93 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "SafeLegManager.setPeriphery(IPTAdapter,address,address).keeper_ (src/SafeLegManager.sol#60) lacks a zero-check on :\n\t\t- keeper = keeper_ (src/SafeLegManager.sol#63)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 60, + "end_line": 60 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 63, + "end_line": 63 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "ExecutionModule.constructor(address,address,address,address,address).weth_ (src/ExecutionModule.sol#62) lacks a zero-check on :\n\t\t- weth = weth_ (src/ExecutionModule.sol#65)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 62, + "end_line": 62 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 65, + "end_line": 65 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "ExecutionModule.setPeriphery(SafeLegManager,RiskyLegManager,IPriceSource,ISwapRouter02,address).keeper_ (src/ExecutionModule.sol#75) lacks a zero-check on :\n\t\t- keeper = keeper_ (src/ExecutionModule.sol#81)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 75, + "end_line": 75 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 81, + "end_line": 81 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "SafeLegManager.constructor(address,address,uint8,address).asset_ (src/SafeLegManager.sol#53) lacks a zero-check on :\n\t\t- asset = asset_ (src/SafeLegManager.sol#55)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 53, + "end_line": 53 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 55, + "end_line": 55 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "ExecutionModule.constructor(address,address,address,address,address).usdc_ (src/ExecutionModule.sol#62) lacks a zero-check on :\n\t\t- usdc = usdc_ (src/ExecutionModule.sol#64)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 62, + "end_line": 62 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 64, + "end_line": 64 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "SafeLegManager.constructor(address,address,uint8,address).vault_ (src/SafeLegManager.sol#53) lacks a zero-check on :\n\t\t- vault = vault_ (src/SafeLegManager.sol#54)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 53, + "end_line": 53 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 54, + "end_line": 54 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "ExecutionModule.constructor(address,address,address,address,address).vault_ (src/ExecutionModule.sol#62) lacks a zero-check on :\n\t\t- vault = vault_ (src/ExecutionModule.sol#63)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 62, + "end_line": 62 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 63, + "end_line": 63 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "RiskyLegManager.setPeriphery(IPriceSource,address,address).keeper_ (src/RiskyLegManager.sol#50) lacks a zero-check on :\n\t\t- keeper = keeper_ (src/RiskyLegManager.sol#53)\n", + "source_locations": [ + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 50, + "end_line": 50 + }, + { + "file_path": "src/RiskyLegManager.sol", + "start_line": 53, + "end_line": 53 + } + ] + }, + { + "detector_name": "missing-zero-check", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium", + "description": "SafeLegManager.setPeriphery(IPTAdapter,address,address).executor_ (src/SafeLegManager.sol#60) lacks a zero-check on :\n\t\t- executor = executor_ (src/SafeLegManager.sol#62)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 60, + "end_line": 60 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 62, + "end_line": 62 + } + ] + } + ], + "naming-convention": [ + { + "detector_name": "naming-convention", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High", + "description": "Parameter IPendleRouter.redeemPyToToken(address,address,uint256,TokenOutput).YT (src/interfaces/pendle/IPendle.sol#105) is not in mixedCase\n", + "source_locations": [ + { + "file_path": "src/interfaces/pendle/IPendle.sol", + "start_line": 105, + "end_line": 105 + } + ] + }, + { + "detector_name": "naming-convention", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High", + "description": "Function ERC20.DOMAIN_SEPARATOR() (lib/solady/src/tokens/ERC20.sol#472-487) is not in mixedCase\n", + "source_locations": [ + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 472, + "end_line": 487 + } + ] + } + ], + "reentrancy-benign": [ + { + "detector_name": "reentrancy-benign", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192):\n\tExternal calls:\n\t- IPendleMarket(market_).increaseObservationsCardinalityNext(cardinalityRequired) (src/PendlePTAdapter.sol#182)\n\tState variables written after the call(s):\n\t- market = market_ (src/PendlePTAdapter.sol#186)\n\t- maturity = expiry (src/PendlePTAdapter.sol#189)\n\t- pt = pt_ (src/PendlePTAdapter.sol#187)\n\t- ptScale = 10 ** (18 - IERC20DecimalsLike(pt_).decimals()) (src/PendlePTAdapter.sol#190)\n\t- yt = yt_ (src/PendlePTAdapter.sol#188)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 174, + "end_line": 192 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 182, + "end_line": 182 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 182, + "end_line": 182 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 186, + "end_line": 186 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 189, + "end_line": 189 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 187, + "end_line": 187 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 190, + "end_line": 190 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 188, + "end_line": 188 + } + ] + } + ], + "reentrancy-events": [ + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in CPPIVault.settleTerm() (src/CPPIVault.sol#385-397):\n\tExternal calls:\n\t- shortfall = controller.settleTerm(nav) (src/CPPIVault.sol#389)\n\tEvent emitted after the call(s):\n\t- PerformanceFeeCharged(feeShares,gainWad) (src/CPPIVault.sol#395)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 385, + "end_line": 397 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 389, + "end_line": 389 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 395, + "end_line": 395 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in ExecutionModule.rebalanceComposition(uint256,uint256) (src/ExecutionModule.sol#121-149):\n\tExternal calls:\n\t- riskyLeg.provideToken(wsteth,wstethIn,address(this)) (src/ExecutionModule.sol#144)\n\t- _swap(wsteth,weth,wstethPoolFee,wstethIn,minOut_scope_1,address(riskyLeg)) (src/ExecutionModule.sol#146)\n\t\t- out = router.exactInputSingle(p) (src/ExecutionModule.sol#204-209)\n\t\t- router.exactInputSingle(p) (src/ExecutionModule.sol#208)\n\tEvent emitted after the call(s):\n\t- CompositionRebalanced(- int256(moveWad_scope_0)) (src/ExecutionModule.sol#147)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 121, + "end_line": 149 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 144, + "end_line": 144 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 146, + "end_line": 146 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 204, + "end_line": 209 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 208, + "end_line": 208 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 147, + "end_line": 147 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in ExecutionModule._sellRisky(uint256,uint256) (src/ExecutionModule.sol#171-187):\n\tExternal calls:\n\t- (wethGot,wstethGot) = riskyLeg.provide(deltaWad,address(this)) (src/ExecutionModule.sol#172)\n\t- wethGot += _swap(wsteth,weth,wstethPoolFee,wstethGot,minWeth,address(this)) (src/ExecutionModule.sol#179)\n\t\t- out = router.exactInputSingle(p) (src/ExecutionModule.sol#204-209)\n\t\t- router.exactInputSingle(p) (src/ExecutionModule.sol#208)\n\t- usdcOut = _swap(weth,usdc,primaryFee,wethGot,minUsdcOut,address(safeLeg)) (src/ExecutionModule.sol#184)\n\t\t- out = router.exactInputSingle(p) (src/ExecutionModule.sol#204-209)\n\t\t- router.exactInputSingle(p) (src/ExecutionModule.sol#208)\n\t- safeLeg.onInflow() (src/ExecutionModule.sol#185)\n\tEvent emitted after the call(s):\n\t- RebalanceExecuted(- int256(deltaWad),usdcOut,wethGot) (src/ExecutionModule.sol#186)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 171, + "end_line": 187 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 172, + "end_line": 172 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 179, + "end_line": 179 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 204, + "end_line": 209 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 208, + "end_line": 208 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 184, + "end_line": 184 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 204, + "end_line": 209 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 208, + "end_line": 208 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 185, + "end_line": 185 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 186, + "end_line": 186 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in ExecutionModule.rebalanceComposition(uint256,uint256) (src/ExecutionModule.sol#121-149):\n\tExternal calls:\n\t- (wethGot,None) = riskyLeg.provide(moveWad,address(this)) (src/ExecutionModule.sol#133)\n\t- _swap(weth,wsteth,wstethPoolFee,wethGot,minOut,address(riskyLeg)) (src/ExecutionModule.sol#136)\n\t\t- out = router.exactInputSingle(p) (src/ExecutionModule.sol#204-209)\n\t\t- router.exactInputSingle(p) (src/ExecutionModule.sol#208)\n\tEvent emitted after the call(s):\n\t- CompositionRebalanced(int256(moveWad)) (src/ExecutionModule.sol#137)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 121, + "end_line": 149 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 133, + "end_line": 133 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 136, + "end_line": 136 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 204, + "end_line": 209 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 208, + "end_line": 208 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 137, + "end_line": 137 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in SafeLegManager.rebalanceBuffer() (src/SafeLegManager.sol#141-161):\n\tExternal calls:\n\t- pt.deposit(assets) (src/SafeLegManager.sol#149)\n\tEvent emitted after the call(s):\n\t- BufferRebalanced(- int256(assets * assetScale)) (src/SafeLegManager.sol#150)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 141, + "end_line": 161 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 149, + "end_line": 149 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 150, + "end_line": 150 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in CPPIVault.rebalance() (src/CPPIVault.sol#404-417):\n\tExternal calls:\n\t- a = controller.assess(shareholderNav(),riskyLeg.value(),rateOracle.rateWad()) (src/CPPIVault.sol#405)\n\t- executor.executeRebalance(deltaWad,bound) (src/CPPIVault.sol#414)\n\t- controller.recordRebalance(trigger,a.floor,a.targetRisky) (src/CPPIVault.sol#415)\n\tEvent emitted after the call(s):\n\t- Rebalanced(trigger,deltaWad,a.floor,a.targetRisky) (src/CPPIVault.sol#416)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 404, + "end_line": 417 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 405, + "end_line": 405 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 414, + "end_line": 414 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 415, + "end_line": 415 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 416, + "end_line": 416 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in ExecutionModule.freeAssets(uint256) (src/ExecutionModule.sol#104-115):\n\tExternal calls:\n\t- _sellRisky(shortfall,150) (src/ExecutionModule.sol#110)\n\t\t- out = router.exactInputSingle(p) (src/ExecutionModule.sol#204-209)\n\t\t- (wethGot,wstethGot) = riskyLeg.provide(deltaWad,address(this)) (src/ExecutionModule.sol#172)\n\t\t- router.exactInputSingle(p) (src/ExecutionModule.sol#208)\n\t\t- safeLeg.onInflow() (src/ExecutionModule.sol#185)\n\t- safeLeg.provide(available,vault) (src/ExecutionModule.sol#113)\n\tEvent emitted after the call(s):\n\t- AssetsFreed(available) (src/ExecutionModule.sol#114)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 104, + "end_line": 115 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 110, + "end_line": 110 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 204, + "end_line": 209 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 172, + "end_line": 172 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 208, + "end_line": 208 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 185, + "end_line": 185 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 113, + "end_line": 113 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 114, + "end_line": 114 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in SafeLegManager.onInflow() (src/SafeLegManager.sol#92-105):\n\tExternal calls:\n\t- pt.deposit(assets) (src/SafeLegManager.sol#101)\n\tEvent emitted after the call(s):\n\t- Inflow(buf,buf - toPtWad,toPtWad) (src/SafeLegManager.sol#104)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 92, + "end_line": 105 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 101, + "end_line": 101 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 104, + "end_line": 104 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in PendlePTAdapter.withdraw(uint256,address) (src/PendlePTAdapter.sol#137-149):\n\tExternal calls:\n\t- assetsOut = _exitPt(ptIn,matured,minOut) (src/PendlePTAdapter.sol#146)\n\t\t- (received,None) = router.redeemPyToToken(address(this),yt,ptIn,_tokenOutput(routerMin)) (src/PendlePTAdapter.sol#231)\n\t\t- (received,None,None) = router.swapExactPtForToken(address(this),market,ptIn,_tokenOutput(routerMin),_emptyLimit()) (src/PendlePTAdapter.sol#233-234)\n\t\t- assetsOut = IERC4626Like(redeemToken).redeem(received,address(this),address(this)) (src/PendlePTAdapter.sol#239)\n\tEvent emitted after the call(s):\n\t- Withdrawn(amountWad,ptIn,assetsOut,matured) (src/PendlePTAdapter.sol#148)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 137, + "end_line": 149 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 146, + "end_line": 146 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 231, + "end_line": 231 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 233, + "end_line": 234 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 239, + "end_line": 239 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 148, + "end_line": 148 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in ExecutionModule._buyRisky(uint256,uint256) (src/ExecutionModule.sol#153-169):\n\tExternal calls:\n\t- safeLeg.provide(deltaWad - fromIdleWad,address(this)) (src/ExecutionModule.sol#161)\n\t- wethOut = _swap(usdc,weth,primaryFee,usdcIn,minWethOut,address(riskyLeg)) (src/ExecutionModule.sol#167)\n\t\t- out = router.exactInputSingle(p) (src/ExecutionModule.sol#204-209)\n\t\t- router.exactInputSingle(p) (src/ExecutionModule.sol#208)\n\tEvent emitted after the call(s):\n\t- RebalanceExecuted(int256(deltaWad),usdcIn,wethOut) (src/ExecutionModule.sol#168)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 153, + "end_line": 169 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 161, + "end_line": 161 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 167, + "end_line": 167 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 204, + "end_line": 209 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 208, + "end_line": 208 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 168, + "end_line": 168 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in SafeLegManager.provide(uint256,address) (src/SafeLegManager.sol#112-137):\n\tExternal calls:\n\t- deliveredAssets += pt.withdraw(fromPt,to) (src/SafeLegManager.sol#134)\n\tEvent emitted after the call(s):\n\t- Provided(to,amountWad,fromBuffer,fromPt) (src/SafeLegManager.sol#136)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 112, + "end_line": 137 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 134, + "end_line": 134 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 136, + "end_line": 136 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in PendlePTAdapter.rollToMarket(address) (src/PendlePTAdapter.sol#157-170):\n\tExternal calls:\n\t- assetsMoved = _exitPt(ptBal,block.timestamp >= maturity,_minAssetsOut(ptBal,_rate())) (src/PendlePTAdapter.sol#163)\n\t\t- (received,None) = router.redeemPyToToken(address(this),yt,ptIn,_tokenOutput(routerMin)) (src/PendlePTAdapter.sol#231)\n\t\t- (received,None,None) = router.swapExactPtForToken(address(this),market,ptIn,_tokenOutput(routerMin),_emptyLimit()) (src/PendlePTAdapter.sol#233-234)\n\t\t- assetsOut = IERC4626Like(redeemToken).redeem(received,address(this),address(this)) (src/PendlePTAdapter.sol#239)\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- IPendleMarket(market_).increaseObservationsCardinalityNext(cardinalityRequired) (src/PendlePTAdapter.sol#182)\n\t- ptOut = _buyPt(assetsMoved) (src/PendlePTAdapter.sol#168)\n\t\t- (netPtOut,None,None) = router.swapExactTokenForPt(address(this),market,minPtOut,approx,input,_emptyLimit()) (src/PendlePTAdapter.sol#209)\n\tEvent emitted after the call(s):\n\t- Deposited(assets,netPtOut) (src/PendlePTAdapter.sol#210)\n\t\t- ptOut = _buyPt(assetsMoved) (src/PendlePTAdapter.sol#168)\n\t- Rolled(oldMarket,newMarket,assetsMoved,ptOut) (src/PendlePTAdapter.sol#169)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 157, + "end_line": 170 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 163, + "end_line": 163 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 231, + "end_line": 231 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 233, + "end_line": 234 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 239, + "end_line": 239 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 182, + "end_line": 182 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 168, + "end_line": 168 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 209, + "end_line": 209 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 210, + "end_line": 210 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 168, + "end_line": 168 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 169, + "end_line": 169 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in PendlePTAdapter._buyPt(uint256) (src/PendlePTAdapter.sol#194-211):\n\tExternal calls:\n\t- (netPtOut,None,None) = router.swapExactTokenForPt(address(this),market,minPtOut,approx,input,_emptyLimit()) (src/PendlePTAdapter.sol#209)\n\tEvent emitted after the call(s):\n\t- Deposited(assets,netPtOut) (src/PendlePTAdapter.sol#210)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 194, + "end_line": 211 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 209, + "end_line": 209 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 210, + "end_line": 210 + } + ] + }, + { + "detector_name": "reentrancy-events", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium", + "description": "Reentrancy in SafeLegManager.rebalanceBuffer() (src/SafeLegManager.sol#141-161):\n\tExternal calls:\n\t- pt.withdraw(need,address(this)) (src/SafeLegManager.sol#157)\n\tEvent emitted after the call(s):\n\t- BufferRebalanced(int256(need)) (src/SafeLegManager.sol#158)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 141, + "end_line": 161 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 157, + "end_line": 157 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 158, + "end_line": 158 + } + ] + } + ], + "reentrancy-no-eth": [ + { + "detector_name": "reentrancy-no-eth", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium", + "description": "Reentrancy in CPPIVault.settleTerm() (src/CPPIVault.sol#385-397):\n\tExternal calls:\n\t- shortfall = controller.settleTerm(nav) (src/CPPIVault.sol#389)\n\tState variables written after the call(s):\n\t- _mint(feeRecipient,feeShares) (src/CPPIVault.sol#394)\n\t\t- sstore(uint256,uint256)(_TOTAL_SUPPLY_SLOT,totalSupplyAfter__mint_asm_0) (lib/solady/src/tokens/ERC20.sol#508)\n\tERC20._TOTAL_SUPPLY_SLOT (lib/solady/src/tokens/ERC20.sol#73) can be used in cross function reentrancies:\n\t- ERC20._burn(address,uint256) (lib/solady/src/tokens/ERC20.sol#529-552)\n\t- ERC20._mint(address,uint256) (lib/solady/src/tokens/ERC20.sol#496-520)\n\t- ERC20.totalSupply() (lib/solady/src/tokens/ERC20.sol#147-152)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 385, + "end_line": 397 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 389, + "end_line": 389 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 394, + "end_line": 394 + }, + { + "file_path": "lib/solady/src/tokens/ERC20.sol", + "start_line": 508, + "end_line": 508 + } + ] + }, + { + "detector_name": "reentrancy-no-eth", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium", + "description": "Reentrancy in PendlePTAdapter.rollToMarket(address) (src/PendlePTAdapter.sol#157-170):\n\tExternal calls:\n\t- assetsMoved = _exitPt(ptBal,block.timestamp >= maturity,_minAssetsOut(ptBal,_rate())) (src/PendlePTAdapter.sol#163)\n\t\t- (received,None) = router.redeemPyToToken(address(this),yt,ptIn,_tokenOutput(routerMin)) (src/PendlePTAdapter.sol#231)\n\t\t- (received,None,None) = router.swapExactPtForToken(address(this),market,ptIn,_tokenOutput(routerMin),_emptyLimit()) (src/PendlePTAdapter.sol#233-234)\n\t\t- assetsOut = IERC4626Like(redeemToken).redeem(received,address(this),address(this)) (src/PendlePTAdapter.sol#239)\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- IPendleMarket(market_).increaseObservationsCardinalityNext(cardinalityRequired) (src/PendlePTAdapter.sol#182)\n\tState variables written after the call(s):\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- market = market_ (src/PendlePTAdapter.sol#186)\n\tPendlePTAdapter.market (src/PendlePTAdapter.sol#53) can be used in cross function reentrancies:\n\t- PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192)\n\t- PendlePTAdapter._buyPt(uint256) (src/PendlePTAdapter.sol#194-211)\n\t- PendlePTAdapter._exitPt(uint256,bool,uint256) (src/PendlePTAdapter.sol#226-242)\n\t- PendlePTAdapter._rate() (src/PendlePTAdapter.sol#218-220)\n\t- PendlePTAdapter.market (src/PendlePTAdapter.sol#53)\n\t- PendlePTAdapter.rollToMarket(address) (src/PendlePTAdapter.sol#157-170)\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- maturity = expiry (src/PendlePTAdapter.sol#189)\n\tPendlePTAdapter.maturity (src/PendlePTAdapter.sol#56) can be used in cross function reentrancies:\n\t- PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192)\n\t- PendlePTAdapter.impliedRateWad() (src/PendlePTAdapter.sol#125-131)\n\t- PendlePTAdapter.maturity (src/PendlePTAdapter.sol#56)\n\t- PendlePTAdapter.rollToMarket(address) (src/PendlePTAdapter.sol#157-170)\n\t- PendlePTAdapter.withdraw(uint256,address) (src/PendlePTAdapter.sol#137-149)\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- pt = pt_ (src/PendlePTAdapter.sol#187)\n\tPendlePTAdapter.pt (src/PendlePTAdapter.sol#54) can be used in cross function reentrancies:\n\t- PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192)\n\t- PendlePTAdapter.pt (src/PendlePTAdapter.sol#54)\n\t- PendlePTAdapter.rollToMarket(address) (src/PendlePTAdapter.sol#157-170)\n\t- PendlePTAdapter.value() (src/PendlePTAdapter.sol#117-121)\n\t- PendlePTAdapter.withdraw(uint256,address) (src/PendlePTAdapter.sol#137-149)\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- ptScale = 10 ** (18 - IERC20DecimalsLike(pt_).decimals()) (src/PendlePTAdapter.sol#190)\n\tPendlePTAdapter.ptScale (src/PendlePTAdapter.sol#57) can be used in cross function reentrancies:\n\t- PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192)\n\t- PendlePTAdapter._buyPt(uint256) (src/PendlePTAdapter.sol#194-211)\n\t- PendlePTAdapter._minAssetsOut(uint256,uint256) (src/PendlePTAdapter.sol#213-216)\n\t- PendlePTAdapter.ptScale (src/PendlePTAdapter.sol#57)\n\t- PendlePTAdapter.value() (src/PendlePTAdapter.sol#117-121)\n\t- PendlePTAdapter.withdraw(uint256,address) (src/PendlePTAdapter.sol#137-149)\n\t- _bindMarket(newMarket) (src/PendlePTAdapter.sol#166)\n\t\t- yt = yt_ (src/PendlePTAdapter.sol#188)\n\tPendlePTAdapter.yt (src/PendlePTAdapter.sol#55) can be used in cross function reentrancies:\n\t- PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192)\n\t- PendlePTAdapter._exitPt(uint256,bool,uint256) (src/PendlePTAdapter.sol#226-242)\n\t- PendlePTAdapter.yt (src/PendlePTAdapter.sol#55)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 157, + "end_line": 170 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 163, + "end_line": 163 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 231, + "end_line": 231 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 233, + "end_line": 234 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 239, + "end_line": 239 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 182, + "end_line": 182 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 186, + "end_line": 186 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 189, + "end_line": 189 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 187, + "end_line": 187 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 190, + "end_line": 190 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 166, + "end_line": 166 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 188, + "end_line": 188 + } + ] + } + ], + "incorrect-shift": [ + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.lnWad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#277-347) contains an incorrect shift operation: r = r ^ byte(uint256,uint256)(0x1f & 0x8421084210842108cc6318c6db6d54be >> x >> r,0xf8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff) (lib/solady/src/utils/FixedPointMathLib.sol#297-298)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 277, + "end_line": 347 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 297, + "end_line": 298 + } + ] + }, + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.lambertW0Wad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#353-434) contains an incorrect shift operation: w = 7 << l_lambertW0Wad_asm_0 /' byte(uint256,uint256)(l_lambertW0Wad_asm_0 - 31,0x0303030303030303040506080c13) (lib/solady/src/utils/FixedPointMathLib.sol#374)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 353, + "end_line": 434 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 374, + "end_line": 374 + } + ] + }, + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.cbrt(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#833-854) contains an incorrect shift operation: z = 0xf << 0xf < x >> r_cbrt_asm_0 << r_cbrt_asm_0 / 3 / 7 ^ r_cbrt_asm_0 % 3 (lib/solady/src/utils/FixedPointMathLib.sol#842)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 833, + "end_line": 854 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 842, + "end_line": 842 + } + ] + }, + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.log2Up(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#940-946) contains an incorrect shift operation: r = r + 1 << r < x (lib/solady/src/utils/FixedPointMathLib.sol#944)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 940, + "end_line": 946 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 944, + "end_line": 944 + } + ] + }, + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.log2(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#924-936) contains an incorrect shift operation: r = r | byte(uint256,uint256)(0x1f & 0x8421084210842108cc6318c6db6d54be >> x >> r,0x0706060506020504060203020504030106050205030304010505030400000000) (lib/solady/src/utils/FixedPointMathLib.sol#933-934)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 924, + "end_line": 936 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 933, + "end_line": 934 + } + ] + }, + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.lambertW0Wad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#353-434) contains an incorrect shift operation: l_lambertW0Wad_asm_0 = l_lambertW0Wad_asm_0 | byte(uint256,uint256)(0x1f & 0x8421084210842108cc6318c6db6d54be >> v_lambertW0Wad_asm_0 >> l_lambertW0Wad_asm_0,0x0706060506020504060203020504030106050205030304010505030400000000) + 49 (lib/solady/src/utils/FixedPointMathLib.sol#372-373)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 353, + "end_line": 434 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 372, + "end_line": 373 + } + ] + }, + { + "detector_name": "incorrect-shift", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High", + "description": "FixedPointMathLib.log256Up(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#998-1004) contains an incorrect shift operation: r = r + 1 << r << 3 < x (lib/solady/src/utils/FixedPointMathLib.sol#1002)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 998, + "end_line": 1004 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1002, + "end_line": 1002 + } + ] + } + ], + "timestamp": [ + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "OracleHub.wstethUsdWad() (src/OracleHub.sol#110-118) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _basisBps(rateBased,poolBased) > maxBasisBps (src/OracleHub.sol#114)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 110, + "end_line": 118 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 114, + "end_line": 114 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.pendingRedeemRequest(uint256,address) (src/CPPIVault.sol#353-356) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- r.epoch == requestId && epochNavPerShare[r.epoch] == 0 (src/CPPIVault.sol#355)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 353, + "end_line": 356 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 355, + "end_line": 355 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "OracleHub.wstethBuyAllowed() (src/OracleHub.sol#120-126) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _basisBps(rateBased,poolBased) <= maxBasisBps (src/OracleHub.sol#125)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 120, + "end_line": 126 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 125, + "end_line": 125 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "OracleHub._freshEthUsd() (src/OracleHub.sol#142-150) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- fresh = block.timestamp <= updatedAt + maxFeedAge (src/OracleHub.sol#146)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 142, + "end_line": 150 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 146, + "end_line": 146 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.rollToMarket(address) (src/PendlePTAdapter.sol#157-170) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- assetsMoved = _exitPt(ptBal,block.timestamp >= maturity,_minAssetsOut(ptBal,_rate())) (src/PendlePTAdapter.sol#163)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 157, + "end_line": 170 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 163, + "end_line": 163 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter._bindMarket(address) (src/PendlePTAdapter.sol#174-192) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- expiry <= block.timestamp (src/PendlePTAdapter.sol#185)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 174, + "end_line": 192 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 185, + "end_line": 185 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.impliedRateWad() (src/PendlePTAdapter.sol#125-131) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp >= maturity (src/PendlePTAdapter.sol#126)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 125, + "end_line": 131 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 126, + "end_line": 126 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault._accrueManagementFee() (src/CPPIVault.sol#429-440) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- managementFeeBps == 0 || feeRecipient == address(0) || last == 0 || totalSupply() == 0 (src/CPPIVault.sol#432)\n\t- elapsed == 0 (src/CPPIVault.sol#434)\n\t- feeWad == 0 (src/CPPIVault.sol#436)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 429, + "end_line": 440 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 432, + "end_line": 432 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 434, + "end_line": 434 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 436, + "end_line": 436 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "OracleHub._basisBps(uint256,uint256) (src/OracleHub.sol#161-166) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- hi == 0 (src/OracleHub.sol#164)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 161, + "end_line": 166 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 164, + "end_line": 164 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIController.settleTerm(uint256) (src/CPPIController.sol#83-90) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp < floorConfig.termEnd (src/CPPIController.sol#85)\n", + "source_locations": [ + { + "file_path": "src/CPPIController.sol", + "start_line": 83, + "end_line": 90 + }, + { + "file_path": "src/CPPIController.sol", + "start_line": 85, + "end_line": 85 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.settleEpoch() (src/CPPIVault.sol#246-270) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _idleWad() < totalReservedPayoutsWad + payoutWad (src/CPPIVault.sol#262)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 246, + "end_line": 270 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 262, + "end_line": 262 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.claimableRedeemRequest(uint256,address) (src/CPPIVault.sol#358-361) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- r.epoch == requestId && epochNavPerShare[r.epoch] != 0 (src/CPPIVault.sol#360)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 358, + "end_line": 361 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 360, + "end_line": 360 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault._claimRedeem(address,address) (src/CPPIVault.sol#327-339) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- price == 0 (src/CPPIVault.sol#331)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 327, + "end_line": 339 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 331, + "end_line": 331 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "PendlePTAdapter.withdraw(uint256,address) (src/PendlePTAdapter.sol#137-149) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- matured = block.timestamp >= maturity (src/PendlePTAdapter.sol#145)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 137, + "end_line": 149 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 145, + "end_line": 145 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.navPerShare() (src/CPPIVault.sol#178-181) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- supply == 0 (src/CPPIVault.sol#180)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 178, + "end_line": 181 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 180, + "end_line": 180 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault._claimDeposit(address,address) (src/CPPIVault.sol#315-325) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- price == 0 (src/CPPIVault.sol#319)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 315, + "end_line": 325 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 319, + "end_line": 319 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.claimableDepositRequest(uint256,address) (src/CPPIVault.sol#348-351) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- r.epoch == requestId && epochNavPerShare[r.epoch] != 0 (src/CPPIVault.sol#350)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 348, + "end_line": 351 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 350, + "end_line": 350 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "OracleHub.ethUsdWad() (src/OracleHub.sol#101-106) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- snapshotEthUsdWad == 0 (src/OracleHub.sol#104)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 101, + "end_line": 106 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 104, + "end_line": 104 + } + ] + }, + { + "detector_name": "timestamp", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium", + "description": "CPPIVault.pendingDepositRequest(uint256,address) (src/CPPIVault.sol#343-346) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- r.epoch == requestId && epochNavPerShare[r.epoch] == 0 (src/CPPIVault.sol#345)\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 343, + "end_line": 346 + }, + { + "file_path": "src/CPPIVault.sol", + "start_line": 345, + "end_line": 345 + } + ] + } + ], + "too-many-digits": [ + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- ! mantissa % 10000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#1017-1020)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1017, + "end_line": 1020 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeTransferAllFrom(address,address,address) (lib/solady/src/utils/SafeTransferLib.sol#301-334) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x0c,0x70a08231000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#310)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 301, + "end_line": 334 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 310, + "end_line": 310 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- ! mantissa % 1000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#1021-1024)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1021, + "end_line": 1024 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeTransferFrom(address,address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#254-272) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x0c,0x23b872dd000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#261)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 254, + "end_line": 272 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 261, + "end_line": 261 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- ! x < 100000 (lib/solady/src/utils/FixedPointMathLib.sol#965-968)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 965, + "end_line": 968 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.balanceOf(address,address) (lib/solady/src/utils/SafeTransferLib.sol#442-456) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0x70a08231000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#446)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 442, + "end_line": 456 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 446, + "end_line": 446 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32) (lib/solady/src/utils/SafeTransferLib.sol#538-592) uses literals with too many digits:\n\t- mstore(uint256,uint256)(m_permit2_asm_0,0x8fcbaf0c000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#573)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 538, + "end_line": 592 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 573, + "end_line": 573 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- ! mantissa % 1000000 (lib/solady/src/utils/FixedPointMathLib.sol#1025-1028)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1025, + "end_line": 1028 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.lambertW0Wad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#353-434) uses literals with too many digits:\n\t- - 0x4000000000000 <= w (lib/solady/src/utils/FixedPointMathLib.sol#361)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 353, + "end_line": 434 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 361, + "end_line": 361 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrtWad(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#872-896) uses literals with too many digits:\n\t- p_cbrtWad_asm_0 = p_cbrtWad_asm_0 * 100000000 (lib/solady/src/utils/FixedPointMathLib.sol#887)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 872, + "end_line": 896 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 887, + "end_line": 887 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeApproveWithRetry(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#411-438) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0x095ea7b3000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#416)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 411, + "end_line": 438 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 416, + "end_line": 416 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeApprove(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#390-405) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0x095ea7b3000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#395)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 390, + "end_line": 405 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 395, + "end_line": 395 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.lambertW0Wad(int256) (lib/solady/src/utils/FixedPointMathLib.sol#353-434) uses literals with too many digits:\n\t- l_lambertW0Wad_asm_0 = l_lambertW0Wad_asm_0 | byte(uint256,uint256)(0x1f & 0x8421084210842108cc6318c6db6d54be >> v_lambertW0Wad_asm_0 >> l_lambertW0Wad_asm_0,0x0706060506020504060203020504030106050205030304010505030400000000) + 49 (lib/solady/src/utils/FixedPointMathLib.sol#372-373)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 353, + "end_line": 434 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 372, + "end_line": 373 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeApproveWithRetry(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#411-438) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0x095ea7b3000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#422)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 411, + "end_line": 438 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 422, + "end_line": 422 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.checkBalanceOf(address,address) (lib/solady/src/utils/SafeTransferLib.sol#461-477) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0x70a08231000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#469)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 461, + "end_line": 477 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 469, + "end_line": 469 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- ! x < 100000000000000000000000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#953-956)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 953, + "end_line": 956 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- mantissa = mantissa / 1000000000000000000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#1014)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1014, + "end_line": 1014 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.trySafeTransferFrom(address,address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#277-295) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x0c,0x23b872dd000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#287)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 277, + "end_line": 295 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 287, + "end_line": 287 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- ! x < 10000000000 (lib/solady/src/utils/FixedPointMathLib.sol#961-964)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 961, + "end_line": 964 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- x = x / 100000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#958)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 958, + "end_line": 958 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32) (lib/solady/src/utils/SafeTransferLib.sol#538-592) uses literals with too many digits:\n\t- mstore(uint256,uint256)(m_permit2_asm_0,0xd505accf000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#582)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 538, + "end_line": 592 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 582, + "end_line": 582 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- x = x / 100000000000000000000000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#954)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 954, + "end_line": 954 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeTransferAll(address,address) (lib/solady/src/utils/SafeTransferLib.sol#358-386) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0xa9059cbb000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#375)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 358, + "end_line": 386 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 375, + "end_line": 375 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32) (lib/solady/src/utils/SafeTransferLib.sol#538-592) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0x7ecebe00000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#568)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 538, + "end_line": 592 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 568, + "end_line": 568 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.permit2TransferFrom(address,address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#508-533) uses literals with too many digits:\n\t- mstore(uint256,uint256)(m_permit2TransferFrom_asm_0,0x36c78516000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#519)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 508, + "end_line": 533 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 519, + "end_line": 519 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- mantissa = mantissa / 10000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#1018)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1018, + "end_line": 1018 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- x = x / 100000 (lib/solady/src/utils/FixedPointMathLib.sol#966)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 966, + "end_line": 966 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- ! mantissa % 1000000000000000000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#1013-1016)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1013, + "end_line": 1016 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- x = x / 10000000000 (lib/solady/src/utils/FixedPointMathLib.sol#962)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 962, + "end_line": 962 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log2(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#924-936) uses literals with too many digits:\n\t- r = r | byte(uint256,uint256)(0x1f & 0x8421084210842108cc6318c6db6d54be >> x >> r,0x0706060506020504060203020504030106050205030304010505030400000000) (lib/solady/src/utils/FixedPointMathLib.sol#933-934)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 924, + "end_line": 936 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 933, + "end_line": 934 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- mantissa = mantissa / 1000000 (lib/solady/src/utils/FixedPointMathLib.sol#1026)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1026, + "end_line": 1026 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.log10(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#950-971) uses literals with too many digits:\n\t- ! x < 100000000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#957-960)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 950, + "end_line": 971 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 957, + "end_line": 960 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.sci(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#1008-1043) uses literals with too many digits:\n\t- mantissa = mantissa / 1000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#1022)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1008, + "end_line": 1043 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 1022, + "end_line": 1022 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.safeTransfer(address,address,uint256) (lib/solady/src/utils/SafeTransferLib.sol#338-354) uses literals with too many digits:\n\t- mstore(uint256,uint256)(0x00,0xa9059cbb000000000000000000000000) (lib/solady/src/utils/SafeTransferLib.sol#343)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 338, + "end_line": 354 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 343, + "end_line": 343 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "FixedPointMathLib.cbrtWad(uint256) (lib/solady/src/utils/FixedPointMathLib.sol#872-896) uses literals with too many digits:\n\t- p_cbrtWad_asm_0 = p_cbrtWad_asm_0 * 100000000000000000 (lib/solady/src/utils/FixedPointMathLib.sol#884)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 872, + "end_line": 896 + }, + { + "file_path": "lib/solady/src/utils/FixedPointMathLib.sol", + "start_line": 884, + "end_line": 884 + } + ] + }, + { + "detector_name": "too-many-digits", + "check": "too-many-digits", + "impact": "Informational", + "confidence": "Medium", + "description": "SafeTransferLib.slitherConstructorConstantVariables() (lib/solady/src/utils/SafeTransferLib.sol#11-683) uses literals with too many digits:\n\t- GAS_STIPEND_NO_GRIEF = 100000 (lib/solady/src/utils/SafeTransferLib.sol#52)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 11, + "end_line": 683 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 52, + "end_line": 52 + } + ] + } + ], + "unindexed-event-address": [ + { + "detector_name": "unindexed-event-address", + "check": "unindexed-event-address", + "impact": "Informational", + "confidence": "High", + "description": "Event CPPIVault.FeesSet(uint16,uint16,address) (src/CPPIVault.sol#85) has address parameters but no indexed parameters\n", + "source_locations": [ + { + "file_path": "src/CPPIVault.sol", + "start_line": 85, + "end_line": 85 + } + ] + } + ], + "uninitialized-local": [ + { + "detector_name": "uninitialized-local", + "check": "uninitialized-local", + "impact": "Medium", + "confidence": "Medium", + "description": "SafeLegManager.onInflow().toPtWad (src/SafeLegManager.sol#95) is a local variable never initialized\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 95, + "end_line": 95 + } + ] + }, + { + "detector_name": "uninitialized-local", + "check": "uninitialized-local", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter.rollToMarket(address).assetsMoved (src/PendlePTAdapter.sol#161) is a local variable never initialized\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 161, + "end_line": 161 + } + ] + }, + { + "detector_name": "uninitialized-local", + "check": "uninitialized-local", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter.rollToMarket(address).ptOut (src/PendlePTAdapter.sol#167) is a local variable never initialized\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 167, + "end_line": 167 + } + ] + } + ], + "unused-return": [ + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "ExecutionModule.rebalanceComposition(uint256,uint256) (src/ExecutionModule.sol#121-149) ignores return value by (wethGot,None) = riskyLeg.provide(moveWad,address(this)) (src/ExecutionModule.sol#133)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 121, + "end_line": 149 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 133, + "end_line": 133 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "ExecutionModule._buyRisky(uint256,uint256) (src/ExecutionModule.sol#153-169) ignores return value by safeLeg.provide(deltaWad - fromIdleWad,address(this)) (src/ExecutionModule.sol#161)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 153, + "end_line": 169 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 161, + "end_line": 161 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "SafeLegManager.rebalanceBuffer() (src/SafeLegManager.sol#141-161) ignores return value by pt.withdraw(need,address(this)) (src/SafeLegManager.sol#157)\n", + "source_locations": [ + { + "file_path": "src/SafeLegManager.sol", + "start_line": 141, + "end_line": 161 + }, + { + "file_path": "src/SafeLegManager.sol", + "start_line": 157, + "end_line": 157 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter._exitPt(uint256,bool,uint256) (src/PendlePTAdapter.sol#226-242) ignores return value by (received,None) = router.redeemPyToToken(address(this),yt,ptIn,_tokenOutput(routerMin)) (src/PendlePTAdapter.sol#231)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 226, + "end_line": 242 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 231, + "end_line": 231 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "OracleHub._freshEthUsd() (src/OracleHub.sol#142-150) ignores return value by (answer,updatedAt) = ethUsdFeed.latestRoundData() (src/OracleHub.sol#143-149)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 142, + "end_line": 150 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 143, + "end_line": 149 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter._buyPt(uint256) (src/PendlePTAdapter.sol#194-211) ignores return value by (netPtOut,None,None) = router.swapExactTokenForPt(address(this),market,minPtOut,approx,input,_emptyLimit()) (src/PendlePTAdapter.sol#209)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 194, + "end_line": 211 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 209, + "end_line": 209 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "PendlePTAdapter._exitPt(uint256,bool,uint256) (src/PendlePTAdapter.sol#226-242) ignores return value by (received,None,None) = router.swapExactPtForToken(address(this),market,ptIn,_tokenOutput(routerMin),_emptyLimit()) (src/PendlePTAdapter.sol#233-234)\n", + "source_locations": [ + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 226, + "end_line": 242 + }, + { + "file_path": "src/PendlePTAdapter.sol", + "start_line": 233, + "end_line": 234 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "OracleHub._poolWethPerWsteth() (src/OracleHub.sol#154-159) ignores return value by (sqrtPriceX96,None,None,None,None,None,None) = wstethWethPool.slot0() (src/OracleHub.sol#155)\n", + "source_locations": [ + { + "file_path": "src/OracleHub.sol", + "start_line": 154, + "end_line": 159 + }, + { + "file_path": "src/OracleHub.sol", + "start_line": 155, + "end_line": 155 + } + ] + }, + { + "detector_name": "unused-return", + "check": "unused-return", + "impact": "Medium", + "confidence": "Medium", + "description": "ExecutionModule.freeAssets(uint256) (src/ExecutionModule.sol#104-115) ignores return value by safeLeg.provide(available,vault) (src/ExecutionModule.sol#113)\n", + "source_locations": [ + { + "file_path": "src/ExecutionModule.sol", + "start_line": 104, + "end_line": 115 + }, + { + "file_path": "src/ExecutionModule.sol", + "start_line": 113, + "end_line": 113 + } + ] + } + ], + "write-after-write": [ + { + "detector_name": "write-after-write", + "check": "write-after-write", + "impact": "Medium", + "confidence": "High", + "description": "SafeTransferLib.permit2(address,address,address,uint256,uint256,uint8,bytes32,bytes32).success (lib/solady/src/utils/SafeTransferLib.sol#548) is written in both\n\tsuccess = call(uint256,uint256,uint256,uint256,uint256,uint256,uint256)(gas()(),token,0,m_permit2_asm_0 + 0x10,0x104,codesize()(),0x00) (lib/solady/src/utils/SafeTransferLib.sol#579)\n\tsuccess = call(uint256,uint256,uint256,uint256,uint256,uint256,uint256)(gas()(),token,0,m_permit2_asm_0 + 0x10,0xe4,codesize()(),0x00) (lib/solady/src/utils/SafeTransferLib.sol#587)\n", + "source_locations": [ + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 548, + "end_line": 548 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 579, + "end_line": 579 + }, + { + "file_path": "lib/solady/src/utils/SafeTransferLib.sol", + "start_line": 587, + "end_line": 587 + } + ] + } + ] + }, + "available_detectors": [ + { + "name": "abiencoderv2-array", + "description": "Storage abiencoderv2 array", + "impact": "High", + "confidence": "High" + }, + { + "name": "arbitrary-send-erc20", + "description": "transferFrom uses arbitrary `from`", + "impact": "High", + "confidence": "High" + }, + { + "name": "arbitrary-send-erc20-permit", + "description": "transferFrom uses arbitrary from with permit", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "arbitrary-send-eth", + "description": "Functions that send Ether to arbitrary destinations", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "array-by-reference", + "description": "Modifying storage array by value", + "impact": "High", + "confidence": "High" + }, + { + "name": "controlled-array-length", + "description": "Tainted array length assignment", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "assembly", + "description": "Assembly usage", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "assert-state-change", + "description": "Assert state change", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "backdoor", + "description": "Function named backdoor (detector example)", + "impact": "High", + "confidence": "High" + }, + { + "name": "weak-prng", + "description": "Weak PRNG", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "boolean-cst", + "description": "Misuse of Boolean constant", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "boolean-equal", + "description": "Comparison to boolean constant", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "shadowing-builtin", + "description": "Built-in symbol shadowing", + "impact": "Low", + "confidence": "High" + }, + { + "name": "cache-array-length", + "description": "Detects `for` loops that use `length` member of some storage array in their loop condition and don't modify it.", + "impact": "Optimization", + "confidence": "High" + }, + { + "name": "chainlink-feed-registry", + "description": "Detect when chainlink feed registry is used", + "impact": "Low", + "confidence": "High" + }, + { + "name": "chronicle-unchecked-price", + "description": "Detect when Chronicle price is not checked.", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "constant-function-asm", + "description": "Constant functions using assembly code", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "constant-function-state", + "description": "Constant functions changing the state", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "pragma", + "description": "If different pragma directives are used", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "controlled-delegatecall", + "description": "Controlled delegatecall destination", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "costly-loop", + "description": "Costly operations in a loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "name": "constable-states", + "description": "State variables that could be declared constant", + "impact": "Optimization", + "confidence": "High" + }, + { + "name": "immutable-states", + "description": "State variables that could be declared immutable", + "impact": "Optimization", + "confidence": "High" + }, + { + "name": "cyclomatic-complexity", + "description": "Detects functions with high (> 11) cyclomatic complexity", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "dead-code", + "description": "Functions that are not used", + "impact": "Informational", + "confidence": "Medium" + }, + { + "name": "delegatecall-loop", + "description": "Payable functions using `delegatecall` inside a loop", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "deprecated-standards", + "description": "Deprecated Solidity Standards", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "divide-before-multiply", + "description": "Imprecise arithmetic operations order", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "domain-separator-collision", + "description": "Detects ERC20 tokens that have a function whose signature collides with EIP-2612's DOMAIN_SEPARATOR()", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "encode-packed-collision", + "description": "ABI encodePacked Collision", + "impact": "High", + "confidence": "High" + }, + { + "name": "enum-conversion", + "description": "Detect dangerous enum conversion", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "external-function", + "description": "Public function that could be declared external", + "impact": "Optimization", + "confidence": "High" + }, + { + "name": "function-init-state", + "description": "Function initializing state variables", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "gelato-unprotected-randomness", + "description": "Call to _requestRandomness within an unprotected function", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "erc20-interface", + "description": "Incorrect ERC20 interfaces", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "erc721-interface", + "description": "Incorrect ERC721 interfaces", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "incorrect-exp", + "description": "Incorrect exponentiation", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "incorrect-return", + "description": "If a `return` is incorrectly used in assembly mode.", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "solc-version", + "description": "Incorrect Solidity version", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "incorrect-equality", + "description": "Dangerous strict equalities", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "incorrect-unary", + "description": "Dangerous unary expressions", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "incorrect-using-for", + "description": "Detects using-for statement usage when no function from a given library matches a given type", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "shadowing-local", + "description": "Local variables shadowing", + "impact": "Low", + "confidence": "High" + }, + { + "name": "locked-ether", + "description": "Contracts that lock ether", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "low-level-calls", + "description": "Low level calls", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "mapping-deletion", + "description": "Deletion on mapping containing a structure", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "events-access", + "description": "Missing Events Access Control", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "events-maths", + "description": "Missing Events Arithmetic", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "missing-inheritance", + "description": "Missing inheritance", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "missing-zero-check", + "description": "Missing Zero Address Validation", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "incorrect-modifier", + "description": "Modifiers that can return the default value", + "impact": "Low", + "confidence": "High" + }, + { + "name": "msg-value-loop", + "description": "msg.value inside a loop", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "calls-loop", + "description": "Multiple calls in a loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "multiple-constructors", + "description": "Multiple constructor schemes", + "impact": "High", + "confidence": "High" + }, + { + "name": "name-reused", + "description": "Contract's name reused", + "impact": "High", + "confidence": "High" + }, + { + "name": "naming-convention", + "description": "Conformity to Solidity naming conventions", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "optimism-deprecation", + "description": "Detect when deprecated Optimism predeploy or function is used.", + "impact": "Low", + "confidence": "High" + }, + { + "name": "out-of-order-retryable", + "description": "Out-of-order retryable transactions", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "variable-scope", + "description": "Local variables used prior their declaration", + "impact": "Low", + "confidence": "High" + }, + { + "name": "protected-vars", + "description": "Detected unprotected variables", + "impact": "High", + "confidence": "High" + }, + { + "name": "public-mappings-nested", + "description": "Public mappings with nested variables", + "impact": "High", + "confidence": "High" + }, + { + "name": "pyth-deprecated-functions", + "description": "Detect Pyth deprecated functions", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "pyth-unchecked-confidence", + "description": "Detect when the confidence level of a Pyth price is not checked", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "pyth-unchecked-publishtime", + "description": "Detect when the publishTime of a Pyth price is not checked", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "redundant-statements", + "description": "Redundant statements", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "reentrancy-balance", + "description": "Reentrancy vulnerabilities leading to outdated balance checks", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "reentrancy-benign", + "description": "Benign reentrancy vulnerabilities", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "reentrancy-eth", + "description": "Reentrancy vulnerabilities (theft of ethers)", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "reentrancy-events", + "description": "Reentrancy vulnerabilities leading to out-of-order Events", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "reentrancy-unlimited-gas", + "description": "Reentrancy vulnerabilities through send and transfer", + "impact": "Informational", + "confidence": "Medium" + }, + { + "name": "reentrancy-no-eth", + "description": "Reentrancy vulnerabilities (no theft of ethers)", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "return-bomb", + "description": "A low level callee may consume all callers gas unexpectedly.", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "return-leave", + "description": "If a `return` is used instead of a `leave`.", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "reused-constructor", + "description": "Reused base constructor", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "rtlo", + "description": "Right-To-Left-Override control character is used", + "impact": "High", + "confidence": "High" + }, + { + "name": "shadowing-abstract", + "description": "State variables shadowing from abstract contracts", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "incorrect-shift", + "description": "The order of parameters in a shift instruction is incorrect.", + "impact": "High", + "confidence": "High" + }, + { + "name": "shadowing-state", + "description": "State variables shadowing", + "impact": "High", + "confidence": "High" + }, + { + "name": "storage-array", + "description": "Signed storage integer array compiler bug", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "suicidal", + "description": "Functions allowing anyone to destruct the contract", + "impact": "High", + "confidence": "High" + }, + { + "name": "tautological-compare", + "description": "Comparing a variable to itself always returns true or false, depending on comparison", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "timestamp", + "description": "Dangerous usage of `block.timestamp`", + "impact": "Low", + "confidence": "Medium" + }, + { + "name": "too-many-digits", + "description": "Conformance to numeric notation best practices", + "impact": "Informational", + "confidence": "Medium" + }, + { + "name": "tx-origin", + "description": "Dangerous usage of `tx.origin`", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "tautology", + "description": "Tautology or contradiction", + "impact": "Medium", + "confidence": "High" + }, + { + "name": "unchecked-lowlevel", + "description": "Unchecked low-level calls", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "unchecked-send", + "description": "Unchecked send", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "unchecked-transfer", + "description": "Unchecked tokens transfer", + "impact": "High", + "confidence": "Medium" + }, + { + "name": "unimplemented-functions", + "description": "Unimplemented functions", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "erc20-indexed", + "description": "Un-indexed ERC20 event parameters", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "unindexed-event-address", + "description": "Events with address parameters but no indexed parameters", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "uninitialized-fptr-cst", + "description": "Uninitialized function pointer calls in constructors", + "impact": "Low", + "confidence": "High" + }, + { + "name": "uninitialized-local", + "description": "Uninitialized local variables", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "uninitialized-state", + "description": "Uninitialized state variables", + "impact": "High", + "confidence": "High" + }, + { + "name": "uninitialized-storage", + "description": "Uninitialized storage variables", + "impact": "High", + "confidence": "High" + }, + { + "name": "unprotected-upgrade", + "description": "Unprotected upgradeable contract", + "impact": "High", + "confidence": "High" + }, + { + "name": "unused-return", + "description": "Unused return values", + "impact": "Medium", + "confidence": "Medium" + }, + { + "name": "unused-state", + "description": "Unused state variables", + "impact": "Informational", + "confidence": "High" + }, + { + "name": "var-read-using-this", + "description": "Contract reads its own variable using `this`", + "impact": "Optimization", + "confidence": "High" + }, + { + "name": "void-cst", + "description": "Constructor called not implemented", + "impact": "Low", + "confidence": "High" + }, + { + "name": "write-after-write", + "description": "Unused write", + "impact": "Medium", + "confidence": "High" + } + ] + } +} \ No newline at end of file diff --git a/src/CPPIController.sol b/src/CPPIController.sol index f0024ef..546357a 100644 --- a/src/CPPIController.sol +++ b/src/CPPIController.sol @@ -130,6 +130,11 @@ contract CPPIController { return floorState.protectedAmount; } + /// @notice Last computed floor (monotone within a term); invariant hook. + function lastFloor() external view returns (uint256) { + return floorState.lastFloor; + } + function maxSurvivableGapBps() external view returns (uint256) { return CPPIMath.maxSurvivableGapBps(multiplierWad); } diff --git a/test/CrashScenarios.t.sol b/test/CrashScenarios.t.sol new file mode 100644 index 0000000..3d78995 --- /dev/null +++ b/test/CrashScenarios.t.sol @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Test} from "forge-std/Test.sol"; +import {CPPIVault, IOracleHealth} from "../src/CPPIVault.sol"; +import {CPPIController} from "../src/CPPIController.sol"; +import {SafeLegManager} from "../src/SafeLegManager.sol"; +import {RiskyLegManager} from "../src/RiskyLegManager.sol"; +import {ExecutionModule} from "../src/ExecutionModule.sol"; +import {OracleHub} from "../src/OracleHub.sol"; +import {FloorPolicy} from "../src/libraries/FloorPolicy.sol"; +import {RebalancePolicy} from "../src/libraries/RebalancePolicy.sol"; +import {IPTAdapter} from "../src/interfaces/IPTAdapter.sol"; +import {ILeg, IExecutionModule, IRateOracle} from "../src/interfaces/IVaultPeriphery.sol"; +import {IPriceSource, ISwapRouter02} from "../src/interfaces/IExecutionPeriphery.sol"; +import {MockUSDC} from "./mocks/Mocks.sol"; +import {Mock18, MockPriceSource, MockSwapRouter} from "./mocks/ExecutionMocks.sol"; +import {MockPTAdapter} from "./SafeLegManager.t.sol"; +import {MockFeed, MockWstRate, MockPool, MockRateAdapter} from "./OracleHub.t.sol"; + +contract MockRateCS { + uint256 public rateWad = 0.04e18; +} + +/// @dev Crash replays against the fully integrated system. The Oct 10 2025 +/// path is the real hourly ETH series from the research harness +/// (cppi-backtest/data/eth_5m_oct10_2025.csv, resampled), embedded as +/// ppm factors of the window open. +contract CrashScenariosTest is Test { + CPPIVault vault; + CPPIController controller; + SafeLegManager safeLeg; + RiskyLegManager riskyLeg; + ExecutionModule exec; + MockPriceSource prices; + MockSwapRouter router; + MockUSDC usdc; + Mock18 weth; + Mock18 wsteth; + MockPTAdapter pt; + + address owner = makeAddr("owner"); + address keeper = makeAddr("keeper"); + address alice = makeAddr("alice"); + + uint256 constant DEPOSIT = 100_000e6; + uint256 constant ETH0 = 2000e18; + + function setUp() public { + vm.warp(1_000_000); + usdc = new MockUSDC(); + weth = new Mock18("WETH"); + wsteth = new Mock18("wstETH"); + prices = new MockPriceSource(); + prices.setEth(ETH0); + router = new MockSwapRouter(prices, address(usdc), address(weth), address(wsteth)); + vault = new CPPIVault(address(usdc), 6, owner); + + FloorPolicy.Config memory fc; + fc.kind = FloorPolicy.Kind.Fixed; + fc.termStart = uint64(block.timestamp); + fc.termEnd = uint64(block.timestamp + 365 days); + fc.protectionWad = 0.9e18; + RebalancePolicy.Config memory rc = RebalancePolicy.Config({ + minInterval: 1 hours, cadence: 1 days, driftSmallBps: 200, driftLargeBps: 500, cushionFloorBps: 300 + }); + controller = new CPPIController(address(vault), 2e18, fc, rc); + safeLeg = new SafeLegManager(address(vault), address(usdc), 6, owner); + pt = new MockPTAdapter(address(usdc)); + riskyLeg = new RiskyLegManager(address(weth), address(wsteth), owner); + exec = new ExecutionModule(address(vault), address(usdc), address(weth), address(wsteth), owner); + + vm.startPrank(owner); + vault.setController(controller); + vault.setPeriphery( + ILeg(address(safeLeg)), + ILeg(address(riskyLeg)), + IExecutionModule(address(exec)), + IRateOracle(address(new MockRateCS())) + ); + vault.setRoles(keeper, keeper); + safeLeg.setPeriphery(IPTAdapter(address(pt)), address(exec), keeper); + riskyLeg.setPeriphery(IPriceSource(address(prices)), address(exec), keeper); + exec.setPeriphery(safeLeg, riskyLeg, IPriceSource(address(prices)), ISwapRouter02(address(router)), keeper); + vm.stopPrank(); + + usdc.mint(address(router), 100_000_000e6); + weth.mint(address(router), 100_000e18); + wsteth.mint(address(router), 100_000e18); + + usdc.mint(alice, DEPOSIT); + vm.startPrank(alice); + usdc.approve(address(vault), type(uint256).max); + vault.requestDeposit(DEPOSIT); + vm.stopPrank(); + vm.prank(keeper); + vault.settleEpoch(); + vm.prank(alice); + vault.claimShares(); + vm.prank(keeper); + vault.startTerm(365 days); + vault.rebalance(); + } + + function _try(address caller) internal { + vm.prank(caller); + try vault.rebalance() {} catch {} + } + + /// @notice The real Oct 10-11 2025 hourly ETH path (ppm of window open). + function _oct10Path() internal pure returns (uint32[37] memory f) { + f = [ + uint32(1000000), + 998329, + 995090, + 992337, + 991734, + 997179, + 987970, + 986918, + 992106, + 986628, + 991369, + 991399, + 992659, + 994384, + 977093, + 936633, + 937976, + 934547, + 925386, + 912539, + 883717, + 901680, + 880017, + 874226, + 876225, + 852227, + 876839, + 865674, + 872130, + 865038, + 863282, + 858039, + 870948, + 874146, + 875177, + 876570, + 872810 + ]; + } + + function test_oct10_2025_hourlyReplay_floorHolds() public { + uint32[37] memory path = _oct10Path(); + uint256 minGap = type(uint256).max; + for (uint256 i = 1; i < path.length; ++i) { + prices.setEth(ETH0 * path[i] / 1e6); + vm.warp(block.timestamp + 1 hours); + _try(keeper); + uint256 nav = vault.shareholderNav(); + uint256 floor = controller.lastFloor(); + assertGe(nav + 1e15, floor, "floor pierced during Oct 10 replay"); + if (nav > floor && nav - floor < minGap) minGap = nav - floor; + } + // survived the worst crypto liquidation day with margin to spare + assertGt(minGap, 3_000e18); + } + + function test_march2020_gap44_floorHolds_thenRecovers() public { + // one-move -44% (March 12 2020 magnitude): below the 50% wipe at m=2 + vm.warp(block.timestamp + 2 hours); + prices.setEth(ETH0 * 56 / 100); + _try(makeAddr("rando")); // permissionless emergency + uint256 nav = vault.shareholderNav(); + assertGe(nav + 1e15, controller.lastFloor(), "floor pierced on 44% gap"); + // deep de-risk: cushion collapsed, exposure follows + assertLt(riskyLeg.value() * 1e18 / nav, 0.12e18); + + // recovery: +30% off the bottom, vault re-risks on the way up + vm.warp(block.timestamp + 1 days); + prices.setEth(ETH0 * 56 * 130 / 10_000); + _try(keeper); + assertGt(riskyLeg.value() * 1e18 / vault.shareholderNav(), 0.05e18); + + // inject the ~4% PT carry the mock omits (the real adapter accretes + // to par by construction; the backtest models this as SAFE_APY) + pt.simulateYield(2_950e18); + vm.warp(block.timestamp + 366 days); + vm.prank(keeper); + assertEq(vault.settleTerm(), 0); + } + + function test_gap55_breachIsBounded_notCatastrophic() public { + // beyond the 1/m = 50% survivable gap: the floor breaks, but the + // damage is m x (gap - 1/m) of the cushion, not the whole cushion + vm.warp(block.timestamp + 2 hours); + prices.setEth(ETH0 * 45 / 100); + _try(makeAddr("rando")); + + uint256 nav = vault.shareholderNav(); + uint256 floor = controller.lastFloor(); + assertLt(nav, floor, "55% gap should breach"); + // fully de-risked at cash-lock + assertLt(riskyLeg.value() * 1e18 / nav, 0.02e18); + + vm.warp(block.timestamp + 366 days); + vm.prank(keeper); + uint256 shortfall = vault.settleTerm(); + // breached, but bounded: well under the naive full-cushion loss + // (mock PT carries no yield, so the accretion that would narrow the + // gap in production is absent here; bound accounts for that) + assertGt(shortfall, 1_000e18); + assertLt(shortfall, 6_000e18); + } + + function test_wstethDepeg_buysBlocked_sellsUnaffected() public { + vm.prank(owner); + riskyLeg.setWstethTarget(3000); + vm.prank(keeper); + exec.rebalanceComposition(100_000e18, 50); + assertGt(riskyLeg.wstethShareBps(), 2500); + + // depeg: wstETH marked down 6%, oracle blocks further buys + prices.setWsteth(prices.wstethUsdWad() * 94 / 100); + prices.setBuyAllowed(false); + uint256 shareBefore = riskyLeg.wstethShareBps(); + vm.prank(keeper); + exec.rebalanceComposition(100_000e18, 50); // must be a no-op on buys + assertLe(riskyLeg.wstethShareBps(), shareBefore + 10); + + // de-risking still works and sells the discounted asset last + vm.warp(block.timestamp + 2 hours); + prices.setEth(ETH0 * 60 / 100); + _try(makeAddr("rando")); + assertGe(vault.shareholderNav() + 1e15, controller.lastFloor()); + } + + function test_oracleStaleness_gatesDeposits_defenseContinues() public { + // wire a real OracleHub (mock feed) as the vault's health source + MockFeed feed = new MockFeed(); + MockWstRate wr = new MockWstRate(); + MockPool pool = new MockPool(); + pool.setRatioWad(1.2e18); + OracleHub hub = new OracleHub(address(feed), address(wr), address(pool), true, owner); + hub.refresh(); + vm.prank(owner); + vault.setHealthSource(IOracleHealth(address(hub))); + + // feed goes stale: new user flows pause + vm.warp(block.timestamp + 3 hours); + vm.prank(alice); + vm.expectRevert(CPPIVault.OracleUnhealthy.selector); + vault.requestDeposit(1e6); + + // but the floor defense is untouched: crash + permissionless rebalance + prices.setEth(ETH0 * 55 / 100); + _try(makeAddr("rando")); + assertGe(vault.shareholderNav() + 1e15, controller.lastFloor()); + } +} diff --git a/test/Invariants.t.sol b/test/Invariants.t.sol new file mode 100644 index 0000000..20b357a --- /dev/null +++ b/test/Invariants.t.sol @@ -0,0 +1,253 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Test} from "forge-std/Test.sol"; +import {CPPIVault, IOracleHealth} from "../src/CPPIVault.sol"; +import {CPPIController} from "../src/CPPIController.sol"; +import {SafeLegManager} from "../src/SafeLegManager.sol"; +import {RiskyLegManager} from "../src/RiskyLegManager.sol"; +import {ExecutionModule} from "../src/ExecutionModule.sol"; +import {FloorPolicy} from "../src/libraries/FloorPolicy.sol"; +import {RebalancePolicy} from "../src/libraries/RebalancePolicy.sol"; +import {IPTAdapter} from "../src/interfaces/IPTAdapter.sol"; +import {ILeg, IExecutionModule, IRateOracle} from "../src/interfaces/IVaultPeriphery.sol"; +import {IPriceSource, ISwapRouter02} from "../src/interfaces/IExecutionPeriphery.sol"; +import {MockUSDC} from "./mocks/Mocks.sol"; +import {Mock18, MockPriceSource, MockSwapRouter} from "./mocks/ExecutionMocks.sol"; +import {MockPTAdapter} from "./SafeLegManager.t.sol"; + +contract MockRateInv { + uint256 public rateWad = 0.04e18; +} + +/// @dev Stateful-fuzz handler over the fully integrated system. Every action +/// keeps its own preconditions so runs stay meaningful, and post-action +/// assertions enforce the properties that only hold at action boundaries +/// (post-rebalance drift, cash-lock de-risking). +contract VaultHandler is Test { + CPPIVault public vault; + CPPIController public controller; + SafeLegManager public safeLeg; + RiskyLegManager public riskyLeg; + MockPriceSource public prices; + MockUSDC public usdc; + MockPTAdapter public pt; + + address public keeper; + address public alice = address(0xA11CE); + uint256 public ghostLastFloor; + uint256 public rebalances; + + uint256 constant MIN_ETH = 50e18; + uint256 constant MAX_ETH = 100_000e18; + + constructor( + CPPIVault vault_, + CPPIController controller_, + SafeLegManager safeLeg_, + RiskyLegManager riskyLeg_, + MockPriceSource prices_, + MockUSDC usdc_, + MockPTAdapter pt_, + address keeper_ + ) { + vault = vault_; + controller = controller_; + safeLeg = safeLeg_; + riskyLeg = riskyLeg_; + prices = prices_; + usdc = usdc_; + pt = pt_; + keeper = keeper_; + } + + function movePrice(int256 pctBps) external { + // single-step move in [-60%, +60%]: beyond the 1/m survivable gap + pctBps = bound(pctBps, -6000, 6000); + uint256 eth = prices.ethUsdWad(); + uint256 next = eth * uint256(int256(10_000) + pctBps) / 10_000; + if (next < MIN_ETH) next = MIN_ETH; + if (next > MAX_ETH) next = MAX_ETH; + prices.setEth(next); + prices.setWsteth(next * 12 / 10); + } + + function warp(uint256 hrs) external { + hrs = bound(hrs, 1, 72); + vm.warp(block.timestamp + hrs * 1 hours); + } + + function deposit(uint256 assets) external { + assets = bound(assets, 1e6, 100_000e6); + if (vault.pendingDepositRequest(uint256(vault.currentEpoch()), alice) == 0) { + (uint64 epoch, uint192 amt) = vault.depositRequests(alice); + if (amt != 0 && epoch != vault.currentEpoch()) return; // unclaimed earlier epoch + } + usdc.mint(alice, assets); + vm.startPrank(alice); + usdc.approve(address(vault), assets); + vault.requestDeposit(assets); + vm.stopPrank(); + } + + function redeem(uint256 shares) external { + uint256 bal = vault.balanceOf(alice); + if (bal == 0) return; + (uint64 epoch, uint192 amt) = vault.redeemRequests(alice); + if (amt != 0 && epoch != vault.currentEpoch()) return; + shares = bound(shares, 1, bal); + vm.prank(alice); + vault.requestRedeem(shares); + } + + function settleAndClaim() external { + uint256 pendingDeposits = vault.totalPendingDepositsWad(); + uint256 pendingRedeems = vault.totalPendingRedeemShares(); + if (pendingDeposits == 0 && pendingRedeems == 0) return; + + if (pendingRedeems > 0) { + uint256 needWad = pendingRedeems * vault.navPerShare() / 1e18; + vm.prank(keeper); + try vault.freeAssets(needWad * 10_100 / 10_000) {} catch {} + } + vm.prank(keeper); + try vault.settleEpoch() {} + catch { + return; + } + vm.startPrank(alice); + try vault.claimShares() {} catch {} + try vault.claimAssets() {} catch {} + vm.stopPrank(); + } + + function rebalance() external { + vm.prank(keeper); + try vault.rebalance() {} + catch { + return; + } + rebalances++; + // floor monotonicity checkpoint (floor state only moves in assess) + uint256 f = controller.lastFloor(); + assertGe(f, ghostLastFloor, "floor decreased across rebalance"); + ghostLastFloor = f; + // post-rebalance: exposure sits on target (within band + trade dust) + uint256 nav = vault.shareholderNav(); + if (nav == 0) return; + uint256 floor = controller.lastFloor(); + uint256 target = nav > floor ? 2 * (nav - floor) : 0; + if (target > nav) target = nav; + uint256 risky = riskyLeg.value(); + uint256 drift = risky > target ? risky - target : target - risky; + assertLe(drift * 10_000 / nav, 250, "post-rebalance drift beyond band"); + // cash-lock: when the cushion is spent, the vault must be de-risked + if (nav <= floor) { + assertLe(risky * 10_000 / nav, 100, "cash-locked but still exposed"); + } + } +} + +contract InvariantsTest is Test { + CPPIVault vault; + CPPIController controller; + SafeLegManager safeLeg; + RiskyLegManager riskyLeg; + ExecutionModule exec; + MockPriceSource prices; + MockSwapRouter router; + MockUSDC usdc; + Mock18 weth; + Mock18 wsteth; + MockPTAdapter pt; + VaultHandler handler; + + address owner = makeAddr("owner"); + address keeper = makeAddr("keeper"); + + function setUp() public { + vm.warp(1_000_000); + usdc = new MockUSDC(); + weth = new Mock18("WETH"); + wsteth = new Mock18("wstETH"); + prices = new MockPriceSource(); + router = new MockSwapRouter(prices, address(usdc), address(weth), address(wsteth)); + vault = new CPPIVault(address(usdc), 6, owner); + + FloorPolicy.Config memory fc; + fc.kind = FloorPolicy.Kind.Fixed; + fc.termStart = uint64(block.timestamp); + fc.termEnd = uint64(block.timestamp + 365 days); + fc.protectionWad = 0.9e18; + RebalancePolicy.Config memory rc = RebalancePolicy.Config({ + minInterval: 1 hours, cadence: 1 days, driftSmallBps: 200, driftLargeBps: 500, cushionFloorBps: 300 + }); + controller = new CPPIController(address(vault), 2e18, fc, rc); + safeLeg = new SafeLegManager(address(vault), address(usdc), 6, owner); + pt = new MockPTAdapter(address(usdc)); + riskyLeg = new RiskyLegManager(address(weth), address(wsteth), owner); + exec = new ExecutionModule(address(vault), address(usdc), address(weth), address(wsteth), owner); + + vm.startPrank(owner); + vault.setController(controller); + vault.setPeriphery( + ILeg(address(safeLeg)), + ILeg(address(riskyLeg)), + IExecutionModule(address(exec)), + IRateOracle(address(new MockRateInv())) + ); + vault.setRoles(keeper, keeper); + safeLeg.setPeriphery(IPTAdapter(address(pt)), address(exec), keeper); + riskyLeg.setPeriphery(IPriceSource(address(prices)), address(exec), keeper); + exec.setPeriphery(safeLeg, riskyLeg, IPriceSource(address(prices)), ISwapRouter02(address(router)), keeper); + vm.stopPrank(); + + // router float + usdc.mint(address(router), 100_000_000e6); + weth.mint(address(router), 100_000e18); + wsteth.mint(address(router), 100_000e18); + + // seed the vault and start a term so rebalances are live + handler = new VaultHandler(vault, controller, safeLeg, riskyLeg, prices, usdc, pt, keeper); + handler.deposit(100_000e6); + handler.settleAndClaim(); + vm.prank(keeper); + vault.startTerm(365 days); + handler.rebalance(); + + targetContract(address(handler)); + } + + /// forge-config: default.invariant.runs = 48 + /// forge-config: default.invariant.depth = 32 + /// forge-config: default.invariant.fail-on-revert = false + + /// @dev Spec invariant 2: the floor never decreases within a term. + function invariant_floorMonotone() public view { + uint256 floor = controller.lastFloor(); + assertGe(floor, handler.ghostLastFloor()); + } + + /// @dev Reserved payouts and pending deposit cash must physically sit in + /// the vault at all times (spec invariant 6 discipline). + function invariant_owedCashCovered() public view { + uint256 idleWad = usdc.balanceOf(address(vault)) * 1e12; + assertGe( + idleWad + 1e13, vault.totalReservedPayoutsWad() + vault.totalPendingDepositsWad(), "owed cash not covered" + ); + } + + /// @dev Accounting identity: shareholder NAV + owed = total system value. + function invariant_navAccountingIdentity() public view { + uint256 total = vault.totalNav(); + uint256 parts = vault.shareholderNav() + vault.totalPendingDepositsWad() + vault.totalReservedPayoutsWad(); + assertApproxEqAbs(total, parts, 1e13); + } + + /// @dev Shares are always backed: positive supply implies positive NAV. + function invariant_sharesBacked() public view { + if (vault.totalSupply() > 0) { + assertGt(vault.navPerShare(), 0); + } + } +} diff --git a/test/SafeLegManager.t.sol b/test/SafeLegManager.t.sol index 36aaf3f..09cacc0 100644 --- a/test/SafeLegManager.t.sol +++ b/test/SafeLegManager.t.sol @@ -35,6 +35,13 @@ contract MockPTAdapter is IPTAdapter { valueWad += assets * 1e12; } + /// @dev The real PT accretes toward par; this mock does not. Scenario + /// tests inject that carry explicitly so maturity math is faithful. + function simulateYield(uint256 amountWad) external { + valueWad += amountWad; + MockUSDC(usdc).mint(address(this), amountWad / 1e12); + } + function withdraw(uint256 amountWad, address to) external returns (uint256 assetsOut) { valueWad -= amountWad; assetsOut = (amountWad * (10_000 - haircutBps) / 10_000) / 1e12;