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 ...
随机推荐
- sqlserver中循环生成记录
declare @i int set @i=1 while(@i<=10) begin INSERT INTO [BMData].[dbo].[QueryBlackListLogs] ([ID] ...
- 路由协议RIP、EIGRP、OSPF
前提 在网络拓扑中,我们经常多个路由连接不同子网,路由之间要转发不同子网的包,前提是路由之间要知道对方路由的存在. 因此这次我要写的是有关维护路由之间存在的协议,RIP.EIGRP和OSPF,静态路由 ...
- lvm 相关
求教:/home分区和/root分区的关系 lvm扩容试验 [复制链接] lvm快速使用http://imysql.cn/2008_05_05_quick_startup_lvm Linux LVM学 ...
- Access 64-bit HKLM\Software Registry by 32-bit C#.NET Application
http://www.codeproject.com/Articles/1003177/Access-bit-HKLM-Software-Registry-by-bit-Csharp-NE While ...
- WIN7与WIN10 安装
---恢复内容开始--- 开始的操作系统是黑白屏的DOS,随着光标的一闪一闪并逐渐后移,一条条指令输入电脑,并执行相关指令完成任务.慢慢的,视窗操作系统最初是基于DOS的windows 9X内核WIN ...
- CMake是用于生成make文件的跨平台编译文件
参考: https://www.cnblogs.com/hbccdf/p/introduction_of_cmake.html https://elloop.github.io/tools/2016- ...
- xcode9 unity3d 新坑
1.metal调试会报错,要在edit scheme里关掉
- Hbase集群部署及shell操作
本文详述了Hbase集群的部署. 集群部署 1.将安装包上传到集群并解压 scp hbase-0.99.2-bin.tar.gz mini1:/root/apps/ tar -zxvf hbase-0 ...
- 记一种c++字符串格式化方法
std::string str_fmt(const char * _Format, ...) { std::string _str; va_list marker = NULL; va_start(m ...
- 在前端页面展示Markdown文件
常我们都会在GitHub上浏览很多的readme文件,这些都是Markdown语法写成的Markdown文件,HTML中并没有用于展示Markdown文件的元素,那么为什么可以在前端展示呢? 有别于G ...