Skip to content

Commit

Permalink
refactor: support lower cap changes
Browse files Browse the repository at this point in the history
  • Loading branch information
coreyar committed Jan 27, 2025
1 parent 89cb5e3 commit b73301f
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 10 deletions.
6 changes: 1 addition & 5 deletions contracts/RiskSteward/MarketCapsRiskSteward.sol
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,7 @@ contract MarketCapsRiskSteward is IRiskSteward, Initializable, Ownable2StepUpgra
* @return bool true, if difference is within the maxPercentChange
*/
function _updateWithinAllowedRange(uint256 previousValue, uint256 newValue) internal view returns (bool) {
if (newValue < previousValue) {
revert UpdateNotInRange();
}

uint256 diff = newValue - previousValue;
uint256 diff = newValue > previousValue ? newValue - previousValue : previousValue - newValue;

uint256 maxDiff = (maxIncreaseBps * previousValue) / 10000;

Expand Down
55 changes: 50 additions & 5 deletions tests/RiskSteward/RiskStewardReceiver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -401,10 +401,10 @@ describe("Risk Steward", async function () {
});

it("should revert if the update is out of bounds", async function () {
// Lower
// Too low
await mockRiskOracle.publishRiskParameterUpdate(
"ipfs://QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdw8eX9",
parseUnitsToHex(5),
parseUnitsToHex(2),
"supplyCap",
mockCoreVToken.address,
"0x",
Expand All @@ -421,10 +421,10 @@ describe("Risk Steward", async function () {
);
await expect(riskStewardReceiver.processUpdateById(1)).to.be.rejectedWith("UpdateNotInRange");

// Lower
// Too Low
await mockRiskOracle.publishRiskParameterUpdate(
"ipfs://QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdw8eX9",
parseUnitsToHex(5),
parseUnitsToHex(2),
"borrowCap",
mockCoreVToken.address,
"0x",
Expand Down Expand Up @@ -497,7 +497,7 @@ describe("Risk Steward", async function () {
expect(await mockComptroller.borrowCaps(mockVToken.address)).to.equal(parseUnits("10", 18));
});

it("should process update by parameter and market", async function () {
it("should process increase updates by parameter and market", async function () {
// Core Pool
expect(await mockCoreComptroller.supplyCaps(mockCoreVToken.address)).to.equal(parseUnits("8", 18));
expect(await mockCoreComptroller.borrowCaps(mockCoreVToken.address)).to.equal(parseUnits("8", 18));
Expand Down Expand Up @@ -541,5 +541,50 @@ describe("Risk Steward", async function () {
expect(await mockComptroller.supplyCaps(mockVToken.address)).to.equal(parseUnits("10", 18));
expect(await mockComptroller.borrowCaps(mockVToken.address)).to.equal(parseUnits("10", 18));
});

it("should process decrease updates by parameter and market", async function () {
// Core Pool
expect(await mockCoreComptroller.supplyCaps(mockCoreVToken.address)).to.equal(parseUnits("8", 18));
expect(await mockCoreComptroller.borrowCaps(mockCoreVToken.address)).to.equal(parseUnits("8", 18));
await mockRiskOracle.publishRiskParameterUpdate(
"ipfs://QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdw8eX9",
parseUnitsToHex(6),
"supplyCap",
mockCoreVToken.address,
"0x",
);
await mockRiskOracle.publishRiskParameterUpdate(
"ipfs://QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdw8eX9",
parseUnitsToHex(6),
"borrowCap",
mockCoreVToken.address,
"0x",
);
await riskStewardReceiver.processUpdateByParameterAndMarket("supplyCap", mockCoreVToken.address);
await riskStewardReceiver.processUpdateByParameterAndMarket("borrowCap", mockCoreVToken.address);
expect(await mockCoreComptroller.supplyCaps(mockCoreVToken.address)).to.equal(parseUnits("6", 18));
expect(await mockCoreComptroller.borrowCaps(mockCoreVToken.address)).to.equal(parseUnits("6", 18));
// Isolated Pool
expect(await mockComptroller.supplyCaps(mockVToken.address)).to.equal(parseUnits("8", 18));
expect(await mockComptroller.borrowCaps(mockVToken.address)).to.equal(parseUnits("8", 18));
await mockRiskOracle.publishRiskParameterUpdate(
"ipfs://QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdw8eX9",
parseUnitsToHex(6),
"supplyCap",
mockVToken.address,
"0x",
);
await mockRiskOracle.publishRiskParameterUpdate(
"ipfs://QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdw8eX9",
parseUnitsToHex(6),
"borrowCap",
mockVToken.address,
"0x",
);
await riskStewardReceiver.processUpdateByParameterAndMarket("supplyCap", mockVToken.address);
await riskStewardReceiver.processUpdateByParameterAndMarket("borrowCap", mockVToken.address);
expect(await mockComptroller.supplyCaps(mockVToken.address)).to.equal(parseUnits("6", 18));
expect(await mockComptroller.borrowCaps(mockVToken.address)).to.equal(parseUnits("6", 18));
});
});
});

0 comments on commit b73301f

Please sign in to comment.