Wie man einen Smart Contract in Python im Ontology-Netzwerk schreibt. Teil 3: Runtime API

Wie man einen Smart Contract in Python im Ontology-Netzwerk schreibt. Teil 3: Runtime API

Dies ist der 3. Teil einer Reihe von Lehrartikeln über die Erstellung von Smart Contracts in Python im Ontology-Blockchain-Netzwerk. In den vorherigen Artikeln haben wir uns mit

  1. Blockchain & Block API
  2. Storage API.

Jetzt, da Sie eine Vorstellung davon haben, wie man die geeignete API für den permanenten Speicher bei der Entwicklung eines Smart Contracts mit Python im Ontology-Netzwerk aufruft, lassen Sie uns kennenlernen, wie man Runtime-API (Contract Execution API) verwendet. Die Runtime API hat 8 verwandte APIs, die allgemeine Schnittstellen für die Ausführung von Verträgen bereitstellen und den Entwicklern helfen, Daten zu erhalten, zu konvertieren und zu überprüfen.

Im Folgenden finden Sie eine kurze Beschreibung dieser 8 APIs:

Wie man einen Smart Contract in Python im Ontology-Netzwerk schreibt. Teil 3: Runtime API

Lassen Sie uns genauer untersuchen, wie diese 8 APIs verwendet werden. Zuvor können Sie einen neuen Vertrag im Ontology Smart Contract-Entwicklungstool erstellen SmartX und den folgenden Anweisungen folgen.

So verwenden Sie die Runtime API

Es gibt zwei Möglichkeiten, die Runtime API: ontology.interop.System.Runtime und ontology.interop.Ontology.Runtime. Der Ontology-Pfad enthält die neu hinzugefügten 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

Notify API

Die Notify-Funktion sendet ein Ereignis über das gesamte Netzwerk. Im folgenden Beispiel wird die Notify-Funktion die hex-Zeichenfolge „hello world“ zurückgeben und sie im gesamten Netzwerk verbreiten.

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

Sie können dies in den Protokollen sehen:

Wie man einen Smart Contract in Python im Ontology-Netzwerk schreibt. Teil 3: Runtime API

GetTime API

Die GetTime-Funktion gibt den aktuellen Zeitstempel zurück, der die Unix-Zeit darstellt, zu der die Funktion aufgerufen wurde. Die Einheit ist die Sekunde.

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

Serialize und Deserialize

Dies ist ein Paar von Funktionen zur Serialisierung und Deserialisierung. Die Serialize-Funktion konvertiert ein Objekt in ein Bytearray, während die Deserialize-Funktion ein Bytearray in das ursprüngliche Objekt zurückverwandelt. Das folgende Codebeispiel konvertiert die Eingabeparameter und speichert sie im permanenten Speicher des Vertrags. Es ruft auch Daten aus dem permanenten Speicher des Vertrags ab und konvertiert sie zurück in das ursprüngliche Objekt.

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 Funktionsmethoden wandelt Adressen um. Die Funktion Base58ToAddress wandelt eine kodierte Base58-Adresse in eine Adresse im bytearray-Format um, während AddressToBase58 eine Adresse im bytearray-Format in eine kodierte Base58-Adresse umwandelt.

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 Funktion CheckWitness(fromAcct) hat zwei Funktionalitäten:

  • Zu verifizieren, ob das Objekt, das die aktuelle Funktion aufruft, fromAcct ist. Wenn ja (d.h. die Signaturprüfung bestanden wurde), wird die Funktion zurückgegeben.
  • Zu überprüfen, ob das Objekt, das die aktuelle Funktion aufruft, ein Vertrag ist. Wenn es ein Vertrag ist und die Funktion aus diesem Vertrag aufgerufen wird, dann ist die Prüfung bestanden. Das heißt, zu verifizieren, ob fromAcct den Rückgabewert von GetCallingScriptHash() entspricht. Die Funktion GetCallingScriptHash() kann den Hash des aktuellen Smart Contracts zurückgeben.

GetCallingScriptHash():

Mehr dazu 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 auf Guthub. In dem nächsten Artikel werden wir Native API, um zu erlernen, wie man Vermögenswerte in Ontology-Smart Contracts überträgt.

Der Artikel wurde von der Redaktion Hashrate&Shares speziell für OntologyRussia übersetzt.

Sind Sie Entwickler? Treten Sie unserer technischen Gemeinschaft bei auf Discord. Schauen Sie auch in das Entwicklerzentrum Ontology, dort finden Sie weitere Werkzeuge, Dokumentation und vieles mehr.

Offene Aufgaben für Entwickler. Schließe die Aufgabe ab – erhalte eine Belohnung.

Bewerben für das Ontology Talentprogramm für Studenten

Ontology

Ontology-WebsiteGitHubDiscordTelegram RussischTwitter Reddit

Quelle: habr.com

60GB SSD 8Gb DDR4