diff --git a/README.md b/README.md index 9265b455..33d9baed 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ https://book.getfoundry.sh/ ### Build ```shell -$ forge build +$ pnpm run build ``` ### Test diff --git a/package.json b/package.json index 41c3858e..a7685348 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "yarn": "use-pnpm" }, "scripts": { - "build": "forge build", + "build:rsa-cli": "cd rsa-cli && cargo build && cd ..", + "build": "forge build && pnpm run build:rsa-cli", "fmt": "forge fmt", "fmt:check": "forge fmt --check", "solhint": "solhint --fix --config ./.solhint.json 'src/**/*.sol'", diff --git a/src/AuctionHouse.sol b/src/AuctionHouse.sol index bcdc210d..b38ba539 100644 --- a/src/AuctionHouse.sol +++ b/src/AuctionHouse.sol @@ -609,10 +609,10 @@ contract AuctionHouse is Auctioneer, Router { uint256 payoutRemaining = remainingCapacity; uint256 bidCount = winningBids.length; for (uint256 i; i < bidCount; i++) { - // Send payout to each bidder + // Send payout to each bid's recipient _sendPayout( lotId_, - winningBids[i].bidder, + winningBids[i].recipient, winningBids[i].minAmountOut, routing, auctionOutput diff --git a/test/AuctionHouse/settle.t.sol b/test/AuctionHouse/settle.t.sol index 968006d2..62687c65 100644 --- a/test/AuctionHouse/settle.t.sol +++ b/test/AuctionHouse/settle.t.sol @@ -52,10 +52,11 @@ contract SettleTest is Test, Permit2User { address internal immutable protocol = address(0x2); address internal immutable referrer = address(0x4); address internal immutable auctionOwner = address(0x5); - address internal immutable recipient = address(0x6); address internal immutable bidderOne = address(0x7); address internal immutable bidderTwo = address(0x8); - address internal immutable curator = address(0x9); + address internal immutable recipientOne = address(0x9); + address internal immutable recipientTwo = address(0x10); + address internal immutable curator = address(0x11); uint48 internal constant protocolFee = 1000; // 1% uint48 internal constant referrerFee = 500; // 0.5% @@ -152,6 +153,7 @@ contract SettleTest is Test, Permit2User { function _createBid( address bidder_, + address recipient_, uint256 bidAmount_, uint256 bidAmountOut_ ) internal returns (uint96 bidId_, LocalSealedBidBatchAuction.Decrypt memory decryptedBid) { @@ -162,7 +164,7 @@ contract SettleTest is Test, Permit2User { Router.BidParams memory bidParams = Router.BidParams({ lotId: lotId, - recipient: recipient, + recipient: recipient_, referrer: referrer, amount: bidAmount_, auctionData: auctionData_, @@ -276,7 +278,7 @@ contract SettleTest is Test, Permit2User { // Create bids // 4 < 10 (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidOne) = - _createBid(bidderOne, bidOneAmount, bidOneAmountOut); + _createBid(bidderOne, recipientOne, bidOneAmount, bidOneAmountOut); decryptedBids.push(decryptedBidOne); // bidOne first (price = 1) @@ -298,9 +300,9 @@ contract SettleTest is Test, Permit2User { // Create bids // 4 + 6 = 10 (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidOne) = - _createBid(bidderOne, bidOneAmount, bidOneAmountOut); + _createBid(bidderOne, recipientOne, bidOneAmount, bidOneAmountOut); (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidTwo) = - _createBid(bidderTwo, bidTwoAmount, bidTwoAmountOut); + _createBid(bidderTwo, recipientTwo, bidTwoAmount, bidTwoAmountOut); decryptedBids.push(decryptedBidOne); decryptedBids.push(decryptedBidTwo); @@ -323,9 +325,9 @@ contract SettleTest is Test, Permit2User { // Create bids // 4 + 7 = 11 (over-subscribed) (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidOne) = - _createBid(bidderOne, bidOneAmount, bidOneAmountOut); + _createBid(bidderOne, recipientOne, bidOneAmount, bidOneAmountOut); (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidThree) = - _createBid(bidderTwo, bidThreeAmount, bidThreeAmountOut); + _createBid(bidderTwo, recipientTwo, bidThreeAmount, bidThreeAmountOut); decryptedBids.push(decryptedBidOne); decryptedBids.push(decryptedBidThree); @@ -348,9 +350,9 @@ contract SettleTest is Test, Permit2User { // Create bids // 4 + 2 = 6 (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidOne) = - _createBid(bidderOne, bidFourAmount, bidFourAmountOut); + _createBid(bidderOne, recipientOne, bidFourAmount, bidFourAmountOut); (, LocalSealedBidBatchAuction.Decrypt memory decryptedBidTwo) = - _createBid(bidderTwo, bidFiveAmount, bidFiveAmountOut); + _createBid(bidderTwo, recipientTwo, bidFiveAmount, bidFiveAmountOut); decryptedBids.push(decryptedBidOne); decryptedBids.push(decryptedBidTwo); @@ -491,15 +493,17 @@ contract SettleTest is Test, Permit2User { auctionHouse.settle(lotId); // Check base token balances + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOut, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidTwoAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), 0, "auction owner: incorrect balance of base token" @@ -586,15 +590,17 @@ contract SettleTest is Test, Permit2User { auctionHouse.settle(lotId); // Check base token balances + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOut, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidTwoAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), 0, "auction owner: incorrect balance of base token" @@ -649,13 +655,15 @@ contract SettleTest is Test, Permit2User { auctionHouse.settle(lotId); // Check base token balances + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOut, "bidderOne: incorrect balance of base token" ); + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidTwoAmountOut, "bidderTwo: incorrect balance of base token" ); @@ -712,15 +720,17 @@ contract SettleTest is Test, Permit2User { // Check base token balances uint256 bidOneAmountOutActual = 3e18; + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); // Received partial payout. 10 - 7 = 3 assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOutActual, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); // Received partial payout. 10 - 7 = 3 + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidThreeAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), 0, "auction owner: incorrect balance of base token" @@ -781,15 +791,17 @@ contract SettleTest is Test, Permit2User { // Check base token balances uint256 bidOneAmountOutActual = 3 * 10 ** baseTokenDecimals; + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); // Received partial payout. 10 - 7 = 3 assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOutActual, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); // Received partial payout. 10 - 7 = 3 + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidThreeAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), 0, "auction owner: incorrect balance of base token" @@ -850,15 +862,17 @@ contract SettleTest is Test, Permit2User { // Check base token balances uint256 bidOneAmountOutActual = 3 * 10 ** baseTokenDecimals; + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); // Received partial payout. 10 - 7 = 3 assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOutActual, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); // Received partial payout. 10 - 7 = 3 + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidThreeAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), 0, "auction owner: incorrect balance of base token" @@ -918,15 +932,17 @@ contract SettleTest is Test, Permit2User { // Check base token balances uint256 bidFourAmountOutActual = bidFourAmount * SCALE / marginalPrice; + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidFourAmountOutActual, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidFiveAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), @@ -984,15 +1000,17 @@ contract SettleTest is Test, Permit2User { // Check base token balances uint256 bidFourAmountOutActual = _getAmountOut(bidFourAmount, marginalPrice); + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidFourAmountOutActual, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidFiveAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), @@ -1050,15 +1068,17 @@ contract SettleTest is Test, Permit2User { // Check base token balances uint256 bidFourAmountOutActual = _getAmountOut(bidFourAmount, marginalPrice); + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidFourAmountOutActual, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); + assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderTwo), + baseToken.balanceOf(recipientTwo), bidFiveAmountOut, - "bidderTwo: incorrect balance of base token" + "recipientTwo: incorrect balance of base token" ); assertEq( baseToken.balanceOf(auctionOwner), @@ -1114,12 +1134,16 @@ contract SettleTest is Test, Permit2User { auctionHouse.settle(lotId); // Check base token balances + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOut, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); + assertEq( + baseToken.balanceOf(recipientTwo), 0, "recipientTwo: incorrect balance of base token" + ); assertEq( baseToken.balanceOf(auctionOwner), _lotCapacity - bidOneAmountOut, @@ -1175,12 +1199,16 @@ contract SettleTest is Test, Permit2User { auctionHouse.settle(lotId); // Check base token balances + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOut, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); + assertEq( + baseToken.balanceOf(recipientTwo), 0, "recipientTwo: incorrect balance of base token" + ); assertEq( baseToken.balanceOf(auctionOwner), _lotCapacity - bidOneAmountOut, @@ -1236,12 +1264,16 @@ contract SettleTest is Test, Permit2User { auctionHouse.settle(lotId); // Check base token balances + assertEq(baseToken.balanceOf(bidderOne), 0, "bidderOne: incorrect balance of base token"); assertEq( - baseToken.balanceOf(bidderOne), + baseToken.balanceOf(recipientOne), bidOneAmountOut, - "bidderOne: incorrect balance of base token" + "recipientOne: incorrect balance of base token" ); assertEq(baseToken.balanceOf(bidderTwo), 0, "bidderTwo: incorrect balance of base token"); + assertEq( + baseToken.balanceOf(recipientTwo), 0, "recipientTwo: incorrect balance of base token" + ); assertEq( baseToken.balanceOf(auctionOwner), _lotCapacity - bidOneAmountOut,