Jak napisać smart kontrakt w Pythonie w sieci Ontology. Część 3: API czasu wykonywania

Jak napisać smart kontrakt w Pythonie w sieci Ontology. Część 3: API czasu wykonywania

To jest trzecia część serii artykułów edukacyjnych na temat tworzenia smart kontraktów w Pythonie w ramach sieci blockchain Ontology. W poprzednich artykułach zapoznaliśmy się z

  1. Blockchain & Block API
  2. Storage API.

Teraz, gdy masz pojęcie o tym, jak wywołać odpowiednie API do przechowywania danych podczas tworzenia smart kontraktu w Pythonie w sieci Ontology, przejdźmy do zapoznania się z tym, jak używać Runtime API (API wykonania kontraktu). Runtime API ma 8 powiązanych API, które zapewniają wspólne interfejsy do wykonywania kontraktu i pomagają deweloperom uzyskiwać, przekształcać i weryfikować dane.

Poniżej znajduje się krótkie opis tych 8 API:

Jak napisać smart kontrakt w Pythonie w sieci Ontology. Część 3: API czasu wykonywania

Przyjrzyjmy się bliżej, jak używać tych 8 API. Zanim to zrobimy, możesz stworzyć nowy kontrakt w narzędziu do tworzenia smart kontraktów Ontology SmartX i postępować zgodnie z poniższymi instrukcjami.

Jak używać Runtime API

Istnieją dwa sposoby na importowanie Runtime API: ontology.interop.System.Runtime i ontology.interop.Ontology.Runtime. Ścieżka Ontology zawiera niedawno dodane API. Poniższe linie importują te API.

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

Notify API

Funkcja Notify transmituje zdarzenie w sieci. W poniższym przykładzie funkcja Notify zwróci łańcuch hex „hello world” i przekaże go przez całą sieć.

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

Możesz to zobaczyć w logach:

Jak napisać smart kontrakt w Pythonie w sieci Ontology. Część 3: API czasu wykonywania

GetTime API

Funkcja GetTime zwraca aktualny znacznik czasu, który zwraca czas Unix, w którym funkcja została wywołana. Jednostką pomiaru jest sekunda.

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

GetCurrentBlockHash API

Funkcja GetCurrentBlockHash zwraca hash aktualnego bloku.

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

Serialize i Deserialize

To para funkcji serializacji i deserializacji. Funkcja Serialize przekształca obiekt w obiekt bytearray, a funkcja Deserialize przekształca bytearray w pierwotny obiekt. Poniższy przykład kodu przekształca przychodzące parametry i zapisuje je w trwałej pamięci kontraktu. Wyciąga on również dane z trwałej pamięci kontraktu i przekształca je w pierwotny obiekt.

z ontologii.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
z ontologii.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 i AddressToBase58

Ta para funkcji konwersji adresów. Funkcja Base58ToAddress przekształca zakodowany adres base58 w adres w formie bytearray, a AddressToBase58 przekształca adres w formie bytearray w zakodowany adres base58.

z ontologii.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

Funkcja CheckWitness(fromAcct) ma dwie funkcjonalności:

  • Weryfikować, czy obiekt wywołujący bieżącą funkcję jest fromAcct. Jeśli tak (tj. podpis został zweryfikowany), funkcja zwraca wartość.
  • Sprawdzić, czy obiekt wywołujący bieżącą funkcję jest kontraktem. Jeśli jest to kontrakt i funkcja jest wywoływana z kontraktu, wtedy weryfikacja została zakończona. To znaczy, weryfikować, czy fromAcct odpowiada wartości GetCallingScriptHash(). Funkcja GetCallingScriptHash() może pobrać wartość hash kontraktu bieżącego smart kontraktu.

GetCallingScriptHash():

Więcej na Guthub

z ontologii.interop.System.Runtime import CheckWitness
z ontologii.interop.Ontology.Runtime import Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

Więcej informacji można znaleźć na Guthub. W następnym artykule przedstawimy Native API, aby nauczyć się, jak przekazywać aktywa w smart kontraktach Ontology.

Artykuł został przetłumaczony przez redakcję Hashrate&Shares specjalnie dla OntologyRussia.

Jesteś programistą? Dołącz do naszej społeczności technicznej na Discord. Ponadto zajrzyj do Centrum dewelopera Ontology, tam można znaleźć więcej narzędzi, dokumentację i wiele więcej.

Otwarte zadania dla programistów. Zamknij zadanie — zdobądź nagrodę.

Złożyć wniosek o program talentów Ontology dla studentów

Ontology

strona internetowa OntologyGitHubDiscordTelegram RosyjskiTwitter Reddit

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster