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 dritte 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, wo Sie eine Vorstellung davon haben, wie Sie das passende API für dauerhaften Speicher bei der Entwicklung eines Smart Contracts mit Python im Ontology-Netzwerk aufrufen, lassen Sie uns kennenlernen, wie man Runtime API (Contract Execution API) verwendet. Die Runtime API bietet 8 verwandte APIs, die allgemeine Schnittstellen für die Ausführung von Verträgen bereitstellen und Entwicklern helfen, Daten zu erhalten, zu transformieren 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 darauf eingehen, wie Sie diese 8 APIs nutzen können. Bevor Sie beginnen, können Sie einen neuen Vertrag im Ontology-Smart-Contract-Entwicklungstool erstellen SmartX und den nachstehenden Anweisungen folgen.

So verwenden Sie die Runtime API

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

Notify API

Die Notify-Funktion überträgt ein Ereignis im gesamten Netzwerk. Im folgenden Beispiel gibt die Notify-Funktion den hexadezimalen String „hello world“ zurück und sendet ihn durch das gesamte Netzwerk.

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 Maßeinheit ist die Sekunde.

from ontology.interop.System.Runtime import GetTime
def demo():
    time=GetTime()
    return time # gibt eine uint-Zahl zurück

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

Serialize und Deserialize

Dies ist ein Paar von Funktionen für die Serialisierung und Deserialisierung. Die Serialize-Funktion wandelt ein Objekt in ein Byte-Array um, während die Deserialize-Funktion ein Byte-Array in das ursprüngliche Objekt zurückverwandelt. Das folgende Codebeispiel führt die Umwandlung der Eingabeparameter durch und speichert sie im permanenten Speicher des Vertrags. Außerdem werden Daten aus dem permanenten Speicher des Vertrags abgerufen und in das ursprüngliche Objekt umgewandelt.

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

Diese Funktion wird verwendet, um Adressen zu konvertieren. Die Funktion Base58ToAddress wandelt eine codierte Base58-Adresse in eine Adresse im Bytearray-Format um, und AddressToBase58 konvertiert eine Adresse im Bytearray-Format zurück in eine codierte Base58-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 Funktion CheckWitness(fromAcct) hat zwei Funktionen:

  • Überprüfen, ob das aufrufende Objekt fromAcct die Berechtigung hat. Wenn ja (d.h. die Signaturprüfung bestanden wurde), gibt die Funktion true zurück.
  • Prüfen Sie, ob das Objekt, das die aktuelle Funktion aufruft, ein Vertrag ist. Wenn es sich um einen Vertrag handelt und die Funktion von diesem Vertrag ausgeführt wird, wurde die Verifizierung bestanden. Das bedeutet, dass geprüft wird, ob das von fromAcct zurückgegebene Ergebnis GetCallingScriptHash() ist. Die Funktion GetCallingScriptHash() kann den Hashwert des aktuellen Smart Contracts abrufen.

GetCallingScriptHash():

Weitere Informationen finden Sie 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

Mehr Informationen finden Sie auf Guthub. In dem nächsten Artikel werden wir Native API, um zu lernen, wie man Vermögenswerte in Ontology Smart Contracts überträgt.

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

Sind Sie Entwickler? Treten Sie unserer technischen Gemeinschaft auf Discord. Außerdem schauen Sie in das Entwicklerzentrum von Ontology, wo Sie weitere Werkzeuge, Dokumentationen und vieles mehr finden können.

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

Bewerben Sie sich für das Ontology Talentprogramm für Studenten

Ontology

Ontology-WebsiteGitHubDiscordTelegram RussischTwitter Reddit

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster