In einem Tezos-Smart-Vertrag ist der Speicher so etwas wie das Gedächtnis des Vertrags. Hier werden alle vertragsrelevanten Daten gespeichert. Im Wesentlichen fungiert es als Status unseres Vertrags, indem es Werte speichert, die über verschiedene Transaktionen hinweg bestehen bleiben, und es dem Smart Contract ermöglicht, sich Informationen zu „merken“. Diese Fähigkeit ermöglicht es uns, komplexe und ansprechende dezentrale Anwendungen auf der Tezos-Blockchain zu erstellen.
Bevor wir uns in dieser Lektion mit unserem Code befassen, wollen wir das Konzept der Speicherung etwas genauer aufschlüsseln. Die Speicherung eines Vertrags ist der Zustand, der zwischen Funktionsaufrufen bestehen bleibt. Wenn Sie einen traditionellen Programmierhintergrund haben, können Sie sich das als den „globalen Zustand“ des Vertrags vorstellen. Dadurch können Benutzer über einen längeren Zeitraum fortlaufend mit einem Vertrag interagieren.
Schauen wir uns nun unseren Vertragscode für diese Lektion an:
Python
import smartpy as sp
@sp.module
def main():
class StoreValue(sp.Contract):
def __init__(self, value):
self.data.storedValue = value
@sp.entrypoint
def replace(self, params):
self.data.storedValue = params.value
@sp.entrypoint
def double(self):
self.data.storedValue *= 2
@sp.entrypoint
def Divide(self , params):
Assert params.divisor > 5
self.data.storedValue /= params.divisor
if „templates“ not in __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
Szenario = sp.test_scenario(main)
Szenario.h1("Store Wert")
Szenario += c1
c1.replace(Wert=15)
Szenario.p("Some Berechnung").show(c1.data.storedValue * 12)
c1.replace(value=25)
c1.double()
c1.divide(divisor=2).run(
gültig=Falsch, Ausnahme="Falsche Bedingung: params.divisor > 5"
)
Szenario.verify(c1.data.storedValue == 50)
c1.divide(Divisor=6)
Szenario.verify(c1.data.storedValue == 8)
In unserem Speichervertragsbeispiel haben wir mehrere Einstiegspunkte – replace
, double
und divide
. Nach der Bereitstellung dieses Vertrags können Benutzer diese Einstiegspunkte aufrufen, um mit dem Vertrag zu interagieren.
Für die Einstiegspunkte replace
und divide
müssen Benutzer Parameter in der Transaktion angeben. Für replace
“ ist ein value
erforderlich und für divide
“ ist ein Parameter „ divisor
erforderlich.
Wenn Sie diesen Vertrag in der SmartPy-IDE ausführen, sehen Sie auf der rechten Seite eine visuelle Darstellung der Vorgänge und der Speicherung des Vertrags. Hier können Sie tatsächlich Benutzerinteraktionen simulieren. Hier ist eine Schritt-für-Schritt-Anleitung:
Stellen Sie Ihren Vertrag bereit, indem Sie auf die Schaltfläche Deploy
klicken.
Nach der Bereitstellung sehen Sie den Vertrag unter Contracts
dargestellt. Klick es an.
Nun werden Ihnen die Einstiegspunkte für den Vertrag aufgelistet.
Um replace
aufzurufen, geben Sie einen Wert für params.value
in das Feld ein und klicken Sie dann auf die Schaltfläche „ replace
“.
Um double
aufzurufen, klicken Sie einfach auf die double
Schaltfläche.
Um divide
aufzurufen, geben Sie einen Wert für params.divisor
in das Feld ein und klicken Sie dann auf die Schaltfläche divide
.
Bei jeder dieser Interaktionen wird ein neuer Vorgang erstellt, der unter dem Vertrag aufgeführt wird, und Sie können nach jedem Vorgang den aktualisierten Status des Vertragsspeichers sehen.
In diesem Vertrag betonen wir das Konzept der Speicherung mit der Zeile self.data.storedValue = value
. self.data
ist hier die von uns vertragsgemäße Speicherung gemeint. Hier behalten wir den Status unseres Vertrags bei: ein einzelner Parameter mit dem Namen storedValue
.
Wir haben auch mehrere Einstiegspunkte in diesem Vertrag. Einstiegspunkte sind im Wesentlichen öffentliche Funktionen, die es externen Parteien ermöglichen, mit dem Vertrag zu interagieren. Hier ermöglichen unsere Einstiegspunkte die Änderung des storedValue
auf verschiedene Arten. Wir können ihn durch einen neuen Wert ersetzen, verdoppeln oder durch einen bestimmten Teiler dividieren.
Betrachten wir als Nächstes das von uns eingerichtete Testszenario. Wir erstellen eine Instanz unseres Vertrags mit dem Anfangswert 12
für storedValue
. Anschließend rufen wir unsere Einstiegspunkte auf, um den Wert von storedValue
auf verschiedene Weise zu ändern und die Ergebnisse zu validieren.
Die Möglichkeit, Werte im Speicher eines Vertrags zu speichern und zu aktualisieren, ist für den Aufbau intelligenter Tezos-Verträge von grundlegender Bedeutung. Es ermöglicht die Persistenz von Daten über verschiedene Interaktionen mit dem Vertrag hinweg. Ganz gleich, ob es darum geht, die Guthaben in einem Token-Vertrag aufrechtzuerhalten, Benutzerinformationen in einer dezentralen Anwendung zu speichern oder den Status eines Spiels in der Blockchain festzuhalten, die Speicherung ist eine Kernfunktion, die diese Funktionalitäten ermöglicht.
Der Speicher in einem Smart Contract kann einfache Werte wie Ganzzahlen, Zeichenfolgen und Boolesche Werte oder komplexere Datenstrukturen wie Listen, Karten und benutzerdefinierte Objekte enthalten. Dadurch können wir komplexe Logik- und Zustandsübergänge in unsere Verträge einbauen.
In der nächsten Lektion bauen wir weiter auf diesen Kernkonzepten auf, führen komplexere Berechnungen in Smart Contracts ein und beginnen mit der Arbeit mit komplexeren Datentypen im Speicher unseres Vertrags. Bleiben Sie also dran und denken Sie daran: Übung macht den Meister. Zögern Sie nicht, mit dem Code zu experimentieren, Änderungen vorzunehmen und die Ergebnisse zu beobachten!
In einem Tezos-Smart-Vertrag ist der Speicher so etwas wie das Gedächtnis des Vertrags. Hier werden alle vertragsrelevanten Daten gespeichert. Im Wesentlichen fungiert es als Status unseres Vertrags, indem es Werte speichert, die über verschiedene Transaktionen hinweg bestehen bleiben, und es dem Smart Contract ermöglicht, sich Informationen zu „merken“. Diese Fähigkeit ermöglicht es uns, komplexe und ansprechende dezentrale Anwendungen auf der Tezos-Blockchain zu erstellen.
Bevor wir uns in dieser Lektion mit unserem Code befassen, wollen wir das Konzept der Speicherung etwas genauer aufschlüsseln. Die Speicherung eines Vertrags ist der Zustand, der zwischen Funktionsaufrufen bestehen bleibt. Wenn Sie einen traditionellen Programmierhintergrund haben, können Sie sich das als den „globalen Zustand“ des Vertrags vorstellen. Dadurch können Benutzer über einen längeren Zeitraum fortlaufend mit einem Vertrag interagieren.
Schauen wir uns nun unseren Vertragscode für diese Lektion an:
Python
import smartpy as sp
@sp.module
def main():
class StoreValue(sp.Contract):
def __init__(self, value):
self.data.storedValue = value
@sp.entrypoint
def replace(self, params):
self.data.storedValue = params.value
@sp.entrypoint
def double(self):
self.data.storedValue *= 2
@sp.entrypoint
def Divide(self , params):
Assert params.divisor > 5
self.data.storedValue /= params.divisor
if „templates“ not in __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
Szenario = sp.test_scenario(main)
Szenario.h1("Store Wert")
Szenario += c1
c1.replace(Wert=15)
Szenario.p("Some Berechnung").show(c1.data.storedValue * 12)
c1.replace(value=25)
c1.double()
c1.divide(divisor=2).run(
gültig=Falsch, Ausnahme="Falsche Bedingung: params.divisor > 5"
)
Szenario.verify(c1.data.storedValue == 50)
c1.divide(Divisor=6)
Szenario.verify(c1.data.storedValue == 8)
In unserem Speichervertragsbeispiel haben wir mehrere Einstiegspunkte – replace
, double
und divide
. Nach der Bereitstellung dieses Vertrags können Benutzer diese Einstiegspunkte aufrufen, um mit dem Vertrag zu interagieren.
Für die Einstiegspunkte replace
und divide
müssen Benutzer Parameter in der Transaktion angeben. Für replace
“ ist ein value
erforderlich und für divide
“ ist ein Parameter „ divisor
erforderlich.
Wenn Sie diesen Vertrag in der SmartPy-IDE ausführen, sehen Sie auf der rechten Seite eine visuelle Darstellung der Vorgänge und der Speicherung des Vertrags. Hier können Sie tatsächlich Benutzerinteraktionen simulieren. Hier ist eine Schritt-für-Schritt-Anleitung:
Stellen Sie Ihren Vertrag bereit, indem Sie auf die Schaltfläche Deploy
klicken.
Nach der Bereitstellung sehen Sie den Vertrag unter Contracts
dargestellt. Klick es an.
Nun werden Ihnen die Einstiegspunkte für den Vertrag aufgelistet.
Um replace
aufzurufen, geben Sie einen Wert für params.value
in das Feld ein und klicken Sie dann auf die Schaltfläche „ replace
“.
Um double
aufzurufen, klicken Sie einfach auf die double
Schaltfläche.
Um divide
aufzurufen, geben Sie einen Wert für params.divisor
in das Feld ein und klicken Sie dann auf die Schaltfläche divide
.
Bei jeder dieser Interaktionen wird ein neuer Vorgang erstellt, der unter dem Vertrag aufgeführt wird, und Sie können nach jedem Vorgang den aktualisierten Status des Vertragsspeichers sehen.
In diesem Vertrag betonen wir das Konzept der Speicherung mit der Zeile self.data.storedValue = value
. self.data
ist hier die von uns vertragsgemäße Speicherung gemeint. Hier behalten wir den Status unseres Vertrags bei: ein einzelner Parameter mit dem Namen storedValue
.
Wir haben auch mehrere Einstiegspunkte in diesem Vertrag. Einstiegspunkte sind im Wesentlichen öffentliche Funktionen, die es externen Parteien ermöglichen, mit dem Vertrag zu interagieren. Hier ermöglichen unsere Einstiegspunkte die Änderung des storedValue
auf verschiedene Arten. Wir können ihn durch einen neuen Wert ersetzen, verdoppeln oder durch einen bestimmten Teiler dividieren.
Betrachten wir als Nächstes das von uns eingerichtete Testszenario. Wir erstellen eine Instanz unseres Vertrags mit dem Anfangswert 12
für storedValue
. Anschließend rufen wir unsere Einstiegspunkte auf, um den Wert von storedValue
auf verschiedene Weise zu ändern und die Ergebnisse zu validieren.
Die Möglichkeit, Werte im Speicher eines Vertrags zu speichern und zu aktualisieren, ist für den Aufbau intelligenter Tezos-Verträge von grundlegender Bedeutung. Es ermöglicht die Persistenz von Daten über verschiedene Interaktionen mit dem Vertrag hinweg. Ganz gleich, ob es darum geht, die Guthaben in einem Token-Vertrag aufrechtzuerhalten, Benutzerinformationen in einer dezentralen Anwendung zu speichern oder den Status eines Spiels in der Blockchain festzuhalten, die Speicherung ist eine Kernfunktion, die diese Funktionalitäten ermöglicht.
Der Speicher in einem Smart Contract kann einfache Werte wie Ganzzahlen, Zeichenfolgen und Boolesche Werte oder komplexere Datenstrukturen wie Listen, Karten und benutzerdefinierte Objekte enthalten. Dadurch können wir komplexe Logik- und Zustandsübergänge in unsere Verträge einbauen.
In der nächsten Lektion bauen wir weiter auf diesen Kernkonzepten auf, führen komplexere Berechnungen in Smart Contracts ein und beginnen mit der Arbeit mit komplexeren Datentypen im Speicher unseres Vertrags. Bleiben Sie also dran und denken Sie daran: Übung macht den Meister. Zögern Sie nicht, mit dem Code zu experimentieren, Änderungen vorzunehmen und die Ergebnisse zu beobachten!