智能合约如何处理多个用户和不同的存储?

Posted

技术标签:

【中文标题】智能合约如何处理多个用户和不同的存储?【英文标题】:How do Smart Contracts handle multiple users and different storage? 【发布时间】:2016-11-01 18:00:56 【问题描述】:

我正在以太坊区块链上试验智能合约。假设我有一个合同,比如 SimpleStorage.sol found in the Solidity documentation ,它有一个任何人都可以访问的存储状态。如链接所述,

任何人都可以使用不同的值再次调用 set 并覆盖您的号码

这会导致问题,并且将该功能的可访问性限制为特定帐户的解决方案不适合我的用例。在我的合同中,我希望每个帐户设置的数据以后可以由不同的预定帐户访问(考虑这样一种关系,其中人 A->B 所以 B 只使用来自 A 的数据,而 x->y 其中 y 使用数据完全来自 x。在 y 可以使用 A 的数据的情况下不存在重叠)。据我了解,该问题有两种解决方案:

    将地址相互映射并跟踪该智能合约中的所有数据。 拥有一个初始账户可以访问的智能合约“模板”,并为每个新账户生成一个单独的智能合约,以简单地保存与模板交互的数据。

1 的问题出现在帐户之间的关系变得更加复杂(映射单独的结构?)或大量人试图将他们的信息存储在合约中时。

2 的问题是冗余。我真的需要为每个试图访问主模板的人制作一份单独的“合同”吗?

如果我的问题含糊不清,我可以解释更多,但我主要是在寻找一个概念性的答案。我发现的大多数智能合约示例要么非常简单,要么过于复杂,并且没有提供具体的用例。

【问题讨论】:

【参考方案1】:

您可以在智能合约中创建访问列表。最简单的想法是设置所有者:

contract example 

    // Define variable owner of the type address
    address owner;

    // this function is executed at initialization and sets the owner of the contract
    function example() 
        owner = msg.sender; 
    

    function doSomething() 
        if (msg.sender == owner) 
            // only the owner can do something, like storage access
        
    

此逻辑可以根据您的需要进行扩展,您可以创建包含允许的用户帐户列表的结构或数组,或者您可以创建一个允许动态添加和删除特权用户的逻辑。这完全取决于您。

如果您只希望每个用户都可以访问自己的数据,您可以像 1 中描述的那样将这些数据存储在具有专用所有者帐户的结构中,或者,我建议每个用户创建它是自己的存储合同,这将是关于可访问性的最干净的方式。

主合约只需要维护一个外部合约的引用列表,所以如果你有一个主合约为每个用户保存存储逻辑和专用合约,那么 2 并没有真正的冗余谁必须存储数据。

【讨论】:

以上是关于智能合约如何处理多个用户和不同的存储?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 NEAR 跨合约调用中的异常?

如何向合约中质押bnb

Solidity入门

EOS智能合约授权限制和数据存储

比特币与以太坊智能合约比较

如何只允许某些用户执行智能合约方法?