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

Blockchain 智能合约如何处理多个用户和不同的存储?,blockchain,ethereum,solidity,smartcontracts,Blockchain,Ethereum,Solidity,Smartcontracts,我正在以太坊区块链上试验智能合约。假设我有一个合同,类似SimpleStorage.sol found,它有一个任何人都可以访问的存储状态。正如链接所描述的 任何人都可以用不同的值再次调用set并覆盖您的号码 这将导致问题,而将该功能的可访问性限制到特定帐户的解决方案在我的用例中是不合适的。在我的合同中,我希望每个帐户设置的数据稍后可以由不同的预定帐户访问(想想这样一种关系,其中人员a->B所以B专门使用a的数据,而x->y专门使用x的数据。y可以使用a的数据,不存在重叠)。据我所知,有两种解决

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

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

这将导致问题,而将该功能的可访问性限制到特定帐户的解决方案在我的用例中是不合适的。在我的合同中,我希望每个帐户设置的数据稍后可以由不同的预定帐户访问(想想这样一种关系,其中人员a->B所以B专门使用a的数据,而x->y专门使用x的数据。y可以使用a的数据,不存在重叠)。据我所知,有两种解决方案:

  • 将地址相互映射,并跟踪此智能合约中的所有数据
  • 拥有初始帐户将访问的智能合约“模板”,并为每个新帐户生成单独的智能合约,以简单地保存与模板交互的数据
  • 1的问题发生在账户之间的关系变得更加复杂(映射单独的结构?)或大量用户试图在合同中存储信息时

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


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

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

    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中就没有真正的冗余