下面是要使用的不同資料型別:
我們正在定義一個Property結構,該結構將儲存屬性名稱和其他詳細資訊。由於可能有大量的詳細資訊,因此使用者可以儲存詳細資訊的雜湊值(在合約外部準備詳細資訊雜湊值)。我們具有status結構,該結構將跟蹤以下內容:
1. bidders:這將儲存參加拍賣的人數。
2. maximumBid:最高出價金額。
3. maximumBidder:最高出價者的地址。
4. biddingCompleted:檢查拍賣是否已經完成的狀態。
所有者將把財產儲存自己的錢包地址中,而isProspect是用於儲存針對每個參與者的投標金額值的對映。
定義了以下事件以確認各種交易:
在智慧合約部署時(呼叫建構函式時)將初始化的屬性詳細資訊,合約狀態欄位和所有者錢包地址。還定義了在所有者和非所有者之間隔離各種函式的修飾符,如下所示:
來到我們的競價功能:
使用nonOwner修飾符,此方法僅限於Owner。 如果交易成功,則返回true。由於各個參與者都將傳送其投標金額(需要儲存在合同中),因此被指定為應付。如果使用者不是早期參與,我們將允許其參與(否則我們將還原交易,要求此處使用的操作員將幫助我們完成交易)。我們將為使用者設定isProspect對映,增加參與者數量(bidders ++),並設定最高出價者和出價金額,以防使用者數量超過其他參與者。 一旦交易成功,將發出reg事件,返回值為true。
注意:任何帶有payable選項的函式都將允許合約在自己的地址儲存以太坊(在函式呼叫期間從使用者收到的)的數量。
只有所有者才能呼叫此方法並宣告結果
只允許所有者呼叫bidResult。這種方法會將財產所有權轉讓給出價最高的人,也會將出價最高的金額轉移到當前所有者的地址並將拍賣標記為完成。它將最高出價者的isProspect對映重置為0並減少參與者數量(這將有助於我們跟蹤剩餘的正確參與者數量以提取其金額)。一旦交易成功,它將發出結果事件並返回真實的布林值。
幫助使用者撤回各自出價的方法
上述方法允許參與者撤回其各自儲存的投標金額。每當任何使用者希望退出拍賣或要在拍賣完成後取回其金額時,都可以呼叫此方法。此方法將針對使用者檢查isProspect對映的相應金額。 然後它將所需的金額轉入使用者的錢包地址。參加者人數也會減少,以反映實際參加者人數。請注意在宣佈拍賣結果時重置最高出價者的isProspect對映,因為我們不希望拍賣贏家索賠。
拍賣完成後,新的業主可能希望再次開始拍賣。在這種情況下,我們將確保上一輪拍賣的所有參與者是否都撤回了各自的金額,然後僅允許所有者再次開始拍賣。之所以施加這種條件,是因為我們要在此處重置關鍵引數,例如highestBid和highestBidder。
一旦沒有參與者留下,所有者就可以銷燬拍賣合約並將儲存的以太坊轉移到他自己的地址(如果有)。
希望你喜歡,教程儘可能簡單的主要是帶領大家理解總體實現思想。在下一部分,我們將透過物業租賃智慧合約例項來進行講解。