ProHoster > Blog > Administración > Como escribir un contrato intelixente en Python na rede Ontology. Parte 3: API de execución
Como escribir un contrato intelixente en Python na rede Ontology. Parte 3: API de execución
Esta é a terceira parte dunha serie de artigos educativos sobre a creación de contratos intelixentes en Python na rede blockchain de Ontology. En artigos anteriores coñecémonos
Agora que tes unha idea de como chamar á API de almacenamento persistente adecuada ao desenvolver un contrato intelixente usando Python na rede Ontology, imos aprender a usar API de execución (API de execución de contratos). A API Runtime ten 8 API relacionadas que proporcionan interfaces comúns para a execución de contratos e axudan aos desenvolvedores a recuperar, transformar e validar datos.
A continuación móstrase unha breve descrición dos datos de 8 API:
Vexamos máis de cerca como usar os datos da API 8. Antes diso, pode crear un novo contrato na ferramenta de desenvolvemento de contratos intelixentes de Ontology SmartX e siga as instrucións a continuación.
Como usar a API Runtime
Hai dúas formas de importar API de execución: ontology.interop.System.Runtime и ontoloxía.interop.Ontoloxía.Execución. O camiño da Ontoloxía contén as API recén engadidas. As liñas de abaixo importan os datos da API.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
Notificar API
A función Notificar transmite o evento por toda a rede. No seguinte exemplo, a función Notificar devolverá a cadea hexadecimal "hola palabra" e emitirá por toda a rede.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")
Podes ver isto nos rexistros:
API GetTime
A función GetTime devolve a marca de tempo actual, que devolve a hora de Unix na que se chamou a función. A unidade de medida é a segunda.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
API GetCurrentBlockHash
A función GetCurrentBlockHash devolve o hash do bloque actual.
Este é un par de funcións de serialización e deserialización. A función Serialize converte un obxecto nun obxecto bytearray e a función Deserialize converte unha bytearray no obxecto orixinal. A mostra de código que aparece a continuación converte os parámetros entrantes e gárdaos no almacenamento persistente do contrato. Tamén recupera datos do almacenamento persistente do contrato e transfórmaos no obxecto orixinal.
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 e AddressToBase58
Este par de funcións de tradución de enderezos. A función Base58ToAddress converte un enderezo codificado base58 nun enderezo bytearray e AddressToBase58 converte un enderezo bytearray nun enderezo codificado base58.
A función CheckWitness(fromAcct) ten dúas funcións:
Verifique se a chamada da función actual é fromAcct. Se si (é dicir, a verificación de sinatura superada), a función devolve.
Comproba se o obxecto que chama a función actual é un contrato. Se se trata dun contrato e a función se executa a partir do contrato, a verificación pásase. É dicir, verifique se fromAcct é o valor de retorno de GetCallingScriptHash(). A función GetCallingScriptHash() pode tomar o valor hash do contrato do contrato intelixente 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
Podes atopar máis información en Guthub. No seguinte artigo imos presentar API nativapara aprender a transferir activos en contratos intelixentes de Ontology.
O artigo foi traducido polos editores Hashrate&Share especialmente para OntoloxíaRusia.
Vostede é un programador? Únete á nosa comunidade tecnolóxica en Discordia. Ademais, bótalle un ollo Centro de Desenvolvedores Ontoloxía para obter máis ferramentas, documentación e moito máis.