Cum se scrie un contract inteligent în Python în rețeaua Ontology. Partea 1: Blockchain și Block API

Cum se scrie un contract inteligent în Python în rețeaua Ontology. Partea 1: Blockchain și Block API

Aceasta este prima parte dintr-o serie de tutoriale despre crearea de contracte inteligente Python în rețeaua blockchain Ontology folosind instrumentul de dezvoltare a contractelor inteligente. SmartX.

În acest articol, vom începe cunoașterea API-ului Ontology smart contract. API-ul Ontology smart contract este împărțit în 7 module:

  1. Blockchain și Block API,
  2. runtime API,
  3. API de stocare,
  4. API nativ,
  5. Upgrade API,
  6. Execution Engine API și
  7. API pentru apeluri statice și dinamice.

Blockchain & Block API este partea principală a sistemului de contracte inteligente Ontology. API-ul Blockchain acceptă operațiuni de bază de interogare blockchain, cum ar fi obținerea înălțimii curente a blocului, în timp ce API-ul Block acceptă operațiuni de bază de interogare bloc, cum ar fi interogarea numărului de tranzacții pentru un anumit bloc.

Să începem!

Mai întâi, creați un nou contract în SmartXși apoi urmați instrucțiunile de mai jos.

1. Cum să utilizați API-ul Blockchain

Link-urile către funcțiile smart contract sunt identice cu link-urile Python. Puteți introduce funcțiile corespunzătoare după cum este necesar. De exemplu, următoarea instrucțiune introduce o funcție GetHeight pentru a obține înălțimea curentă a blocului și o funcție GetHeader pentru a obține antetul blocului.

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

GetHeight

GetHeight este folosit pentru a obține ultimul număr de secvență de bloc din blockchain, așa cum se arată în exemplul de mai jos. În ultimul exemplu, vom omite funcția Main pentru comoditate, dar o puteți adăuga dacă este necesar.

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 este folosit pentru a obține antetul blocului, parametrul este numărul de serie al blocului din blockchain. Exemplu:

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 este folosit pentru a obține o tranzacție printr-un hash de tranzacție. Hash-ul tranzacției este trimis către GetTransactionByHash ca parametri în format bytearray. Cheia acestei funcții este de a converti hash-ul tranzacției în format hex în hash-ul tranzacției în format bytearray. Acesta este un pas important. În caz contrar, veți primi o eroare care indică faptul că nu există niciun bloc cu acel hash de bloc. Să luăm hash-ul tranzacției în format hex ca exemplu pentru a-l converti în format bytearray. Un exemplu arată astfel:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Mai întâi, inversează hash-ul tranzacției:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Dezvoltatorii pot realiza acest pas folosind instrumentul de conversie Număr Hex(Little Endian)Număr oferit de SmartX.

Apoi convertiți rezultatul în 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}

Acest lucru se poate face folosind instrumentul de conversie String Byte Array oferit de SmartX. În cele din urmă, convertiți bytearrayul rezultat într-un șir similar:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Următorul este un exemplu de funcție GetTransactionByHash care preia o tranzacție folosind hash-ul tranzacției:

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 este folosit pentru a obține înălțimea tranzacției prin hash-ul tranzacției. Să luăm hash-ul din exemplul de mai sus:

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

GetContract

Dezvoltatorii pot folosi funcția GetContract pentru a obține un contract prin hash-ul contractului. Procesul de conversie hash contractual este același cu procesul de conversie hash al tranzacției menționat mai sus.

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 este folosit pentru a obține un bloc. Există două moduri de a obține un anumit bloc.

1. Obțineți înălțimea bloc cu bloc:

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

2. Obțineți un hash bloc cu bloc:

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

2. Cum se utilizează Block API

Există trei funcții disponibile în Block API: GetTransactions, GetTransactionCountși GetTransactionByIndex. Le vom descompune unul câte unul.

GetTransactionCount

GetTransactionCount este folosit pentru a obține numărul de tranzacții pentru un anumit bloc.

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

Dezvoltatorii pot folosi funcția GetTransactions pentru a obține toate tranzacțiile dintr-un anumit bloc.

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 este folosit pentru a obține o anumită tranzacție într-un anumit bloc.

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

Un ghid complet poate fi găsit pe site-ul nostru GitHub.

postfață

API-ul Blockchain & Block este o parte indispensabilă a contractelor inteligente, deoarece le puteți utiliza pentru a solicita date blockchain și a bloca datele în contractele inteligente. În următoarele articole, vom discuta despre cum să folosim restul API-urilor și vom afla cum interacționează acestea cu blockchain-ul Ontology.

Articolul a fost tradus de editorii Hashrate&Shares în special pentru OntologyRussia. clic

Ești dezvoltator? Alăturați-vă comunității noastre tehnologice la Discordie. De asemenea, aruncați o privire la Centrul pentru dezvoltatori pe site-ul nostru web, unde puteți găsi instrumente pentru dezvoltatori, documentație și multe altele.

ontologie

Sursa: www.habr.com

Adauga un comentariu