Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
Browse files Browse the repository at this point in the history
…-testing
  • Loading branch information
clement-ux committed Oct 15, 2024
2 parents 7e74fca + 6427782 commit fd029b6
Show file tree
Hide file tree
Showing 11 changed files with 392 additions and 224 deletions.
5 changes: 4 additions & 1 deletion src/contracts/AbstractARM.sol
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,10 @@ abstract contract AbstractARM is OwnableOperable, ERC20Upgradeable {
} else {
revert("ARM: Invalid in token");
}
amountIn = ((amountOut * PRICE_SCALE) / price) + 1; // +1 to always round in our favor
// always round in our favor
// +1 for truncation when dividing integers
// +2 to cover stETH transfers being up to 2 wei short of the requested transfer amount
amountIn = ((amountOut * PRICE_SCALE) / price) + 3;

// Transfer the input tokens from the caller to this ARM contract
_transferAssetFrom(address(inToken), msg.sender, address(this), amountIn);
Expand Down
2 changes: 1 addition & 1 deletion src/contracts/CapManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ contract CapManager is Initializable, OwnableOperable {

function initialize(address _operator) external initializer {
_initOwnableOperable(_operator);
accountCapEnabled = true;
accountCapEnabled = false;
}

function postDepositHook(address liquidityProvider, uint256 assets) external {
Expand Down
13 changes: 8 additions & 5 deletions test/fork/LidoFixedPriceMultiLpARM/ClaimRedeem.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {IERC20} from "contracts/Interfaces.sol";
import {AbstractARM} from "contracts/AbstractARM.sol";

contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
bool private ac;
uint256 private delay;
//////////////////////////////////////////////////////
/// --- SETUP
Expand All @@ -20,6 +21,8 @@ contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
delay = lidoARM.claimDelay();

deal(address(weth), address(this), 1_000 ether);

ac = capManager.accountCapEnabled();
}

//////////////////////////////////////////////////////
Expand Down Expand Up @@ -124,7 +127,7 @@ contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
assertEq(lidoARM.lastAvailableAssets(), int256(MIN_TOTAL_SUPPLY));
assertEq(lidoARM.balanceOf(address(this)), 0);
assertEq(lidoARM.totalSupply(), MIN_TOTAL_SUPPLY);
assertEq(capManager.liquidityProviderCaps(address(this)), 0);
if (ac) assertEq(capManager.liquidityProviderCaps(address(this)), 0);
assertEqQueueMetadata(DEFAULT_AMOUNT, 0, 1);
assertEqUserRequest(0, address(this), false, block.timestamp, DEFAULT_AMOUNT, DEFAULT_AMOUNT);
assertEq(lidoARM.claimable(), MIN_TOTAL_SUPPLY + DEFAULT_AMOUNT);
Expand All @@ -146,7 +149,7 @@ contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
assertEq(lidoARM.lastAvailableAssets(), int256(MIN_TOTAL_SUPPLY));
assertEq(lidoARM.balanceOf(address(this)), 0);
assertEq(lidoARM.totalSupply(), MIN_TOTAL_SUPPLY);
assertEq(capManager.liquidityProviderCaps(address(this)), 0);
if (ac) assertEq(capManager.liquidityProviderCaps(address(this)), 0);
assertEqQueueMetadata(DEFAULT_AMOUNT, DEFAULT_AMOUNT, 1);
assertEqUserRequest(0, address(this), true, block.timestamp, DEFAULT_AMOUNT, DEFAULT_AMOUNT);
assertEq(assets, DEFAULT_AMOUNT);
Expand Down Expand Up @@ -191,7 +194,7 @@ contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
assertEq(lidoARM.lastAvailableAssets(), int256(MIN_TOTAL_SUPPLY));
assertEq(lidoARM.balanceOf(address(this)), 0);
assertEq(lidoARM.totalSupply(), MIN_TOTAL_SUPPLY);
assertEq(capManager.liquidityProviderCaps(address(this)), 0);
if (ac) assertEq(capManager.liquidityProviderCaps(address(this)), 0);
assertEqQueueMetadata(DEFAULT_AMOUNT, DEFAULT_AMOUNT, 1);
assertEqUserRequest(0, address(this), true, block.timestamp, DEFAULT_AMOUNT, DEFAULT_AMOUNT);
assertEq(assets, DEFAULT_AMOUNT);
Expand All @@ -215,7 +218,7 @@ contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
assertEq(lidoARM.lastAvailableAssets(), int256(MIN_TOTAL_SUPPLY));
assertEq(lidoARM.balanceOf(address(this)), 0);
assertEq(lidoARM.totalSupply(), MIN_TOTAL_SUPPLY);
assertEq(capManager.liquidityProviderCaps(address(this)), 0);
if (ac) assertEq(capManager.liquidityProviderCaps(address(this)), 0);
assertEqQueueMetadata(DEFAULT_AMOUNT, DEFAULT_AMOUNT / 2, 2);
assertEqUserRequest(0, address(this), true, block.timestamp, DEFAULT_AMOUNT / 2, DEFAULT_AMOUNT / 2);
assertEqUserRequest(1, address(this), false, block.timestamp + delay, DEFAULT_AMOUNT / 2, DEFAULT_AMOUNT);
Expand All @@ -239,7 +242,7 @@ contract Fork_Concrete_LidoARM_ClaimRedeem_Test_ is Fork_Shared_Test_ {
assertEq(lidoARM.lastAvailableAssets(), int256(MIN_TOTAL_SUPPLY));
assertEq(lidoARM.balanceOf(address(this)), 0);
assertEq(lidoARM.totalSupply(), MIN_TOTAL_SUPPLY);
assertEq(capManager.liquidityProviderCaps(address(this)), 0);
if (ac) assertEq(capManager.liquidityProviderCaps(address(this)), 0);
assertEqQueueMetadata(DEFAULT_AMOUNT, DEFAULT_AMOUNT, 2);
assertEqUserRequest(0, address(this), true, block.timestamp - delay, DEFAULT_AMOUNT / 2, DEFAULT_AMOUNT / 2);
assertEqUserRequest(1, address(this), true, block.timestamp, DEFAULT_AMOUNT / 2, DEFAULT_AMOUNT);
Expand Down
Loading

0 comments on commit fd029b6

Please sign in to comment.