Hvordan skrive en smartkontrakt på Python i Ontology-nettverket. Del 3: Runtime API

Hvordan skrive en smartkontrakt på Python i Ontology-nettverket. Del 3: Runtime API

Dette er den 3. del af en serie af vejledende artikler om oprettelse af smart contracts i Python i Ontology blockchain-netværket. I de foregående artikler har vi gjort os bekendt med

  1. Blockchain & Block API
  2. Storage API.

Nu hvor du har en idé om, hvordan du kalder det relevante API til det permanente lager, når du udvikler en smart contract med Python i Ontology-netværket, lad os gå videre til at lære om, hvordan man bruger Runtime API (Contract Execution API). Runtime API har 8 relaterede API'er, som giver fælles interfaces til at udføre kontrakten og hjælper udviklere med at hente, transformere og verificere data.

Nedenfor er en kort beskrivelse af de 8 API'er:

Hvordan skrive en smartkontrakt på Python i Ontology-nettverket. Del 3: Runtime API

Lad os se nærmere på, hvordan man bruger de 8 API'er. Før dette kan du oprette en ny kontrakt i Ontology smart contract udviklingsværktøjet SmartX og følge de nedenstående instruktioner.

Sådan anvendes Runtime API

Der er to måder at importere Runtime API: ontology.interop.System.Runtime og ontology.interop.Ontology.Runtime. Ontology-stien indeholder nyligt tilføjede API'er. De følgende linjer importerer disse API'er.

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

Notify API

Notify-funktionen transmitterer en begivenhed på tværs af netværket. I det følgende eksempel vil Notify-funktionen returnere en hex-streng “hello world” og sende den over hele netværket.

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

Du kan se dette i loggene:

Hvordan skrive en smartkontrakt på Python i Ontology-nettverket. Del 3: Runtime API

GetTime API

GetTime-funktionen returnerer det aktuelle tidsstempel, som returnerer Unix-tidspunktet, hvornår funktionen blev kaldt. Måleenheden er sekunder.

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

GetCurrentBlockHash API

GetCurrentBlockHash-funktionen returnerer hash-værdien af den nuværende blok.

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

Serialize og Deserialize

Dette er et par funktioner til serialisering og deserialisering. Serialize-funktionen konverterer et objekt til et bytearray-objekt, mens Deserialize-funktionen konverterer bytearray til det oprindelige objekt. Det følgende kodeeksempel udfører konverteringen af indgående parametre og gemmer dem i det permanente lager af kontrakten. Det henter også data fra kontraktens permanente lager og konverterer dem til det oprindelige 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 og AddressToBase58

Disse to funksjonene konverterer adresser. Funksjonen Base58ToAddress konverterer en base58-kodet adresse til bytearray-format, mens AddressToBase58 konverterer en adresse i bytearray-format til en base58-kodet 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

Funksjonen CheckWitness(fromAcct) har to funksjoner:

  • Verifisere om den som kaller funksjonen er objektet fromAcct. Hvis ja (dvs. signaturen er godkjent), returneres funksjonen.
  • Sjekke om objektet som kaller funksjonen er et kontrakt. Hvis dette er en kontrakt og funksjonen utføres fra en kontrakt, er verifiseringen bestått. Det vil si, verifiser om fromAcct er returverdien fra GetCallingScriptHash(). Funksjonen GetCallingScriptHash() kan hente verdien av hashen til kontrakten i gjeldende smarte kontrakt.

GetCallingScriptHash():

Mer informasjon om 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

Mer informasjon kan bli funnet på Guthub. I den neste artikkelen vil vi presentere Native API, for å lære hvordan man overfører aktiva i Ontology smarte kontrakter.

Artikkelen ble oversatt av redaksjonen Hashrate&Shares spesielt for OntologyRussia.

Er du utvikler? Bli med i vårt tekniske fellesskap på Discord. I tillegg, ta en titt på Utviklersenteret Ontology, hvor du kan finne flere verktøy, dokumentasjon og mye mer.

Åpne oppgaver for utviklere. Lukk oppgaven – få belønning.

Send inn søknad til Ontology-talentsprogrammet for studenter

Ontology

Ontology-nettstedet — GitHub — Discord — Telegram Russian — Twitter — Reddit

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster