在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 大數(shù)據(jù)/ 區(qū)塊鏈技術(shù)(九):以太坊非公開拍賣智能合約案例
區(qū)塊鏈技術(shù)(十):以太坊去中心化淘寶智能合約案例
區(qū)塊鏈技術(shù)(八):以太坊公開拍賣智能合約案例
區(qū)塊鏈技術(shù)(九):以太坊非公開拍賣智能合約案例
區(qū)塊鏈技術(shù)(五):以太坊核心概念(一)
區(qū)塊鏈技術(shù)(一):Truffle開發(fā)入門
區(qū)塊鏈技術(shù)(七):以太坊投票智能合約案例
區(qū)塊鏈技術(shù)(四):區(qū)塊鏈是什么?
區(qū)塊鏈技術(shù)(三):智能合約入門
區(qū)塊鏈技術(shù)(二):以太坊編程語言Solidity安裝
區(qū)塊鏈技術(shù)(六):以太坊核心概念(二)

區(qū)塊鏈技術(shù)(九):以太坊非公開拍賣智能合約案例

這是一個非公開的拍賣系統(tǒng),在透明的平臺運行非公開拍賣看起來是矛盾的,但是密碼學可以做到這一點。

在拍賣期間,參與者把自己的出價加密發(fā)送給拍賣系統(tǒng),除了自己,任何人不知道出價是多少。當拍賣結(jié)束,參與者把出價明文發(fā)給拍賣系統(tǒng),系統(tǒng)用明文加密運算,跟之前發(fā)送的密文比對,一致的話說明出價跟之前一樣,出價有效。

在傳統(tǒng)領(lǐng)域,很多業(yè)務(wù)很容易產(chǎn)生暗箱操作,智能合約讓參與者跟工作人員都無法干預系統(tǒng),系統(tǒng)也沒有人的行為,全部是自動執(zhí)行的代碼,使業(yè)務(wù)變得透明公平,這對產(chǎn)業(yè)的變革是顛覆性的。

代碼如下:

contract BlindAuction {
  // 定義一個出價對象
  struct Bid {
    bytes32 blindedBid;
    uint deposit;
  }

  // 定義狀態(tài)變量:受益人、開始時間、拍賣結(jié)束時間、公示結(jié)束時間
  address public beneficiary;
  uint public auctionStart;
  uint public biddingEnd;
  uint public revealEnd;

  // 拍賣結(jié)束后,設(shè)置這個值為true,不允許被修改。
  bool public ended;

  // 存儲拍賣信息的集合
  mapping(address => Bid[]) public bids;

  // 最高的出價者
  address public highestBidder;
  // 最高出價
  uint public highestBid;

  // 拍賣結(jié)束時調(diào)用事件
  event AuctionEnded(address winner, uint highestBid)

  // modifier可以方便的驗證輸入信息
  modifier onlyBefore(uint _time) { if (now >= _time) throw; _ }
  modifier onlyAfter(uint _time) { if (now <= _time) throw; _ }

  // 創(chuàng)建一個拍賣對象,初始化參數(shù)值:受益人、開始時間、
  // 拍賣持續(xù)時間、公示時間 
  function BlindAuction(
    uint _biddingTime, 
    uint _revealTime, 
    address _beneficiary
  ) {
    beneficiary = _beneficiary;
    auctionStart = now;
    biddingEnd = now + _biddingTime;
    revealEnd = biddingEnd + _revealTime;
  }

  // 把出價信息用sha3加密后發(fā)送給拍賣系統(tǒng),確保原始數(shù)據(jù)不被暴露
  // 同一個地址可以多次出價
  function bid(bytes32 _blindedBid) 
    onlyBefore(biddingEnd) 
  {
    bids[msg.sender].push(Bid({
      blindedBid: _blindedBid, 
      deposit: msg.value
    }));
  }

  /// 拍賣結(jié)束后,顯示所有出價信息。
  /// 除了最高價之外的所有正常出價會被退款
  function reveal(
    uint[] _values,
    bool[] _fake,
    bytes32[] _secret
  )
    onlyAfter(biddingEnd)
    onlyBefore(revealEnd)
  {
    uint length = bids[msg.sender].length;
    if (
      _values.length != length ||
      _fake.length != length ||
      _secret.length != length

    ) {
      throw;
    }

    uint refund;
    for (uint i = 0; i < length; i++) {
      var bid = bids[msg.sender][i];
      var (value, fake, secret) = (_values[i], _fake[i], _secret[i]);
      if (bid.blindedBid != sha3(value, fake, secret)) {
        continue;
      }
      refund += bid.deposit;
      if (!fake && bid.deposit >= value) {
        if (placeBid(msg.sender, value))
          refund -= value;
      }

      bid.blindedBid = 0;
    }
    msg.sender.sent(refund);
  }

  // 這是個內(nèi)部函數(shù),內(nèi)部出價邏輯。只能被合約本身調(diào)用
  function placeBid(address bidder, uint value) internal
    returns (bool success)
  {
    if (value <= highestBid) {
      return false;
    }
    if (highestBidder != 0) {
      highestBidder.sender(highestBid);
    }
    highestBid = value;
    highestBidder = bidder;
    return true;
  }

  // 結(jié)束拍賣,發(fā)送最高出價給商品所有者
  function auctionEnd()
    onlyAfter(revealEnd)
  {
    if (ended)
      throw;
    AuctionEnded(highestBidder, highestBid);
    beneficiary.send(this.balance);
    ended = true;
  }

  // 當交易沒有數(shù)據(jù)或者數(shù)據(jù)不對時,觸發(fā)此函數(shù),
  // 重置出價操作,確保出價者不會丟失資金
  function () {
    throw;
  }
}

從這個案例可以看到,智能合約能讓商業(yè)變得公平、透明、高效,最大程度的促進參與者的積極性,未來對各個產(chǎn)業(yè)將帶來巨大的改變。

原文:http://wangxiaoming.com/blog/2016/05/18/blockchain-tech-blind-auction/