Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 1: Blockchain i Block API

Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 1: Blockchain i Block API

Aquesta és la primera part d'una sèrie de tutorials sobre la creació de contractes intel·ligents Python a la xarxa blockchain d'Ontology mitjançant l'eina de desenvolupament de contractes intel·ligents. SmartX.

En aquest article, començarem a conèixer l'API de contracte intel·ligent d'Ontology. L'API de contracte intel·ligent d'Ontology es divideix en 7 mòduls:

  1. Blockchain i Block API,
  2. API d'execució
  3. API d'emmagatzematge
  4. API nativa,
  5. Actualitza l'API,
  6. API d'Execution Engine i
  7. API de trucades estàtiques i dinàmiques.

Blockchain & Block API és la part bàsica del sistema de contracte intel·ligent d'Ontology. L'API Blockchain admet operacions bàsiques de consulta de blockchain, com ara obtenir l'alçada actual d'un bloc, mentre que l'API Block admet operacions bàsiques de consulta de blocs, com ara consultar el nombre de transaccions per a un bloc determinat.

Comencem!

Primer, creeu un nou contracte SmartXi després seguiu les instruccions següents.

1. Com utilitzar l'API Blockchain

Les referències de funcions de contracte intel·ligent són idèntiques a les referències de Python. Podeu introduir les funcions rellevants segons sigui necessari. Per exemple, la següent instrucció introdueix una funció GetHeight per obtenir l'alçada actual del bloc i una funció GetHeader per obtenir la capçalera del bloc.

from ontology.interop.System.Blockchain import GetHeight, GetHeader

GetHeight

GetHeight s'utilitza per obtenir l'últim número de seqüència de bloc a la cadena de blocs, tal com es mostra a l'exemple següent. En l'últim exemple, ometrem la funció Main per comoditat, però podeu afegir-la si cal.

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 function

GetHeader

GetHeader s'utilitza per obtenir la capçalera del bloc, el paràmetre és el número de sèrie del bloc a la cadena de blocs. Exemple:

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

GetTransactionByHash

GetTransactionByHash s'utilitza per recuperar una transacció mitjançant un hash de transacció. El hash de la transacció s'envia a GetTransactionByHash com a paràmetres en format bytearray. La clau d'aquesta funció és convertir el hash de transacció en format hexadecimal al hash de transacció en format bytearray. Aquest és un pas important. En cas contrari, obtindreu un error que indica que no hi ha cap bloc amb aquest hash de bloc. Prenem com a exemple el hash de la transacció en format hexadecimal per convertir-lo al format bytearray. Un exemple és el següent:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Primer inverteix el hash de la transacció:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Els desenvolupadors poden fer aquest pas mitjançant l'eina de conversió de números hexadecimals (little endian) proporcionada per SmartX.

A continuació, convertiu el resultat al format 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}

Això es pot fer mitjançant l'eina de conversió String Byte Array proporcionada per SmartX. Finalment, convertiu el bytearray resultant en una cadena com aquesta:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

El següent és un exemple de la funció GetTransactionByHash, que pren una transacció utilitzant el hash de la transacció:

from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
    # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    tx=GetTransactionByHash(tx_hash)
    return tx

GetTransactionHeight

GetTransactionHeight s'utilitza per obtenir l'alçada de la transacció mitjançant el hash de la transacció. Prenem el hash de l'exemple anterior:

from ontology.interop.System.Blockchain import  GetTransactionHeight
def demo():
    #   tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    height=GetTransactionHeight(tx_hash)
    return height

GetContract

Els desenvolupadors poden utilitzar la funció GetContract per obtenir un contracte mitjançant el hash del contracte. El procés de conversió de hash del contracte és el mateix que el procés de conversió de hash de transacció esmentat anteriorment.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

GetBlock

GetBlock s'utilitza per obtenir un bloc. Hi ha dues maneres d'obtenir un bloc específic.

1. Obteniu l'alçada bloc per bloc:

from ontology.interop.System.Blockchain import GetBlock
def demo():
    block=GetBlock(1408)
    return block

2. Obteniu un hash bloc per bloc:

from ontology.interop.System.Blockchain import GetBlock
def demo():    
    block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
    block=GetBlock(block_hash)

2. Com utilitzar Block API

Hi ha tres funcions disponibles a l'API Block: GetTransactions, GetTransactionCountI GetTransactionByIndex. Els anirem desglossant un per un.

GetTransactionCount

GetTransactionCount s'utilitza per obtenir el nombre de transaccions per a un bloc determinat.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
    block=GetBlock(1408)
    count=GetTransactionCount(block)
    return count

GetTransactions

Els desenvolupadors poden utilitzar la funció GetTransactions per obtenir totes les transaccions d'un bloc determinat.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions 
def demo():
    block=GetBlock(1408)
    txs=GetTransactions(block)
    return txs

GetTransactionByIndex

GetTransactionByIndex s'utilitza per obtenir una transacció específica en un bloc determinat.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # index starts from 0.
    return tx

La guia completa es pot trobar al nostre GitHub.

Paraula posterior

L'API Blockchain & Block és una part indispensable dels contractes intel·ligents, ja que podeu utilitzar-los per sol·licitar dades de blockchain i bloquejar dades en contractes intel·ligents. En propers articles, parlarem de com utilitzar la resta de les API i descobrirem com interactuen amb la cadena de blocs d'Ontology.

L'article va ser traduït pels editors d'Hashrate&Shares especialment per a OntologyRussia. feu clic a

Ets desenvolupador? Uneix-te a la nostra comunitat tecnològica a Discòrdia. A més, fes-hi una ullada Centre de desenvolupadors al nostre lloc web, on podeu trobar eines per a desenvolupadors, documentació i molt més.

Ontologia

Font: www.habr.com

Afegeix comentari