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

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

Dette er den tredje delen i en serie pedagogiske artikler om å lage smarte kontrakter i Python på Ontology blockchain-nettverket. I tidligere artikler ble vi kjent med

  1. Blockchain & Block API
  2. Lagrings-API.

Nå som du har en ide om hvordan du kan kalle det passende vedvarende lagrings-APIet når du utvikler en smart kontrakt med Python på Ontology-nettverket, la oss gå videre til å lære hvordan du bruker Runtime API (Contract Execution API). Runtime API har 8 relaterte APIer som gir felles grensesnitt for kontraktsutførelse og hjelper utviklere med å hente, transformere og validere data.

Nedenfor er en kort beskrivelse av de 8 API-dataene:

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

La oss se nærmere på hvordan du bruker 8 API-dataene. Før dette kan du opprette en ny kontrakt i Ontologys smart kontraktutviklingsverktøy SmartX og følg instruksjonene nedenfor.

Slik bruker du Runtime API

Det er to måter å importere på Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ontologistien inneholder de nylig lagt til APIene. Linjene nedenfor importerer API-dataene.

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

Varsle API

Varsle-funksjonen kringkaster hendelsen over hele nettverket. I eksemplet nedenfor vil varsle-funksjonen returnere den sekskantede strengen "hei ord" og kringkaste den over hele nettverket.

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

Du kan se dette i loggene:

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

GetTime API

GetTime-funksjonen returnerer gjeldende tidsstempel, som returnerer Unix-tidspunktet funksjonen ble kalt. Måleenheten er andre.

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

GetCurrentBlockHash API

GetCurrentBlockHash-funksjonen returnerer hashen til gjeldende blokk.

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

Serialiser og deserialiser

Dette er et par serialiserings- og deserialiseringsfunksjoner. Serialize-funksjonen konverterer et objekt til et bytearray-objekt, og Deserialize-funksjonen konverterer en bytearray til det originale objektet. Kodeeksemplet nedenfor konverterer innkommende parametere og lagrer dem i kontraktens vedvarende lagring. Den henter også data fra kontraktens vedvarende lagring og transformerer dem til det opprinnelige objektet.

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

Dette paret med adresseoversettelsesfunksjoner. Base58ToAddress-funksjonen konverterer en base58-kodet adresse til en bytearray-adresse, og AddressToBase58 konverterer en bytearray-adresse 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)

Sjekk vitne

CheckWitness(fromAcct)-funksjonen har to funksjoner:

  • Bekreft om gjeldende funksjons oppringer er fra Acct. Hvis ja (det vil si at signaturverifiseringen er bestått), returnerer funksjonen.
  • Sjekk om objektet som kaller gjeldende funksjon er en kontrakt. Hvis det er en kontrakt og funksjonen utføres fra kontrakten, er verifiseringen bestått. Det vil si, kontroller om fromAcct er returverdien til GetCallingScriptHash(). GetCallingScriptHash()-funksjonen kan ta kontrakt-hash-verdien til gjeldende smartkontrakt.

GetCallingScriptHash():

Mer 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 finner du på Guthub. I neste artikkel vil vi introdusere Innfødt APIfor å lære hvordan du overfører eiendeler i Ontology smarte kontrakter.

Artikkelen er oversatt av redaksjonen Hashrate og aksjer spesielt for OntologyRussia.

Er du en utvikler? Bli med i vårt tekniske fellesskap på Discord. Ta også en titt på Utviklersenter Ontologi, du kan finne flere verktøy, dokumentasjon og mye mer der.

Åpne oppgaver for utviklere. Fullfør oppgaven og få en belønning.

Søke om for talentprogrammet Ontologi for studenter

ontologi

Ontologi nettsted - GitHub - Discord - Telegram russisk - Twitter - Reddit

Kilde: www.habr.com

Legg til en kommentar