Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de Runtime

Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de Runtime

Esta é a 3ª parte de uma série de artigos educacionais sobre a criação de contratos inteligentes em Python na rede blockchain Ontology. Nos artigos anteriores, nos familiarizamos com

  1. Blockchain & Block API
  2. Storage API.

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

Abaixo está uma breve descrição dessas 8 APIs:

Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de Runtime

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

Como usar a Runtime API

Existem duas maneiras de importar Runtime API: ontology.interop.System.Runtime e ontology.interop.Ontology.Runtime. O caminho Ontology contém APIs recentemente adicionadas. As linhas abaixo importam essas APIs.

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash

Notify API

A função Notify transmite um evento por toda a rede. No exemplo abaixo, a função Notify retornará a string hex "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 logs:

Como escrever um contrato inteligente em Python na rede Ontology. Parte 3: API de Runtime

GetTime API

A função GetTime retorna o timestamp atual, que retorna o tempo Unix quando 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

GetCurrentBlockHash API

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

Serialize e Deserialize

Esta é uma dupla de funções de serialização e desserialização. A função Serialize transforma um objeto em um objeto bytearray, enquanto a função Deserialize transforma um bytearray no objeto original. O exemplo de código abaixo realiza a conversão dos parâmetros de entrada e os armazena no armazenamento persistente do contrato. Ele também extrai dados do armazenamento persistente do contrato e os transforma de volta 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

Essas funções de conversão de endereço. A função Base58ToAddress converte um endereço codificado em base58 para um endereço na forma de bytearray, enquanto AddressToBase58 converte um endereço na forma de bytearray para 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)

CheckWitness

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

  • Verificar se o objeto chamador da função atual é fromAcct. Se sim (ou seja, a verificação da assinatura foi bem-sucedida), a função retorna.
  • Verificar se o objeto chamador da função atual é um contrato. Se for um contrato e a função for executada a partir do contrato, a verificação é bem-sucedida. Ou seja, verifique se fromAcct é o valor retornado por GetCallingScriptHash(). A função GetCallingScriptHash() pode obter o hash do contrato do contrato inteligente atual.

GetCallingScriptHash():

Mais detalhes em 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 Nativa, para aprender como transferir ativos em contratos inteligentes da Ontology.

O artigo foi traduzido pela equipe Hashrate&Shares especialmente para OntologyRussia.

Você é desenvolvedor? Junte-se à nossa comunidade técnica em Discord. Além disso, dê uma olhada no Centro de Desenvolvedores Ontology, onde você pode encontrar mais ferramentas, documentação e muito mais.

Tarefas abertas para desenvolvedores. Finalize uma tarefa — ganhe uma recompensa.

Inscreva-se no programa de talentos Ontology para estudantes

Ontology

site da Ontology — GitHub — Discord — Telegram Russo — Twitter — Reddit

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster