-
Notifications
You must be signed in to change notification settings - Fork 27
/
AuctionManager.sol
78 lines (68 loc) · 3.64 KB
/
AuctionManager.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
pragma solidity ^0.7.0;
import "./Auction.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
contract AuctionManager {
uint _auctionIdCounter; // auction Id counter
mapping(uint => Auction) public auctions; // auctions
// create an auction
function createAuction(uint _endTime, uint _minIncrement, uint _directBuyPrice,uint _startPrice,address _nftAddress,uint _tokenId) external returns (bool){
require(_directBuyPrice > 0); // direct buy price must be greater than 0
require(_startPrice < _directBuyPrice); // start price is smaller than direct buy price
require(_endTime > 5 minutes); // end time must be greater than 5 minutes (setting it to 5 minutes for testing you can set it to 1 days or anything you would like)
uint auctionId = _auctionIdCounter; // get the current value of the counter
_auctionIdCounter++; // increment the counter
Auction auction = new Auction(msg.sender, _endTime, _minIncrement, _directBuyPrice, _startPrice, _nftAddress, _tokenId); // create the auction
IERC721 _nftToken = IERC721(_nftAddress); // get the nft token
_nftToken.transferFrom(msg.sender, address(auction), _tokenId); // transfer the token to the auction
auctions[auctionId] = auction; // add the auction to the map
return true;
}
// Return a list of all auctions
function getAuctions() external view returns(address[] memory _auctions) {
_auctions = new address[](_auctionIdCounter); // create an array of size equal to the current value of the counter
for(uint i = 0; i < _auctionIdCounter; i++) { // for each auction
_auctions[i] = address(auctions[i]); // add the address of the auction to the array
}
return _auctions; // return the array
}
// Return the information of each auction address
function getAuctionInfo(address[] calldata _auctionsList)
external
view
returns (
uint256[] memory directBuy,
address[] memory owner,
uint256[] memory highestBid,
uint256[] memory tokenIds,
uint256[] memory endTime,
uint256[] memory startPrice,
uint256[] memory auctionState
)
{
directBuy = new uint256[](_auctionsList.length); // create an array of size equal to the length of the passed array
owner = new address[](_auctionsList.length); // create an array of size equal to the length of the passed array
highestBid = new uint256[](_auctionsList.length);
tokenIds = new uint256[](_auctionsList.length);
endTime = new uint256[](_auctionsList.length);
startPrice = new uint256[](_auctionsList.length);
auctionState = new uint256[](_auctionsList.length);
for (uint256 i = 0; i < _auctionsList.length; i++) { // for each auction
directBuy[i] = Auction(auctions[i]).directBuyPrice(); // get the direct buy price
owner[i] = Auction(auctions[i]).creator(); // get the owner of the auction
highestBid[i] = Auction(auctions[i]).maxBid(); // get the highest bid
tokenIds[i] = Auction(auctions[i]).tokenId(); // get the token id
endTime[i] = Auction(auctions[i]).endTime(); // get the end time
startPrice[i] = Auction(auctions[i]).startPrice(); // get the start price
auctionState[i] = uint(Auction(auctions[i]).getAuctionState()); // get the auction state
}
return ( // return the arrays
directBuy,
owner,
highestBid,
tokenIds,
endTime,
startPrice,
auctionState
);
}
}