這篇文章實現一個簡單的公開拍賣智能合約,所有人都可以出價,把以太幣發送到指定地址,出價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:3341927519進行反饋。