Solidity智慧合約演練系列第1部分

買賣虛擬貨幣
本系列的基本思想是瞭解以Solidity編寫的智慧合約的技術流程和基於用例的概念。在本系列中,我們將介紹三個不同的用例:“財產拍賣”,“出租房地產”和“業務合作伙伴關係”。對於每個用例,我們將首先研究應涵蓋的功能,然後瞭解技術實施細節。請記住這不是功能齊全的產品。這些智慧合約已使用Ganache在本地進行了測試,並且不屬於任何生產/測試網路。它們僅出於教育目的而開發。財產拍賣用例假設某個使用者想透過拍賣出售自己的財產。為簡單起見,將使我們的情況與拍賣類似(而不是完全拍賣)。基本方案是任何使用者(財產所有者除外)都可以參與拍賣。每個參加者將有機會競標和轉讓其競標金額,智慧合約將儲存參與者的出價。任何時候業主想要的,他可以透過將財產所有權轉讓給最高出價者並將最高出價金額轉移到自己的錢包地址來停止拍賣。其他參與者可以隨時從智慧合約中撤回各自的出價。除非所有其他使用者都從合約中撤回了先前的競價金額,否則新所有者將無法針對指定的財產再次開始拍賣。讓我們開始…

下面是要使用的不同資料型別:

我們正在定義一個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。

一旦沒有參與者留下,所有者就可以銷燬拍賣合約並將儲存的以太坊轉移到他自己的地址(如果有)。

希望你喜歡,教程儘可能簡單的主要是帶領大家理解總體實現思想。在下一部分,我們將透過物業租賃智慧合約例項來進行講解。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;