Wie speichert man kleine Datenbanken, bearbeitbare Daten auf Blockchain, auf die per Smart Contract zugegriffen werden kann?

Neu bei Blockchain und Smart Contracts. Ich habe recherchiert und festgestellt, dass ich meinen Transaktions-Smart-Vertrag nicht aktualisieren kann. Ist es möglich, Datenbankdaten als Eintrag im Ledger oder in einem anderen Smart Contract zu speichern, den nur ich aktualisiere und auf den der Transaktions-Smart Contract zugreifen kann, um die Daten abzurufen?

Zum Beispiel

Der Benutzer möchte eine Spende an eine Organisation leisten. Seine Brieftasche muss alle möglichen Organisationen einbeziehen, damit er aus einer Datenbank auswählen kann, die ich gerne dezentralisiert hätte.

Wo kann ich die Organisationen und ihre Wallet-Adresse speichern, aktualisieren oder entfernen? Außerdem möchte ich Unterabschnitte einer Organisation und ihrer Adresse hinzufügen.

Zum Beispiel

Benutzer-Wallet zieht ein:

  • Krankenhaus, Adresse
  • Krankenhaus, Labor, Adresse,
  • Krankenhaus, Notaufnahme, Adresse
  • Feuerwehr, Adresse
  • Feuerwehr, Gerätefond, Adresse
  • Feuerwehr, Versorgungskasse, Adresse
  • Usw.

Ich würde den einzigen lesen, der Organisationen hinzufügt und sie entfernt. Gibt es eine Möglichkeit, dies alles dezentral innerhalb der Blockchain zu tun?

Chris

Antworten (1)

Smart Contracts können Arrays und Maps als Datenstrukturen haben, die den Status dauerhaft in der Blockchain speichern, und Funktionen des Smart Contracts können sie ändern.

Für Ihr Beispiel könnten Sie so etwas verwenden:

pragma solidity ^0.4.16;

contract MyOrgDatabase {
  struct Organization {
    address _where;
    string _name;
  }
  Organization[] public availableOrgs;
  address public owner = msg.sender;

  function addOrg(address _where, string _name) {
    require(msg.sender == owner);
    availableOrgs.push(Organization(_where, _name));
  }
}

Dieser Vertrag hat ein öffentliches availableOrgsEigentum, das jeder aus der Blockchain lesen kann. Aber nur die Adresse, die den Vertrag erstellt hat (die owner), kann Organisationen zu dieser Liste hinzufügen (Sie möchten wahrscheinlich auch Funktionen zum Entfernen von Organisationen aus der Liste oder zum Ändern der Eigentümerschaft des Vertrags für einen voll funktionsfähigen Vertrag hinzufügen, aber das sollte Ihnen eine Idee geben).

Sie verwenden die Adresse in der Strukturorganisation falsch. Es soll eine Zeichenfolge auf _where sein
@EduardoPereira: Wenn die Absicht war, eine Straßenadresse (Postanschrift) zu speichern, wäre eine Zeichenfolge angemessen. Aber die Absicht dieser ist es, ihre Ethereum-Adresse zu speichern (da die ursprüngliche Frage den Anwendungsfall des Sendens von Geldern an sie nennt). Das addressTypfeld ist ein Typ, der speziell für die Aufnahme von Ethereum-Adressen (normalerweise lange hexadezimal codierte Zahlen) ausgelegt ist.
@MidnightLightning Ich denke, dies wird keine dauerhafte Speicherlösung sein. Wenn wir zum Beispiel unsere Verbindung mit dem Ethereum schließen oder das Ganache-Cli schließen, erhalten wir beim nächsten Öffnen die Daten nicht. Richtig? ..bitte korrigieren Sie mich, wenn ich falsch liege
@AnikethSaha Ich glaube, du liegst falsch; Die Art und Weise, wie ich den Vertrag hier ausgelegt habe (mit einer „öffentlichen“ Liste von „Organisations“-Strukturen), ist eine Standardmethode, um Daten dauerhaft in der Ethereum-Blockchain zu speichern. Ethereum existiert als ein Netzwerk von Computern, auf denen die Ethereum-Client-Anwendung ("Knoten") läuft, die alle alle Transaktionen ausführen. In dem Moment, in dem ich eine Transaktion einreiche, um die Funktion „addOrg“ auszulösen, zeichnen alle Knoten dies als Änderung auf. Wenn ich die Verbindung zu einem der Knoten trenne, werden die Daten nicht gelöscht; es ist immer noch auf allen Knoten vorhanden, die die Transaktion gesehen haben.
@AnikethSaha Ganache ist eine separate Situation; Ganache ist ein Testraum für Entwickler, um an ihren Anwendungen zu arbeiten, ohne echtes Geld für die echte Ethereum-Blockchain zu riskieren. Ihr Ganache-Netzwerk enthält nur einen Computer (Ihren). Wenn Ihr Computer also seine Daten verliert, sind sie wirklich weg. Aber das einfache Stoppen und Starten von Ganache löscht nicht alles darauf (das ist genauso wie das Stoppen und Neustarten eines Datenbankservers). Es gibt jedoch bestimmte Befehle, um Ganache anzuweisen, alle Blockchain-Daten zu verwerfen und neu zu starten, wodurch Ihre vergangenen Aktionen verloren gehen würden.