2016-06-29 21 views
2

我正在在以太坊區塊鏈上試驗智能合約。假設我有一個合同,就像SimpleStorage.sol找到了in the Solidity documentation,它有一個任何人都可以訪問的存儲狀態。爲紐帶描述,智能合同如何處理多個用戶和不同的存儲?

任何人都可以只調用再次用不同的值設置並覆蓋你的電話號碼

這將導致問題,並限制該功能的可訪問特定帳戶的解決方案在我的用例中不適合。在我的合同中,我希望每個賬戶設置的數據稍後可以通過一個不同的預定賬戶訪問(想想一個人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 
     } 
    } 
} 

這種邏輯可以擴展到您的需求,您可以創建結構或數組持有允許的用戶帳戶列表,或者你可以創建一個邏輯,它允許動態添加和刪​​除特權用戶。這完全取決於你。

如果你只希望每個用戶有它自己的數據訪問,你既可以儲存在專用的所有者結構的數據就像你在描述賬戶或者,我會建議每個用戶創建它是自己的合同該存儲將是關於可訪問性的最乾淨的方式。

主力合約只是要保持外部合同引用的列表,所以沒有真正冗餘,如果你有這適用於誰擁有存儲每個用戶的存儲邏輯單元和專用合同的主合同數據。

相關問題