以太坊公开拍卖智能合约案例

实现一个简单的公开拍卖智能合约,所有人都可以出价,把以太币发送到指定地址,出价B高于出价A时,那么A的资金会被自动退回。拍卖结束后,商品所有者会收到最高的出价资金。

智能合约在拍卖领域能让过程更透明公平,最大程度的促进参与者的积极性。

contract SimpleAuction {
  // 定义参数:受益人、开始时间、拍卖持续时间
  address public beneficiary;
  uint public auctionStart;
  uint public biddingTime;

  // 最高出价者
  address public highestBidder;
  // 最高出价
  uint public highestBid;

  // 拍卖结束后,设置这个值为true,不允许被修改。
  bool ended;

  // 最高出价变动时调用事件
  event HighestBidIncreased(address bidder, uint amount);
  // 拍卖结束时调用事件
  event AuctionEnded(address winner, uint amount);

  // 创建一个拍卖对象,初始化参数值:受益人、开始时间、拍卖持续时间 
  function SimpleAuction(uint _biddingTime, address _beneficiary) {
    beneficiary = _beneficiary;
    auctionStart = now;
    biddingTime = _biddingTime;
  }

  // 出价功能:包括交易参数。
  // 当出价不是最高,资金会被自动退回。
  function bid() payable  {
    // 从交易中获取时间,如果拍卖结束,拒绝出价
    if (now > auctionStart + biddingTime) {
      throw;
    }
    // 如果出价不是最高,资金退回
    if (msg.value <= highestBid) {
      throw;
    }

    // 如果出价最高,当前出价者作为最高出价人
    if (highestBidder != 0) {
      highestBidder.send(highestBid);
    }
    highestBidder = msg.sender;
    highestBid = msg.value;
    HighestBidIncreased(msg.sender, msg.value);
  }

  // 结束拍卖,并转账资金到受益人
  function auctionEnd() {
    if (now <= auctionStart + biddingTime)
      throw;
    if (ended)
      throw;
    AuctionEnded(highestBidder, highestBid);

    beneficiary.send(this.balance);
    ended = true;
  }

  // 当交易没有数据或者数据不对时,触发此函数,重置出价操作,确保出价者不会丢失资金
  function () {
    throw;
  }
}

  

转载于:https://www.cnblogs.com/WPF0414/p/10046517.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值