Skip to content
This repository has been archived by the owner on Jul 2, 2024. It is now read-only.

[Fix][Sherlock M-3 + M-13] Handle position rebalance 0 value cases #208

Open
wants to merge 5 commits into
base: dev2
Choose a base branch
from

Conversation

arjun-io
Copy link
Collaborator

Introduces the following logic to both vault versions:

  • Always create a position change even if current position is at target position
  • If opening and at maker limit - call closeMake
  • If closing and at taker 100% utilization - call openMake

Also introduces a utilization check to the SingleBalancedVault

Adds tests

@arjun-io arjun-io requested a review from kbrizzle July 26, 2023 16:09
product.closeMake(accountPosition.sub(targetPosition).min(makerAvailable));
// If there is no maker available (socialization), we still need a settlement but closing 0 value will revert,
// so instead open 0 value instead
if (makerAvailable.isZero()) product.openMake(makerAvailable);
Copy link
Contributor

@kbrizzle kbrizzle Jul 27, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you do product.openMake(UFixed18Lib.ZERO); here also so it's consistent

@arjun-io arjun-io requested a review from kbrizzle July 28, 2023 14:52
@arjun-io arjun-io force-pushed the arjun/fix-position-rebalance branch from c6181b7 to ee909cd Compare August 1, 2023 03:43
@github-actions
Copy link

github-actions bot commented Aug 1, 2023

Unit Test Coverage Report

Coverage after merging arjun/fix-position-rebalance into dev2 will be
53.92%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
packages/perennial/contracts/collateral
   Collateral.sol93.57%85%100%100%110, 113, 236, 53, 57, 86, 91–93
packages/perennial/contracts/collateral/types
   OptimisticLedger.sol100%100%100%100%
packages/perennial/contracts/controller
   Controller.sol100%100%100%100%
   UControllerProvider.sol84.62%81.25%87.50%86.67%33, 54, 54, 54, 56
packages/perennial/contracts/incentivizer
   Incentivizer.sol95.80%89.66%100%100%140, 153, 166, 185, 42, 83
packages/perennial/contracts/incentivizer/types
   ProductManager.sol100%100%100%100%
   Program.sol100%100%100%100%
packages/perennial/contracts/interfaces
   ICollateral.sol100%100%100%100%
   IContractPayoffProvider.sol100%100%100%100%
   IController.sol100%100%100%100%
   IIncentivizer.sol100%100%100%100%
   IMultiInvoker.sol100%100%100%100%
   IMultiInvokerRollup.sol100%100%100%100%
   IParamProvider.sol100%100%100%100%
   IPayoffProvider.sol100%100%100%100%
   IPerennialLens.sol100%100%100%100%
   IProduct.sol100%100%100%100%
packages/perennial/contracts/interfaces/types
   Accumulator.sol60%100%60%60%30, 40
   PackedAccumulator.sol0%100%0%0%28
   PackedPosition.sol0%100%0%0%28
   PayoffDefinition.sol0%0%0%0%107, 111, 113–115, 121, 39, 39, 39, 42, 55–57, 60, 60, 60–61, 61, 65, 65, 65–66, 66, 79, 79, 79, 81, 94, 97
   PendingFeeUpdates.sol0%0%0%0%104, 108, 115, 34, 34, 34–36, 41, 51, 51, 51–53, 58, 68, 68, 68–70, 75, 80, 80, 80, 80, 80, 85–90
   Position.sol35.71%0%41.67%41.67%107, 126, 144, 144, 144, 156, 156, 156, 33, 42, 52
   PrePosition.sol0%0%0%0%112, 114, 119–120, 134–135, 135, 135, 40, 50–51, 61–62, 72–73, 83–84, 98
   ProgramInfo.sol100%100%100%100%
packages/perennial/contracts/lens
   PerennialLens.sol0%0%0%0%103, 103, 106–116, 133, 142, 151–160, 168, 168–169, 177, 177–178, 186, 186–187, 19, 195, 195–196, 205, 205–206, 214, 214–215, 226, 226, 229–231, 240, 240–242, 250, 250–252, 261, 261–263, 265–266, 27, 274, 274–275, 292, 292–293, 302, 302–303, 312, 312–313, 322, 322–323, 334, 334, 337, 348, 348, 351, 363, 363, 366, 375, 375–376, 387, 387, 39, 390, 399, 399, 40, 400–401, 401, 401, 403–404, 404, 404–405, 408–409, 41–42, 423, 423–425, 43, 437, 437, 44, 440, 442–448, 45, 464, 464–471, 490, 500, 513–514, 519–520, 54–56, 65, 65–77, 89–91
packages/perennial/contracts/multiinvoker
   MultiInvoker.sol92.77%90.38%95.24%93.55%156–157, 159, 372, 386, 386, 386–388, 390, 49
   MultiInvokerRollup.sol92.52%90%92.86%93.55%180, 187, 187–190, 192, 240, 250–251
packages/perennial/contracts/periphery
   CoordinatorDelegatable.sol98.46%97.06%100%100%99
packages/perennial/contracts/product
   Product.sol0%0%0%0%102–103, 106, 110, 113, 116, 116, 116, 118, 123, 127, 129, 136, 136, 136, 136–138, 155, 158, 158, 158, 161–163, 163, 167, 170, 174, 177, 177, 177, 179, 182, 188, 190, 198, 208, 208–209, 209–210, 210–211, 211–212, 212–213, 213–214, 214–215, 215–216, 216, 218, 22, 220–221, 223–224, 224, 224, 226–227, 235, 245, 245–246, 246–247, 247–248, 248–249, 249–250, 250, 252, 256, 258–259, 261–262, 262, 262, 264–265, 273, 283, 283–284, 284–285, 285–286, 286–287, 287–288, 288–289, 289–290, 290–291, 291–292, 292, 294, 296–297, 299–300, 300, 300, 302–303, 311, 321, 321–322, 322–323, 323–324, 324–325, 325–326, 326–327, 327, 329, 333, 335–336, 338–339, 339, 339, 341–342, 350, 350, 350, 350, 350, 350–352, 355–356, 359, 368, 378, 387, 396, 405, 414, 422, 432, 440, 450, 460, 469, 47, 47, 479, 48, 480–481, 49,

@github-actions
Copy link

github-actions bot commented Aug 1, 2023

Integration Test Coverage Report

Coverage after merging arjun/fix-position-rebalance into dev2 will be
50.00%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
packages/perennial/contracts/collateral
   Collateral.sol83.57%65%100%96.72%110, 112–113, 120–121, 161, 212, 236, 236, 246, 257, 278–279, 53, 55–57, 86, 88–89, 91–93
packages/perennial/contracts/collateral/types
   OptimisticLedger.sol100%100%100%100%
packages/perennial/contracts/controller
   Controller.sol75.96%48.44%88.37%92.11%126, 140, 153, 166–167, 181–182, 191–192, 201–202, 211–212, 221–222, 232–233, 243–244, 254–255, 265, 274, 283, 292, 312, 320, 329, 337, 355, 355, 355–356, 376, 386, 392, 399, 60, 85
   UControllerProvider.sol74.36%56.25%87.50%86.67%33–34, 40, 47, 54, 54, 54, 56, 61
packages/perennial/contracts/incentivizer
   Incentivizer.sol81.82%58.62%100%96.67%128, 140, 153, 166, 168, 183–184, 201, 213, 300, 310, 332, 339, 42–45, 50–53, 83–86, 97
packages/perennial/contracts/incentivizer/types
   ProductManager.sol94.03%75%100%97.73%158–159, 163, 223
   Program.sol100%100%100%100%
packages/perennial/contracts/interfaces
   ICollateral.sol100%100%100%100%
   IContractPayoffProvider.sol100%100%100%100%
   IController.sol100%100%100%100%
   IIncentivizer.sol100%100%100%100%
   IMultiInvoker.sol100%100%100%100%
   IMultiInvokerRollup.sol100%100%100%100%
   IParamProvider.sol100%100%100%100%
   IPayoffProvider.sol100%100%100%100%
   IPerennialLens.sol100%100%100%100%
   IProduct.sol100%100%100%100%
packages/perennial/contracts/interfaces/types
   Accumulator.sol60%100%60%60%30, 40
   PackedAccumulator.sol0%100%0%0%28
   PackedPosition.sol0%100%0%0%28
   PayoffDefinition.sol0%0%0%0%107, 111, 113–115, 121, 39, 39, 39, 42, 55–57, 60, 60, 60–61, 61, 65, 65, 65–66, 66, 79, 79, 79, 81, 94, 97
   PendingFeeUpdates.sol0%0%0%0%104, 108, 115, 34, 34, 34–36, 41, 51, 51, 51–53, 58, 68, 68, 68–70, 75, 80, 80, 80, 80, 80, 85–90
   Position.sol35.71%0%41.67%41.67%107, 126, 144, 144, 144, 156, 156, 156, 33, 42, 52
   PrePosition.sol0%0%0%0%112, 114, 119–120, 134–135, 135, 135, 40, 50–51, 61–62, 72–73, 83–84, 98
   ProgramInfo.sol80%33.33%100%100%51–52, 52, 52
packages/perennial/contracts/lens
   PerennialLens.sol0%0%0%0%103, 103, 106–116, 133, 142, 151–160, 168, 168–169, 177, 177–178, 186, 186–187, 19, 195, 195–196, 205, 205–206, 214, 214–215, 226, 226, 229–231, 240, 240–242, 250, 250–252, 261, 261–263, 265–266, 27, 274, 274–275, 292, 292–293, 302, 302–303, 312, 312–313, 322, 322–323, 334, 334, 337, 348, 348, 351, 363, 363, 366, 375, 375–376, 387, 387, 39, 390, 399, 399, 40, 400–401, 401, 401, 403–404, 404, 404–405, 408–409, 41–42, 423, 423–425, 43, 437, 437, 44, 440, 442–448, 45, 464, 464–471, 490, 500, 513–514, 519–520, 54–56, 65, 65–77, 89–91
packages/perennial/contracts/multiinvoker
   MultiInvoker.sol98.19%94.23%100%100%356, 372, 50
   MultiInvokerRollup.sol91.84%85%92.86%94.62%187, 219, 225–226, 228, 239–240, 240, 240, 298, 71
packages/perennial/contracts/periphery
   CoordinatorDelegatable.sol98.46%97.06%100%100%99
packages/perennial/contracts/product
   Product.sol0%0%0%0%102–103, 106, 110, 113, 116, 116, 116, 118, 123, 127, 129, 136, 136, 136, 136–138, 155, 158, 158, 158, 161–163, 163, 167, 170, 174, 177, 177, 177, 179, 182, 188, 190, 198, 208, 208–209, 209–210, 210–211, 211–212, 212–213, 213–214, 214–215, 215–216, 216, 218, 22, 220–221, 223–224, 224, 224, 226–227, 235, 245, 245–246, 246–247, 247–248, 248–249, 249–250, 250, 252, 256, 258–259, 261–262, 262, 262, 264–265, 273, 283, 283–284,

@arjun-io arjun-io requested a review from kbrizzle August 2, 2023 19:59

if (targetPosition.lt(currentPosition))
product.closeMake(currentPosition.sub(targetPosition));
if (targetPosition.gte(currentPosition))
product.openMake(targetPosition.sub(currentPosition).min(makerAvailable));
else if (targetPosition.gt(currentPosition)) {
Copy link
Contributor

@kbrizzle kbrizzle Aug 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (targetPosition.lt(currentPosition))
    product.closeMake(currentPosition.sub(targetPosition));
if (targetPosition.gt(currentPosition))
    product.openMake(targetPosition.sub(currentPosition).min(makerAvailable));
if (targetPosition.eq(currentPosition))
    product.closeMake(UFixed18Lib.ZERO);

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants