说真的,刚开始接触这个竞拍案例--“简单的公开竞拍”,我就抱着简单的心态去查看这个实例,但是自我感觉并不简单.应该是我实力不到家的原因吧!!!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. Scrum过程管理学习心得

    认识敏捷开发 在课堂上了解了瀑布开发,又在课下学习敏捷开发过程后,我发现,敏姐团队做的开发工作虽然和瀑布开发一模一样,但他们的做事方式很不一样.简单来说,两者的差别在于:瀑布开发必须先完成当前的步骤后 ...

  2. javascript fundamental concept

    http://hzjavaeyer.group.iteye.com/group/wiki?category_id=283 上面这个url非常适合javascript初学者阅读,感谢原作者的分享 什么是 ...

  3. UIButton的titleLabel

    UIButton的titleLabel @property(nonatomic, readonly, retain) UILabel *titleLabel Description - 描述A vie ...

  4. lua的local问题

    1. 初识 使用Local带来错误.自己写了一个递归的函数,结果报错: local fLocal = function(n) ) then return n; else ) end end )) 错误 ...

  5. HDU 3420 -- Bus Fair ACM

    Bus Fair Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  6. Memory Leak Detection in C++

    原文链接:http://www.linuxjournal.com/article/6556?page=0,0 An earlier article [“Memory Leak Detection in ...

  7. hdu-2620 Ice Rain---数论(取模运算规律)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2620 题目大意: 给出n和k求: 解题思路: kmodi=k-i*[k/i] ,所以=nk-(1*[ ...

  8. hdu-3524 Perfect Squares---打表+找规律+循环节

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3524 题目大意: 求i^2 mod 2^n有多少可能 解题思路: 先打表,求出n较小的时候的数据 n ...

  9. Ubuntu中为Eclipse添加桌面启动快捷方式

    Ubuntu中应用程序启动器“XXX.desktop”还没有被标记为可信任的问题:http://www.tuicool.com/articles/fIBJ32n eclipse问题:prefences ...

  10. VOC 数据集

    可变形网络 :https://github.com/msracver/Deformable-ConvNets VOC数据集: Test 参数 ('PascalVOC', '2007_test', '. ...