Смарт-контракт DutchAuction - PullRequest
       20

Смарт-контракт DutchAuction

0 голосов
/ 06 августа 2020

Я ищу смарт-контракт голландского аукциона, в котором мы используем простой аукцион и конвертируем его в голландский аукцион. Я добавил простой аукцион, но хочу знать, как преобразовать его в голландский аукцион без использования токена. Было бы неплохо, если бы кто-нибудь мог добавить комментарии о том, какие изменения были внесены и что они реализуют.

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);
    }
}
...