
Este é um tutorial oficial publicado anteriormente no blog Ontology Medium
Animado para publicá-lo para os leitores da Habr. Sinta-se à vontade para fazer qualquer pergunta relacionada e sugerir um formato melhor para os materiais do tutorial
Prefácio
Neste artigo, começaremos a apresentar a API de contrato inteligente da Ontologia. A API de contrato inteligente da Ontology é dividida em 7 módulos:
Neste artigo, apresentaremos
a API Blockchain & Block , que é a parte mais básica do sistema de contrato inteligente da Ontology. A API Blockchain suporta operações básicas de consulta de blockchain, como obter a altura atual do bloco, enquanto a API Block suporta operações básicas de consulta de bloco, como consultar o número de transações para um determinado bloco.
Vamos começar!Primeiro, crie um novo contrato no
SmartX e siga as instruções abaixo.
1. Como usar a API do Blockchain
As referências a funções inteligentes de contrato são idênticas às referências do Python. Os desenvolvedores podem introduzir as funções apropriadas conforme necessário. Por exemplo, a instrução a seguir apresenta
GetHeight , a função para obter a altura atual do bloco, e
GetHeader , a função para obter o cabeçalho do bloco.
from ontology.interop.System.Blockchain import GetHeight, GetHeader
1.1 Getheight
Você pode usar GetHeight para obter a altura mais recente do bloco, conforme mostrado no exemplo a seguir. No último exemplo, por conveniência, omitiremos a função Principal, mas você poderá adicioná-la, se necessário.
from ontology.interop.System.Runtime import Notify from ontology.interop.System.Blockchain import GetHeight def Main(operation): if operation == 'demo': return demo() return False def demo(): height=GetHeight() Notify(height)
1.2 GetHeader
Você pode usar GetHeader para obter o cabeçalho do bloco e o parâmetro é a altura do bloco. Aqui está um exemplo:
from ontology.interop.System.Runtime import Notify from ontology.interop.System.Blockchain import GetHeader def demo(): block_height=10 header=GetHeader(block_height) Notify(header) return header
1.3 GetTransactionByHash
Você pode usar a função
GetTransactionByHash para obter transações através do hash da transação. O hash da transação é enviado para GetTransactionByHash como parâmetros no formato bytearray. A chave para esta função é como converter um hash de transação no formato hexadecimal em um hash de transação no formato bytearray. Este é um passo importante. Caso contrário, você receberá um erro que indica que não há nenhum bloco desse hash de bloco.
Vamos pegar o hash da transação no formato hexadecimal como exemplo para convertê-lo no formato bytearray. O exemplo é o seguinte:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1
Primeiro, inverta o hash da transação:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279
Os desenvolvedores podem implementar esta etapa com a ferramenta de conversão
Número hexadecimal (little endian) <--> Número fornecido pelo SmartX.
Em seguida, converta-o para o formato bytearray:
{0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f}
Os desenvolvedores podem fazer isso com a ferramenta de conversão
String <--> Byte Array fornecida pelo SmartX. Por fim, converta o bytearray resultante na string correspondente:
\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f
Abaixo está um exemplo da função
GetTransactionByHash que obtém uma transação por meio de um hash de transação:
from ontology.interop.System.Blockchain import GetTransactionByHash def demo():
1.4 GetTransactionHeight
Os desenvolvedores podem usar a função
GetTransactionHeight para obter a altura da transação através do hash da transação. Vamos pegar o hash no exemplo acima:
from ontology.interop.System.Blockchain import GetTransactionHeight def demo():
1.5 GetContract
Você pode usar a função GetContract para obter um contrato através do hash do contrato. O processo de conversão do hash do contrato é consistente com o processo de conversão de hash da transação mencionado acima.
from ontology.interop.System.Blockchain import GetContract def demo():
1.6 GetBlock
Você pode usar a função GetBlock para obter o bloco. Existem duas maneiras de obter um bloco específico:
1. Obtenha o bloco pela altura do bloco:
from ontology.interop.System.Blockchain import GetBlock def demo(): block=GetBlock(1408) return block
2. Obtenha o bloco por bloco de hash:
from ontology.interop.System.Blockchain import GetBlock def demo(): block_hash=bytearray(b'\x16\xe0\xc5\x40\x82\x79\x77\x30\x44\xea\x66\xc8\xc4\x5d\x17\xf7\x17\x73\x92\x33\x6d\x54\xe3\x48\x46\x0b\xc3\x2f\xe2\x15\x03\xe4') block=GetBlock(block_hash)
2 Como usar a API de bloqueio
Existem três funções disponíveis na API do bloco, que são
GetTransactions, GetTransactionCount e GetTransactionByIndex . Vamos apresentá-los um por um.
2.1 GetTransactionCount
Você pode usar a função
GetTransactionCount para obter o número de transações para um determinado bloco.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionCount def demo(): block=GetBlock(1408) count=GetTransactionCount(block) return count
2.2 GetTransactions
Você pode usar a função
GetTransactions para obter todas as transações em um determinado bloco.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactions def demo(): block=GetBlock(1408) txs=GetTransactions(block) return txs
2.3 GetTransactionByIndex
Você pode usar a função
GetTransactionByIndex para obter transações específicas em um determinado bloco.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionByIndex def demo(): block=GetBlock(1408) tx=GetTransactionByIndex(block,0)
Encontre o tutorial completo em nosso GitHub
aqui .
Posfácio
A API Blockchain & Block é a parte mais indispensável dos contratos inteligentes, pois você pode usá-los para consultar dados de blockchain e bloquear dados em contratos inteligentes. Nos próximos artigos, discutiremos como usar outras APIs para explorar sua interação com a blockchain da Ontology.
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 ontologiaGithub /
discordTelegrama (
inglês /
russo )
Twitter /
Reddit /