智能合同如何处理多个用户和不同的存储?
问题描述:
我正在在以太坊区块链上试验智能合约。假设我有一个合同,就像SimpleStorage.sol找到了in the Solidity documentation,它有一个任何人都可以访问的存储状态。为纽带描述,智能合同如何处理多个用户和不同的存储?
任何人都可以只调用再次用不同的值设置并覆盖你的电话号码
这将导致问题,并限制该功能的可访问特定帐户的解决方案在我的用例中不适合。在我的合同中,我希望每个账户设置的数据稍后可以通过一个不同的预定账户访问(想想一个人A-> B的关系,B只使用A中的数据,而x-> y其中y使用数据完全来自x.Y可以使用A的数据不存在重叠)。根据我的理解,这个问题有两种解决方案:
- 将地址互相映射并跟踪此单一智能合约中的所有数据。
- 拥有初始账户可以访问的智能合约“模板”,并为每个新账户生成单独的智能合约,以简单地保存与模板交互的数据。
与的问题时,帐户之间的关系变得更加复杂(地图独立结构?)或大量的人试图来存储他们在合同信息中出现。
问题与是冗余。我真的需要为试图访问主模板的每个人单独制定一份“合同”吗?
如果我的问题含糊不清,我可以更多解释,但我主要是在寻找一个概念上的答案。我发现的大多数智能合约例子都非常简单或不必要的复杂,并且不提供具体的用例。
答
您可以在智能合约中创建访问列表。最简单的想法是建立一个业主:
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
}
}
}
这种逻辑可以扩展到您的需求,您可以创建结构或数组持有允许的用户帐户列表,或者你可以创建一个逻辑,它允许动态添加和删除特权用户。这完全取决于你。
如果你只希望每个用户有它自己的数据访问,你既可以储存在专用的所有者结构的数据就像你在描述账户或者,我会建议每个用户创建它是自己的合同该存储将是关于可访问性的最干净的方式。
主力合约只是要保持外部合同引用的列表,所以没有真正冗余,如果你有这适用于谁拥有存储每个用户的存储逻辑单元和专用合同的主合同数据。