Hoe om 'n slim kontrak in Python op die Ontologie-netwerk te skryf. Deel 3: Runtime API

Hoe om 'n slim kontrak in Python op die Ontologie-netwerk te skryf. Deel 3: Runtime API

Dit is die 3de deel in 'n reeks opvoedkundige artikels oor die skep van slim kontrakte in Python op die Ontology blockchain-netwerk. In vorige artikels het ons kennis gemaak met

  1. Blockchain & Block API
  2. Berging API.

Noudat jy 'n idee het van hoe om die toepaslike aanhoudende berging API te noem wanneer jy 'n slim kontrak met Python op die Ontologie-netwerk ontwikkel, kom ons gaan voort om te leer hoe om te gebruik Runtime API (Kontraktuitvoering API). Die Runtime API het 8 verwante API's wat algemene koppelvlakke vir kontrakuitvoering verskaf en ontwikkelaars help om data te herwin, te transformeer en te valideer.

Hieronder is 'n kort beskrywing van die 8 API-data:

Hoe om 'n slim kontrak in Python op die Ontologie-netwerk te skryf. Deel 3: Runtime API

Kom ons kyk van naderby na hoe om die 8 API-data te gebruik. Voor dit kan u 'n nuwe kontrak skep in die Ontologie-slimkontrakontwikkelingsinstrument SmartX en volg die instruksies hieronder.

Hoe om die Runtime API te gebruik

Daar is twee maniere om in te voer Runtime API: ontology.interop.System.Runtime ΠΈ ontology.interop.Ontology.Runtime. Die Ontologie-pad bevat die nuut bygevoegde API's. Die reΓ«ls hieronder voer die API-data in.

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

Stel API in kennis

Die Notify-funksie saai die geleentheid deur die hele netwerk uit. In die voorbeeld hieronder sal die Notify-funksie die hex-string "hallo woord" terugstuur en dit regdeur die netwerk uitsaai.

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

Jy kan dit in die logs sien:

Hoe om 'n slim kontrak in Python op die Ontologie-netwerk te skryf. Deel 3: Runtime API

GetTime API

Die GetTime-funksie gee die huidige tydstempel terug, wat die Unix-tyd terugstuur waarop die funksie geroep is. Die eenheid van meting is tweede.

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

GetCurrentBlockHash API

Die GetCurrentBlockHash-funksie gee die hash van die huidige blok terug.

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

Serialiseer en deserialiseer

Dit is 'n paar serialisering- en deserialiseringsfunksies. Die Serialize-funksie skakel 'n voorwerp om na 'n bytearray-objek, en die Deserialize-funksie skakel 'n bytearray om na die oorspronklike voorwerp. Die kodevoorbeeld hieronder skakel die inkomende parameters om en stoor dit in die kontrak se aanhoudende berging. Dit haal ook data uit die kontrak se aanhoudende berging en omskep dit in die oorspronklike voorwerp.

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

Hierdie paar adresvertalingsfunksies. Die Base58ToAddress-funksie skakel 'n base58-gekodeerde adres om na 'n bytearray-adres, en AddressToBase58 skakel 'n bytearray-adres om na 'n base58-gekodeerde 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)

Kontroleer Getuie

Die CheckWitness (fromAcct) funksie het twee funksies:

  • Verifieer of die huidige funksie se oproeper van Rek is. Indien ja (dit wil sΓͺ, handtekeningverifikasie geslaag), keer die funksie terug.
  • Kyk of die objek wat die huidige funksie oproep 'n kontrak is. As dit 'n kontrak is en die funksie word vanaf die kontrak uitgevoer, dan word die verifikasie geslaag. Dit wil sΓͺ, verifieer of fromAcct die terugkeerwaarde van GetCallingScriptHash() is. Die GetCallingScriptHash()-funksie kan die kontrak-hash-waarde van die huidige slimkontrak neem.

GetCallingScriptHash():

Lees meer hieroor 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 inligting kan gevind word by Guthub. In die volgende artikel sal ons bekendstel Inheemse APIom te leer hoe om bates in Ontology-slimkontrakte oor te dra.

Die artikel is deur die redaksie vertaal Hashrate & Aandele veral vir OntologieRusland.

Is jy 'n ontwikkelaar? Sluit aan by ons tegnologie-gemeenskap by Onenigheid. Kyk ook na Ontwikkelaarsentrum Ontologie vir meer gereedskap, dokumentasie en meer.

Oop take vir ontwikkelaars. Maak die taak toe - kry 'n beloning.

Pas toe vir die Ontologie-talentprogram vir studente

Ontologie

Ontologie webwerf - GitHub - Onenigheid - Telegram Russies - Twitter - reddit

Bron: will.com

Voeg 'n opmerking