Skip to content

fix: Decommissioning zero-state vaults with empty portfolio#230

Merged
matteoettam09 merged 1 commit into
mainfrom
dev
Jun 8, 2026
Merged

fix: Decommissioning zero-state vaults with empty portfolio#230
matteoettam09 merged 1 commit into
mainfrom
dev

Conversation

@matteoettam09

@matteoettam09 matteoettam09 commented Jun 8, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • Bug Fixes

    • Updated vault decommissioning finalization condition to recognize additional states where portfolios are fully liquidated.
  • Tests

    • Added test suite covering vault decommissioning completion scenarios, including edge cases with zero portfolios and non-underlying positions.

@coderabbitai

coderabbitai Bot commented Jun 8, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The PR expands vault decommissioning completion logic to recognize empty portfolios with zero assets as fully liquidated, alongside the existing single-underlying-asset condition. A test harness method is added for direct testing, supported by a comprehensive test suite validating state transitions across zero-state, 100% underlying, and blocked-completion scenarios.

Changes

Vault Decommissioning Portfolio Liquidation

Layer / File(s) Summary
Portfolio liquidation condition expansion
contracts/LiquidityOrchestrator.sol
The portfolioLiquidated check in _processSingleVaultOperations now recognizes portfolios as fully liquidated when either a single position equals the underlying asset (existing behavior) or when token count is zero and final total assets are zero (new behavior), enabling decommissioning finalization under these expanded conditions.
Test harness method exposure
contracts/test/LiquidityOrchestratorHarness.sol
A new external function exposed_processSingleVaultOperations delegates vault operation parameters to the internal _processSingleVaultOperations method, exposing the decommissioning logic for direct testing without state-modifying computation.
Decommissioning test suite
test/VaultDecommissioning.test.ts
Comprehensive Hardhat test suite with full contract deployment infrastructure, helper functions (createVault, processVaultEpochState), and four targeted test cases: zero-state vault with empty portfolio completes decommissioning; 100% underlying portfolio completes decommissioning; non-underlying positions block completion; non-zero final assets with empty tokens block completion.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related issues

  • OrionFinanceAI/protocol-bug-bounty#85: The logic change to broaden portfolioLiquidated condition to include empty portfolio + zero final assets case directly addresses the code-level fix described in this issue.

Possibly related PRs

  • OrionFinanceAI/protocol#200: Both PRs modify the _processSingleVaultOperations decommissioning completion condition in LiquidityOrchestrator.sol by adjusting when completeVaultDecommissioning is permitted based on portfolio liquidation state.

Poem

🐰 A vault is emptied, assets flee,
Two paths now lead to harmony—
One token left, the underlying way,
Or zero both—decommission's day!
Tests confirm the rabbit's lair,
Liquidation, clean and fair.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix: Decommissioning zero-state vaults with empty portfolio' directly and specifically describes the primary change made in this PR: broadening the condition for finalizing decommissioned vaults to include zero-state vaults with empty portfolios.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Comment @coderabbitai help to get the list of available commands and usage tips.

@matteoettam09 matteoettam09 merged commit 557e9f7 into main Jun 8, 2026
3 of 4 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Jun 13, 2026
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant