ProHoster > Blog > Verwaltung > So schreiben Sie einen Smart Contract in Python im Ontology-Netzwerk. Teil 3: Laufzeit-API
So schreiben Sie einen Smart Contract in Python im Ontology-Netzwerk. Teil 3: Laufzeit-API
Dies ist Teil 3 einer Reihe von Tutorials zum Erstellen intelligenter Verträge in Python im Ontology-Blockchain-Netzwerk. In früheren Artikeln haben wir gesehen
Nachdem Sie nun eine Vorstellung davon haben, wie Sie bei der Entwicklung eines Smart Contracts mit Python im Ontology-Netzwerk die entsprechende persistente Speicher-API aufrufen, lernen wir deren Verwendung kennen Laufzeit-API (Vertragsausführungs-API). Die Runtime-API verfügt über 8 verwandte APIs, die gemeinsame Schnittstellen für die Vertragsausführung bereitstellen und Entwicklern beim Abrufen, Transformieren und Validieren von Daten helfen.
Nachfolgend finden Sie eine kurze Beschreibung der Data 8-API:
Schauen wir uns die Verwendung dieser 8 APIs genauer an. Zuvor können Sie im Smart-Contract-Entwicklungstool von Ontology einen neuen Vertrag erstellen SmartX und befolgen Sie die nachstehenden Anweisungen.
So verwenden Sie die Runtime-API
Es gibt zwei Möglichkeiten zum Importieren Laufzeit-API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Der Ontologiepfad enthält neu hinzugefügte APIs. Die folgenden Zeilen importieren die API-Daten.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
API benachrichtigen
Die Notify-Funktion sendet das Ereignis im gesamten Netzwerk. Im folgenden Beispiel gibt die Notify-Funktion die Hex-Zeichenfolge „Hallo Wort“ zurück und sendet sie im gesamten Netzwerk.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")
Sie können dies in den Protokollen sehen:
GetTime-API
Die GetTime-Funktion gibt den aktuellen Zeitstempel zurück, der die Unix-Zeit zurückgibt, zu der die Funktion aufgerufen wurde. Die Maßeinheit ist die Sekunde.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
GetCurrentBlockHash-API
Die Funktion GetCurrentBlockHash gibt den Hash des aktuellen Blocks zurück.
Dies ist ein Paar Serialisierungs- und Deserialisierungsfunktionen. Die Serialize-Funktion konvertiert ein Objekt in ein Bytearray-Objekt und die Deserialize-Funktion konvertiert ein Bytearray in sein ursprüngliches Objekt. Der folgende Beispielcode konvertiert die eingehenden Parameter und speichert sie im dauerhaften Speicher des Vertrags. Außerdem werden die Daten aus dem persistenten Speicher des Vertrags abgerufen und in das Originalobjekt konvertiert.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.System.Storage import Put, Get, GetContext
def Main(operation, args):
if operation == 'serialize_to_bytearray':
data = args[0]
return serialize_to_bytearray(data)
if operation == 'deserialize_from_bytearray':
key = args[0]
return deserialize_from_bytearray(key)
return False
def serialize_to_bytearray(data):
sc = GetContext()
key = "1"
byte_data = Serialize(data)
Put(sc, key, byte_data)
def deserialize_from_bytearray(key):
sc = GetContext()
byte_data = Get(sc, key)
data = Deserialize(byte_data)
return data
Base58ToAddress und AddressToBase58
Dieses Paar von Adressübersetzungsfunktionen. Die Funktion „Base58ToAddress“ konvertiert eine Base58-codierte Adresse in eine Bytearray-Adresse und AddressToBase58 konvertiert eine Bytearray-Adresse in eine Base58-codierte Adresse.
Die CheckWitness(fromAcct)-Funktion verfügt über zwei Funktionen:
Überprüfen Sie, ob das Objekt, das die aktuelle Funktion aufruft, fromAcct ist. Wenn ja (d. h. die Signaturüberprüfung wurde bestanden), kehrt die Funktion zurück.
Überprüfen Sie, ob das Objekt, das die aktuelle Funktion aufruft, ein Vertrag ist. Wenn es sich um einen Vertrag handelt und die Funktion aus dem Vertrag ausgeführt wird, ist die Überprüfung bestanden. Überprüfen Sie also, ob fromAcct der Rückgabewert von GetCallingScriptHash() ist. Die Funktion GetCallingScriptHash() kann den Vertrags-Hash-Wert des aktuellen Smart-Vertrags übernehmen.
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return res
Weitere Informationen finden Sie unter Guthub. Im nächsten Artikel stellen wir vor Native APIErfahren Sie, wie Sie Vermögenswerte in Ontology-Smart-Verträgen übertragen.
Der Artikel wurde von der Redaktion übersetzt Hashrate und Anteile speziell für OntologyRussia.
Sind Sie Entwickler? Treten Sie unserer Tech-Community bei Discord. Werfen Sie auch einen Blick auf Entwicklerzentrum Ontology für weitere Tools, Dokumentation und mehr.