• Solidity 编程实例--简单的公开拍卖


    通常简单的公开拍卖合约,是每个人可以在拍卖期间发送他们的竞拍出价。为了实现绑定竞拍人的到他们的拍卖,竞拍包括发送金额/ether。如果产生了新的最高竞拍价,前一个最高价竞拍人将会拿回他的钱。在竞拍阶段结束后,受益人人需要手动调用合约收取他的钱 — — 合约不会激活自己。

    contract SimpleAuction {
        // 拍卖的参数。
       // 时间要么为unix绝对时间戳(自1970-01-01以来的秒数),
       // 或者是以秒为单位的出块时间
        address public beneficiary;
        uint public auctionStart;
        uint public biddingTime;
    
        //当前的拍卖状态
        address public highestBidder;
        uint public highestBid;
    
       //在结束时设置为true来拒绝任何改变
        bool ended;
    
       //当改变时将会触发的Event
        event HighestBidIncreased(address bidder, uint amount);
        event AuctionEnded(address winner, uint amount);
    
        //下面是一个叫做natspec的特殊注释,
        //由3个连续的斜杠标记,当询问用户确认交易事务时将显示。
    
        ///创建一个简单的合约使用`_biddingTime`表示的竞拍时间,
       /// 地址`_beneficiary`.代表实际的拍卖者
        function SimpleAuction(uint _biddingTime,
                               address _beneficiary) {
            beneficiary = _beneficiary;
            auctionStart = now;
            biddingTime = _biddingTime;
        }
    
        ///对拍卖的竞拍保证金会随着交易事务一起发送,
       ///只有在竞拍失败的时候才会退回
        function bid() {
    
           //不需要任何参数,所有的信息已经是交易事务的一部分
            if (now > auctionStart + biddingTime)
               //当竞拍结束时撤销此调用
                throw;
            if (msg.value <= highestBid)
               //如果出价不是最高的,发回竞拍保证金。
                throw;
            if (highestBidder != 0)
                highestBidder.send(highestBid);
            highestBidder = msg.sender;
            highestBid = msg.value;
            HighestBidIncreased(msg.sender, msg.value);
        }
    
       ///拍卖结束后发送最高的竞价到拍卖人
        function auctionEnd() {
            if (now <= auctionStart + biddingTime)
                throw; 
                //拍卖还没有结束
            if (ended)
                throw; 
         //这个收款函数已经被调用了
            AuctionEnded(highestBidder, highestBid);
            //发送合约拥有所有的钱,因为有一些保证金可能退回失败了。
    
            beneficiary.send(this.balance);
            ended = true;
        }
    
        function () {
            //这个函数将会在发送到合约的交易事务包含无效数据
            //或无数据的时执行,这里撤销所有的发送,
            //所以没有人会在使用合约时因为意外而丢钱。
            throw;
        }
    }
    

      

  • 相关阅读:
    Django基础
    DRF初始化/DRF认证、权限、限流、分页、过滤、序列化
    Pyinstaller安装和使用
    爬虫概述
    django在test.py测试文件中的配置
    django ORM 多对多关系
    django中的分页
    vue安装及新建项目
    app应用路由设置
    Django之Session与Cookie原理及区别
  • 原文地址:https://www.cnblogs.com/foxy/p/8808814.html
Copyright © 2020-2023  润新知