Nehmen wir an, ich muss die Sammlung komplexer Daten im Smart Contract speichern und manipulieren. Es gibt möglicherweise komplexe Regeln, die definieren, wer und wie ein Element ändern kann. Die Sammlung kann mehrere Millionen Gegenstände umfassen.
Es gibt zwei Möglichkeiten, wie diese Logik implementiert werden kann
Vertrag DataItem { bytes32-Schlüssel; Zeichenfolgenwert; Funktion DataItem(bytes32 k, string v) { Schlüssel = k; Wert = v; } } Vertrag DAppInterface { Zuordnung (Bytes32 => Adresse) öffentliche Datenelemente; Funktion addDataItem (bytes32 k, string v) extern { dataItems[k] = neues DataItem(k, v); } }
Vertrag DAppInterface { struct DataItem { bytes32-Schlüssel; Zeichenfolgenwert; } Zuordnung (Bytes32 => DataItem) öffentliche DatenItems; Funktion addDataItem (bytes32 k, string v) extern { dataItems[k].key = k; dataItems[k].value = v; } }
Was ist der Vorteil der Verwendung eines gegenüber einem anderen Ansatz? Was sind die Richtlinien für die Auswahl eines vs. anderen?
Unter den meisten Umständen sollten Datenstrukturen, sogar komplizierte, Structs sein.
Hier sind einige Gründe für die Wahl von Strukturen:
foo.bar()
, können Sie dies mit einem Bibliotheksvertrag tun, ohne die zusätzliche Komplexität der Erstellung von Verträgen für jede Instanz.Hier sind einige Gründe, warum Verträge besser wären:
Diese sind jedoch seltener. Mein Rat: Versuchen Sie es zuerst mit Strukturen und verwenden Sie Datenstrukturverträge als letzten Ausweg.
Sergej Illin
Matthäus Schmidt
kitta