以太坊公開拍賣智慧合約案例
阿新 • • 發佈:2018-11-30
實現一個簡單的公開拍賣智慧合約,所有人都可以出價,把以太幣傳送到指定地址,出價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; } }