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。

希望您喜欢!在下一部分进行结帐,我们将通过该部分进行业务合作伙伴智能合约。

分享到:

相关文章