Jak napisać inteligentny kontrakt w Pythonie w sieci Ontology. Część 3: API środowiska uruchomieniowego

Jak napisać inteligentny kontrakt w Pythonie w sieci Ontology. Część 3: API środowiska uruchomieniowego

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

  1. Blockchain i API blokowania
  2. API pamięci masowej.

Teraz, gdy masz już pomysł, jak wywołać odpowiednie API pamięci trwałej podczas opracowywania inteligentnego kontraktu przy użyciu Pythona w sieci Ontology, przejdźmy do nauki korzystania Interfejs API środowiska wykonawczego (API realizacji kontraktu). Runtime API ma 8 powiązanych interfejsów API, które zapewniają wspólne interfejsy do realizacji kontraktów i pomagają programistom pobierać, przekształcać i weryfikować dane.

Poniżej znajduje się krótki opis 8 danych API:

Jak napisać inteligentny kontrakt w Pythonie w sieci Ontology. Część 3: API środowiska uruchomieniowego

Przyjrzyjmy się bliżej sposobowi wykorzystania danych API 8. Wcześniej możesz utworzyć nowy kontrakt w narzędziu do tworzenia inteligentnych kontraktów Ontology SmartX i postępuj zgodnie z poniższymi instrukcjami.

Jak korzystać z API środowiska wykonawczego

Istnieją dwa sposoby importowania Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ścieżka Ontology zawiera nowo dodane interfejsy API. Poniższe linie importują dane API.

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

Powiadom API

Funkcja Notify rozgłasza wydarzenie w całej sieci. W poniższym przykładzie funkcja Notify zwróci ciąg szesnastkowy „słowo witaj” i roześle go w całej sieci.

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

Można to zobaczyć w logach:

Jak napisać inteligentny kontrakt w Pythonie w sieci Ontology. Część 3: API środowiska uruchomieniowego

API GetTime

Funkcja GetTime zwraca bieżący znacznik czasu, który zwraca czas uniksowy, o którym funkcja została wywołana. Jednostka miary jest druga.

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

API GetCurrentBlockHash

Funkcja GetCurrentBlockHash zwraca hash bieżącego bloku.

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

Serializacja i deserializacja

Jest to para funkcji serializacji i deserializacji. Funkcja Serialize konwertuje obiekt na obiekt bajtowy, a funkcja Deserialize konwertuje obiekt bajtowy na obiekt oryginalny. Poniższy przykładowy kod konwertuje przychodzące parametry i przechowuje je w trwałym magazynie kontraktu. Pobiera także dane z trwałego magazynu umowy i przekształca je w obiekt oryginalny.

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 i AddressToBase58

Ta para funkcji translacji adresów. Funkcja Base58ToAddress konwertuje adres zakodowany w formacie base58 na adres w formacie bajtowym, a AddressToBase58 konwertuje adres w formacie bajtowym na adres zakodowany w formacie base58.

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)

Sprawdź Świadka

Funkcja CheckWitness(fromAcct) ma dwie funkcje:

  • Sprawdź, czy wywołującym bieżącą funkcję jest fromAcct. Jeśli tak (tzn. weryfikacja podpisu przebiegła pomyślnie), funkcja zwraca.
  • Sprawdź, czy obiekt wywołujący bieżącą funkcję jest kontraktem. Jeżeli jest to kontrakt i funkcja jest realizowana z kontraktu, to weryfikacja przebiega pomyślnie. Oznacza to, że sprawdź, czy fromAcct jest wartością zwracaną przez GetCallingScriptHash(). Funkcja GetCallingScriptHash() może przyjąć wartość skrótu kontraktu bieżącego inteligentnego kontraktu.

GetCallingScriptHash():

Więcej na temat 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

Więcej informacji można znaleźć na Guthub. W następnym artykule przedstawimy Natywny interfejs APIaby dowiedzieć się, jak przenosić zasoby w inteligentnych kontraktach Ontology.

Artykuł został przetłumaczony przez redakcję Hashrate i udziały szczególnie dla OntologyRosja.

jesteś programistą? Dołącz do naszej społeczności technicznej pod adresem Discord. Także przyjrzyj się Centrum programistów Ontology, znajdziesz tam więcej narzędzi, dokumentację i wiele więcej.

Otwarte zadania dla programistów. Wykonaj zadanie i odbierz nagrodę.

Zastosować w ramach programu talentów Ontology dla studentów

Ontologia

Witryna internetowa ontologii - GitHub - Discord - Telegram rosyjski - Twitter - Reddit

Źródło: www.habr.com

Dodaj komentarz