function test_abort_turbo_offer() public {
uint256 userRefundBalanceBefore = tokenManager.userTokenBalanceMap(
address(user),
address(mockUSDCToken),
TokenBalanceType.MakerRefund
);
console2.log("user refund balance before", userRefundBalanceBefore);
uint256 user1RefundBalanceBefore = tokenManager.userTokenBalanceMap(
address(user1),
address(mockUSDCToken),
TokenBalanceType.MakerRefund
);
console2.log("user1 refund balance before", user1RefundBalanceBefore);
uint256 userUSDTBalance0 = mockUSDCToken.balanceOf(user);
uint256 userUSDTBalance1 = mockUSDCToken.balanceOf(user1);
console2.log("user balance at start", userUSDTBalance0);
console2.log("user1 balance at start", userUSDTBalance1);
uint256 userPointBalanceBefore = mockPointToken.balanceOf(user);
console2.log("user overall point balance before", userPointBalanceBefore);
uint256 user1PointBalanceBefore = mockPointToken.balanceOf(user1);
console2.log("user1 overall point balance before", user1PointBalanceBefore);
vm.startPrank(user);
preMarktes.createOffer(
CreateOfferParams(
marketPlace,
address(mockUSDCToken),
1000,
100 * 1e18,
10000,
300,
OfferType.Ask,
OfferSettleType.Turbo
)
);
vm.stopPrank();
uint256 userUSDTBalance2 = mockUSDCToken.balanceOf(user);
uint256 userUSDTBalance3 = mockUSDCToken.balanceOf(user1);
console2.log("user balance after offer", userUSDTBalance2);
console2.log("user1 Balance after offer", userUSDTBalance3);
uint256 userPointBalanceOffer = mockPointToken.balanceOf(user);
console2.log("user overall point balance after offer", userPointBalanceOffer);
uint256 user1PointBalanceOffer = mockPointToken.balanceOf(user1);
console2.log("user1 overall point balance after offer", user1PointBalanceOffer);
vm.startPrank(user1);
mockUSDCToken.approve(address(tokenManager), type(uint256).max);
address stockAddr = GenerateAddress.generateStockAddress(0);
address offerAddr = GenerateAddress.generateOfferAddress(0);
preMarktes.createTaker(offerAddr, 500);
vm.stopPrank();
uint256 userUSDTBalance4 = mockUSDCToken.balanceOf(user);
uint256 userUSDTBalance5 = mockUSDCToken.balanceOf(user1);
console2.log("user balance after taker", userUSDTBalance4);
console2.log("user1 Balance after taker", userUSDTBalance5);
vm.startPrank(user);
preMarktes.abortAskOffer(stockAddr, offerAddr);
vm.stopPrank();
StockInfo memory stockInfo = preMarktes.getStockInfo(stockAddr);
uint256 stockPoints = stockInfo.points;
console2.log("stock points", stockPoints);
vm.startPrank(user1);
address stock1Addr = GenerateAddress.generateStockAddress(1);
preMarktes.abortBidTaker(stock1Addr, offerAddr);
vm.stopPrank();
uint256 userUSDTBalance6 = mockUSDCToken.balanceOf(user);
uint256 userUSDTBalance7 = mockUSDCToken.balanceOf(user1);
console2.log("user balance after abort", userUSDTBalance6);
console2.log("user1 Balance after abort", userUSDTBalance7);
uint256 userRefundBalanceAfter = tokenManager.userTokenBalanceMap(
address(user),
address(mockUSDCToken),
TokenBalanceType.MakerRefund
);
console2.log("user Refund balance After", userRefundBalanceAfter);
uint256 user1RefundBalanceAfter = tokenManager.userTokenBalanceMap(
address(user1),
address(mockUSDCToken),
TokenBalanceType.MakerRefund
);
console2.log("user1 Refund Balance After", user1RefundBalanceAfter);
uint256 userPointBalance = tokenManager.userTokenBalanceMap(
address(user),
address(mockPointToken),
TokenBalanceType.PointToken
);
console2.log("user claimable point balance", userPointBalance);
uint256 user1PointBalance = tokenManager.userTokenBalanceMap(
address(user),
address(mockPointToken),
TokenBalanceType.PointToken
);
console2.log("user1 claimable point balance", user1PointBalance);
uint256 userPointBalanceAfter = mockPointToken.balanceOf(user);
console2.log("user overall point balance after", userPointBalanceAfter);
uint256 user1PointBalanceAfter = mockPointToken.balanceOf(user1);
console2.log("user1 overall point balance after", user1PointBalanceAfter);
}
in this example the offer is created with a user asking for 100USDC for 1000 points.
user refund balance before 0
user1 refund balance before 0
user balance at start 100000000000000000000000000
user1 balance at start 100000000000000000000000000
user overall point balance before 100000000000000000000000000
user1 overall point balance before 0
user balance after offer 99999900000000000000000000
user1 Balance after offer 100000000000000000000000000
user overall point balance after offer 100000000000000000000000000
user1 overall point balance after offer 0
user balance after taker 99999900000000000000000000
user1 Balance after taker 99999948250000000000000000
stock points 1000
user balance after abort 99999900000000000000000000
user1 Balance after abort 99999948250000000000000000
user Refund balance After 50000000000000000000
user1 Refund Balance After 0
user claimable point balance 0
user1 claimable point balance 0
user overall point balance after 100000000000000000000000000
user1 overall point balance after 0
Users who submit takers on offers that abort have their collateral locked in the contract, unable to withdraw funds.
Consider using a better Precision in order to have the points scale to the division of the amount to avoid this issue.