我正在以太坊区块链上试验智能合约。假设我有一份合同,比如SimpleStorage.sol找到in the Solidity documentation,它有一个任何人都可以访问的存储状态。如链接所述,
任何人都可以使用不同的值再次调用set并覆盖您的号码
这会导致问题,并且在我的用例中,限制该功能对特定帐户的可访问性的解决方案是不合适的。在我的合同中,我希望以后可以通过不同的预定帐户访问每个帐户设置的数据(考虑人A-> B的关系,因此B使用仅来自A的数据,而x-> y,其中y使用数据完全来自x。在y可以使用A的数据的情况下不存在重叠。根据我的理解,这个问题有两个解决方案:
当帐户之间的关系变得更加复杂(映射单独的结构?)或者大量的人试图将他们的信息存储在合同中时,会出现 1 的问题。
2 的问题是冗余。我真的需要为每个试图访问主模板的人制作单独的“合同”吗?
如果我的问题含糊不清,我可以解释一下,但我主要是寻找一个概念性的答案。我发现的大多数智能合约示例要么非常简单,要么不必要地复杂,并且不提供具体的用例。
答案 0 :(得分: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 中就没有真正的冗余谁必须存储数据。