1. 说真的,刚开始接触这个竞拍案例--“简单的公开竞拍”,我就抱着简单的心态去查看这个实例,但是自我感觉并不简单.应该是我实力不到家的原因吧!!!233333。。。
    不过经过大半天的努力,自己理解完之后,觉得是有那么点简单.(代码是官网上的,不过解释不太清楚.我加了自己的实践和理解,希望能帮助到大家)
  1. pragma solidity ^0.4.10;
  2.  
  3. contract Bid{
  4.  
  5. //0x14723a09acff6d2a60dcdf7aa4aff308fddc160c,100
  6.  
  7. //0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db,200
  8. //0x583031d1113ad414f02576bd6afabfb302140225,150
  9.  
  10. //商品拥有者地址
  11. address public benefiy;
  12. //拍卖时间
  13. uint bidEndtime;
  14.  
  15. //记录未成功竞拍到的人,可以取回之前的出价
  16. mapping(address => uint) public RetrunMemony;
  17. //最高价地址
  18. address public HighestBidAddr;
  19. //最高价
  20. uint public HighestBidMomery;
  21. //是否结束
  22. bool isEnd;
  23.  
  24. event HighestBidIncrase(address bider,uint _memony);
  25. event EndBidIncrase(address _bider,uint _memony);
  26.  
  27. constructor(address _benefiy,uint _EndTime) public{
  28. benefiy = _benefiy;
  29. bidEndtime = now + _EndTime;
  30. }
  31. //开始竞拍
  32. function bid() public payable{
  33. require(now < bidEndtime);//require(msg.sender.balance > msg.value);
  34. require(msg.value>HighestBidMomery);
  35.  
  36. if(HighestBidMomery !=0){ //储存成功参与竞拍但不是最高价的地址和出价
  37. RetrunMemony[HighestBidAddr] += HighestBidMomery;//同一参与竞拍者多次出价
  38. }
  39.  
  40. HighestBidMomery = msg.value;
  41. HighestBidAddr = msg.sender;
  42. emit HighestBidIncrase(msg.sender,msg.value);
  43. }
  44. //结束竞拍
  45. function endBid() public payable{
  46. require(now >= bidEndtime);
  47. require(!isEnd);
  48.  
  49. isEnd = true;
  50.  
  51. benefiy.transfer(HighestBidMomery);
  52. emit EndBidIncrase(HighestBidAddr,HighestBidMomery);
  53. }
  54. //未竞拍成功的人取回交易
  55. function getBack() payable public returns(bool){
  56. uint mount = RetrunMemony[msg.sender];
  57. if(mount >0){//执行一次后,就无法再执行此返还函数
  58. RetrunMemony[msg.sender] = 0;//取回后,价格清0,不允许再次执行
  59. //send:success->true,failed->false
  60. //msg.sender.send(mount) 执行成功则不执行以下函数
  61. if(!msg.sender.send(mount)){// 未返还竞拍价格
  62. RetrunMemony[msg.sender] = mount;
  63. return false;//未返还竞拍价格
  64. }
  65. }
  66. return true;//if(mount <=0) 已经成功取回竞拍价
  67. }
  68.  
  69. }

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. DELPHI 小结

    //十六进制(S)-->>十进制(I)  [重写:Jey]function hextoint(s: string): Integer; begin           //$代表16进制  ...

  2. HTML,javascript,image等加载,DOM解析,js执行生命周期

  3. Linux ->> UBuntu 14.04 LTE下安装Hadoop 1.2.1(集群分布式模式)

    安装步骤: 1) JDK -- Hadoop是用Java写的,不安装Java虚拟机怎么运行Hadoop的程序: 2)创建专门用于运行和执行hadoop任务(比如map和reduce任务)的linux用 ...

  4. SQL Server ->> CONCAT函数

    这是一个SQL Server 2012后引进的新函数.作用就如同它名字的意思.它对NULL值得处理是空字符串.当然它能做的不仅是对字符的支持.它支持N个列输入,列的类型支持更加完善.不过其实它的原理不 ...

  5. 使用CoreImage教程

    使用CoreImage教程 CoreImage包含有很多实用的滤镜,专业处理图片的库,为了能看到各种渲染效果,请使用如下图片素材. 现在可以开始教程了: #define FIX_IMAGE(image ...

  6. Struts学习-Hibernate2

    一. 1.配置 <!-- hibernate-core --> <dependency> <groupId>org.hibernate</groupId> ...

  7. Makefile 实例

    CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...

  8. 对HandlerExecutionChain类的理解分析

    HandlerExecutionChain类比较简单,好理解. ==================================================================== ...

  9. Netty问题小结

    1.问题:高并发时连接不够:java.net.SocketException: No buffer space available (maximum connections reached?): co ...

  10. reactnative 原生组件通信原理

    http://www.csdn.net/article/2015-11-27/2826345-compare-React-Native-with-ExMobi 原生组件通信原理 React Nativ ...