From bbf6ff51bbf79abc200f35f3b50be690fc2e9457 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 18 Nov 2022 17:45:32 +0100 Subject: [PATCH 1/2] lien duration check --- src/AstariaRouter.sol | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/AstariaRouter.sol b/src/AstariaRouter.sol index f52ace7d..b972b33d 100644 --- a/src/AstariaRouter.sol +++ b/src/AstariaRouter.sol @@ -93,7 +93,8 @@ contract AstariaRouter is Auth, ERC4626Router, Pausable, IAstariaRouter { s.minInterestBPS = uint32((uint256(1e15) * 5) / (365 days)); s.minEpochLength = uint32(7 days); s.maxEpochLength = uint32(45 days); - s.maxInterestRate = ((uint256(1e16) * 200) / (365 days)).safeCastTo88(); //63419583966; // 200% apy / second + s.maxInterestRate = ((uint256(1e16) * 200) / (365 days)).safeCastTo88(); + //63419583966; // 200% apy / second s.strategistFeeNumerator = uint32(200); s.strategistFeeDenominator = uint32(1000); s.buyoutFeeNumerator = uint32(100); @@ -279,7 +280,8 @@ contract AstariaRouter is Auth, ERC4626Router, Pausable, IAstariaRouter { */ function fileGuardian(File[] calldata file) external { RouterStorage storage s = _loadRouterSlot(); - require(address(msg.sender) == address(s.guardian)); //only the guardian can call this + require(address(msg.sender) == address(s.guardian)); + //only the guardian can call this for (uint256 i = 0; i < file.length; i++) { FileType what = file[i].what; bytes memory data = file[i].data; @@ -635,15 +637,15 @@ contract AstariaRouter is Auth, ERC4626Router, Pausable, IAstariaRouter { ILienToken.Stack[] calldata stack ) external view returns (bool) { RouterStorage storage s = _loadRouterSlot(); - uint256 minNewRate = uint256(stack[position].lien.details.rate) - + uint256 maxNewRate = uint256(stack[position].lien.details.rate) - s.minInterestBPS; return - !((newLien.details.rate < minNewRate) || - (block.timestamp + - newLien.details.duration - - stack[position].point.end < - s.minDurationIncrease)); + (newLien.details.rate < maxNewRate && + newLien.details.duration >= stack[position].point.end) || + (block.timestamp + newLien.details.duration - stack[position].point.end > + s.minDurationIncrease && + newLien.details.rate <= stack[position].lien.details.rate); } //INTERNAL FUNCS From 9238c04cfea76cb510431c1cda4a3e7498fa22a5 Mon Sep 17 00:00:00 2001 From: Joseph Delong Date: Sat, 19 Nov 2022 14:13:13 -0600 Subject: [PATCH 2/2] updates requested --- src/AstariaRouter.sol | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/AstariaRouter.sol b/src/AstariaRouter.sol index b972b33d..2a5c0f91 100644 --- a/src/AstariaRouter.sol +++ b/src/AstariaRouter.sol @@ -93,8 +93,7 @@ contract AstariaRouter is Auth, ERC4626Router, Pausable, IAstariaRouter { s.minInterestBPS = uint32((uint256(1e15) * 5) / (365 days)); s.minEpochLength = uint32(7 days); s.maxEpochLength = uint32(45 days); - s.maxInterestRate = ((uint256(1e16) * 200) / (365 days)).safeCastTo88(); - //63419583966; // 200% apy / second + s.maxInterestRate = ((uint256(1e16) * 200) / (365 days)).safeCastTo88(); //63419583966; // 200% apy / second s.strategistFeeNumerator = uint32(200); s.strategistFeeDenominator = uint32(1000); s.buyoutFeeNumerator = uint32(100); @@ -280,8 +279,7 @@ contract AstariaRouter is Auth, ERC4626Router, Pausable, IAstariaRouter { */ function fileGuardian(File[] calldata file) external { RouterStorage storage s = _loadRouterSlot(); - require(address(msg.sender) == address(s.guardian)); - //only the guardian can call this + require(address(msg.sender) == address(s.guardian)); //only the guardian can call this for (uint256 i = 0; i < file.length; i++) { FileType what = file[i].what; bytes memory data = file[i].data; @@ -642,8 +640,8 @@ contract AstariaRouter is Auth, ERC4626Router, Pausable, IAstariaRouter { return (newLien.details.rate < maxNewRate && - newLien.details.duration >= stack[position].point.end) || - (block.timestamp + newLien.details.duration - stack[position].point.end > + newLien.details.duration + block.timestamp >= stack[position].point.end) || + (block.timestamp + newLien.details.duration - stack[position].point.end >= s.minDurationIncrease && newLien.details.rate <= stack[position].lien.details.rate); }