说真的,刚开始接触这个竞拍案例--“简单的公开竞拍”,我就抱着简单的心态去查看这个实例,但是自我感觉并不简单.应该是我实力不到家的原因吧!!!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(以太坊)(实例)--"简单的公开竞拍"的更多相关文章

  1. ethereum(以太坊)(实例)--"安全的远程购买"

    pragma solidity ^0.4.10; contract Safebuy{ uint public price; address public seller; address public ...

  2. ethereum(以太坊)(一)

    从这周开始,开始学习以太坊开发--solidity,开始决定往区块链方向发展,毕竟区块链技术应用广泛.一开始接触solidity开发语言不太习惯,毕竟一直在学习python语法,有很多都不能接受.有难 ...

  3. ethereum(以太坊)(十四)--Delete

    pragma solidity ^0.4.10; contract Delete{ /* delete可用于任何变量(除mapping),将其设置成默认值 bytes/string:删除所有元素,其长 ...

  4. ethereum(以太坊)(基础)--容易忽略的坑(三)

    pragma solidity ^0.4.10; contract Byte{ bytes [] public T=new bytes[](3); function setLeng(uint len) ...

  5. ethereum(以太坊)(基础)--容易忽略的坑(二)

    pragma solidity ^0.4.0; contract EMath{ string public _a="lin"; function f() public{ modif ...

  6. ethereum(以太坊)(基础)--容易忽略的坑(一)

    pragma solidity ^0.4.0; contract base{ address public _owner=msg.sender; uint _a; string internal _b ...

  7. ethereum(以太坊)(十三)--异常处理/元祖

    pragma solidity ^0.4.4; contract Students{ uint[] data= new uint[](4); address _owner = msg.sender; ...

  8. ethereum(以太坊)(十二)--应用(二)__投票(基础总和)

    编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...

  9. ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)

    pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ...

随机推荐

  1. 【Python】面向对象编程思想

    概念 "笔"作为一个抽象的概念,可以被看成是一个类.而一支实实在在的笔,则是"笔"这种类型的对象. 一个类可以有属于它的函数,这种函数被称为类的"方法 ...

  2. SMBus Host Controller not enabled!

    今天去官网下载最新的ubuntu  ubuntukylin-16.10-desktop-amd64.iso,下载后vm 运行,安装后结果报了这个问题 之后google搜索得到答案: 1.复制   cp ...

  3. GTID复制的搭建和问题处理

    首先看一下什么是GTID: GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号. GTID实际上是由UUID+TID组成的.其中UUID是一个M ...

  4. mysql主从同步与防火墙端口的设定

    一.背景: 之前做主从同步时,把从库防火墙关了,现在开启防火墙后,从库不同步了 二.解决思路: 1.首先查看了mysql占用的端口,然后开启,tcp/udp都开了,结果还是不行 firewall-cm ...

  5. February 21 2017 Week 8 Tuesday

    To make each day count. 让每一天都物有所值. We always want to make our life meaningful, however, the acutal f ...

  6. 用CI框架向数据库中实现简单的增删改查

    以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ...

  7. Allocate exception for servlet ValidateUsernameServlet 异常

    如果eclipse无法对类文件进行编译那么运行时就会发生 Allocate exception for servlet ValidateUsernameServlet 异常,说找不到类.

  8. iOS图像处理之Core Graphics和OpenGL ES初见

    http://www.jianshu.com/p/f66a7ca326dd iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台 ...

  9. StringUtils工具类介绍

    1 abbreviate方法缩写一段文字 StringUtils.abbreviate("abcdefghijklmno", -1, 10) = "abcdefg...& ...

  10. 为GRIDVIEW“删除”列添加确认对话框

    如何为gridview控件里的“删除”列添加一个确认对话框?网上众说纷纭,大致见到了三种解决方案,现归纳如下:1.继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具 ...