文章阅读页通栏

Solidity智能合约演练系列第3部分

来源: 区块链研究实验室 作者:链三丰
这是智能合约演练系列的第3部分。在下面文章中,区块链研究实验室将为您提供关于我们的业务合作伙伴智能合约的技术实施细节的深入概述。 商业伙......
这是智能合约演练系列的第3部分。在下面文章中,区块链研究实验室将为您提供关于我们的业务合作伙伴智能合约的技术实施细节的深入概述。

商业伙伴关系用例:

两个用户(或业务合作伙伴)可以通过签署合同建立合作关系一旦合同签订,双方将获得以下特权:

1. 在智能合约中增加资金的权利。
2. 将资金从智能合约转移到第三方的权利。
3. 建议一个项目在他们之间共享,分配百分比。(两个合作伙伴的分配之和应为100%)
4. 批准提议的项目。一旦项目得到双方合作伙伴的批准,它将被提交到区块链和分配细节。
5. 删除一个项目。一旦合作伙伴双方都同意删除某个项目,该项目将在区块链上标记为已删除。
6. 打破合伙关系的权利。一旦合伙人双方同意分割,上述权利将不再适用于任何一方。智能合约中存储的资金也将在其中平均分配。

让我们开始…

以下是我们定义的数据结构:

我们将存储两个合作伙伴(partnerOne和partnerTwo)的地址。两个布尔标志(signed和separated)将跟踪伙伴关系的状态。这两个映射(具有hasSeparated和hasSigned)都将存储合作伙伴关于其合伙关系或分离的批准。Item struct将帮助我们存储要在合作伙伴之间共享的项目及其各自的份额百分比。Items数组将存储项目列表。ItemIds数组将存储项目的索引。

在确认区块链上的各种交易时将触发的事件

我们将在智能合约部署期间(在构造函数中)初始化两个用户的钱包地址(一旦他们签署合约,他们将来将成为合作伙伴)。我们还将使用诸如onlyPartner,isSigned和areNotSeparated之类的修饰符来限制各种智能合约函数。

signContract方法将允许两个用户都签署合约。双方都签署了合约后,智能合约的状态将变为合伙(通过将已签名标记标记为true)。

注:可以从智能合约external 调用指定为外部的方法。要在智能合约内调用它,请使用this关键字(this.externalMethodName()),可以在智能合约外部或内部调用指定为public的方法。Internal 方法只能在内部调用。Private 方法在衍生智能合约中将不可用。

proposalItem将使两个合作伙伴都可以提议要在它们之间共享的任何项目。只有在以下情况下,此交易才能成功:

· 两个用户都是合伙人(signed= true)。
· 每个合作伙伴的股份应为非负数,总股份总数应等于100%。

proposalItem方法还将标记已提议该项目的用户批准的项目(item.hasApprovedAdd [msg.sender] = true)。然后将其存储在items列表中,并将其索引保留在itemIds数组中。

approveItem将接受一个itemId,以便从列表中确定要批准的项目。在发件人批准之前,它将验证是否已添加,删除或较早批准了该物品。一旦两个伙伴都批准了该项目,则将其标记为已添加。

RemoveItem将接受itemId,以确定要删除的项目。一旦双方同意,该项目将被标记为已删除。

Note- address.send()和address.transfer()方法是安全的,因为它们将23000gas转发到外部调用,这仅足以记录某些内容。而address.value.call(msg.value)()是不安全的,因为它将完整的气体转发给外部调用,使智能合约容易受到黑客攻击。

匿名付款方式将允许合作伙伴将资金存储在智能合约中。付款方式将使他们能够将任何资金转移给第三方。

注—匿名回退功能可能在其他任何功能之后被调用。如果必须仅将其用于事务处理(纯以太坊传输),则应验证msg.data.length == 0(最佳实践)。

getSeparated允许两个合伙人都申请终止合伙关系。如果双方都同意分割,则合约将终止合伙关系。不允许他们在区块链上进行任何其他交易。同样,智能合约中存储的所有资金也将在其中平均分配。

关键词: Solidity  智能合约  
0/300