ProHoster > Blog > administração > 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
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:
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:
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.
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.
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.
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.
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á.