智能合約技術(shù)在房地產(chǎn)租賃中的應用實施介紹
在以下文章中,我將為您提供一個關(guān)于房地產(chǎn)租賃智能合約的技術(shù)實施細節(jié)的深入概述。
出租物業(yè)用例::
總體用例非常簡單,用戶將根據(jù)給定的屬性將自己注冊為潛在客戶。財產(chǎn)所有者將決定哪個用戶將成為租戶。租戶將按照約定的到期日支付租金。租金賬戶存儲在智能合約中。業(yè)主可以從合同中提取相同的租金。如果房客未在到期日之前支付租金,則允許房主對房客提出警告。所有者可以在每隔2天的向租戶提出警告。如果房客超過了警告限制,房主可以將其從財產(chǎn)中收回。
讓我們開始…
以下是我們定義的數(shù)據(jù)結(jié)構(gòu):
針對每個屬性字段的注釋定義了它們各自的角色
在這里,我們定義了“Property”結(jié)構(gòu),該結(jié)構(gòu)將記錄財產(chǎn)詳細信息,例如名稱,地址,是否租用財產(chǎn),租金金額,租金間隔,租金到期日,警告計數(shù),警告限制和租戶錢包地址。我們有MonthlyRentStatus結(jié)構(gòu),這將幫助我們存儲每個月的租金狀態(tài)。我們還提供各種映射-months,tantantRegistry和rent paid status。
我們定義了事件,這些事件將幫助我們記錄成功的交易。我們在構(gòu)造函數(shù)本身中設(shè)置屬性owner,屬性詳細信息和月份映射。構(gòu)造函數(shù)僅被調(diào)用一次(部署智能合約時)。
上面顯示的是各種修飾符,用于隔離和區(qū)分我們智能合約的各種函數(shù)。
任何用戶都可以通過調(diào)用registerAsTenant方法表達對出租物業(yè)的興趣。如果不出租該物業(yè),它將為給定用戶設(shè)置tenantRegistry映射。所有者將通過調(diào)用confirmTenant方法來確認哪個用戶應該成為租戶,并輸入相應的用戶錢包地址這將最終確定承租人,將物業(yè)出租狀態(tài)標記為true,并將根據(jù)租金間隔設(shè)置租金到期日。
注意:此處所有基于日期的計算均基于UNIX時間戳?,F(xiàn)在是關(guān)鍵字,它為我們提供了包含交易的區(qū)塊的時間戳。但是這不是準確的時間戳,它會導致時間超出允許范圍。
payRent方法將允許租戶支付給定月份的租金。請注意,只有在發(fā)送的金額等于要支付的租金金額時才會接受租金,它還會設(shè)置下一個到期日并將租戶警告重置為0(如果有)。
注-如果函數(shù)參數(shù)(以及返回參數(shù))的類型為struct,array,mapping或string,則應明確指出其數(shù)據(jù)位置-內(nèi)存還是存儲。如果函數(shù)是external,則應將數(shù)據(jù)位置作為calldata。
方法getRentStatus將允許任何人檢查給定月份的租金狀態(tài)。
注意:任何類型為struct的函數(shù)作用域變量都應明確指出其數(shù)據(jù)位置-內(nèi)存或存儲,因為這有助于編譯器做出基于事務(wù)的決策。請注意,在getRentStatus方法中,我們將返回每個字段,因為不可能返回完整的結(jié)構(gòu)。實體僅將結(jié)構(gòu)實現(xiàn)為變量會丟失。
withdrawRent將允許所有者從智能合約地址中提取每月租金。它還將把每個月的rentInStore映射重置為0,因為不應允許所有者每月兩次提取租金。
只有在以下情況下,房主才可以警告房客關(guān)于房租:
· 租戶尚未支付租金,并且已到到期日。
· 最近警告(如果有)至少在2天前提出(現(xiàn)在-警告時間》 172800000)。
將觸發(fā)一個警告事件,該事件可以通過使用web3 api的用戶界面?zhèn)陕牐跃孀鈶粲嘘P(guān)未決租金的信息。警告計數(shù)也會增加。
如果達到警告限制,所有者也可以解雇租戶。調(diào)用dismissTenant方法還將財產(chǎn)租賃狀態(tài)重置為false。