Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 3: Runtime-API

Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 3: Runtime-API

Dit is het derde deel in een reeks educatieve artikelen over het creëren van slimme contracten in Python op het Ontology blockchain-netwerk. In eerdere artikelen maakten we kennis met

  1. Blockchain en blok-API
  2. Opslag-API.

Nu je een idee hebt hoe je de juiste persistente opslag-API kunt aanroepen bij het ontwikkelen van een slim contract met behulp van Python op het Ontology-netwerk, gaan we verder met het leren gebruiken Runtime-API (Contractuitvoering-API). De Runtime API heeft 8 gerelateerde API's die gemeenschappelijke interfaces bieden voor contractuitvoering en ontwikkelaars helpen gegevens op te halen, te transformeren en te valideren.

Hieronder vindt u een korte beschrijving van de 8 API-gegevens:

Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 3: Runtime-API

Laten we eens nader bekijken hoe we de 8 API-gegevens kunnen gebruiken. Voordien kunt u een nieuw contract aanmaken in de Ontology smart contract development tool SmartX en volg de onderstaande instructies.

Hoe de Runtime-API te gebruiken

Er zijn twee manieren om te importeren Runtime-API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Het Ontology-pad bevat de nieuw toegevoegde API's. De onderstaande regels importeren de API-gegevens.

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

API op de hoogte stellen

De Notify-functie zendt de gebeurtenis door het hele netwerk uit. In het onderstaande voorbeeld retourneert de Notify-functie de hexadecimale tekenreeks “hallowoord” en zendt deze door het hele netwerk uit.

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

Dit kun je zien in de logs:

Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 3: Runtime-API

GetTime-API

De GetTime-functie retourneert de huidige tijdstempel, die de Unix-tijd retourneert waarop de functie werd aangeroepen. De meeteenheid is de tweede.

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

GetCurrentBlockHash-API

De functie GetCurrentBlockHash retourneert de hash van het huidige blok.

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

Serialiseren en deserialiseren

Dit is een paar serialisatie- en deserialisatiefuncties. De functie Serialize converteert een object naar een bytearray-object, en de functie Deserialize converteert een bytearray naar het originele object. In het onderstaande codevoorbeeld worden de binnenkomende parameters geconverteerd en opgeslagen in de permanente opslag van het contract. Het haalt ook gegevens op uit de permanente opslag van het contract en transformeert deze in het originele object.

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 en AdresToBase58

Dit paar adresvertaalfuncties. De functie Base58ToAddress converteert een met base58 gecodeerd adres naar een bytearray-adres, en AddressToBase58 converteert een bytearray-adres naar een met base58 gecodeerd adres.

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)

Controleer getuige

De functie CheckWitness(fromAcct) heeft twee functionaliteiten:

  • Controleer of de aanroeper van de huidige functie fromAcct is. Indien ja (dat wil zeggen, handtekeningverificatie geslaagd), retourneert de functie.
  • Controleer of het object dat de huidige functie aanroept een contract is. Als het een contract is en de functie vanuit het contract wordt uitgevoerd, is de verificatie geslaagd. Dat wil zeggen: controleer of fromAcct de retourwaarde is van GetCallingScriptHash(). De functie GetCallingScriptHash() kan de contracthashwaarde van het huidige slimme contract overnemen.

GetCallingScriptHash():

Meer op 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

Meer informatie vindt u op Guthub. In het volgende artikel zullen we introduceren Native APIom te leren hoe u activa kunt overdragen in slimme contracten van Ontology.

Het artikel is door de redactie vertaald Hashrate en aandelen vooral voor OntologyRusland.

Ben je een ontwikkelaar? Word lid van onze technische gemeenschap op Discord. Kijk ook eens naar Ontwikkelaarscentrum Ontologie, je kunt daar meer tools, documentatie en nog veel meer vinden.

Open taken voor ontwikkelaars. Voltooi de taak en ontvang een beloning.

Van toepassing zijn voor het Ontology talentenprogramma voor studenten

Ontologie

Ontologie website - GitHub - Discord - Telegram Russisch - Twitter - Reddit

Bron: www.habr.com

Voeg een reactie