Hoe kinne jo in tûk kontrakt skriuwe yn Python op it Ontology-netwurk. Diel 3: Runtime API

Hoe kinne jo in tûk kontrakt skriuwe yn Python op it Ontology-netwurk. Diel 3: Runtime API

Dit is it 3e diel yn in searje edukative artikels oer it meitsjen fan tûke kontrakten yn Python op it Ontology blockchain netwurk. Yn eardere artikels makken wy kunde mei

  1. Blockchain & Block API
  2. Storage API.

No't jo in idee hawwe hoe't jo de passende persistente opslach API kinne neame by it ûntwikkeljen fan in tûk kontrakt mei Python op it Ontology-netwurk, litte wy trochgean mei it learen hoe't jo brûke Runtime API (Contract Execution API). De Runtime API hat 8 relatearre API's dy't mienskiplike ynterfaces leverje foar kontraktútfiering en ûntwikkelders helpe om gegevens op te heljen, te transformearjen en te falidearjen.

Hjirûnder is in koarte beskriuwing fan 'e 8 API-gegevens:

Hoe kinne jo in tûk kontrakt skriuwe yn Python op it Ontology-netwurk. Diel 3: Runtime API

Litte wy in tichterby besjen hoe't jo de 8 API-gegevens kinne brûke. Dêrfoar kinne jo in nij kontrakt oanmeitsje yn it Ontology-ark foar tûk kontraktûntwikkeling SmartX en folgje de ynstruksjes hjirûnder.

Hoe kinne jo de Runtime API brûke

D'r binne twa manieren om te ymportearjen Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. It Ontology-paad befettet de nij tafoege API's. De rigels hjirûnder ymportearje de API-gegevens.

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

Notify API

De Notify-funksje stjoert it evenemint út troch it heule netwurk. Yn it foarbyld hjirûnder sil de Notify-funksje de hex-string "hallo wurd" weromjaan en it troch it netwurk útstjoere.

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

Jo kinne dit sjen yn 'e logs:

Hoe kinne jo in tûk kontrakt skriuwe yn Python op it Ontology-netwurk. Diel 3: Runtime API

GetTime API

De funksje GetTime jout de aktuele tiidstempel werom, dy't de Unix-tiid weromjout wêrop de funksje oanroppen is. De ienheid fan mjitting is twadde.

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

GetCurrentBlockHash API

De funksje GetCurrentBlockHash jout de hash fan it aktive blok werom.

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

Serialisearje en deserialisearje

Dit is in pear serialisaasje- en deserialisaasjefunksjes. De funksje Serialize konvertearret in objekt nei in bytearray-objekt, en de Deserialize-funksje konvertearret in bytearray nei it orizjinele objekt. De koade hjirûnder konvertearret de ynkommende parameters en bewarret se yn 'e oanhâldende opslach fan it kontrakt. It hellet ek gegevens op fan 'e oanhâldende opslach fan it kontrakt en transformearret it yn it orizjinele 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 en AddressToBase58

Dit pear adres oersetting funksjes. De Base58ToAddress-funksje konvertearret in base58-kodearre adres nei in bytearray-adres, en AddressToBase58 konvertearret in bytearray-adres nei in base58-kodearre 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)

Kontrolearje tsjûge

De funksje CheckWitness (fromAcct) hat twa funksjonaliteit:

  • Kontrolearje as de beller fan 'e hjoeddeistige funksje fan Acct is. As ja (dat is, hantekening ferifikaasje trochjûn), jout de funksje werom.
  • Kontrolearje oft it objekt dat de aktuele funksje neamt in kontrakt is. As it in kontrakt is en de funksje wurdt útfierd út it kontrakt, dan wurdt de ferifikaasje trochjûn. Dat is, kontrolearje as fromAcct de weromwearde is fan GetCallingScriptHash (). De funksje GetCallingScriptHash() kin de kontrakthashwearde fan it hjoeddeiske smart kontrakt nimme.

GetCallingScriptHash():

Lês mear oer 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

Mear ynformaasje is te finen op Guthub. Yn it folgjende artikel sille wy yntrodusearje Native APIom te learen hoe't jo aktiva kinne oerdrage yn Ontology smart kontrakten.

It artikel is oerset troch de redaksje Hashrate & Shares spesjaal foar OntologyRuslân.

Binne jo in ûntwikkelder? Doch mei oan ús techmienskip by Untwerp. Sjoch ek ris op Developer Center Ontology, jo kinne dêr mear ark, dokumintaasje en folle mear fine.

Iepenje taken foar ûntwikkelders. Folje de taak en krije in beleanning.

Tapasse foar it talintprogramma Ontology foar studinten

Ontology

Ontology webside - GitHub - Untwerp - Telegram Ingelsk - Twitter - reddit

Boarne: www.habr.com

Add a comment