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

imagem

Esta é a terceira parte de uma série de tutoriais sobre a criação de contratos inteligentes em Python na rede blockchain da Ontology. Nos artigos anteriores, nos encontramos

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

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

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

imagem

Vamos dar uma olhada em como usar essas 8 APIs. Antes disso, você pode criar um novo contrato na ferramenta de desenvolvimento de contratos inteligentes Ontology SmartX e siga as instruções abaixo.

Como usar a API de tempo de execução


Há duas maneiras de importar a API Runtime: ontology.interop.System.Runtime e ontology.interop.Ontology.Runtime . O caminho da ontologia contém as APIs adicionadas recentemente. 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 

API de notificação


A função Notify transmite o evento pela rede. No exemplo abaixo, a função Notify retornará a sequência hexadecimal “hello word” e a transmitirá pela rede.

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

Você pode ver isso nos logs:

imagem

API GetTime


A função GetTime retorna o registro de data e hora atual, que retorna o horário do Unix no qual a função foi chamada. A unidade é a segunda.

 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


Essas são algumas funções de serialização e desserialização. A função Serialize converte o objeto em um objeto de bytearray e a função Deserialize converte o bytearray no objeto original. O exemplo de código a seguir converte os parâmetros recebidos e os armazena no armazenamento permanente do contrato. Ele também extrai dados do armazenamento permanente do contrato e os converte 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 conversão de endereço. A função Base58ToAddress converte o endereço base58 codificado em um endereço no formato bytearray e AddressToBase58 converte o endereço no formato bytearray no endereço codificado no 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) 

Checkwitness


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

  • Verifique se o objeto de Accct está chamando a função atual. Se sim (ou seja, a verificação da assinatura foi aprovada), a função retornará.
  • Verifique se o objeto que chama a função atual é um contrato. Se for um contrato e a função for executada no contrato, a verificação será aprovada. Ou seja, verifique se fromAcct o valor de retorno de GetCallingScriptHash (). A função GetCallingScriptHash () pode assumir o valor do 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 no Guthub . No próximo artigo, apresentaremos a API nativa para aprender como transferir ativos nos contratos inteligentes da Ontologia.


O artigo foi traduzido por Hashrate & Shares especificamente para OntologyRussia.

Você é desenvolvedor? Participe da nossa comunidade de tecnologia no Discord . Além disso, consulte o Ontology Developer Center para obter mais ferramentas, documentação e muito mais.


Tarefas abertas para desenvolvedores. Feche a tarefa - receba uma recompensa.

Inscreva-se no Programa de Talentos para Estudantes de Ontologia

Ontologia


Site de ontologia - GitHub - Discord - Telegram Russian - Twitter - Reddit

Source: https://habr.com/ru/post/pt476862/


All Articles