ProHoster > Blog > administracja > 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
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:
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:
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
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.
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.
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.