Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
JoscelynFarr committed Jan 29, 2024
1 parent b3cf3d6 commit d783c11
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
12 changes: 11 additions & 1 deletion src/FundingRateArbitrage.sol
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ contract FundingRateArbitrage is Ownable {
uint256 public withdrawFeeRate;
uint256 public withdrawSettleFee;
uint256 public defaultUsdcQuota;
uint256 public minimumWithdraw;

mapping(address => uint256) public earnUSDCBalance;
mapping(address => uint256) public jusdOutside;
Expand Down Expand Up @@ -90,7 +91,8 @@ contract FundingRateArbitrage is Ownable {
uint256 usdcBuffer = IERC20(usdc).balanceOf(address(this));
uint256 collateralPrice = IJUSDBank(jusdBank).getCollateralPrice(collateral);
(int256 perpNetValue,,,) = JOJODealer(jojoDealer).getTraderRisk(address(this));
return SafeCast.toUint256(perpNetValue) + collateralAmount.decimalMul(collateralPrice) + usdcBuffer - jusdBorrowed;
return
SafeCast.toUint256(perpNetValue) + collateralAmount.decimalMul(collateralPrice) + usdcBuffer - jusdBorrowed;
}

/// @notice this function is to return the ratio between netValue and totalEarnUSDCBalance
Expand Down Expand Up @@ -143,6 +145,10 @@ contract FundingRateArbitrage is Ownable {
withdrawSettleFee = newWithdrawSettleFee;
}

function setMinimumWithdraw(uint256 _minimumWithdraw) public onlyOwner {
minimumWithdraw = _minimumWithdraw;
}

function refundJUSD(uint256 amount) public onlyOwner {
IERC20(jusd).safeTransfer(msg.sender, amount);
}
Expand Down Expand Up @@ -291,6 +297,10 @@ contract FundingRateArbitrage is Ownable {
);
uint256 withdrawEarnUSDCAmount = earnUSDCBalance[msg.sender] - lockedEarnUSDCAmount;
withdrawalRequests.push(WithdrawalRequest(withdrawEarnUSDCAmount, msg.sender, false));
require(
withdrawEarnUSDCAmount.decimalMul(index) >= minimumWithdraw,
"Withdraw amount is smaller than minimumWithdraw"
);
require(
withdrawEarnUSDCAmount.decimalMul(index) >= withdrawSettleFee, "Withdraw amount is smaller than settleFee"
);
Expand Down
21 changes: 12 additions & 9 deletions test/impl/FundingRateArbitrageTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -227,29 +227,32 @@ contract FundingRateArbitrageTest is Test {
assertEq(fundingRateArbitrage.earnUSDCBalance(bob), 100e9);
}


function testDepositAndDonate() public {
vm.startPrank(Owner);

fundingRateArbitrage.setMaxNetValue(100_000e6);
initAlice();
USDC.mint(alice, 100e6);
fundingRateArbitrage.deposit(1);
USDC.transfer(address(fundingRateArbitrage), 100e6);
vm.stopPrank();

USDC.mint(bob, 100e6);
USDC.mint(bob, 10_000e6);
vm.startPrank(bob);
USDC.approve(address(fundingRateArbitrage), 100e6);
fundingRateArbitrage.deposit(100e6);
USDC.approve(address(fundingRateArbitrage), 10_000e6);
fundingRateArbitrage.deposit(10_000e6);

jojoDealer.requestWithdraw(bob, 0, 100e6);
vm.warp(10);
jojoDealer.requestWithdraw(bob, 0, 10_000e6);
vm.warp(100);
jojoDealer.executeWithdraw(bob, bob, false, "");
fundingRateArbitrage.requestWithdraw(1000e6);
cheats.expectRevert("Withdraw amount is smaller than settleFee");
fundingRateArbitrage.requestWithdraw(1e6);
jusd.approve(address(fundingRateArbitrage), 10_000e6);
uint256 index = fundingRateArbitrage.requestWithdraw(10_000e6);
vm.stopPrank();

vm.startPrank(Owner);
uint256[] memory indexs = new uint256[](1);
indexs[0] = index;
fundingRateArbitrage.permitWithdrawRequests(indexs);
}

function testDepositAndToPerp() public {
Expand Down

0 comments on commit d783c11

Please sign in to comment.