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

  1. Blockchain e Block API
  2. API de almacenamento.

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:

Como escribir un contrato intelixente en Python na rede Ontology. Parte 3: API de execución

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:

Como escribir un contrato intelixente en Python na rede Ontology. Parte 3: API de execución

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.

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

Serializar e deserializar

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.

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)

Comproba a testemuña

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.

GetCallingScriptHash():

Ler máis 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

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.

Tarefas abertas para desenvolvedores. Pecha a tarefa: obtén unha recompensa.

Solicitar para o programa de talento Ontology para estudantes

Ontoloxía

Páxina web de ontoloxía - GitHub - Discordia - Telegram ruso - chilro - Reddit

Fonte: www.habr.com

Engadir un comentario