2016-06-29 14 views
2

Ich experimentiere mit Smart Contracts auf der Ethereum Blockchain. Nehmen wir an, ich habe einen Vertrag, etwas wie SimpleStorage.sol gefunden in the Solidity documentation, die einen Speicherstatus für jedermann zugänglich hat. Da der Link beschreibt,Wie können Smart Contracts mehrere Benutzer und unterschiedlichen Speicher verwalten?

jemand gerade gesetzt mit einem anderen Wert wieder anrufen konnte und Ihre Zahl überschreibt

Dies zu Problemen führen würde, und die Lösung, die Erreichbarkeit dieser Funktion auf bestimmte Konten zu beschränken ist in meinem Anwendungsfall nicht angemessen. In meinem Vertrag möchte ich, dass die Daten, auf die jedes Konto gesetzt wird, später von einem anderen vorgegebenen Konto zugänglich sind (denken Sie an eine Beziehung, in der Person A-> B, also B die Daten ausschließlich von A verwendet, und x-> y, wo y die Daten verwendet ausschließlich aus x. Es kann keine Überlappung geben, wo y die Daten von A verwenden kann. Von meinem Verständnis gibt es 2 Lösungen für das Problem:

  1. Karte Adressen miteinander und verfolgen Sie alle Daten in diesem einzelnen Smart-Vertrag.
  2. Haben Sie ein intelligentes Vertrags- "Template", auf das das ursprüngliche Konto zugreifen würde, und generieren Sie einen separaten intelligenten Vertrag für jedes neue Konto, um einfach Daten zu speichern, die mit der Vorlage interagieren.

Das Problem mit tritt auf, wenn die Beziehung zwischen den Konten komplexer (Karte getrennt structs?) Wird oder eine große Menge von Menschen versuchen, ihre Informationen in dem Vertrag zu speichern.

Das Problem mit ist Redundanz. Muss ich wirklich einen separaten "Vertrag" für jede einzelne Person erstellen, die versucht, auf die Hauptvorlage zuzugreifen?

Wenn meine Frage vage ist, kann ich mehr erklären, aber ich suche hauptsächlich nach einer begrifflichen Antwort. Die meisten intelligenten Vertragsbeispiele, die ich gefunden habe, sind entweder extrem einfach oder unnötig komplex und bieten keinen konkreten Anwendungsfall.

Antwort

1

Sie können Zugriffslisten in Ihrem Smart-Vertrag erstellen. Die einfachste Idee wäre, die Einrichtung eines Besitzers auf:

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 
     } 
    } 
} 

Diese Logik kann auf Ihre Bedürfnisse erweitert werden, Sie structs oder Arrays, die eine Liste der erlaubten Benutzerkonten erstellen können, oder Sie können eine Logik erstellen, die dynamische erlaubt Hinzufügen und Entfernen von privilegierten Benutzern. Das liegt ganz bei Ihnen.

Wenn Sie nur jeder Benutzer seines eigenen Datenzugriff haben wollen, können Sie entweder speichern diese Daten in structs mit engagierten Eigentümer Konten, wie Sie in beschrieben oder, ich würde empfehlen, dass jeder Benutzer erstellt ein eigener Vertrag ist für der Speicher, der hinsichtlich der Zugänglichkeit am saubersten wäre.

Der Hauptvertrag hat nur eine Liste von Referenzen für externe Verträge zu halten, so ist es nicht wirklich Redundanz in wenn Sie einen Hauptvertrag, der die Speicherlogik und spezielle Verträge für jeden Benutzer hält, die speichern hat Daten.