Sådan skriver du en smart kontrakt i Python på Ontology-netværket. Del 3: Runtime API

Sådan skriver du en smart kontrakt i Python på Ontology-netværket. Del 3: Runtime API

Dette er del 3 af en række tutorials om at skabe smarte kontrakter i Python på Ontology blockchain-netværket. I tidligere artikler har vi set

  1. Blockchain & Block API
  2. Storage API.

Nu hvor du har en idé om, hvordan du kalder den passende persistente storage API, når du udvikler en smart kontrakt med Python på Ontology-netværket, lad os gå videre til at lære, hvordan man bruger Runtime API (Contract Execution API). Runtime API'en har 8 relaterede API'er, der giver fælles grænseflader til kontraktudførelse og hjælper udviklere med at få, transformere og validere data.

Nedenfor er en kort beskrivelse af data 8 API:

Sådan skriver du en smart kontrakt i Python på Ontology-netværket. Del 3: Runtime API

Lad os se nærmere på, hvordan man bruger disse 8 API'er. Inden da kan du oprette en ny kontrakt i Ontologys smarte kontraktudviklingsværktøj SmartX og følg instruktionerne nedenfor.

Sådan bruger du Runtime API

Der er to måder at importere på Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ontologistien indeholder nyligt tilføjede API'er. Linjerne 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

Giv besked til API

Meddelelsesfunktionen udsender begivenheden i hele netværket. I eksemplet nedenfor vil funktionen Notify returnere "hej ord" hex-strengen og udsende den i hele netværket.

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

Du kan se dette i loggene:

Sådan skriver du en smart kontrakt i Python på Ontology-netværket. Del 3: Runtime API

GetTime API

Funktionen GetTime returnerer det aktuelle tidsstempel, som returnerer det Unix-tidspunkt, hvor funktionen blev kaldt. Måleenheden er den anden.

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

GetCurrentBlockHash API

Funktionen GetCurrentBlockHash returnerer hashen for den aktuelle blok.

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

Serialiser og deserialiser

Dette er et par serialiserings- og deserialiseringsfunktioner. Funktionen Serialize konverterer et objekt til et bytearray-objekt, og funktionen Deserialize konverterer et bytearray til dets oprindelige objekt. Følgende eksempelkode konverterer indgående parametre og gemmer dem i kontraktens vedvarende lager. Den henter også dataene fra kontraktens vedvarende lagring og konverterer dem til det originale 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

Dette par adresseoversættelsesfunktioner. Base58ToAddress-funktionen 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)

Tjek vidne

CheckWitness(fromAcct)-funktionen har to funktioner:

  • Bekræft, om objektet, der kalder den aktuelle funktion, er fra Acct. Hvis ja (det vil sige signaturbekræftelse bestået), vender funktionen tilbage.
  • Tjek, om objektet, der kalder den aktuelle funktion, er en kontrakt. Hvis det er en kontrakt, og funktionen udføres fra kontrakten, er verifikationen bestået. Det vil sige, kontroller, om fromAcct er returværdien af ​​GetCallingScriptHash(). GetCallingScriptHash()-funktionen kan tage kontrakt-hashværdien af ​​den aktuelle smarte kontrakt.

GetCallingScriptHash():

Mere 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

Mere information kan findes på Guthub. I den næste artikel vil vi præsentere Native APIat lære at overføre aktiver i Ontology smarte kontrakter.

Artiklen er oversat af redaktionen Hashrate & Aktier især for OntologiRusland.

Er du udvikler? Tilmeld dig vores tech-fællesskab på Discord. Tag også et kig på Udviklercenter Ontologi for flere værktøjer, dokumentation og mere.

Åbne opgaver for udviklere. Luk opgaven - få en belønning.

ansøge for talentprogrammet Ontologi for studerende

Ontologi

Ontologi hjemmesideGitHubDiscordTelegram russiskTwitter Reddit

Kilde: www.habr.com

Tilføj en kommentar