Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de tempo de execução

Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de tempo de execução

Esta é a terceira parte de uma série de artigos educacionais sobre a criação de contratos inteligentes em Python na rede blockchain Ontology. Em artigos anteriores conhecemos

  1. API Blockchain e Bloco
  2. API de armazenamento.

Agora que você tem uma ideia de como chamar a API de armazenamento persistente apropriada ao desenvolver um contrato inteligente usando Python na rede Ontology, vamos aprender como usar API de tempo de execução (API de execução de contrato). A API Runtime possui 8 APIs relacionadas que fornecem interfaces comuns para execução de contratos e ajudam os desenvolvedores a recuperar, transformar e validar dados.

Abaixo está uma breve descrição dos 8 dados da API:

Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de tempo de execução

Vamos dar uma olhada mais de perto em como usar os 8 dados da API. Antes disso, você pode criar um novo contrato na ferramenta de desenvolvimento de contrato inteligente Ontology SmartX e siga as instruções abaixo.

Como usar a API de tempo de execução

Existem duas maneiras de importar API de tempo de execução: ontologia.interop.System.Runtime и ontologia.interop.Ontology.Runtime. O caminho Ontology contém as APIs recém-adicionadas. As linhas abaixo importam os dados 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 função Notify transmite o evento por toda a rede. No exemplo abaixo, a função Notify retornará a string hexadecimal “hello word” e a transmitirá por toda a rede.

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

Você pode ver isso nos registros:

Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de tempo de execução

API GetTime

A função GetTime retorna o carimbo de data/hora atual, que retorna a hora Unix em que a função foi chamada. A unidade de medida é o segundo.

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

API GetCurrentBlockHash

A função GetCurrentBlockHash retorna o hash do bloco atual.

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

Serializar e Desserializar

Este é um par de funções de serialização e desserialização. A função Serialize converte um objeto em um objeto bytearray e a função Deserialize converte um bytearray no objeto original. O exemplo de código abaixo converte os parâmetros recebidos e os armazena no armazenamento persistente do contrato. Também recupera dados do armazenamento persistente do contrato e os transforma no objeto 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 e AddressToBase58

Este par de funções de tradução de endereços. A função Base58ToAddress converte um endereço codificado em base58 em um endereço bytearray e AddressToBase58 converte um endereço bytearray em um endereço codificado em 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)

Verifique a testemunha

A função CheckWitness(fromAcct) possui duas funcionalidades:

  • Verifique se o chamador da função atual é fromAcct. Se sim (ou seja, a verificação da assinatura foi aprovada), a função retorna.
  • Verifique se o objeto que chama a função atual é um contrato. Se for um contrato e a função for executada a partir do contrato, a verificação será aprovada. Ou seja, verifique se fromAcct é o valor de retorno de GetCallingScriptHash(). A função GetCallingScriptHash() pode usar o valor hash do contrato do contrato inteligente atual.

GetCallingScriptHash():

Mais sobre 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

Mais informações podem ser encontradas em Guthub. No próximo artigo apresentaremos API nativapara aprender como transferir ativos em contratos inteligentes Ontology.

O artigo foi traduzido pelos editores Taxa de hash e compartilhamentos especialmente para OntologyRussia.

Você é um desenvolvedor? Junte-se à nossa comunidade de tecnologia em Discord. Além disso, dê uma olhada Centro do Desenvolvedor Ontologia, você pode encontrar mais ferramentas, documentação e muito mais lá.

Tarefas abertas para desenvolvedores. Complete a tarefa e receba uma recompensa.

Aplicar para o programa de talentos Ontology para estudantes

Ontologia

site de ontologia - GitHub - Discord - Telegrama russo - Twitter - Reddit

Fonte: habr.com

Adicionar um comentário