稳健智能合同练习系列第1部分

本系列的基本思想是理解用Solidity编写的智能合同的技术过程和基于用例的概念。在本系列中,我们将介绍三种不同的使用案例:“财产拍卖”、“房地产租赁”和“商业伙伴关系”对于每个用例,我们将首先研究要覆盖的功能,然后理解技术实现的细节。请记住,这不是一个功能齐全的产品。这些智能合同已经使用Ganache在本地进行了测试,不属于任何生产/测试网络它们只是为了教育目的而开发的。< p>

财产拍卖案

假设一个用户想通过拍卖出售他的财产。为了简单起见,我们的情况将类似于拍卖(而不是完全拍卖)基本计划是任何用户(除了业主)都可以参加拍卖。每个参与者都有机会出价并转移其出价金额,智能合同将存储参与者的出价只要房主愿意,他可以通过将房产所有权转让给出价最高者,并将最高出价金额转移到他的钱包地址来停止拍卖。其他参与者可以随时从智能合同中撤回他们的投标。除非所有其他用户从合同中撤回先前的投标金额,否则新的所有者将无法为指定的财产再次开始拍卖。

我们开始吧...

下面是要使用的不同数据类型:

实践合同

我们正在定义一个将存储属性名称和其他详细信息的属性结构由于可能有大量的详细信息,用户可以存储详细信息的哈希值(在合同之外准备详细信息的哈希值)我们有一个跟踪以下内容的状态结构:< p>

1。竞标者:这将存储参与拍卖的人数

2。最高出价:最高出价

3。最大投标人:出价最高者的地址

4。投标完成:检查拍卖是否已经完成

的所有者将把财产存储在他的钱包地址中,而isProspect是一个用于存储每个参与者的投标金额值的映射。

定义了以下事件来确认各种交易:

实践合同

部署智能合同时要初始化的财产详细信息、合同状态字段和所有者钱包地址(构造函数调用时)修饰符也被定义来隔离所有者和非所有者之间的各种功能,如下所示:

实践合同

代表我们的投标功能:

实践合同

使用非所有者修饰符,该修饰符仅限于所有者。如果事务成功,则返回true由于每个参与者将发送他的投标金额(需要存储在合同中),它被指定为应付。如果用户没有提前参与,我们将允许他参与(否则我们将恢复交易并要求这里使用的操作员帮助我们完成交易)我们将为用户设置isProspect映射,增加投标人数量,并设置最高投标人和投标金额,以防止用户超过其他参与者。一旦交易成功,reg事件将被发出,返回值为true< p>

注意:任何带有可支付选项的功能将允许合同在其自己的地址存储以太网通道的数量(在功能调用期间从用户接收)

实践合同

只有所有者可以调用此方法并声明结果< p>

只有所有者才被允许调用bidResult这种方法将财产的所有权转移给出价最高的人,并将出价最高的人转移到当前所有人的地址,并将拍卖标记为完成。它将出价最高者的isProspect映射重置为0,并减少参与者数量(这将帮助我们跟踪剩余的正确参与者数量,以提取他们的金额)一旦事务成功,它将发出一个结果事件并返回一个真正的布尔值

实践合同

帮助用户撤回其投标的方法< p>

上述方法允许参与者撤回其各自存储的投标金额每当任何用户希望退出拍卖或在拍卖完成后取回他们的金额时,都可以调用此方法。该方法将为用户检查相应的isProspect映射量。然后,它将所需金额转移到用户的钱包地址参与者的人数也将减少,以反映实际的参与者人数。请注意,当拍卖结果公布时,最高出价者的isProspect图将被重置,因为我们不希望拍卖获胜者要求赔偿。

实践合同

拍卖完成后,新所有者可能希望再次开始拍卖。在这种情况下,我们将确保前一次拍卖的所有参与者都提取了各自的金额,然后只允许所有者再次开始拍卖。这个条件是强加的,因为我们想在这里重置关键参数,如最高出价和最高出价。

一旦没有参与者留下,所有者可以销毁拍卖合同并将存储的以太网通道转移到他自己的地址(如果有的话)我希望你喜欢它。教程尽可能简单。它主要是引导人们理解整体的实现思想。在下一部分,我们将通过物业租赁智能合同的例子来说明。

关键词:稳健智能合同

大家都在看

相关专题