
Esta é a primeira parte de uma série de artigos educacionais sobre como criar contratos inteligentes em Python na rede blockchain Ontology usando a ferramenta de desenvolvimento de contratos inteligentes. .
Neste artigo, começaremos a nos familiarizar com a API do contrato inteligente Ontology. A API do contrato inteligente Ontology é dividida em 7 módulos:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API e
- Static & Dynamic Call API.
A Blockchain & Block API é a parte principal do sistema de contratos inteligentes da Ontology. A API do Blockchain suporta operações básicas de consulta blockchain, como, por exemplo, obter a altura atual do bloco, enquanto a API do Block suporta operações básicas de consulta de blocos, como, por exemplo, solicitar a quantidade de transações para um determinado bloco.
Vamos começar!
Para começar, crie um novo contrato em , e depois siga as instruções abaixo.
1. Como usar a Blockchain API
Os links para as funções dos contratos inteligentes são idênticos aos links do Python. Você pode inserir as funções correspondentes conforme necessário. Por exemplo, a instrução abaixo insere 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, GetHeaderGetHeight
GetHeight é usado para obter o número de ordem mais recente do bloco na blockchain, como mostrado no exemplo abaixo. No último exemplo, para conveniência, omitiremos a função Main, mas você pode 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) # print height
return height #return height after running the functionGetHeader
GetHeader é usado para obter o cabeçalho do bloco, tendo como parâmetro o número de ordem do bloco na blockchain. 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 headerGetTransactionByHash
GetTransactionByHash é usado para obter uma transação pelo hash da transação. O hash da transação é passado em GetTransactionByHash como parâmetros em formato bytearray. A chave para esta função é converter o hash da transação do formato hex para o formato bytearray. Este é um passo importante. Caso contrário, você receberia um erro indicando que não há bloco com tal hash. Vamos pegar o hash da transação no formato hex como exemplo para convertê-lo para o formato bytearray. O exemplo é o seguinte:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Primeiro, inverta o hash da transação:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Os desenvolvedores podem realizar esta etapa usando a ferramenta de conversão Hex Number (little endian) Number, fornecida pela SmartX.
Em seguida, converta o resultado obtido 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}Isso pode ser feito com a ferramenta de conversão String Byte Array, que é fornecida pela SmartX. Finalmente, converta o bytearray resultante em uma string semelhante:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fAbaixo está um exemplo da função GetTransactionByHash, que obtém a transação através do hash da transação:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight é utilizado para obter a altura da transação através do hash da transação. Vamos pegar o hash do exemplo acima:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Os desenvolvedores podem usar a função GetContract para obter o contrato através do hash do contrato. O processo de conversão do hash do contrato é similar ao processo de conversão do hash da transação mencionado acima.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock é utilizado para obter um bloco. Existem duas maneiras de obter um bloco específico.
1. Obter bloco pela altura do bloco:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Obter bloco pelo hash do bloco:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Como usar a API de Blocos
Existem três funções disponíveis na API de Blocos: GetTransactions, GetTransactionCount, quanto GetTransactionByIndex. Vamos analisá-las uma a uma.
GetTransactionCount
GetTransactionCount é utilizado para obter o número de transações para o bloco especificado.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Os desenvolvedores podem usar a função GetTransactions para obter todas as transações neste bloco.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions
def demo():
block=GetBlock(1408)
txs=GetTransactions(block)
return txsGetTransactionByIndex
GetTransactionByIndex é usado para obter uma transação específica neste bloco.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # o índice começa em 0.
return txO guia completo pode ser encontrado em nosso .
Epílogo
A API Blockchain & Block é uma parte indispensável dos contratos inteligentes, pois você pode usá-las para solicitar dados da blockchain e dados do bloco em contratos inteligentes. Nos próximos artigos, discutiremos como usar as outras APIs e entenderemos sua interação com a blockchain Ontology.
Este artigo foi traduzido pela equipe da Hashrate & Shares especialmente para a OntologyRussia.
Você é desenvolvedor? Junte-se à nossa comunidade técnica em . Além disso, dê uma olhada no em nosso site, onde você pode encontrar ferramentas de desenvolvedor, documentação e muito mais.
Ontology
- /
- Telegram /
- /
Fonte: habr.com
