Wie schreibe ich einen intelligenten Vertrag mit Python über Ontologie? Teil 3: Laufzeit-API

Bild

Einführung


Zuvor habe ich den Ontology Smart Contract in eingeführt
Teil 1: Blockchain & Block API und
Teil 2: Speicher-API
Wenn Sie nun eine Idee haben, wie Sie die relevante API für dauerhaften Speicher bei der Entwicklung eines Python-Smart-Vertrags für Ontology aufrufen können, fahren Sie mit der Laufzeit-API (Contract Execution API) fort. Die Runtime-API verfügt über 8 verwandte APIs, die allgemeine Schnittstellen für die Vertragsausführung bereitstellen und Entwicklern helfen, Daten abzurufen, zu konvertieren und zu validieren. Hier ist eine kurze Beschreibung dieser 8 APIs:

Bild

Schauen wir uns die Verwendung dieser 8 APIs genauer an. Zuvor können Sie im Ontology Smart Contract Development Tool SmartX einen neuen Vertrag erstellen und die folgenden Anweisungen befolgen. Wie üblich werde ich am Ende des Artikels einen Link zum Quellcode bereitstellen.

Verwendung der Laufzeit-API


Es gibt zwei Pfade zum Importieren der Runtime-API: ontology.interop.System.Runtime und ontology.interop.Ontology.Runtime . Der Ontologiepfad enthält neu hinzugefügte APIs. Die folgenden Zeilen importieren diese APIs.

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash 

API benachrichtigen


Die Benachrichtigungsfunktion sendet Ereignisse an das gesamte Netzwerk. Im folgenden Beispiel gibt die Benachrichtigungsfunktion eine Hex-Zeichenfolge "Hallo Welt" zurück und sendet sie an das gesamte Netzwerk.

 from ontology.interop.System.Runtime import Notify def demo(): Notify("hello world") 

Sie können es in Protokollen anzeigen:

Bild

GetTime API


Die GetTime- Funktion gibt den aktuellen Zeitstempel zurück, der die Unix-Zeit zurückgibt, zu der die Funktion aufgerufen wurde. Die Einheit ist an zweiter Stelle.

 from ontology.interop.System.Runtime import GetTime def demo(): time=GetTime() return time # return a uint num 

GetCurrentBlockHash API


Die GetCurrentBlockHash- Funktion gibt den Hash des aktuellen Blocks zurück.

 from ontology.interop.Ontology.Runtime import GetCurrentBlockHash def demo(): block_hash = GetCurrentBlockHash() return block_hash 

Serialisieren & Deserialisieren


Dies ist ein Paar von Serialisierungs- und Deserialisierungsfunktionen. Die Serialize- Funktion serialisiert ein Objekt in ein Byte-Array-Objekt, und die Deserialize- Funktion deserialisiert das Byte-Array in das ursprüngliche Objekt. Das folgende Codebeispiel implementiert die Serialisierung eingehender Parameter und speichert sie im dauerhaften Speicher des Vertrags. Außerdem werden Daten aus dem dauerhaften Speicher des Vertrags extrahiert und deserialisiert.

 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 & AddressToBase58


Dies ist ein Paar von Adresskonvertierungsfunktionen. Die Base58ToAddress- Funktion konvertiert die Base58-codierte Adresse in eine Byte-Array-Formularadresse, und AddressToBase58 konvertiert die Byte-Array-Formularadresse in eine Base58-codierte Adresse.

 from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58 def demo(): base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn" addr=Base58ToAddress(base58_addr) Log(addr) base58_addr=AddressToBase58(addr) Log(base58_addr) 

Checkwitness


Die CheckWitness- Funktion (fromAcct) verfügt über zwei Funktionen:

  • Überprüfen Sie, ob der aktuelle Funktionsaufrufer fromAcct ist. Wenn ja (dh Signaturüberprüfung bestanden), kehrt die Funktion zurück.
  • Überprüfen Sie, ob der aktuelle Funktionsaufrufer ein Vertrag ist. Wenn es sich um einen Vertrag handelt und die Funktion aus dem Vertrag ausgeführt wird, wird 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 abrufen.

GetCallingScriptHash ():


Ontologie Python-Compiler

 from ontology.interop.System.Runtime import CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress def demo(): addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z") res=CheckWitness(addr) return res 

Das vollständige Tutorial finden Sie hier .

Zusammenfassung


In diesem Artikel habe ich die Runtime-API der Ontology-Blockchain vorgestellt, die im Smart-Vertrag von Ontology Python sehr wichtig ist. Im nächsten Artikel werden wir uns die native API ansehen, um zu untersuchen, wie Assets in intelligenten Ontology-Verträgen übertragen werden.



Dies ist ein offizielles Tutorial, das zuvor im Ontology Medium-Blog veröffentlicht wurde

Bist du ein Entwickler? Stellen Sie sicher, dass Sie unserer Tech-Community auf Discord beigetreten sind. Besuchen Sie auch das Developer Center auf unserer Website. Dort finden Sie Entwicklertools, Dokumentation und mehr.

Finden Sie die Ontologie woanders


Ontologie-Website
Github / Zwietracht
Telegramm Englisch / Russisch
Twitter / Reddit

Source: https://habr.com/ru/post/de470722/


All Articles