建议和反馈

请填写你的反馈内容

问答 > 公有链 > 问答详情

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

我正在以太坊区块链上试验智能合约。假设我有一份合同,比如在Solidity文档中找到SimpleStorage.sol ,它具有任何人都可以访问的存储状态。如链接所述,

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

这会导致问题,并且在我的用例中,限制该功能对特定帐户的可访问性的解决方案是不合适的。在我的合同中,我希望以后可以通过不同的预定帐户访问每个帐户设置的数据(考虑人A-> B的关系,因此B使用仅来自A的数据,而x-> y,其中y使用数据完全来自x。在y可以使用A的数据的情况下不存在重叠。根据我的理解,这个问题有两个解决方案:

  1. 将地址相互映射并跟踪此单一智能合约中的所有数据。

  2. 拥有初始帐户可以访问的智能合约“模板”,并为每个新帐户生成单独的智能合约,以便只保存与模板交互的数据。

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

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

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


2019-08-23
0
请先登陆或注册

恒生电子2019-08-23

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

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,如果你有保持存储逻辑和谁具有存储数据的每个用户专用合同主合同。


投一票
评论(0)
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励