zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    

      

  • 相关阅读:
    修改浏览器的UserAgent来伪装你的浏览器和操作系统
    探索并发编程(七)分布式环境中并发问题
    通信网络规划的最短路径(最小生成树的2种算法介绍)
    iOS 面向模型的 SQL存储
    一个有趣的天平秤球问题
    飞机加油问题的粗略探究
    粗谈设计模式
    JDK动态代理[2]JDK动态代理的底层实现之Proxy源码分析
    Java集合系列[2]LinkedList源码分析
    JDK动态代理[4]ProxyGenerator生成代理类的字节码文件解析
  • 原文地址:https://www.cnblogs.com/foxy/p/8808814.html
Copyright © 2011-2022 走看看