Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f3febbb
init (lockup) specs
alxstrata Dec 15, 2025
3bf6d35
init (lockup + exit mode) implementation
alxstrata Jan 5, 2026
e157b7a
add (Tranche) Exit event to track exitModes, fees and cooldowns
alxstrata Jan 7, 2026
652a5c1
fix (Tranche) validate users exit params
alxstrata Jan 9, 2026
219880e
docs (StrataCDO) revisit public functions
alxstrata Jan 9, 2026
ad26a5e
fix (#5 burnSharesAsFee) ensure min shares
alxstrata Jan 12, 2026
7ce9e32
feat: WIP SteakhouseUSDC
vivekascoder Jan 6, 2026
6b4de65
forge install: v4-core
vivekascoder Jan 7, 2026
3235d1d
forge install: v4-periphery
vivekascoder Jan 7, 2026
83c5e65
forge install: permit2
vivekascoder Jan 7, 2026
3311373
forge install: universal-router
vivekascoder Jan 7, 2026
bd2ff68
forge install: v3-core
vivekascoder Jan 7, 2026
156f0d9
forge install: v2-core
vivekascoder Jan 7, 2026
5e61e41
forge install: openzeppelin-contracts
vivekascoder Jan 7, 2026
d226bac
feat: swap v4 + fork test
vivekascoder Jan 10, 2026
95479f7
feat: update SwapContract and SteakhouseUSDC to support new reward cl…
vivekascoder Jan 11, 2026
a9d193d
revert changes in deployments
vivekascoder Jan 12, 2026
9b00e47
feat: withdraw from latest changes onto sUSDeStrategy
vivekascoder Jan 12, 2026
e444d7a
feat: add morpho-blue submodule for enhanced functionality
vivekascoder Jan 14, 2026
d2f3058
chore: update remappings and submodule references;
vivekascoder Jan 14, 2026
4f48e26
chore: morpho strategy contract changed to generic name, deployment s…
vivekascoder Jan 16, 2026
0dd659a
feat: implement vesting mechanism for reward deposits in MorphoStrate…
vivekascoder Jan 16, 2026
ea14cf0
refactor: rename vault to morphoVault in MorphoStrategy contract for …
vivekascoder Jan 16, 2026
fd7ad4d
feat: extend MorphoStrategy constructor to include distributor, swap …
vivekascoder Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/workflows/olympix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Integrated Security Workflow
on: push
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Olympix Integrated Security
uses: olympix/integrated-security@main
env:
OLYMPIX_API_TOKEN: ${{ secrets.OLYMPIX_API_TOKEN }}
with:
args: -f json --no-uninitialized-state-variable --no-default-visibility --no-missing-revert-reason-tests
24 changes: 24 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,27 @@
[submodule "lib/chimera"]
path = lib/chimera
url = https://github.com/recon-fuzz/chimera
[submodule "lib/v4-core"]
path = lib/v4-core
url = https://github.com/uniswap/v4-core
[submodule "lib/v4-periphery"]
path = lib/v4-periphery
url = https://github.com/uniswap/v4-periphery
[submodule "lib/permit2"]
path = lib/permit2
url = https://github.com/uniswap/permit2
[submodule "lib/universal-router"]
path = lib/universal-router
url = https://github.com/uniswap/universal-router
[submodule "lib/v3-core"]
path = lib/v3-core
url = https://github.com/uniswap/v3-core
[submodule "lib/v2-core"]
path = lib/v2-core
url = https://github.com/uniswap/v2-core
[submodule "lib/openzeppelin-contracts"]
path = lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "lib/morpho-blue"]
path = lib/morpho-blue
url = https://github.com/morpho-org/morpho-blue
18 changes: 18 additions & 0 deletions .olympix-ignore.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"IgnoredVulnerabilities" : {
"missing-revert-reason-tests" : {
"contracts" : []
},
"reentrancy" : {
"contracts/tranches/Accounting.sol" : [330, 393],
"contracts/tranches/StrataCDO.sol" : [392],
"contracts/tranches/base/cooldown/UnstakeCooldown.sol": [113]
}
},
"IgnoredPaths": [
"contracts/test",
"contracts/oz",
"contracts/lens",
"test/PoC"
]
}
150 changes: 76 additions & 74 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,76 +1,78 @@
{
"recon.foundryConfigPath": "foundry.toml",
"recon.defaultFuzzer": "medusa",
"security.olympix.detectors.arbitraryAddressSpoofingAttack": true,
"security.olympix.detectors.arbitraryTransferFrom": true,
"security.olympix.detectors.noAccessControlPayableFallback": true,
"security.olympix.detectors.ownerSinglePointOfFailure": true,
"security.olympix.detectors.anyTxOrigin": true,
"security.olympix.detectors.faultyDiv": true,
"security.olympix.detectors.enumConversionOutOfRange": true,
"security.olympix.detectors.uintToIntConversion": true,
"security.olympix.detectors.downcastOfNumberToAddress": true,
"security.olympix.detectors.unsafeDowncast": true,
"security.olympix.detectors.swappedShiftParams": true,
"security.olympix.detectors.unaryPlusExpression": true,
"security.olympix.detectors.uncheckedBlockWithSubtraction": true,
"security.olympix.detectors.assemblyReturnInsteadOfLeave": true,
"security.olympix.detectors.callsAssemblyReturn": true,
"security.olympix.detectors.delegateCallInLoop": true,
"security.olympix.detectors.emptyPayableFallback": true,
"security.olympix.detectors.lowLevelCallParamsVerified": true,
"security.olympix.detectors.improperDiamondPattern": true,
"security.olympix.detectors.missingGapVariable": true,
"security.olympix.detectors.unenforcedStateMaintenanceKeywords": true,
"security.olympix.detectors.unboundedPragma": true,
"security.olympix.detectors.directionalOverrideCharacter": true,
"security.olympix.detectors.abiEncodePackedDynamicTypes": true,
"security.olympix.detectors.callsInLoop": true,
"security.olympix.detectors.callWithoutGasBudget": true,
"security.olympix.detectors.msgValueReuse": true,
"security.olympix.detectors.abiEncoderArray": true,
"security.olympix.detectors.blockRandomness": true,
"security.olympix.project.includePath": "/contracts",
"security.olympix.project.testsPath": "/test",
"security.olympix.project.opixTestDir": "/test/auto",
"security.olympix.detectors.arbitraryDelegatecall": true,
"security.olympix.detectors.increasingLengthArrayAsLoopVariable": true,
"security.olympix.detectors.noParameterValidationInConstructor": true,
"security.olympix.detectors.reentrancy": true,
"security.olympix.detectors.reentrancyEvents": true,
"security.olympix.detectors.uncheckedLowLevel": true,
"security.olympix.detectors.uncheckedSend": true,
"security.olympix.detectors.uncheckedTokenTransfer": true,
"security.olympix.detectors.unsafeSelfDestruct": true,
"security.olympix.detectors.unusedReturnFunctionCall": true,
"security.olympix.detectors.signatureReplayAttacks": true,
"security.olympix.detectors.arrayLengthAssignment": true,
"security.olympix.detectors.arrayParameterLocation": true,
"security.olympix.detectors.nestedStructInMapping": true,
"security.olympix.detectors.insufficientParameterAssertion": true,
"security.olympix.detectors.uninitializedFunctionPointerConstructor": true,
"security.olympix.detectors.uninitializedLocalStorage": true,
"security.olympix.detectors.uninitializedStateVariable": true,
"security.olympix.detectors.structWithMappingDeletion": true,
"security.olympix.detectors.signedIntegerArray": true,
"security.olympix.detectors.erc20Interface": true,
"security.olympix.detectors.erc721Interface": true,
"security.olympix.detectors.functionSelectorClash": true,
"security.olympix.detectors.defaultVisibility": true,
"security.olympix.detectors.missingRevertReasonTests": true,
"security.olympix.detectors.multipleConstructors": true,
"security.olympix.detectors.sameNamedContracts": true,
"security.olympix.detectors.shadowingBuiltin": true,
"security.olympix.detectors.shadowingReservedKeyword": true,
"security.olympix.detectors.shadowingState": true,
"security.olympix.detectors.arbitrarySendEther": true,
"security.olympix.detectors.etherBalanceCheckStrictEquality": true,
"security.olympix.detectors.eventsPriceChange": true,
"security.olympix.detectors.externalCallPotentialOutOfGas": true,
"security.olympix.detectors.expectsOptionalErc20Functionality": true,
"security.olympix.detectors.lockedEther": true,
"security.olympix.detectors.possibleDivisionByZero": true,
"security.olympix.detectors.zeroAsParameter": true,
"security.olympix.detectors.oracleManipulation": true,
"security.olympix.project.useAiToPruneFindings": true
// "files.exclude": {
// "**/lib": true
// },
"security.olympix.detectors.arbitraryAddressSpoofingAttack": true,
"security.olympix.detectors.arbitraryTransferFrom": true,
"security.olympix.detectors.noAccessControlPayableFallback": true,
"security.olympix.detectors.ownerSinglePointOfFailure": true,
"security.olympix.detectors.anyTxOrigin": true,
"security.olympix.detectors.faultyDiv": true,
"security.olympix.detectors.enumConversionOutOfRange": true,
"security.olympix.detectors.uintToIntConversion": true,
"security.olympix.detectors.downcastOfNumberToAddress": true,
"security.olympix.detectors.unsafeDowncast": true,
"security.olympix.detectors.swappedShiftParams": true,
"security.olympix.detectors.unaryPlusExpression": true,
"security.olympix.detectors.uncheckedBlockWithSubtraction": true,
"security.olympix.detectors.assemblyReturnInsteadOfLeave": true,
"security.olympix.detectors.callsAssemblyReturn": true,
"security.olympix.detectors.delegateCallInLoop": true,
"security.olympix.detectors.emptyPayableFallback": true,
"security.olympix.detectors.lowLevelCallParamsVerified": true,
"security.olympix.detectors.improperDiamondPattern": true,
"security.olympix.detectors.missingGapVariable": true,
"security.olympix.detectors.unenforcedStateMaintenanceKeywords": true,
"security.olympix.detectors.unboundedPragma": true,
"security.olympix.detectors.directionalOverrideCharacter": true,
"security.olympix.detectors.abiEncodePackedDynamicTypes": true,
"security.olympix.detectors.callsInLoop": true,
"security.olympix.detectors.callWithoutGasBudget": true,
"security.olympix.detectors.msgValueReuse": true,
"security.olympix.detectors.abiEncoderArray": true,
"security.olympix.detectors.blockRandomness": true,
"security.olympix.project.includePath": "/contracts",
"security.olympix.project.testsPath": "/test",
"security.olympix.project.opixTestDir": "/test/auto",
"security.olympix.detectors.arbitraryDelegatecall": true,
"security.olympix.detectors.increasingLengthArrayAsLoopVariable": true,
"security.olympix.detectors.noParameterValidationInConstructor": true,
"security.olympix.detectors.reentrancy": true,
"security.olympix.detectors.reentrancyEvents": true,
"security.olympix.detectors.uncheckedLowLevel": true,
"security.olympix.detectors.uncheckedSend": true,
"security.olympix.detectors.uncheckedTokenTransfer": true,
"security.olympix.detectors.unsafeSelfDestruct": true,
"security.olympix.detectors.unusedReturnFunctionCall": true,
"security.olympix.detectors.signatureReplayAttacks": true,
"security.olympix.detectors.arrayLengthAssignment": true,
"security.olympix.detectors.arrayParameterLocation": true,
"security.olympix.detectors.nestedStructInMapping": true,
"security.olympix.detectors.insufficientParameterAssertion": true,
"security.olympix.detectors.uninitializedFunctionPointerConstructor": true,
"security.olympix.detectors.uninitializedLocalStorage": true,
"security.olympix.detectors.uninitializedStateVariable": true,
"security.olympix.detectors.structWithMappingDeletion": true,
"security.olympix.detectors.signedIntegerArray": true,
"security.olympix.detectors.erc20Interface": true,
"security.olympix.detectors.erc721Interface": true,
"security.olympix.detectors.functionSelectorClash": true,
"security.olympix.detectors.defaultVisibility": true,
"security.olympix.detectors.missingRevertReasonTests": true,
"security.olympix.detectors.multipleConstructors": true,
"security.olympix.detectors.sameNamedContracts": true,
"security.olympix.detectors.shadowingBuiltin": true,
"security.olympix.detectors.shadowingReservedKeyword": true,
"security.olympix.detectors.shadowingState": true,
"security.olympix.detectors.arbitrarySendEther": true,
"security.olympix.detectors.etherBalanceCheckStrictEquality": true,
"security.olympix.detectors.eventsPriceChange": true,
"security.olympix.detectors.externalCallPotentialOutOfGas": true,
"security.olympix.detectors.expectsOptionalErc20Functionality": true,
"security.olympix.detectors.lockedEther": true,
"security.olympix.detectors.possibleDivisionByZero": true,
"security.olympix.detectors.zeroAsParameter": true,
"security.olympix.detectors.oracleManipulation": true,
"security.olympix.project.useAiToPruneFindings": true,
"security.olympix.detectors.missingEventsAssertion": false
}
9 changes: 9 additions & 0 deletions contracts/tranches/Accounting.sol
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,15 @@ contract Accounting is IAccounting, CDOComponent {
}

function maxWithdraw(bool isJrt) external view returns (uint256) {
return maxWithdrawInner(isJrt, false);
}
function maxWithdraw(bool isJrt, bool ownerIsSharesCooldown) external view returns (uint256) {
return maxWithdrawInner(isJrt, ownerIsSharesCooldown);
}
function maxWithdrawInner(bool isJrt, bool ownerIsSharesCooldown) internal view returns (uint256) {
if (ownerIsSharesCooldown) {
return isJrt ? jrtNav : srtNav;
}
if (isJrt) {
uint256 minJrt = srtNav * minimumJrtSrtRatio / 1e18;
return Math.saturatingSub(jrtNav, minJrt);
Expand Down
Loading