区块链技术八以太坊公开拍卖智能合约案例

  • A+
所属分类:金融科技

这篇文章实现一个简单的公开拍卖智能合约,所有人都可以出价,把以太币发送到指定地址,出价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() {
 // 从交易中获取时间,如果拍卖结束,拒绝出价
 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;
  }
}

从这个案例可以看到,智能合约在拍卖领域能让过程更透明公平,最大程度的促进参与者的积极性。下一篇文章我们会介绍一个复杂一点的拍卖智能合约。
关于我:网名蓝莲花,原名汪晓明,微信/QQ:263305605,公众号:xm123798。朝夕网络(zhaoxi.co)合伙人。致力于推动区块链行业发展,推广区块链解决方案。
比特币地址:1FTefJd3ZHtgeVkDAqKEAx5GkjizyeaDiw
原文:http://wangxiaoming.com/blog/2016/05/15/blockchain-tech-open-auction/

weinxin
共识社
用手机扫一扫,加入组织,时刻关注组织动态。
daodaoliang

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: