From 6284d09b43da92abd95bb128065e5fcd95c3488d Mon Sep 17 00:00:00 2001 From: Oighty Date: Mon, 2 Dec 2024 12:16:41 -0600 Subject: [PATCH 01/10] fix: prevent overfill on fpb auction --- src/modules/auctions/batch/FPB.sol | 3 +- test/modules/auctions/FPB/settle.t.sol | 57 ++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/modules/auctions/batch/FPB.sol b/src/modules/auctions/batch/FPB.sol index ced95861..075b6f8d 100644 --- a/src/modules/auctions/batch/FPB.sol +++ b/src/modules/auctions/batch/FPB.sol @@ -122,7 +122,8 @@ contract FixedPriceBatch is BatchAuctionModule, IFixedPriceBatch { // Refund will be within the bounds of uint96 // bidAmount is uint96, excess < fullFill, so bidAmount * excess / fullFill < bidAmount < uint96 max - uint96 refund = uint96(Math.fullMulDiv(bidAmount_, excess, fullFill)); + // We round up here to avoid over filling the auction, which has downstream effects + uint96 refund = uint96(Math.fullMulDivUp(bidAmount_, excess, fullFill)); uint256 payout = fullFill - excess; return (PartialFill({bidId: bidId_, refund: refund, payout: payout})); diff --git a/test/modules/auctions/FPB/settle.t.sol b/test/modules/auctions/FPB/settle.t.sol index 77150118..e70fec71 100644 --- a/test/modules/auctions/FPB/settle.t.sol +++ b/test/modules/auctions/FPB/settle.t.sol @@ -219,4 +219,61 @@ contract FpbSettleTest is FpbTest { console2.log("settlementCleared final ==> ", auctionDataFinal.settlementCleared); assert(auctionDataFinal.settlementCleared); } + + // Added due to scenario encountered in the wild + function test_settle_lowPrice_doesNotBrick() + public + givenPrice(15_120_710_000_000) + givenMinFillPercent(100e2) + givenLotCapacity(1_000_000e18) + givenLotIsCreated + givenLotHasStarted + { + // Overbid + vm.prank(address(_auctionHouse)); + _module.bid(_lotId, _BIDDER, _REFERRER, 15_120_710_000_000_000_001, abi.encode("")); + + // Settle the auction + vm.prank(address(_auctionHouse)); + (uint256 totalIn, uint256 totalOut, uint256 capacity,,) = _module.settle(_lotId, 0); + + // Ensure the total out is not more than the capacity + console2.log("totalOut ==> ", totalOut); + console2.log("capacity ==> ", capacity); + console2.log("totalIn ==> ", totalIn); + + assertLe(totalOut, capacity); + assertLe(totalIn, 15_120_710_000_000_000_000); + } + + function testFuzz_settle_partialFill_doesNotBrick( + uint96 price_, + uint96 capacity_, + uint96 amount_ + ) public givenMinFillPercent(100e2) { + // Don't test really low values + // We limit the inputs to uint96 to avoid very high values + vm.assume(price_ > 1e6); + vm.assume(capacity_ > 1e6); + vm.assume(amount_ > uint256(price_) * uint256(capacity_) / 1e18); + + _setPrice(uint256(price_)); + _setCapacity(uint256(capacity_)); + _createAuctionLot(); + _startLot(); + + // Overbid + vm.prank(address(_auctionHouse)); + _module.bid(_lotId, _BIDDER, _REFERRER, amount_, abi.encode("")); + + // Settle the auction + vm.prank(address(_auctionHouse)); + (, uint256 totalOut, uint256 capacity,,) = _module.settle(_lotId, 0); + + // Ensure the total out is not more than the capacity + console2.log("totalOut ==> ", totalOut); + console2.log("capacity ==> ", capacity); + + assertLe(totalOut, capacity); + } } From 739b28b62afe203697e1c1d5df2c22a2d952b3e6 Mon Sep 17 00:00:00 2001 From: Oighty Date: Mon, 2 Dec 2024 13:26:46 -0600 Subject: [PATCH 02/10] chore: bump the FBPA version --- src/modules/auctions/batch/FPB.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/auctions/batch/FPB.sol b/src/modules/auctions/batch/FPB.sol index 075b6f8d..c6d0087b 100644 --- a/src/modules/auctions/batch/FPB.sol +++ b/src/modules/auctions/batch/FPB.sol @@ -46,7 +46,7 @@ contract FixedPriceBatch is BatchAuctionModule, IFixedPriceBatch { /// @inheritdoc Module function VEECODE() public pure override returns (Veecode) { - return toVeecode("01FPBA"); + return toVeecode("02FPBA"); } // ========== AUCTION ========== // From 2a0eb52a61893eb357e29d6d1939fd9279613599 Mon Sep 17 00:00:00 2001 From: Oighty Date: Mon, 2 Dec 2024 13:29:01 -0600 Subject: [PATCH 03/10] deploy: FPB v2 to L2s and testnets --- CHANGELOG.md | 4 ++ deployments/.arbitrum-one-v1.0.2.json | 3 ++ deployments/.arbitrum-sepolia-v1.0.2.json | 3 ++ deployments/.base-sepolia-v1.0.2.json | 3 ++ deployments/.base-v1.0.2.json | 3 ++ deployments/.berachain-bartio-v1.0.2.json | 3 ++ deployments/.blast-sepolia-v1.0.2.json | 3 ++ deployments/.blast-v1.0.2.json | 3 ++ deployments/.mainnet-v1.0.1.json | 8 ++-- deployments/.mode-sepolia-v1.0.2.json | 3 ++ deployments/.mode-v1.0.2.json | 3 ++ .../deploy/sequences/fixed-batch-module.json | 8 ++++ script/env.json | 18 ++++----- soldeer.lock | 39 +++++++++---------- 14 files changed, 70 insertions(+), 34 deletions(-) create mode 100644 deployments/.arbitrum-one-v1.0.2.json create mode 100644 deployments/.arbitrum-sepolia-v1.0.2.json create mode 100644 deployments/.base-sepolia-v1.0.2.json create mode 100644 deployments/.base-v1.0.2.json create mode 100644 deployments/.berachain-bartio-v1.0.2.json create mode 100644 deployments/.blast-sepolia-v1.0.2.json create mode 100644 deployments/.blast-v1.0.2.json create mode 100644 deployments/.mode-sepolia-v1.0.2.json create mode 100644 deployments/.mode-v1.0.2.json create mode 100644 script/deploy/sequences/fixed-batch-module.json diff --git a/CHANGELOG.md b/CHANGELOG.md index a8535cba..1c2c5694 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.0.2 + +- Fixed a bug in the Fixed Price Batch module that could result in an underflow when an auction was settled + ## 1.0.1 - Seller can now be a referrer to an auction and earn the referrer fee. This allows them to effectively not pay a fee when they direct traffic to their own auction diff --git a/deployments/.arbitrum-one-v1.0.2.json b/deployments/.arbitrum-one-v1.0.2.json new file mode 100644 index 00000000..2702ff3e --- /dev/null +++ b/deployments/.arbitrum-one-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0xB1e9E16a40321Fe06Cfd797619C345c143D11Aa7" +} diff --git a/deployments/.arbitrum-sepolia-v1.0.2.json b/deployments/.arbitrum-sepolia-v1.0.2.json new file mode 100644 index 00000000..88bbe686 --- /dev/null +++ b/deployments/.arbitrum-sepolia-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0x43ce692c6C538C76eFeA6f495AdA280B60a7ceCA" +} diff --git a/deployments/.base-sepolia-v1.0.2.json b/deployments/.base-sepolia-v1.0.2.json new file mode 100644 index 00000000..c4fbbc4f --- /dev/null +++ b/deployments/.base-sepolia-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0xd13d64dD95F3DB8d1B3E1E65a1ef3F952ee1FC73" +} diff --git a/deployments/.base-v1.0.2.json b/deployments/.base-v1.0.2.json new file mode 100644 index 00000000..7e4f0ce7 --- /dev/null +++ b/deployments/.base-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0xc83Cbb79072CE3341f25326C6a3ad0Cefe36AfdD" +} diff --git a/deployments/.berachain-bartio-v1.0.2.json b/deployments/.berachain-bartio-v1.0.2.json new file mode 100644 index 00000000..a8a80377 --- /dev/null +++ b/deployments/.berachain-bartio-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0x68a8d91d9936b5Ef8b65f516F8a5AAB6c7b1E43e" +} diff --git a/deployments/.blast-sepolia-v1.0.2.json b/deployments/.blast-sepolia-v1.0.2.json new file mode 100644 index 00000000..af4b711e --- /dev/null +++ b/deployments/.blast-sepolia-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0x527Bec0Ed0660c7fc4Dcf64b741eb4CfCDEA1615" +} diff --git a/deployments/.blast-v1.0.2.json b/deployments/.blast-v1.0.2.json new file mode 100644 index 00000000..f3920547 --- /dev/null +++ b/deployments/.blast-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0xCaAE490470305a9d6f58b026cdD36cc747F8F0b9" +} diff --git a/deployments/.mainnet-v1.0.1.json b/deployments/.mainnet-v1.0.1.json index 6220f877..5b59bdee 100644 --- a/deployments/.mainnet-v1.0.1.json +++ b/deployments/.mainnet-v1.0.1.json @@ -1,6 +1,6 @@ { -"deployments.BatchAuctionHouse": "0xBA000020Fed3cf3bF473f09Ca0A72Ba123e20926", -"deployments.BatchCatalogue": "0xD33e5cC03ad1C8F73cc57053f8a749ac76F14988", -"deployments.auctionModules.FixedPriceBatch": "0xC891eC53b389edc1ebC38305B2D400c9E47A33Db", -"deployments.derivativeModules.BatchLinearVesting": "0x605A7105CA51FD5F107258362f52d8269eeA851A" + "deployments.BatchAuctionHouse": "0xBA000020Fed3cf3bF473f09Ca0A72Ba123e20926", + "deployments.BatchCatalogue": "0xD33e5cC03ad1C8F73cc57053f8a749ac76F14988", + "deployments.auctionModules.FixedPriceBatch": "0xC891eC53b389edc1ebC38305B2D400c9E47A33Db", + "deployments.derivativeModules.BatchLinearVesting": "0x605A7105CA51FD5F107258362f52d8269eeA851A" } diff --git a/deployments/.mode-sepolia-v1.0.2.json b/deployments/.mode-sepolia-v1.0.2.json new file mode 100644 index 00000000..38bb2be3 --- /dev/null +++ b/deployments/.mode-sepolia-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0xa9458b5C26810F4bE972d9fB50147e5E2395dC3E" +} diff --git a/deployments/.mode-v1.0.2.json b/deployments/.mode-v1.0.2.json new file mode 100644 index 00000000..a0210d08 --- /dev/null +++ b/deployments/.mode-v1.0.2.json @@ -0,0 +1,3 @@ +{ + "deployments.auctionModules.FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" +} diff --git a/script/deploy/sequences/fixed-batch-module.json b/script/deploy/sequences/fixed-batch-module.json new file mode 100644 index 00000000..5b5f07a2 --- /dev/null +++ b/script/deploy/sequences/fixed-batch-module.json @@ -0,0 +1,8 @@ +{ + "sequence": [ + { + "name": "FixedPriceBatch", + "installBatchAuctionHouse": true + } + ] +} diff --git a/script/env.json b/script/env.json index f0670383..842a17bd 100644 --- a/script/env.json +++ b/script/env.json @@ -13,7 +13,7 @@ "BatchCatalogue": "0xA17fC2B153222bdC549AE22Af5AcA7aC773979Fc", "auctionModules": { "EncryptedMarginalPrice": "0xA06A0A5D22E31D8d19c49FFd65c8FC37477077e2", - "FixedPriceBatch": "0xA74E9a7726b084968a314bE71D60646AA6805109" + "FixedPriceBatch": "0xB1e9E16a40321Fe06Cfd797619C345c143D11Aa7" }, "derivativeModules": { "BatchLinearVesting": "0xCaAE490470305a9d6f58b026cdD36cc747F8F0b9" @@ -33,7 +33,7 @@ "BatchCatalogue": "0xBC1a6e1327c0CdA84Bc6feC65f99cdfCA976DD97", "auctionModules": { "EncryptedMarginalPrice": "0x9099dd8Db39B8aD5D31d9865F013F1d2278c3506", - "FixedPriceBatch": "0x4E2DE4DB0DB1D28B0751B9D0A6b6db222E64Fd43" + "FixedPriceBatch": "0x43ce692c6C538C76eFeA6f495AdA280B60a7ceCA" }, "derivativeModules": { "BatchLinearVesting": "0x14726B9D69d4Fb957e4F3C736bda029Fd96e1FFb" @@ -53,7 +53,7 @@ "BatchCatalogue": "0x2B63Aa737a1AD617A6d6894698Abd043F95cCecb", "auctionModules": { "EncryptedMarginalPrice": "0x408fB738592232372069B592022F03BF3a241613", - "FixedPriceBatch": "0xB4d895191fEE12aa5147D057fcFe720f7c0Dc76C" + "FixedPriceBatch": "0xc83Cbb79072CE3341f25326C6a3ad0Cefe36AfdD" }, "derivativeModules": { "BatchLinearVesting": "0x5C439EAa3F039Bac9Bf1ea4Eb6121d5767C63864" @@ -73,7 +73,7 @@ "BatchCatalogue": "0x97145edD2F06ADF1d91CB9Aa5eb52D842a3f5c54", "auctionModules": { "EncryptedMarginalPrice": "0xf0a4d1f805312438ea146E5df873bD8d64D9dBe4", - "FixedPriceBatch": "0xDF09C4de6B937a1C555052e15Ad6F3EE673618Ae" + "FixedPriceBatch": "0xd13d64dD95F3DB8d1B3E1E65a1ef3F952ee1FC73" }, "derivativeModules": { "BatchLinearVesting": "0x909F26919989167d051312fBB0a1Df4CD93Bf70b" @@ -93,7 +93,7 @@ "BatchCatalogue": "0x37886d0667c16f41F73F6586f087166Ae3CF1155", "auctionModules": { "EncryptedMarginalPrice": "0x2C7aE1A3989f17a6d9935382bDe7F1b021055083", - "FixedPriceBatch": "0x8Db46375e73545226E99b5e8cBfe2794ac835D38" + "FixedPriceBatch": "0x68a8d91d9936b5Ef8b65f516F8a5AAB6c7b1E43e" }, "derivativeModules": { "BatchLinearVesting": "0xD55227c0C37C97Fa2619a9C7F658C173883C1E2a" @@ -118,7 +118,7 @@ "BatchCatalogue": "0xBFfBef6f8a0Ef38121716860E2Ff824c018a467d", "auctionModules": { "EncryptedMarginalPrice": "0x16D5Aab9d35f8B3ac7BD086eEDcCe5343682D5F0", - "FixedPriceBatch": "0x37886d0667c16f41F73F6586f087166Ae3CF1155" + "FixedPriceBatch": "0xCaAE490470305a9d6f58b026cdD36cc747F8F0b9" }, "derivativeModules": { "BatchLinearVesting": "0x5998a28a71e6BDc2b592c14e3517212391782db0" @@ -143,7 +143,7 @@ "BatchCatalogue": "0x26e5Fd9ea25a5719D4EbA3b1966dd4864c48e517", "auctionModules": { "EncryptedMarginalPrice": "0x1043ef1f242e3FC5E90fd67Bb5a1B1356b102b39", - "FixedPriceBatch": "0x562456ca4Cc0Bc964D383aCDe53ED04A15880149" + "FixedPriceBatch": "0x527Bec0Ed0660c7fc4Dcf64b741eb4CfCDEA1615" }, "derivativeModules": { "BatchLinearVesting": "0x9011aC431f91Fd92437cBfdAE30a4ee4b76fEE1F" @@ -223,7 +223,7 @@ "BatchCatalogue": "0x8Db46375e73545226E99b5e8cBfe2794ac835D38", "auctionModules": { "EncryptedMarginalPrice": "0xA17fC2B153222bdC549AE22Af5AcA7aC773979Fc", - "FixedPriceBatch": "0x0599DA010907835037A0beC4525Dc5D600e790EB" + "FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" }, "derivativeModules": { "BatchLinearVesting": "0xc20918b09dE9708d2A7997dfFc3c5ACB34d4a15b" @@ -243,7 +243,7 @@ "BatchCatalogue": "0x2eF571199c0BA4923FCf18cB802e302C0aF544Ef", "auctionModules": { "EncryptedMarginalPrice": "0xD6F9425776eE91b7181a16256768fAB9aB8B20a4", - "FixedPriceBatch": "0xfF5f4fF1b91178b66eDE0E0e2697861F362c29c0" + "FixedPriceBatch": "0xa9458b5C26810F4bE972d9fB50147e5E2395dC3E" }, "derivativeModules": { "BatchLinearVesting": "0xE8546C3f5d5dB707081ffAfDB5416d808758D120" diff --git a/soldeer.lock b/soldeer.lock index 0b6369e8..070185c9 100644 --- a/soldeer.lock +++ b/soldeer.lock @@ -1,33 +1,30 @@ -[[dependencies]] -name = "@openzeppelin-contracts" -version = "4.9.2" -url = "https://soldeer-revisions.s3.amazonaws.com/@openzeppelin-contracts/4_9_2_22-01-2024_13:13:52_contracts.zip" -checksum = "0f4450671798ea5659e6391876a3cf443ca50a696d9b556ac622ec7660bce306" -integrity = "f69bd90f264280204b2a1172a02a2d20f3611f5993a61e5215647bec696a8420" - -[[dependencies]] -name = "clones-with-immutable-args" -version = "1.1.1" -git = "git@github.com:wighawag/clones-with-immutable-args.git" -rev = "f5ca191afea933d50a36d101009b5644dc28bc99" [[dependencies]] name = "forge-std" version = "1.9.1" -url = "https://soldeer-revisions.s3.amazonaws.com/forge-std/v1_9_1_03-07-2024_14:44:59_forge-std-v1.9.1.zip" +source = "https://soldeer-revisions.s3.amazonaws.com/forge-std/v1_9_1_03-07-2024_14:44:59_forge-std-v1.9.1.zip" checksum = "110b35ad3604d91a919c521c71206c18cd07b29c750bd90b5cbbaf37288c9636" -integrity = "389f8bfe6b6aad01915b1e38e6d4839f8189e8d4792b42be4e10d0a96a358e3f" + +[[dependencies]] +name = "solmate" +version = "6.8.0" +source = "https://soldeer-revisions.s3.amazonaws.com/solmate/6_8_0_29-10-2024_19:01:45_solmate.zip" +checksum = "e3ec0f0182cb3bbedecf8a0bcc39897266534a795ec732b2b03dafa285d78a5b" [[dependencies]] name = "solady" version = "0.0.124" -url = "https://soldeer-revisions.s3.amazonaws.com/solady/0_0_124_22-01-2024_13:28:04_solady.zip" +source = "https://soldeer-revisions.s3.amazonaws.com/solady/0_0_124_22-01-2024_13:28:04_solady.zip" checksum = "9342385eaad08f9bb5408be0b41b241dd2b974c001f7da8c3b1ac552b52ce16b" -integrity = "29d93e52694d8e858cf5a737257f4a6f21aefccaf803174fd00b9d686172ab27" [[dependencies]] -name = "solmate" -version = "6.8.0" -url = "https://soldeer-revisions.s3.amazonaws.com/solmate/6_8_0_29-10-2024_19:01:45_solmate.zip" -checksum = "e3ec0f0182cb3bbedecf8a0bcc39897266534a795ec732b2b03dafa285d78a5b" -integrity = "a22e5a352de0231f671ee8adf5667bbe83c50012670083987bd1099a69feb429" +name = "@openzeppelin-contracts" +version = "4.9.2" +source = "https://soldeer-revisions.s3.amazonaws.com/@openzeppelin-contracts/4_9_2_22-01-2024_13:13:52_contracts.zip" +checksum = "0f4450671798ea5659e6391876a3cf443ca50a696d9b556ac622ec7660bce306" + +[[dependencies]] +name = "clones-with-immutable-args" +version = "1.1.1" +source = "git@github.com:wighawag/clones-with-immutable-args.git" +checksum = "f5ca191afea933d50a36d101009b5644dc28bc99" From a7d956b0a170dcb732ddf2df9db41e32532f76e9 Mon Sep 17 00:00:00 2001 From: Oighty Date: Wed, 4 Dec 2024 09:46:40 -0600 Subject: [PATCH 04/10] fix: partial fill payout rounding in FPB --- src/modules/auctions/batch/FPB.sol | 4 +- test/modules/auctions/FPB/claimBids.t.sol | 63 +++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/modules/auctions/batch/FPB.sol b/src/modules/auctions/batch/FPB.sol index c6d0087b..6b64c28b 100644 --- a/src/modules/auctions/batch/FPB.sol +++ b/src/modules/auctions/batch/FPB.sol @@ -124,7 +124,9 @@ contract FixedPriceBatch is BatchAuctionModule, IFixedPriceBatch { // bidAmount is uint96, excess < fullFill, so bidAmount * excess / fullFill < bidAmount < uint96 max // We round up here to avoid over filling the auction, which has downstream effects uint96 refund = uint96(Math.fullMulDivUp(bidAmount_, excess, fullFill)); - uint256 payout = fullFill - excess; + // Calculate the payout for the bid amount minus the refund + // We do this again instead of using the fullFill - excess to avoid rounding errors + uint256 payout = Math.fullMulDiv(bidAmount_ - refund, baseScale_, price_); return (PartialFill({bidId: bidId_, refund: refund, payout: payout})); } diff --git a/test/modules/auctions/FPB/claimBids.t.sol b/test/modules/auctions/FPB/claimBids.t.sol index c4f48565..2e037c1e 100644 --- a/test/modules/auctions/FPB/claimBids.t.sol +++ b/test/modules/auctions/FPB/claimBids.t.sol @@ -287,4 +287,67 @@ contract FpbClaimBidsTest is FpbTest { IFixedPriceBatch.Bid memory bidDataTwo = _module.getBid(_lotId, 2); assertEq(uint8(bidDataTwo.status), uint8(IFixedPriceBatch.BidStatus.Claimed), "status"); } + + // bug encountered in prod + function test_partialFill_roundingError() + public + givenPrice(15_120_710_000_000) + givenMinFillPercent(100e2) + givenLotCapacity(1_000_000e18) + givenLotIsCreated + givenLotHasStarted + { + // Auction parameters + // Capacity: 1,000,000 FLAPPY + // Price: 0.00001512071 ETH/FLAPPY + // Expected Proceeds: 15.12071 ETH + + // Observed results with complete fill: + // Tokens Sold: 999999.999999999999933865 FLAPPY + // Proceeds: 15.120709999999999999 ETH + // The reason these values are lower is that we introduced rounding behavior + // so that the refund on a partial fill would be slightly larger to not oversell + // the auction. If oversold, settle bricks so we round up the refund to prevent this. + + // However, the partial fill payout ended up being too high and caused an error + // when that user went to claim their bid. This is because a refund of 0.000000000000066135 FLAPPY + // was sent from the auction house back to the callback on settlement since the sold value was + // less than the capacity. Thus, the auction house did not have enough capacity to pay out all + // of the successful bids at that point (it was 0.000000000000066105 FLAPPY short). + + // To recreate this, we submit two bids. The first is for all the capacity that was expended before + // the partial bid was placed, and the second bid is the same as the observed partial bid. + + // The partial bid was for 0.3 ETH and they received: + // Filled: 0.083710000000000000 ETH + // Refund: 0.216290000000000001 ETH + // Payout: 5,536.11569827078225824 FLAPPY + + // The first bid should then be for 15.12071 - 0.08371 ETH = 15.037 ETH + vm.prank(address(_auctionHouse)); + uint64 id1 = + _module.bid(_lotId, _BIDDER, _REFERRER, 15_037_000_000_000_000_000, abi.encode("")); + + // The second bid should be for 0.3 ETH + vm.prank(address(_auctionHouse)); + uint64 id2 = _module.bid(_lotId, _BIDDER, _REFERRER, 3e17, abi.encode("")); + + // Settle the auction + vm.prank(address(_auctionHouse)); + (uint256 totalIn, uint256 totalOut,, bool finished,) = _module.settle(_lotId, 2); + + // Check that the auction is settled and the results are what we expect + assertEq(totalIn, 15_120_709_999_999_999_999); + assertEq(totalOut, 999_999_999_999_999_999_933_865); + assertTrue(finished); + + // Assert that the total out is equal to the capacity minus the refund sent to the seller + assertEq(totalOut, 1_000_000e18 - 66_135); + + // Validate that the bid claims add up to less than or equal the total out + IBatchAuction.BidClaim memory bidClaim1 = _module.getBidClaim(_lotId, id1); + IBatchAuction.BidClaim memory bidClaim2 = _module.getBidClaim(_lotId, id2); + + assertLe(bidClaim1.payout + bidClaim2.payout, totalOut); + } } From d3b9d311c1d25c49a882479e0e458b2e159f0a84 Mon Sep 17 00:00:00 2001 From: Oighty Date: Fri, 6 Dec 2024 10:59:49 -0600 Subject: [PATCH 05/10] test: add fuzz test for FPB fix --- test/modules/auctions/FPB/FPBTest.sol | 1 + test/modules/auctions/FPB/claimBids.t.sol | 62 +++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/test/modules/auctions/FPB/FPBTest.sol b/test/modules/auctions/FPB/FPBTest.sol index a45d4f1c..e8cc03fe 100644 --- a/test/modules/auctions/FPB/FPBTest.sol +++ b/test/modules/auctions/FPB/FPBTest.sol @@ -26,6 +26,7 @@ abstract contract FpbTest is Test, Permit2User { uint48 internal constant _DURATION = 1 days; uint24 internal constant _MIN_FILL_PERCENT = 50e2; // 50% uint256 internal constant _PRICE = 2e18; + uint24 internal constant _ONE_HUNDRED_PERCENT = 100e2; BatchAuctionHouse internal _auctionHouse; FixedPriceBatch internal _module; diff --git a/test/modules/auctions/FPB/claimBids.t.sol b/test/modules/auctions/FPB/claimBids.t.sol index 2e037c1e..386bd126 100644 --- a/test/modules/auctions/FPB/claimBids.t.sol +++ b/test/modules/auctions/FPB/claimBids.t.sol @@ -7,6 +7,7 @@ import {IBatchAuction} from "../../../../src/interfaces/modules/IBatchAuction.so import {IFixedPriceBatch} from "../../../../src/interfaces/modules/auctions/IFixedPriceBatch.sol"; import {FpbTest} from "./FPBTest.sol"; +import {console2} from "@forge-std-1.9.1/console2.sol"; contract FpbClaimBidsTest is FpbTest { // [X] when the caller is not the parent @@ -350,4 +351,65 @@ contract FpbClaimBidsTest is FpbTest { assertLe(bidClaim1.payout + bidClaim2.payout, totalOut); } + + function testFuzz_partialFill_roundingError( + uint96 price_, + uint24 percentRemaining_, + uint96 amount_ + ) public givenMinFillPercent(100e2) { + // Assume the price is less than 1e27 and greater than 1e9 (+/- 9 decimals) + // Use uint96 to get fewer rejections since it's max is close to 1e27 (~8e28) + vm.assume(price_ >= 1e9 && price_ <= 1e27); + + _setPrice(uint256(price_)); + + // Create a lot + _createAuctionLot(); + + // Start the lot + _startLot(); + + // Set the percent remaining as something less than 100% + uint256 percentRemaining = uint256(percentRemaining_) % _ONE_HUNDRED_PERCENT; + vm.assume(percentRemaining > 0); + + console2.log("percentRemaining", percentRemaining); + console2.log("price", price_); + console2.log("amount", amount_); + + // Calculate the first bid amount as a percentage of the total amount + uint256 capacityInQuote = (_auctionParams.capacity * price_) / _BASE_SCALE; + console2.log("capacityInQuote", capacityInQuote); + uint256 firstBidAmount = + capacityInQuote * (_ONE_HUNDRED_PERCENT - percentRemaining) / _ONE_HUNDRED_PERCENT; + uint256 remaining = capacityInQuote - firstBidAmount; + uint256 secondBidAmount = amount_ < remaining ? remaining + 1 : amount_; + + console2.log("firstBidAmount", firstBidAmount); + console2.log("secondBidAmount", secondBidAmount); + + // Submit the first bid, auction should not be filled completely + vm.prank(address(_auctionHouse)); + uint64 id1 = _module.bid(_lotId, _BIDDER, _REFERRER, firstBidAmount, abi.encode("")); + + // Submit the second bid, auction should be filled completely and this bid should be a partial fill + vm.prank(address(_auctionHouse)); + uint64 id2 = _module.bid(_lotId, _BIDDER, _REFERRER, secondBidAmount, abi.encode("")); + + // Settle the auction + vm.prank(address(_auctionHouse)); + (uint256 totalIn, uint256 totalOut,, bool finished,) = _module.settle(_lotId, 2); + + // Check that the auction is settled and the results are what we expect + // assertLe(totalIn, capacityInQuote, "totalIn"); This isn't necessarily required, we can handle a slightly higher totalIn + assertLe(totalOut, _auctionParams.capacity, "totalOut"); + assertTrue(finished, "finished"); + + // Validate that the bid claims add up to less than or equal the total out + IBatchAuction.BidClaim memory bidClaim1 = _module.getBidClaim(_lotId, id1); + IBatchAuction.BidClaim memory bidClaim2 = _module.getBidClaim(_lotId, id2); + + assertLe(bidClaim1.payout + bidClaim2.payout, totalOut); + assertGe(bidClaim1.paid + bidClaim2.paid - bidClaim2.refund, totalIn); + } } From 684fe5d23ee8752ccd00019054e1a897c63004fc Mon Sep 17 00:00:00 2001 From: Oighty Date: Fri, 13 Dec 2024 14:00:58 -0600 Subject: [PATCH 06/10] chore: bump FPB version to 3 --- src/modules/auctions/batch/FPB.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/auctions/batch/FPB.sol b/src/modules/auctions/batch/FPB.sol index 6b64c28b..5b4c3477 100644 --- a/src/modules/auctions/batch/FPB.sol +++ b/src/modules/auctions/batch/FPB.sol @@ -46,7 +46,7 @@ contract FixedPriceBatch is BatchAuctionModule, IFixedPriceBatch { /// @inheritdoc Module function VEECODE() public pure override returns (Veecode) { - return toVeecode("02FPBA"); + return toVeecode("03FPBA"); } // ========== AUCTION ========== // From 273191995ba8d9aadaee1241b9473559c43b37c3 Mon Sep 17 00:00:00 2001 From: Oighty Date: Fri, 13 Dec 2024 14:05:19 -0600 Subject: [PATCH 07/10] chore: FPB v2 deploy --- deployments/.mainnet-v1.0.2.json | 3 +++ script/deploy/sequences/fixed-batch-module.json | 2 +- script/env.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 deployments/.mainnet-v1.0.2.json diff --git a/deployments/.mainnet-v1.0.2.json b/deployments/.mainnet-v1.0.2.json new file mode 100644 index 00000000..e787240e --- /dev/null +++ b/deployments/.mainnet-v1.0.2.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0xaC9957282BeA578f371078ddc4cD12A135B105d6" +} diff --git a/script/deploy/sequences/fixed-batch-module.json b/script/deploy/sequences/fixed-batch-module.json index 5b5f07a2..4f0c59db 100644 --- a/script/deploy/sequences/fixed-batch-module.json +++ b/script/deploy/sequences/fixed-batch-module.json @@ -2,7 +2,7 @@ "sequence": [ { "name": "FixedPriceBatch", - "installBatchAuctionHouse": true + "installBatchAuctionHouse": false } ] } diff --git a/script/env.json b/script/env.json index 842a17bd..1aa683ba 100644 --- a/script/env.json +++ b/script/env.json @@ -163,7 +163,7 @@ "BatchCatalogue": "0xD33e5cC03ad1C8F73cc57053f8a749ac76F14988", "auctionModules": { "EncryptedMarginalPrice": "0x0000000000000000000000000000000000000000", - "FixedPriceBatch": "0xC891eC53b389edc1ebC38305B2D400c9E47A33Db" + "FixedPriceBatch": "0xaC9957282BeA578f371078ddc4cD12A135B105d6" }, "derivativeModules": { "BatchLinearVesting": "0x605A7105CA51FD5F107258362f52d8269eeA851A" From 769e781f9953f42429e6b562d0bd6e05cdf415f0 Mon Sep 17 00:00:00 2001 From: Oighty Date: Fri, 13 Dec 2024 14:07:23 -0600 Subject: [PATCH 08/10] chore: update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c2c5694..4798ae37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.0.3 + +- Fixed a bug in the Fixed Price Batch module calculating the payout of a partially filled bid. This was introduced in v1.0.2 when the underflow bug was fixed. + ## 1.0.2 - Fixed a bug in the Fixed Price Batch module that could result in an underflow when an auction was settled From 39e353844f2dcc90e3241578a2167159897a2afe Mon Sep 17 00:00:00 2001 From: Oighty Date: Fri, 13 Dec 2024 14:29:39 -0600 Subject: [PATCH 09/10] deploy: FPBA v3 to all chains --- deployments/.arbitrum-one-v1.0.3.json | 3 +++ deployments/.arbitrum-sepolia-v1.0.3.json | 3 +++ deployments/.base-sepolia-v1.0.3.json | 3 +++ deployments/.base-v1.0.3.json | 3 +++ deployments/.berachain-bartio-v1.0.3.json | 3 +++ deployments/.blast-sepolia-v1.0.3.json | 3 +++ deployments/.blast-v1.0.3.json | 3 +++ deployments/.mainnet-v1.0.3.json | 3 +++ deployments/.mode-sepolia-v1.0.3.json | 3 +++ deployments/.mode-v1.0.3.json | 3 +++ script/env.json | 20 ++++++++++---------- 11 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 deployments/.arbitrum-one-v1.0.3.json create mode 100644 deployments/.arbitrum-sepolia-v1.0.3.json create mode 100644 deployments/.base-sepolia-v1.0.3.json create mode 100644 deployments/.base-v1.0.3.json create mode 100644 deployments/.berachain-bartio-v1.0.3.json create mode 100644 deployments/.blast-sepolia-v1.0.3.json create mode 100644 deployments/.blast-v1.0.3.json create mode 100644 deployments/.mainnet-v1.0.3.json create mode 100644 deployments/.mode-sepolia-v1.0.3.json create mode 100644 deployments/.mode-v1.0.3.json diff --git a/deployments/.arbitrum-one-v1.0.3.json b/deployments/.arbitrum-one-v1.0.3.json new file mode 100644 index 00000000..3bfb14c3 --- /dev/null +++ b/deployments/.arbitrum-one-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x04974BcFC715c148818724d9Caab3Fe8d0391b8b" +} diff --git a/deployments/.arbitrum-sepolia-v1.0.3.json b/deployments/.arbitrum-sepolia-v1.0.3.json new file mode 100644 index 00000000..06641ab2 --- /dev/null +++ b/deployments/.arbitrum-sepolia-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0xAF4AaFC046FB329EB1181c0094a95DA7Cee38211" +} diff --git a/deployments/.base-sepolia-v1.0.3.json b/deployments/.base-sepolia-v1.0.3.json new file mode 100644 index 00000000..3fc55b2b --- /dev/null +++ b/deployments/.base-sepolia-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x1A6Ba70B8e5957bCd03C20f9CF42D9e6D3d9b514" +} diff --git a/deployments/.base-v1.0.3.json b/deployments/.base-v1.0.3.json new file mode 100644 index 00000000..6c823932 --- /dev/null +++ b/deployments/.base-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x4042D4F2236D055212d485E028E8FE4939252F88" +} diff --git a/deployments/.berachain-bartio-v1.0.3.json b/deployments/.berachain-bartio-v1.0.3.json new file mode 100644 index 00000000..d91d3108 --- /dev/null +++ b/deployments/.berachain-bartio-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" +} diff --git a/deployments/.blast-sepolia-v1.0.3.json b/deployments/.blast-sepolia-v1.0.3.json new file mode 100644 index 00000000..df185baa --- /dev/null +++ b/deployments/.blast-sepolia-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0xf1E5FA9008fC3a62D90c7e569E02D98315C19DC3" +} diff --git a/deployments/.blast-v1.0.3.json b/deployments/.blast-v1.0.3.json new file mode 100644 index 00000000..0cf4dc35 --- /dev/null +++ b/deployments/.blast-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x0e4996960731Fec8E7C9DBbD51383fC71174DD88" +} diff --git a/deployments/.mainnet-v1.0.3.json b/deployments/.mainnet-v1.0.3.json new file mode 100644 index 00000000..ed179ce3 --- /dev/null +++ b/deployments/.mainnet-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x4ED7160dA0020070ADf1AB149c730E8A4bD73d15" +} diff --git a/deployments/.mode-sepolia-v1.0.3.json b/deployments/.mode-sepolia-v1.0.3.json new file mode 100644 index 00000000..15fc0c63 --- /dev/null +++ b/deployments/.mode-sepolia-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x8e5a555bcaB474C91dcA326bE3DFdDa7e30c3765" +} diff --git a/deployments/.mode-v1.0.3.json b/deployments/.mode-v1.0.3.json new file mode 100644 index 00000000..059b2818 --- /dev/null +++ b/deployments/.mode-v1.0.3.json @@ -0,0 +1,3 @@ +{ +"deployments.auctionModules.FixedPriceBatch": "0x3A327c856AF41EcF4d783975CE38f669dEeaB298" +} diff --git a/script/env.json b/script/env.json index 1aa683ba..c40bf1ad 100644 --- a/script/env.json +++ b/script/env.json @@ -13,7 +13,7 @@ "BatchCatalogue": "0xA17fC2B153222bdC549AE22Af5AcA7aC773979Fc", "auctionModules": { "EncryptedMarginalPrice": "0xA06A0A5D22E31D8d19c49FFd65c8FC37477077e2", - "FixedPriceBatch": "0xB1e9E16a40321Fe06Cfd797619C345c143D11Aa7" + "FixedPriceBatch": "0x04974BcFC715c148818724d9Caab3Fe8d0391b8b" }, "derivativeModules": { "BatchLinearVesting": "0xCaAE490470305a9d6f58b026cdD36cc747F8F0b9" @@ -33,7 +33,7 @@ "BatchCatalogue": "0xBC1a6e1327c0CdA84Bc6feC65f99cdfCA976DD97", "auctionModules": { "EncryptedMarginalPrice": "0x9099dd8Db39B8aD5D31d9865F013F1d2278c3506", - "FixedPriceBatch": "0x43ce692c6C538C76eFeA6f495AdA280B60a7ceCA" + "FixedPriceBatch": "0xAF4AaFC046FB329EB1181c0094a95DA7Cee38211" }, "derivativeModules": { "BatchLinearVesting": "0x14726B9D69d4Fb957e4F3C736bda029Fd96e1FFb" @@ -53,7 +53,7 @@ "BatchCatalogue": "0x2B63Aa737a1AD617A6d6894698Abd043F95cCecb", "auctionModules": { "EncryptedMarginalPrice": "0x408fB738592232372069B592022F03BF3a241613", - "FixedPriceBatch": "0xc83Cbb79072CE3341f25326C6a3ad0Cefe36AfdD" + "FixedPriceBatch": "0x4042D4F2236D055212d485E028E8FE4939252F88" }, "derivativeModules": { "BatchLinearVesting": "0x5C439EAa3F039Bac9Bf1ea4Eb6121d5767C63864" @@ -73,7 +73,7 @@ "BatchCatalogue": "0x97145edD2F06ADF1d91CB9Aa5eb52D842a3f5c54", "auctionModules": { "EncryptedMarginalPrice": "0xf0a4d1f805312438ea146E5df873bD8d64D9dBe4", - "FixedPriceBatch": "0xd13d64dD95F3DB8d1B3E1E65a1ef3F952ee1FC73" + "FixedPriceBatch": "0x1A6Ba70B8e5957bCd03C20f9CF42D9e6D3d9b514" }, "derivativeModules": { "BatchLinearVesting": "0x909F26919989167d051312fBB0a1Df4CD93Bf70b" @@ -93,7 +93,7 @@ "BatchCatalogue": "0x37886d0667c16f41F73F6586f087166Ae3CF1155", "auctionModules": { "EncryptedMarginalPrice": "0x2C7aE1A3989f17a6d9935382bDe7F1b021055083", - "FixedPriceBatch": "0x68a8d91d9936b5Ef8b65f516F8a5AAB6c7b1E43e" + "FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" }, "derivativeModules": { "BatchLinearVesting": "0xD55227c0C37C97Fa2619a9C7F658C173883C1E2a" @@ -118,7 +118,7 @@ "BatchCatalogue": "0xBFfBef6f8a0Ef38121716860E2Ff824c018a467d", "auctionModules": { "EncryptedMarginalPrice": "0x16D5Aab9d35f8B3ac7BD086eEDcCe5343682D5F0", - "FixedPriceBatch": "0xCaAE490470305a9d6f58b026cdD36cc747F8F0b9" + "FixedPriceBatch": "0x0e4996960731Fec8E7C9DBbD51383fC71174DD88" }, "derivativeModules": { "BatchLinearVesting": "0x5998a28a71e6BDc2b592c14e3517212391782db0" @@ -143,7 +143,7 @@ "BatchCatalogue": "0x26e5Fd9ea25a5719D4EbA3b1966dd4864c48e517", "auctionModules": { "EncryptedMarginalPrice": "0x1043ef1f242e3FC5E90fd67Bb5a1B1356b102b39", - "FixedPriceBatch": "0x527Bec0Ed0660c7fc4Dcf64b741eb4CfCDEA1615" + "FixedPriceBatch": "0xf1E5FA9008fC3a62D90c7e569E02D98315C19DC3" }, "derivativeModules": { "BatchLinearVesting": "0x9011aC431f91Fd92437cBfdAE30a4ee4b76fEE1F" @@ -163,7 +163,7 @@ "BatchCatalogue": "0xD33e5cC03ad1C8F73cc57053f8a749ac76F14988", "auctionModules": { "EncryptedMarginalPrice": "0x0000000000000000000000000000000000000000", - "FixedPriceBatch": "0xaC9957282BeA578f371078ddc4cD12A135B105d6" + "FixedPriceBatch": "0x4ED7160dA0020070ADf1AB149c730E8A4bD73d15" }, "derivativeModules": { "BatchLinearVesting": "0x605A7105CA51FD5F107258362f52d8269eeA851A" @@ -223,7 +223,7 @@ "BatchCatalogue": "0x8Db46375e73545226E99b5e8cBfe2794ac835D38", "auctionModules": { "EncryptedMarginalPrice": "0xA17fC2B153222bdC549AE22Af5AcA7aC773979Fc", - "FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" + "FixedPriceBatch": "0x3A327c856AF41EcF4d783975CE38f669dEeaB298" }, "derivativeModules": { "BatchLinearVesting": "0xc20918b09dE9708d2A7997dfFc3c5ACB34d4a15b" @@ -243,7 +243,7 @@ "BatchCatalogue": "0x2eF571199c0BA4923FCf18cB802e302C0aF544Ef", "auctionModules": { "EncryptedMarginalPrice": "0xD6F9425776eE91b7181a16256768fAB9aB8B20a4", - "FixedPriceBatch": "0xa9458b5C26810F4bE972d9fB50147e5E2395dC3E" + "FixedPriceBatch": "0x8e5a555bcaB474C91dcA326bE3DFdDa7e30c3765" }, "derivativeModules": { "BatchLinearVesting": "0xE8546C3f5d5dB707081ffAfDB5416d808758D120" From f20380eabf39a463e8712bd336732cc261910e32 Mon Sep 17 00:00:00 2001 From: Oighty Date: Fri, 13 Dec 2024 14:52:53 -0600 Subject: [PATCH 10/10] chore: lint --- deployments/.arbitrum-one-v1.0.3.json | 2 +- deployments/.arbitrum-sepolia-v1.0.3.json | 2 +- deployments/.base-sepolia-v1.0.3.json | 2 +- deployments/.base-v1.0.3.json | 2 +- deployments/.berachain-bartio-v1.0.3.json | 2 +- deployments/.blast-sepolia-v1.0.3.json | 2 +- deployments/.blast-v1.0.3.json | 2 +- deployments/.mainnet-v1.0.2.json | 2 +- deployments/.mainnet-v1.0.3.json | 2 +- deployments/.mode-sepolia-v1.0.3.json | 2 +- deployments/.mode-v1.0.3.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/deployments/.arbitrum-one-v1.0.3.json b/deployments/.arbitrum-one-v1.0.3.json index 3bfb14c3..d3d06dbb 100644 --- a/deployments/.arbitrum-one-v1.0.3.json +++ b/deployments/.arbitrum-one-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x04974BcFC715c148818724d9Caab3Fe8d0391b8b" + "deployments.auctionModules.FixedPriceBatch": "0x04974BcFC715c148818724d9Caab3Fe8d0391b8b" } diff --git a/deployments/.arbitrum-sepolia-v1.0.3.json b/deployments/.arbitrum-sepolia-v1.0.3.json index 06641ab2..9e7c0341 100644 --- a/deployments/.arbitrum-sepolia-v1.0.3.json +++ b/deployments/.arbitrum-sepolia-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0xAF4AaFC046FB329EB1181c0094a95DA7Cee38211" + "deployments.auctionModules.FixedPriceBatch": "0xAF4AaFC046FB329EB1181c0094a95DA7Cee38211" } diff --git a/deployments/.base-sepolia-v1.0.3.json b/deployments/.base-sepolia-v1.0.3.json index 3fc55b2b..2cc8b390 100644 --- a/deployments/.base-sepolia-v1.0.3.json +++ b/deployments/.base-sepolia-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x1A6Ba70B8e5957bCd03C20f9CF42D9e6D3d9b514" + "deployments.auctionModules.FixedPriceBatch": "0x1A6Ba70B8e5957bCd03C20f9CF42D9e6D3d9b514" } diff --git a/deployments/.base-v1.0.3.json b/deployments/.base-v1.0.3.json index 6c823932..36ee8ef4 100644 --- a/deployments/.base-v1.0.3.json +++ b/deployments/.base-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x4042D4F2236D055212d485E028E8FE4939252F88" + "deployments.auctionModules.FixedPriceBatch": "0x4042D4F2236D055212d485E028E8FE4939252F88" } diff --git a/deployments/.berachain-bartio-v1.0.3.json b/deployments/.berachain-bartio-v1.0.3.json index d91d3108..a0210d08 100644 --- a/deployments/.berachain-bartio-v1.0.3.json +++ b/deployments/.berachain-bartio-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" + "deployments.auctionModules.FixedPriceBatch": "0x4044d6dE91FB3049A9eBA24e4299d0d7ec7E53a3" } diff --git a/deployments/.blast-sepolia-v1.0.3.json b/deployments/.blast-sepolia-v1.0.3.json index df185baa..fd185edb 100644 --- a/deployments/.blast-sepolia-v1.0.3.json +++ b/deployments/.blast-sepolia-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0xf1E5FA9008fC3a62D90c7e569E02D98315C19DC3" + "deployments.auctionModules.FixedPriceBatch": "0xf1E5FA9008fC3a62D90c7e569E02D98315C19DC3" } diff --git a/deployments/.blast-v1.0.3.json b/deployments/.blast-v1.0.3.json index 0cf4dc35..cfdb7592 100644 --- a/deployments/.blast-v1.0.3.json +++ b/deployments/.blast-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x0e4996960731Fec8E7C9DBbD51383fC71174DD88" + "deployments.auctionModules.FixedPriceBatch": "0x0e4996960731Fec8E7C9DBbD51383fC71174DD88" } diff --git a/deployments/.mainnet-v1.0.2.json b/deployments/.mainnet-v1.0.2.json index e787240e..a9f55858 100644 --- a/deployments/.mainnet-v1.0.2.json +++ b/deployments/.mainnet-v1.0.2.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0xaC9957282BeA578f371078ddc4cD12A135B105d6" + "deployments.auctionModules.FixedPriceBatch": "0xaC9957282BeA578f371078ddc4cD12A135B105d6" } diff --git a/deployments/.mainnet-v1.0.3.json b/deployments/.mainnet-v1.0.3.json index ed179ce3..a82150c7 100644 --- a/deployments/.mainnet-v1.0.3.json +++ b/deployments/.mainnet-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x4ED7160dA0020070ADf1AB149c730E8A4bD73d15" + "deployments.auctionModules.FixedPriceBatch": "0x4ED7160dA0020070ADf1AB149c730E8A4bD73d15" } diff --git a/deployments/.mode-sepolia-v1.0.3.json b/deployments/.mode-sepolia-v1.0.3.json index 15fc0c63..24236c6e 100644 --- a/deployments/.mode-sepolia-v1.0.3.json +++ b/deployments/.mode-sepolia-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x8e5a555bcaB474C91dcA326bE3DFdDa7e30c3765" + "deployments.auctionModules.FixedPriceBatch": "0x8e5a555bcaB474C91dcA326bE3DFdDa7e30c3765" } diff --git a/deployments/.mode-v1.0.3.json b/deployments/.mode-v1.0.3.json index 059b2818..0939a1d2 100644 --- a/deployments/.mode-v1.0.3.json +++ b/deployments/.mode-v1.0.3.json @@ -1,3 +1,3 @@ { -"deployments.auctionModules.FixedPriceBatch": "0x3A327c856AF41EcF4d783975CE38f669dEeaB298" + "deployments.auctionModules.FixedPriceBatch": "0x3A327c856AF41EcF4d783975CE38f669dEeaB298" }