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

  1. Blockchain- und Block-API
  2. Speicher-API.

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:

So schreiben Sie einen Smart Contract in Python im Ontology-Netzwerk. Teil 3: Laufzeit-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:

So schreiben Sie einen Smart Contract in Python im Ontology-Netzwerk. Teil 3: Laufzeit-API

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.

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

Serialisieren und Deserialisieren

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.

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)

Überprüfen Sie den Zeugen

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.

GetCallingScriptHash():

Mehr auf Guthub

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.

Offene Aufgaben für Entwickler. Schließen Sie die Aufgabe ab – erhalten Sie eine Belohnung.

anwenden für das Ontologie-Talentprogramm für Studierende

Ontologie

Ontologie-Website - GitHub - Discord - Telegramm Russisch - Twitter - Reddit

Source: habr.com

Kommentar hinzufügen