ProHoster > Bloc > Administració > Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 3: API d'execució
Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 3: API d'execució
Aquesta és la tercera part d'una sèrie d'articles educatius sobre la creació de contractes intel·ligents en Python a la xarxa de blockchain d'Ontology. En articles anteriors ens vam familiaritzar
Ara que teniu una idea de com trucar a l'API d'emmagatzematge persistent adequada quan desenvolupeu un contracte intel·ligent mitjançant Python a la xarxa d'Ontology, passem a aprendre a utilitzar-lo. API d'execució (API d'execució de contractes). L'API Runtime té 8 API relacionades que proporcionen interfícies comunes per a l'execució de contractes i ajuden els desenvolupadors a recuperar, transformar i validar dades.
A continuació es mostra una breu descripció de les 8 dades de l'API:
Fem una ullada més de prop a com utilitzar les dades de l'API 8. Abans d'això, podeu crear un nou contracte a l'eina de desenvolupament de contracte intel·ligent d'Ontology SmartX i seguiu les instruccions següents.
Com utilitzar l'API Runtime
Hi ha dues maneres d'importar API d'execució: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. La ruta d'ontologia conté les API recentment afegides. Les línies següents importen les dades de l'API.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
Notificar a l'API
La funció Notificar emet l'esdeveniment a tota la xarxa. A l'exemple següent, la funció Notificar retornarà la cadena hexadecimal "hola paraula" i l'emetrà a tota la xarxa.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")
Això ho podeu veure als registres:
API GetTime
La funció GetTime retorna la marca de temps actual, que retorna l'hora Unix en què es va cridar la funció. La unitat de mesura és la segona.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
API GetCurrentBlockHash
La funció GetCurrentBlockHash retorna el hash del bloc actual.
Aquest és un parell de funcions de serialització i deserialització. La funció Serialize converteix un objecte en un objecte bytearray, i la funció Deserialize converteix un bytearray a l'objecte original. La mostra de codi següent converteix els paràmetres entrants i els emmagatzema a l'emmagatzematge persistent del contracte. També recupera dades de l'emmagatzematge persistent del contracte i les transforma en l'objecte original.
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
Aquest parell de funcions de traducció d'adreces. La funció Base58ToAddress converteix una adreça codificada en base58 en una adreça bytearray, i AddressToBase58 converteix una adreça bytearray en una adreça codificada en base58.
La funció CheckWitness(fromAcct) té dues funcionalitats:
Verifiqueu si la persona que truca la funció actual és fromAcct. Si sí (és a dir, la verificació de la signatura s'ha passat), la funció torna.
Comproveu si l'objecte que crida la funció actual és un contracte. Si es tracta d'un contracte i la funció s'executa des del contracte, s'aprova la verificació. És a dir, verifiqueu si fromAcct és el valor de retorn de GetCallingScriptHash(). La funció GetCallingScriptHash() pot prendre el valor hash del contracte del contracte intel·ligent actual.
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return res
Podeu trobar més informació a Guthub. En el proper article us presentarem API nativaper aprendre a transferir actius als contractes intel·ligents d'Ontology.
L'article ha estat traduït pels editors Hashrate i comparticions especialment per a Ontologia Rússia.
Ets desenvolupador? Uneix-te a la nostra comunitat tecnològica a Discòrdia. A més, fes-hi una ullada Centre de desenvolupadors Ontologia per a més eines, documentació i molt més.