智能案例详解:第二个公开拍卖智能合约

版权声明:忠于祖国,忠于人民 https://blog.csdn.net/boss2967/article/details/83307936

01.结构解析

一个简单的投票合约

02.结构解析图解

03.整体结构

pragma solidity ^0.4.24;

contract SimpleAuction{
    address public beneficiary;
    uint public auctionEnd;
    address public highestBidder;
    uint public highestBid;
    mapping(address=>uint)pendingReturns;
    bool ended;
    event HighestBidIncreased(address bidder,uint amount);
    event AuchtionEnded(address winner,uint amount);
    
    function SimpleAuction(uint _biddingTime,address _beneficiary){
        beneficiary =_beneficiary;
        auctionEnd = now+_biddingTime;
    }
    function bid()payable{
        require(now <=auctionEnd);
        
        require(msg.value >highestBid);
        if(highestBidder !=0){
            pendingReturns[highestBidder]+=highestBid;
        }
        highestBidder = msg.sender;
        highestBid = msg.value;
        HighestBidIncreased(msg.sender,msg.value);
    }
    
    function withdraw() view 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(){
        require(now >=auctionEnd);
        require(!ended);
        ended = true;
        AuchtionEnded(highestBidder,highestBid);
        beneficiary.transfer(highestBid);
    }
}

04.重要函数

01. 参数声明

 	address public beneficiary;//最终受益者
    uint public auctionEnd;//拍卖结束的时间戳
    address public highestBidder;//当前出价最高者
    uint public highestBid;.//当前最高的出价
    mapping(address=>uint)pendingReturns;//需要退回竞拍者和其出价
    bool ended;//竞拍是否结束的标识符
    event HighestBidIncreased(address bidder,uint amount);//出现更高出价时引发的事件(Event)
    event AuchtionEnded(address winner,uint amount);//竞拍结束时引发的事件

02. 初始化竞拍合约,指定竞拍期事件和最终受益者

//
  function SimpleAuction(uint _biddingTime,address _beneficiary){
        beneficiary =_beneficiary;
        auctionEnd = now+_biddingTime;
    }

03.竞拍者出价

//
   function bid()payable{
        require(now <=auctionEnd);
        require(msg.value >highestBid);
        if(highestBidder !=0){
            pendingReturns[highestBidder]+=highestBid;
        }
        highestBidder = msg.sender;
        highestBid = msg.value;
        HighestBidIncreased(msg.sender,msg.value);
    }

04.出价被别人超过后竞拍者可以执行撤销

//
    function withdraw() view 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;
    }

05.竞拍结束后执行 将最高的出价支付给受益者

//
  function auctionEnd(){
        require(now >=auctionEnd);
        require(!ended);
        ended = true;
        AuchtionEnded(highestBidder,highestBid);
        beneficiary.transfer(highestBid);
    }

猜你喜欢

转载自blog.csdn.net/boss2967/article/details/83307936