function testSellerDoesNotGetAnythingOnPartialSettlement() public {
uint256 userInitialCollateralBalance = mockUSDCToken.balanceOf(user);
uint256 userInitialPointBalance = mockPointToken.balanceOf(user);
uint256 user2InitialCollateralBalance = mockUSDCToken.balanceOf(user2);
uint256 user2InitialPointBalance = mockPointToken.balanceOf(user2);
console.log("User token balance before all:", mockUSDCToken.balanceOf(user));
console.log("User point token balance before all:", mockPointToken.balanceOf(user));
console.log("User point token balance before all:", mockUSDCToken.balanceOf(user));
console.log("User2 token balance before all:", mockUSDCToken.balanceOf(user2));
console.log("User2 point token balance before all:", mockPointToken.balanceOf(user2));
console.log("--------------------");
console.log("Capital pool balance before all:", mockUSDCToken.balanceOf(address(capitalPool)));
console.log("Capital pool point token balance before all:", mockPointToken.balanceOf(address(capitalPool)));
console.log("Token manager balance before all:", mockUSDCToken.balanceOf(address(tokenManager)));
console.log("Token manager point token balance before all:", mockPointToken.balanceOf(address(tokenManager)));
console.log("--------------------");
vm.prank(user);
preMarkets.createOffer(
CreateOfferParams(
marketPlace, address(mockUSDCToken), 1000, 1e18, 15000, 300, OfferType.Ask, OfferSettleType.Turbo
)
);
console.log("User point token balance after user creates ASK offer:", mockPointToken.balanceOf(user));
console.log("User token balance after user creates ASK offer:", mockUSDCToken.balanceOf(user));
console.log("User2 token balance after user creates ASK offer:", mockUSDCToken.balanceOf(user2));
console.log("User2 point token balance after user creates ASK offer:", mockPointToken.balanceOf(user2));
console.log("--------------------");
console.log("Capital pool balance after user creates ASK offer:", mockUSDCToken.balanceOf(address(capitalPool)));
console.log("Capital pool point token balance after user creates ASK offer:", mockPointToken.balanceOf(address(capitalPool)));
console.log("Token manager balance after user creates ASK offer:", mockUSDCToken.balanceOf(address(tokenManager)));
console.log("Token manager point token balance after user creates ASK offer:", mockPointToken.balanceOf(address(tokenManager)));
console.log("--------------------");
assertEq(mockUSDCToken.balanceOf(address(capitalPool)), 15e17);
address offerAddrUserTurbo = GenerateAddress.generateOfferAddress(0);
vm.prank(user2);
preMarkets.createTaker(offerAddrUserTurbo, 1000);
console.log("User point token balance after user2 creates BID stock:", mockPointToken.balanceOf(user));
console.log("User token balance after user2 creates BID stock:", mockUSDCToken.balanceOf(user));
console.log("User2 token balance after after user2 creates BID stock:", mockUSDCToken.balanceOf(user2));
console.log("User2 point token balance after user2 creates BID stock:", mockPointToken.balanceOf(user2));
console.log("--------------------");
console.log("Capital pool balance after user2 creates BID stock:", mockUSDCToken.balanceOf(address(capitalPool)));
console.log("Capital pool point token balance after user2 creates BID stock:", mockPointToken.balanceOf(address(capitalPool)));
console.log("Token manager balance after after user2 creates BID stock:", mockUSDCToken.balanceOf(address(tokenManager)));
console.log("Token manager point token balance after user2 creates BID stock:", mockPointToken.balanceOf(address(tokenManager)));
console.log("--------------------");
assertEq(mockUSDCToken.balanceOf(address(capitalPool)), 2535000000000000000);
console.log(
"User tax income",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.TaxIncome)
);
console.log(
"User sales revenue",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.SalesRevenue)
);
console.log(
"User point token with point token address",
tokenManager.getUserAccountBalance(user, address(mockPointToken), TokenBalanceType.PointToken)
);
console.log(
"User maker refund",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.MakerRefund)
);
console.log(
"User remianing cash",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.RemainingCash)
);
console.log("--------------------");
console.log(
"User2 tax income",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.TaxIncome)
);
console.log(
"User2 sales revenue",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.SalesRevenue)
);
console.log(
"User2 point token with point token address",
tokenManager.getUserAccountBalance(user2, address(mockPointToken), TokenBalanceType.PointToken)
);
console.log(
"User2 maker refund",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.MakerRefund)
);
console.log(
"User2 remianing cash",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.RemainingCash)
);
console.log("--------------------");
assertEq(tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.SalesRevenue), 1e18);
vm.prank(user1);
systemConfig.updateMarket("Backpack", address(mockPointToken), 1e18, block.timestamp - 1, 3600);
vm.prank(user1);
systemConfig.updateMarketPlaceStatus("Backpack", MarketPlaceStatus.AskSettling);
vm.prank(user);
deliveryPlace.settleAskMaker(offerAddrUserTurbo, 500);
console.log("User point token balance after user settles half:", mockPointToken.balanceOf(user));
console.log("User token balance after user settles half:", mockUSDCToken.balanceOf(user));
console.log("User2 token balance after after user settles half:", mockUSDCToken.balanceOf(user2));
console.log("User2 point token balance after user settles half:", mockPointToken.balanceOf(user2));
console.log("--------------------");
console.log("Capital pool balance after user settles half:", mockUSDCToken.balanceOf(address(capitalPool)));
console.log("Capital pool point token balance after user settles half:", mockPointToken.balanceOf(address(capitalPool)));
console.log("Token manager balance after after user settles half:", mockUSDCToken.balanceOf(address(tokenManager)));
console.log("Token manager point token balance after user settles half:", mockPointToken.balanceOf(address(tokenManager)));
console.log("--------------------");
console.log(
"User tax income",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.TaxIncome)
);
console.log(
"User sales revenue",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.SalesRevenue)
);
console.log(
"User point token with point token address",
tokenManager.getUserAccountBalance(user, address(mockPointToken), TokenBalanceType.PointToken)
);
console.log(
"User maker refund",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.MakerRefund)
);
console.log(
"User remianing cash",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.RemainingCash)
);
console.log("--------------------");
console.log(
"User2 tax income",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.TaxIncome)
);
console.log(
"User2 sales revenue",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.SalesRevenue)
);
console.log(
"User2 point token with point token address",
tokenManager.getUserAccountBalance(user2, address(mockPointToken), TokenBalanceType.PointToken)
);
console.log(
"User2 maker refund",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.MakerRefund)
);
console.log(
"User2 remianing cash",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.RemainingCash)
);
console.log("--------------------");
assertEq(tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.SalesRevenue), 1e18);
address stockAddrUser2Turbo = GenerateAddress.generateStockAddress(1);
vm.prank(user2);
deliveryPlace.closeBidTaker(stockAddrUser2Turbo);
console.log("User point token balance after user2 closes BID:", mockPointToken.balanceOf(user));
console.log("User token balance after user2 closes BID:", mockUSDCToken.balanceOf(user));
console.log("User2 token balance after after user2 closes BID:", mockUSDCToken.balanceOf(user2));
console.log("User2 point token balance after user2 closes BID:", mockPointToken.balanceOf(user2));
console.log("--------------------");
console.log("Capital pool balance after user2 closes BID:", mockUSDCToken.balanceOf(address(capitalPool)));
console.log("Capital pool point token balance after user2 closes BID:", mockPointToken.balanceOf(address(capitalPool)));
console.log("Token manager balance after after user2 closes BID:", mockUSDCToken.balanceOf(address(tokenManager)));
console.log("Token manager point token balance after user2 closes BID:", mockPointToken.balanceOf(address(tokenManager)));
console.log("--------------------");
console.log(
"User tax income",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.TaxIncome)
);
console.log(
"User sales revenue",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.SalesRevenue)
);
console.log(
"User point token with point token address",
tokenManager.getUserAccountBalance(user, address(mockPointToken), TokenBalanceType.PointToken)
);
console.log(
"User maker refund",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.MakerRefund)
);
console.log(
"User remianing cash",
tokenManager.getUserAccountBalance(user, address(mockUSDCToken), TokenBalanceType.RemainingCash)
);
console.log("--------------------");
console.log(
"User2 tax income",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.TaxIncome)
);
console.log(
"User2 sales revenue",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.SalesRevenue)
);
console.log(
"User2 point token with point token address",
tokenManager.getUserAccountBalance(user2, address(mockPointToken), TokenBalanceType.PointToken)
);
console.log(
"User2 maker refund",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.MakerRefund)
);
console.log(
"User2 remianing cash",
tokenManager.getUserAccountBalance(user2, address(mockUSDCToken), TokenBalanceType.RemainingCash)
);
console.log("--------------------");
vm.startPrank(user);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.TaxIncome);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.SalesRevenue);
tokenManager.withdraw(address(mockPointToken), TokenBalanceType.PointToken);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.MakerRefund);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.RemainingCash);
vm.stopPrank();
vm.startPrank(user2);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.TaxIncome);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.SalesRevenue);
tokenManager.withdraw(address(mockPointToken), TokenBalanceType.PointToken);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.MakerRefund);
tokenManager.withdraw(address(mockUSDCToken), TokenBalanceType.RemainingCash);
vm.stopPrank();
console.log("User point token balance after users withdraws:", mockPointToken.balanceOf(user));
console.log("User token balance after users withdraws:", mockUSDCToken.balanceOf(user));
console.log("User2 token balance after users withdraws:", mockUSDCToken.balanceOf(user2));
console.log("User2 point token balance after users withdraws:", mockPointToken.balanceOf(user2));
console.log("--------------------");
console.log("Capital pool balance after users withdraws:", mockUSDCToken.balanceOf(address(capitalPool)));
console.log("Capital pool point token balance after users users withdraws:", mockPointToken.balanceOf(address(capitalPool)));
console.log("Token manager balance after user users withdraws:", mockUSDCToken.balanceOf(address(tokenManager)));
console.log("Token manager point token balance after user users withdraws:", mockPointToken.balanceOf(address(tokenManager)));
console.log("--------------------");
assertEq(mockPointToken.balanceOf(user), userInitialPointBalance - 5e20);
assertEq(mockUSDCToken.balanceOf(user), userInitialCollateralBalance - 5e17 + 3e16);
assertEq(mockUSDCToken.balanceOf(user2), user2InitialCollateralBalance + 5e17 - (5e15 + 3e16));
assertEq(mockPointToken.balanceOf(user2), user2InitialPointBalance + 5e20);
}
Ran 1 test for test/PreMarkets.t.sol:PreMarketsTest
[PASS] testSellerGetsNoCollateralForPartialSettle1() (gas: 1388626)
Logs:
User token balance before all: 10000000000000000000000
User point token balance before all: 10000000000000000000000
User point token balance before all: 10000000000000000000000
User2 token balance before all: 10000000000000000000000
User2 point token balance before all: 10000000000000000000000
--------------------
Capital pool balance before all: 0
Capital pool point token balance before all: 0
Token manager balance before all: 0
Token manager point token balance before all: 0
--------------------
User point token balance after user creates ASK offer: 10000000000000000000000
User token balance after user creates ASK offer: 9998500000000000000000
User2 token balance after user creates ASK offer: 10000000000000000000000
User2 point token balance after user creates ASK offer: 10000000000000000000000
--------------------
Capital pool balance after user creates ASK offer: 1500000000000000000
Capital pool point token balance after user creates ASK offer: 0
Token manager balance after user creates ASK offer: 0
Token manager point token balance after user creates ASK offer: 0
--------------------
User point token balance after user2 creates BID stock: 10000000000000000000000
User token balance after user2 creates BID stock: 9998500000000000000000
User2 token balance after after user2 creates BID stock: 9998965000000000000000
User2 point token balance after user2 creates BID stock: 10000000000000000000000
--------------------
Capital pool balance after user2 creates BID stock: 2535000000000000000
Capital pool point token balance after user2 creates BID stock: 0
Token manager balance after after user2 creates BID stock: 0
Token manager point token balance after user2 creates BID stock: 0
--------------------
User tax income 30000000000000000
User sales revenue 1000000000000000000
User point token with point token address 0
User maker refund 0
User remianing cash 0
--------------------
User2 tax income 0
User2 sales revenue 0
User2 point token with point token address 0
User2 maker refund 0
User2 remianing cash 0
--------------------
User point token balance after user settles half: 9500000000000000000000
User token balance after user settles half: 9998500000000000000000
User2 token balance after after user settles half: 9998965000000000000000
User2 point token balance after user settles half: 10000000000000000000000
--------------------
Capital pool balance after user settles half: 2535000000000000000
Capital pool point token balance after user settles half: 500000000000000000000
Token manager balance after after user settles half: 0
Token manager point token balance after user settles half: 0
--------------------
User tax income 30000000000000000
User sales revenue 1000000000000000000
User point token with point token address 0
User maker refund 0
User remianing cash 0
--------------------
User2 tax income 0
User2 sales revenue 0
User2 point token with point token address 0
User2 maker refund 0
User2 remianing cash 0
--------------------
User point token balance after user2 closes BID: 9500000000000000000000
User token balance after user2 closes BID: 9998500000000000000000
User2 token balance after after user2 closes BID: 9998965000000000000000
User2 point token balance after user2 closes BID: 10000000000000000000000
--------------------
Capital pool balance after user2 closes BID: 2535000000000000000
Capital pool point token balance after user2 closes BID: 500000000000000000000
Token manager balance after after user2 closes BID: 0
Token manager point token balance after user2 closes BID: 0
--------------------
User tax income 30000000000000000
User sales revenue 1000000000000000000
User point token with point token address 0
User maker refund 0
User remianing cash 0
--------------------
User2 tax income 0
User2 sales revenue 0
User2 point token with point token address 500000000000000000000
User2 maker refund 0
User2 remianing cash 1500000000000000000
--------------------
User point token balance after users withdraw: 9500000000000000000000
User token balance after users withdraw: 9999530000000000000000
User2 token balance after users withdraw: 10000465000000000000000
User2 point token balance after users withdraw: 10500000000000000000000
--------------------
Capital pool balance after users withdraw: 5000000000000000
Capital pool point token balance after users withdraw: 0
Token manager balance after users withdraw: 0
Token manager point token balance after users withdraw: 0
--------------------
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 20.80ms (4.55ms CPU time)
Ran 1 test suite in 161.00ms (20.80ms CPU time): 1 tests passed, 0 failed, 0 skipped (1 total tests)