function placeBid(uint256 tokenId) external payable isListed(tokenId) {
Listing storage listing = listings[tokenId];
address previousBidder = bids[tokenId].bidder;
uint256 previousBidAmount = bids[tokenId].amount;
require(listing.seller != msg.sender, "Seller cannot bid");
require(listing.auctionEnd == 0 || block.timestamp < listing.auctionEnd, "Auction ended");
if (listing.buyNowPrice > 0 && msg.value >= listing.buyNowPrice) {
return;
}
require(msg.sender != previousBidder, "Already highest bidder");
emit AuctionSettled(tokenId, msg.sender, listing.seller, msg.value);
}
function testIncorrectAuctionSettledEvents() public {
address seller = address(0x1);
address bidder1 = address(0x2);
address bidder2 = address(0x3);
vm.prank(owner);
nft.mint(seller, 1);
vm.startPrank(seller);
nft.approve(address(marketplace), 1);
marketplace.listNFT(1, 1 ether, 0);
vm.stopPrank();
vm.deal(bidder1, 1.1 ether);
vm.expectEmit(true, true, true, true);
emit AuctionSettled(1, bidder1, seller, 1.1 ether);
vm.prank(bidder1);
marketplace.placeBid{value: 1.1 ether}(1);
vm.deal(bidder2, 1.2 ether);
vm.expectEmit(true, true, true, true);
emit AuctionSettled(1, bidder2, seller, 1.2 ether);
vm.prank(bidder2);
marketplace.placeBid{value: 1.2 ether}(1);
(, , , uint256 auctionEnd, bool listed) = marketplace.listings(1);
assert(listed == true);
assert(block.timestamp < auctionEnd);
vm.warp(auctionEnd + 1);
vm.expectEmit(true, true, true, true);
emit AuctionSettled(1, bidder2, seller, 1.2 ether);
marketplace.settleAuction(1);
}
function placeBid(uint256 tokenId) external payable isListed(tokenId) {
Listing storage listing = listings[tokenId];
address previousBidder = bids[tokenId].bidder;
uint256 previousBidAmount = bids[tokenId].amount;
require(listing.seller != msg.sender, "Seller cannot bid");
require(listing.auctionEnd == 0 || block.timestamp < listing.auctionEnd, "Auction ended");
// --- Buy Now Logic ---
if (listing.buyNowPrice > 0 && msg.value >= listing.buyNowPrice) {
// ... buy now logic remains the same ...
return;
}
require(msg.sender != previousBidder, "Already highest bidder");
- emit AuctionSettled(tokenId, msg.sender, listing.seller, msg.value);
// --- Regular Bidding Logic ---
// ... rest of function ...
emit BidPlaced(tokenId, msg.sender, msg.value); // Already exists at line end
}