
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
- .
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:

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 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, GetCurrentBlockHashNotify 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:

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 numGetCurrentBlockHash 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_hashSerialize 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 dataBase58ToAddress 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
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return resMais informações podem ser encontradas em . No próximo artigo, apresentaremos API Nativa, para aprender como transferir ativos em contratos inteligentes da Ontology.
O artigo foi traduzido pela equipe especialmente para OntologyRussia.
Você é desenvolvedor? Junte-se à nossa comunidade técnica em . Além disso, dê uma olhada no Ontology, onde você pode encontrar mais ferramentas, documentação e muito mais.
Finalize uma tarefa — ganhe uma recompensa.
no programa de talentos Ontology para estudantes
Ontology
— — — — —
Fonte: habr.com
