-
-
Notifications
You must be signed in to change notification settings - Fork 15
Added auction cancellation functionality and related tests across auctions #39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 3 commits
6614cbb
cde87b4
b0b96d9
9db1a7d
2e2520a
f606d21
c983080
6c1b5f9
ceccb92
3164205
ea1034c
d2fd2fd
a2b3d2a
7b8bd0f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -51,6 +51,7 @@ contract AllPayAuction is Auction { | |
| uint256 deadlineExtension, | ||
| uint256 protocolFee | ||
| ); | ||
| event AuctionCancelled(uint256 indexed auctionId, address indexed auctioneer); | ||
|
|
||
| function createAuction( | ||
| string memory name, | ||
|
|
@@ -115,6 +116,16 @@ contract AllPayAuction is Auction { | |
| emit Withdrawn(auctionId, withdrawAmount); | ||
| } | ||
|
|
||
| function cancelAuction(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
|
||
| AuctionData storage auction = auctions[auctionId]; | ||
| require(msg.sender == auction.auctioneer, "Only auctioneer can cancel"); | ||
| require(auction.highestBid == 0, "Cannot cancel auction with bids"); | ||
| auction.isClaimed = true; | ||
| auction.deadline = block.timestamp; // Set deadline to now, preventing future bids via beforeDeadline modifier | ||
| sendFunds(auction.auctionType == AuctionType.NFT, auction.auctionedToken, auction.auctioneer, auction.auctionedTokenIdOrAmount); | ||
| emit AuctionCancelled(auctionId, auction.auctioneer); | ||
| } | ||
|
|
||
| function claim(uint256 auctionId) external exists(auctionId) onlyAfterDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| auction.isClaimed = true; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -50,6 +50,7 @@ contract EnglishAuction is Auction { | |
| uint256 deadlineExtension, | ||
| uint256 protocolFee | ||
| ); | ||
| event AuctionCancelled(uint256 indexed auctionId, address indexed auctioneer); | ||
|
|
||
| function createAuction( | ||
| string memory name, | ||
|
|
@@ -118,6 +119,16 @@ contract EnglishAuction is Auction { | |
| emit Withdrawn(auctionId, withdrawAmount); | ||
| } | ||
|
|
||
| function cancelAuction(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
|
||
| AuctionData storage auction = auctions[auctionId]; | ||
| require(msg.sender == auction.auctioneer, "Only auctioneer can cancel"); | ||
| require(auction.highestBid == 0, "Cannot cancel auction with bids"); | ||
| auction.isClaimed = true; | ||
| auction.deadline = block.timestamp; // Set deadline to now, preventing future bids via beforeDeadline modifier | ||
| sendFunds(auction.auctionType == AuctionType.NFT, auction.auctionedToken, auction.auctioneer, auction.auctionedTokenIdOrAmount); | ||
| emit AuctionCancelled(auctionId, auction.auctioneer); | ||
| } | ||
|
|
||
| function claim(uint256 auctionId) external exists(auctionId) onlyAfterDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| auction.isClaimed = true; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -55,6 +55,7 @@ contract ExponentialReverseDutchAuction is Auction { | |
| uint256 deadline, | ||
| uint256 protocolFee | ||
| ); | ||
| event AuctionCancelled(uint256 indexed auctionId, address indexed auctioneer); | ||
|
|
||
| function createAuction( | ||
| string memory name, | ||
|
|
@@ -130,8 +131,19 @@ contract ExponentialReverseDutchAuction is Auction { | |
| sendERC20(auction.biddingToken,feeRecipient,fees); | ||
| emit Withdrawn(auctionId, withdrawAmount); | ||
| } | ||
|
|
||
| function cancelAuction(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| require(msg.sender == auction.auctioneer, "Only auctioneer can cancel"); | ||
| require(auction.winner == auction.auctioneer, "Cannot cancel auction with bids"); | ||
|
||
| require(!auction.isClaimed, "Auctioned asset has already been claimed"); | ||
| auction.isClaimed = true; | ||
| auction.deadline = block.timestamp; // Set deadline to now, preventing future bids via beforeDeadline modifier | ||
| sendFunds(auction.auctionType == AuctionType.NFT, auction.auctionedToken, auction.auctioneer, auction.auctionedTokenIdOrAmount); | ||
| emit AuctionCancelled(auctionId, auction.auctioneer); | ||
| } | ||
|
|
||
| function bid(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
| function bid(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| auction.winner = msg.sender; | ||
| uint256 currentPrice = getCurrentPrice(auctionId); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -50,6 +50,7 @@ contract LinearReverseDutchAuction is Auction { | |
| uint256 deadline, | ||
| uint256 protocolFee | ||
| ); | ||
| event AuctionCancelled(uint256 indexed auctionId, address indexed auctioneer); | ||
|
|
||
| function createAuction( | ||
| string memory name, | ||
|
|
@@ -108,7 +109,18 @@ contract LinearReverseDutchAuction is Auction { | |
| emit Withdrawn(auctionId, withdrawAmount); | ||
| } | ||
|
|
||
| function bid(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
| function cancelAuction(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| require(msg.sender == auction.auctioneer, "Only auctioneer can cancel"); | ||
| require(auction.winner == auction.auctioneer, "Cannot cancel auction with bids"); | ||
|
||
| require(!auction.isClaimed, "Auctioned asset has already been claimed"); | ||
| auction.isClaimed = true; | ||
| auction.deadline = block.timestamp; // Set deadline to now, preventing future bids via beforeDeadline modifier | ||
| sendFunds(auction.auctionType == AuctionType.NFT, auction.auctionedToken, auction.auctioneer, auction.auctionedTokenIdOrAmount); | ||
| emit AuctionCancelled(auctionId, auction.auctioneer); | ||
| } | ||
|
|
||
| function bid(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| auction.winner = msg.sender; | ||
| uint256 currentPrice = getCurrentPrice(auctionId); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -54,6 +54,7 @@ contract LogarithmicReverseDutchAuction is Auction { | |
| uint256 deadline, | ||
| uint256 protocolFee | ||
| ); | ||
| event AuctionCancelled(uint256 indexed auctionId, address indexed auctioneer); | ||
|
|
||
| function createAuction( | ||
| string memory name, | ||
|
|
@@ -167,8 +168,19 @@ contract LogarithmicReverseDutchAuction is Auction { | |
| sendERC20(auction.biddingToken,feeRecipient,fees); | ||
| emit Withdrawn(auctionId, withdrawAmount); | ||
| } | ||
|
|
||
| function cancelAuction(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| require(msg.sender == auction.auctioneer, "Only auctioneer can cancel"); | ||
| require(auction.winner == auction.auctioneer, "Cannot cancel auction with bids"); | ||
|
||
| require(!auction.isClaimed, "Auctioned asset has already been claimed"); | ||
| auction.isClaimed = true; | ||
| auction.deadline = block.timestamp; // Set deadline to now, preventing future bids via beforeDeadline modifier | ||
| sendFunds(auction.auctionType == AuctionType.NFT, auction.auctionedToken, auction.auctioneer, auction.auctionedTokenIdOrAmount); | ||
| emit AuctionCancelled(auctionId, auction.auctioneer); | ||
| } | ||
|
|
||
| function bid(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) notClaimed(auctions[auctionId].isClaimed) { | ||
| function bid(uint256 auctionId) external exists(auctionId) beforeDeadline(auctions[auctionId].deadline) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| auction.winner = msg.sender; | ||
| uint256 currentPrice = getCurrentPrice(auctionId); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -57,6 +57,7 @@ contract VickreyAuction is Auction { | |
| uint256 protocolFee | ||
| ); | ||
| event BidRevealed(uint256 indexed auctionId, address indexed bidder, uint256 bidAmount); | ||
| event AuctionCancelled(uint256 indexed auctionId, address indexed auctioneer); | ||
|
|
||
| function createAuction( | ||
| string memory name, | ||
|
|
@@ -143,6 +144,17 @@ contract VickreyAuction is Auction { | |
| emit BidRevealed(auctionId, msg.sender, bidAmount); | ||
| } | ||
|
|
||
| function cancelAuction(uint256 auctionId) external exists(auctionId) notClaimed(auctions[auctionId].isClaimed) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| require(msg.sender == auction.auctioneer, "Only auctioneer can cancel"); | ||
| require(block.timestamp < auction.bidCommitEnd, "Cannot cancel: commit phase started or ended"); | ||
|
||
| require(auction.accumulatedCommitFee == 0, "Cannot cancel: commitments exist"); | ||
| auction.isClaimed = true; | ||
| auction.bidCommitEnd = block.timestamp; // Set commit end to now, preventing future commits via beforeDeadline modifier | ||
| sendFunds(auction.auctionType == AuctionType.NFT, auction.auctionedToken, auction.auctioneer, auction.auctionedTokenIdOrAmount); | ||
| emit AuctionCancelled(auctionId, auction.auctioneer); | ||
| } | ||
|
|
||
| function withdraw(uint256 auctionId) external exists(auctionId) onlyAfterDeadline(auctions[auctionId].bidRevealEnd) { | ||
| AuctionData storage auction = auctions[auctionId]; | ||
| uint256 withdrawAmount = auction.availableFunds; | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This event should be placed in abstract contract since it's same in all contracts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@VishwajeetTulse