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

買賣虛擬貨幣
這是智慧合約演練系列的第2部分。在以下文章中,我將為您提供一個關於房地產租賃智慧合約的技術實施細節的深入概述。出租物業用例::總體用例非常簡單,使用者將根據給定的屬性將自己註冊為潛在客戶。財產所有者將決定哪個使用者將成為租戶。租戶將按照約定的到期日支付租金。租金賬戶儲存在智慧合約中。業主可以從合同中提取相同的租金。如果房客未在到期日之前支付租金,則允許房主對房客提出警告。所有者可以在每隔2天的向租戶提出警告。如果房客超過了警告限制,房主可以將其從財產中收回。讓我們開始…

以下是我們定義的資料結構:

針對每個屬性欄位的註釋定義了它們各自的角色

在這裡,我們定義了“Property”結構,該結構將記錄財產詳細資訊,例如名稱,地址,是否租用財產,租金金額,租金間隔,租金到期日,警告計數,警告限制和租戶錢包地址。我們有MonthlyRentStatus結構,這將幫助我們儲存每個月的租金狀態。我們還提供各種對映-months,tantantRegistry和rent paid status。

我們定義了事件,這些事件將幫助我們記錄成功的交易。我們在建構函式本身中設定屬性owner,屬性詳細資訊和月份對映。建構函式僅被呼叫一次(部署智慧合約時)。

上面顯示的是各種修飾符,用於隔離和區分我們智慧合約的各種函式。

任何使用者都可以透過呼叫registerAsTenant方法表達對出租物業的興趣。如果不出租該物業,它將為給定使用者設定tenantRegistry對映。所有者將透過呼叫confirmTenant方法來確認哪個使用者應該成為租戶,並輸入相應的使用者錢包地址這將最終確定承租人,將物業出租狀態標記為true,並將根據租金間隔設定租金到期日。

注意:此處所有基於日期的計算均基於UNIX時間戳。現在是關鍵字,它為我們提供了包含交易的區塊的時間戳。但是這不是準確的時間戳,它會導致時間超出允許範圍。

payRent方法將允許租戶支付給定月份的租金。請注意,只有在傳送的金額等於要支付的租金金額時才會接受租金,它還會設定下一個到期日並將租戶警告重置為0(如果有)。

注-如果函式引數(以及返回引數)的型別為struct,array,mapping或string,則應明確指出其資料位置-記憶體還是儲存。如果函式是external,則應將資料位置作為calldata。

方法getRentStatus將允許任何人檢查給定月份的租金狀態。

注意:任何型別為struct的函式作用域變數都應明確指出其資料位置-記憶體或儲存,因為這有助於編譯器做出基於事務的決策。請注意,在getRentStatus方法中,我們將返回每個欄位,因為不可能返回完整的結構。實體僅將結構實現為變數會丟失。

withdrawRent將允許所有者從智慧合約地址中提取每月租金。它還將把每個月的rentInStore對映重置為0,因為不應允許所有者每月兩次提取租金。

只有在以下情況下,房主才可以警告房客關於房租:

· 租戶尚未支付租金,並且已到到期日。
· 最近警告(如果有)至少在2天前提出(現在-警告時間> 172800000)。

將觸發一個警告事件,該事件可以透過使用web3 api的使用者介面偵聽,以警告租戶有關未決租金的資訊。警告計數也會增加。

如果達到警告限制,所有者也可以解僱租戶。呼叫dismissTenant方法還將財產租賃狀態重置為false。

希望您喜歡!在下一部分進行結帳,我們將透過該部分進行業務合作伙伴智慧合約。

免責聲明:

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

推荐阅读

;