Skip to content

Commit

Permalink
Merge pull request #465 from equilibria-xyz/ed/41-limit-truncation-a
Browse files Browse the repository at this point in the history
Fix validation issue caused by truncation of risk params
  • Loading branch information
EdNoepel authored Oct 9, 2024
2 parents 4424431 + 8e795c0 commit 43c6ea3
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
9 changes: 7 additions & 2 deletions packages/perennial/contracts/types/RiskParameter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,13 @@ library RiskParameterStorageLib {

if (self.minMargin.lt(self.minMaintenance)) revert RiskParameterStorageInvalidError();

UFixed6 scaleLimit = self.makerLimit.div(self.efficiencyLimit).mul(protocolParameter.minScale);
if (self.takerFee.scale.lt(scaleLimit) || self.makerFee.scale.lt(scaleLimit))
(UFixed6 makerLimitTruncated, UFixed6 takerFeeScaleTruncated, UFixed6 makerFeeScaleTruncated) = (
UFixed6Lib.from(self.makerLimit.truncate()),
UFixed6Lib.from(self.takerFee.scale.truncate()),
UFixed6Lib.from(self.makerFee.scale.truncate())
);
UFixed6 scaleLimit = makerLimitTruncated.div(self.efficiencyLimit).mul(protocolParameter.minScale);
if (takerFeeScaleTruncated.lt(scaleLimit) || makerFeeScaleTruncated.lt(scaleLimit))
revert RiskParameterStorageInvalidError();
}

Expand Down
25 changes: 25 additions & 0 deletions packages/perennial/test/unit/types/RiskParameter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,31 @@ describe('RiskParameter', () => {
),
).to.be.revertedWithCustomError(riskParameterStorage, 'RiskParameterStorageInvalidError')
})

it('reverts if truncation would violate protocol limits', async () => {
await expect(
riskParameter.validateAndStore(
{
...VALID_RISK_PARAMETER,
makerLimit: parse6decimal('3.9'),
efficiencyLimit: parse6decimal('1'),
takerFee: {
linearFee: 2,
proportionalFee: 3,
adiabaticFee: 18,
scale: parse6decimal('1.95'),
},
},
{
...PROTOCOL_PARAMETER,
minScale: parse6decimal('0.50'),
minEfficiency: parse6decimal('1'),
},
),
// truncation of makerLimit and takerFee.scale leave makerLimit=3, takerFee.scale=1,
// exceeding protocol efficiency limit
).to.be.revertedWithCustomError(riskParameterStorage, 'RiskParameterStorageInvalidError')
})
})

describe('.pController_k', () => {
Expand Down

0 comments on commit 43c6ea3

Please sign in to comment.