ethereum(以太坊)(实例)--"简单的公开竞拍"
说真的,刚开始接触这个竞拍案例--“简单的公开竞拍”,我就抱着简单的心态去查看这个实例,但是自我感觉并不简单.应该是我实力不到家的原因吧!!!233333。。。
不过经过大半天的努力,自己理解完之后,觉得是有那么点简单.(代码是官网上的,不过解释不太清楚.我加了自己的实践和理解,希望能帮助到大家)
pragma solidity ^0.4.10;
contract Bid{
    //0x14723a09acff6d2a60dcdf7aa4aff308fddc160c,100
    //0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db,200
    //0x583031d1113ad414f02576bd6afabfb302140225,150
    //商品拥有者地址
    address public benefiy;
    //拍卖时间
    uint bidEndtime;
    //记录未成功竞拍到的人,可以取回之前的出价
    mapping(address => uint) public RetrunMemony;
    //最高价地址
    address public HighestBidAddr;
    //最高价
    uint public HighestBidMomery;
    //是否结束
    bool isEnd;
    event HighestBidIncrase(address bider,uint _memony);
    event EndBidIncrase(address _bider,uint _memony);
    constructor(address  _benefiy,uint _EndTime) public{
        benefiy = _benefiy;
        bidEndtime = now + _EndTime;
    }
    //开始竞拍
    function bid() public payable{
        require(now < bidEndtime);//require(msg.sender.balance > msg.value);
        require(msg.value>HighestBidMomery);
        if(HighestBidMomery !=0){ //储存成功参与竞拍但不是最高价的地址和出价
            RetrunMemony[HighestBidAddr] += HighestBidMomery;//同一参与竞拍者多次出价
        }
        HighestBidMomery = msg.value;
        HighestBidAddr = msg.sender;
        emit HighestBidIncrase(msg.sender,msg.value);
    }
    //结束竞拍
    function endBid() public payable{
        require(now >= bidEndtime);
        require(!isEnd);
        isEnd = true;
        benefiy.transfer(HighestBidMomery);
        emit EndBidIncrase(HighestBidAddr,HighestBidMomery);
    }
    //未竞拍成功的人取回交易
    function getBack() payable public returns(bool){
        uint mount = RetrunMemony[msg.sender];
        if(mount >0){//执行一次后,就无法再执行此返还函数
            RetrunMemony[msg.sender] = 0;//取回后,价格清0,不允许再次执行
            //send:success->true,failed->false
            //msg.sender.send(mount) 执行成功则不执行以下函数
            if(!msg.sender.send(mount)){// 未返还竞拍价格
                RetrunMemony[msg.sender] = mount;
                return false;//未返还竞拍价格
            }
        }
        return true;//if(mount <=0) 已经成功取回竞拍价
    }
}
ethereum(以太坊)(实例)--"简单的公开竞拍"的更多相关文章
- ethereum(以太坊)(实例)--"安全的远程购买"
		pragma solidity ^0.4.10; contract Safebuy{ uint public price; address public seller; address public ... 
- ethereum(以太坊)(一)
		从这周开始,开始学习以太坊开发--solidity,开始决定往区块链方向发展,毕竟区块链技术应用广泛.一开始接触solidity开发语言不太习惯,毕竟一直在学习python语法,有很多都不能接受.有难 ... 
- ethereum(以太坊)(十四)--Delete
		pragma solidity ^0.4.10; contract Delete{ /* delete可用于任何变量(除mapping),将其设置成默认值 bytes/string:删除所有元素,其长 ... 
- ethereum(以太坊)(基础)--容易忽略的坑(三)
		pragma solidity ^0.4.10; contract Byte{ bytes [] public T=new bytes[](3); function setLeng(uint len) ... 
- ethereum(以太坊)(基础)--容易忽略的坑(二)
		pragma solidity ^0.4.0; contract EMath{ string public _a="lin"; function f() public{ modif ... 
- ethereum(以太坊)(基础)--容易忽略的坑(一)
		pragma solidity ^0.4.0; contract base{ address public _owner=msg.sender; uint _a; string internal _b ... 
- ethereum(以太坊)(十三)--异常处理/元祖
		pragma solidity ^0.4.4; contract Students{ uint[] data= new uint[](4); address _owner = msg.sender; ... 
- ethereum(以太坊)(十二)--应用(二)__投票(基础总和)
		编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ... 
- ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)
		pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ... 
随机推荐
- 【Python】面向对象编程思想
			概念 "笔"作为一个抽象的概念,可以被看成是一个类.而一支实实在在的笔,则是"笔"这种类型的对象. 一个类可以有属于它的函数,这种函数被称为类的"方法 ... 
- SMBus Host Controller not enabled!
			今天去官网下载最新的ubuntu ubuntukylin-16.10-desktop-amd64.iso,下载后vm 运行,安装后结果报了这个问题 之后google搜索得到答案: 1.复制 cp ... 
- GTID复制的搭建和问题处理
			首先看一下什么是GTID: GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号. GTID实际上是由UUID+TID组成的.其中UUID是一个M ... 
- mysql主从同步与防火墙端口的设定
			一.背景: 之前做主从同步时,把从库防火墙关了,现在开启防火墙后,从库不同步了 二.解决思路: 1.首先查看了mysql占用的端口,然后开启,tcp/udp都开了,结果还是不行 firewall-cm ... 
- February 21 2017 Week 8 Tuesday
			To make each day count. 让每一天都物有所值. We always want to make our life meaningful, however, the acutal f ... 
- 用CI框架向数据库中实现简单的增删改查
			以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ... 
- Allocate exception for servlet ValidateUsernameServlet 异常
			如果eclipse无法对类文件进行编译那么运行时就会发生 Allocate exception for servlet ValidateUsernameServlet 异常,说找不到类. 
- iOS图像处理之Core Graphics和OpenGL ES初见
			http://www.jianshu.com/p/f66a7ca326dd iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台 ... 
- StringUtils工具类介绍
			1 abbreviate方法缩写一段文字 StringUtils.abbreviate("abcdefghijklmno", -1, 10) = "abcdefg...& ... 
- 为GRIDVIEW“删除”列添加确认对话框
			如何为gridview控件里的“删除”列添加一个确认对话框?网上众说纷纭,大致见到了三种解决方案,现归纳如下:1.继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具 ... 
