Como escrever um contrato inteligente com Python ontologia? Parte 3: API de tempo de execução

imagem

1. Introdução


Anteriormente, introduzi o Contrato inteligente de ontologia em
Parte 1: Blockchain e API de bloco e
Parte 2: API de armazenamento
Agora, quando você tiver uma idéia sobre como chamar a API relevante para armazenamento persistente ao desenvolver o contrato inteligente do Python na Ontologia, vamos para a API Runtime (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 obter, converter e validar dados. Aqui está uma breve descrição dessas 8 APIs:

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 de costume, no final do artigo, fornecerei um link para o código-fonte.

Como usar a API de tempo de execução


Existem 2 caminhos para importar a API Runtime, ontology.interop.System.Runtime e ontology.interop.Ontology.Runtime . O caminho Ontology contém APIs recém-adicionadas. As linhas a seguir importam essas APIs.

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 eventos para toda a rede. No exemplo a seguir, a função Notify retornará uma string hexadecimal “hello world” e a transmitirá para toda a rede.

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

Você pode visualizá-lo em 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


Este é um par de funções de serialização e desserialização. A função Serialize serializa um objeto em um objeto de matriz de bytes e a função Deserialize desserializa a matriz de bytes no objeto original. O exemplo de código a seguir implementa a serialização dos parâmetros recebidos e os armazena no armazenamento persistente do contrato. Ele também extrai dados do armazenamento persistente do contrato e os desserializa.

 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 & AddressToBase58


Este é um par de funções de conversão de endereço. A função Base58ToAddress converte o endereço codificado base58 em um endereço de formulário da matriz de bytes e AddressToBase58 converte o endereço do formulário da matriz de bytes em um endereço codificado de 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 funcionalidades:

  • Verifique se o chamador da função atual é de Accct. Se sim (ou seja, a verificação da assinatura foi aprovada), a função retornará.
  • Verifique se o chamador da 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 obter o valor do hash do contrato atual inteligente.

GetCallingScriptHash ():


Compilador de Ontologia Python

 from ontology.interop.System.Runtime import CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress def demo(): addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z") res=CheckWitness(addr) return res 

Encontre o tutorial completo aqui .

Sumário


Neste artigo, apresentei a API Runtime da blockchain Ontology, que é muito importante no contrato inteligente do Ontology Python. No próximo artigo, veremos a API nativa para explorar como transferir ativos em contratos inteligentes de Ontologia.



Este é um tutorial oficial publicado anteriormente no blog Ontology Medium

Você é desenvolvedor? Verifique se você se juntou à nossa comunidade de tecnologia no Discord . Além disso, dê uma olhada no Developer Center em nosso site. Lá você encontra ferramentas, documentação e muito mais para desenvolvedores.

Encontre ontologia em outro lugar


Site de ontologia
Github / discord
Telegrama Inglês / Russo
Twitter / Reddit

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


All Articles