Я ищу смарт-контракт голландского аукциона, в котором мы используем простой аукцион и конвертируем его в голландский аукцион. Я добавил простой аукцион, но хочу знать, как преобразовать его в голландский аукцион без использования токена. Было бы неплохо, если бы кто-нибудь мог добавить комментарии о том, какие изменения были внесены и что они реализуют.
pragma solidity >=0.5.22 <0.7.0;
contract SimpleAuction {
address payable public beneficiary;
uint public auctionEndTime;
address public highestBidder;
uint public highestBid;
mapping(address => uint) public pendingReturns;
bool ended;
constructor(
uint _biddingTime
) public {
beneficiary = msg.sender;
auctionEndTime = now + _biddingTime;
}
function () external payable{
bid();
}
function bid() public payable {
require(
now <= auctionEndTime,
"Auction already ended."
);
require(
msg.value > highestBid,
"There already is a higher bid."
);
if (highestBid != 0) {
pendingReturns[highestBidder] += highestBid;
}
highestBidder = msg.sender;
highestBid = msg.value;
}
function withdraw() public returns (bool) {
uint amount = pendingReturns[msg.sender];
if (amount > 0) {
pendingReturns[msg.sender] = 0;
if (!msg.sender.send(amount)) {
pendingReturns[msg.sender] = amount;
return false;
}
}
return true;
}
function auctionEnd() public {
// 1. Conditions
require(now >= auctionEndTime, "Auction not yet ended.");
require(!ended, "auctionEnd has already been called.");
// 2. Effects
ended = true;
// 3. Interaction
beneficiary.transfer(highestBid);
}
}