Si të shkruani një kontratë të mençur në Python në rrjetin Ontology. Pjesa 1: Blockchain & Block API

Si të shkruani një kontratë inteligjente në Python në rrjetin Ontology. Pjesa 1: Blockchain & Block API

Kjo është pjesa e parë e një serie artikujsh trajnues për krijimin e kontratave të mençura në Python në rrjetin blockchain Ontology duke përdorur mjetin për zhvillimin e kontratave të mençura. SmartX.

Në këtë artikull ne do të fillojmë njohjen me API-në e kontratave të mençura Ontology. API-ja e kontratave të mençura Ontology është e ndarë në 7 module:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API dhe
  7. Static & Dynamic Call API.

Blockchain & Block API është pjesa kryesore e sistemit të kontratave të mençura Ontology. API-ja e Blockchain mbështet operacionet bazë të kërkesës në blockchain, si për shembull marrjen e lartësisë aktuale të bllokut, ndërsa API-ja e Bllokut mbështet operacionet bazë të kërkesës për blloqe, si për shembull kërkimin e numrit të transaksioneve për këtë bllok.

Le të fillojmë!

Së pari krijoni një kontratë të re në SmartX, pastaj ndiqni udhëzimet më poshtë.

1. Si të përdorni Blockchain API

Referencat pĂ«r funksionet e kontratave tĂ« mençura janĂ« identike me referencat e Python. Ju mund tĂ« thĂ«rrisni funksionet pĂ«rkatĂ«se sipas nevojĂ«s. PĂ«r shembull, udhĂ«zimi i mĂ«poshtĂ«m thĂ«rret GetHeight— funksionin pĂ«r marrjen e lartĂ«sisĂ« aktuale tĂ« bllokut, dhe GetHeader— funksionin pĂ«r marrjen e titullit tĂ« bllokut.

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

GetHeight

GetHeight përdoret për të marrë numrin e fundit të radhës së bllokut në blockchain, siç tregohet në shembullin më poshtë. Në shembullin e fundit për lehtësi ne do ta kalojmë funksionin Main, por ju mund ta shtoni atë nëse është e nevojshme.

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, përdoret për të marrë titullin e bllokut, parametri është numri i radhës së bllokut në blockchain. Shembull:

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 pĂ«rdoret pĂ«r tĂ« marrĂ« njĂ« transaksion pĂ«rmes hash-it tĂ« transaksionit. Hash-i i transaksionit dĂ«rgohet nĂ« GetTransactionByHash si parametra nĂ« formatin bytearray. ÇelĂ«si pĂ«r kĂ«tĂ« funksion Ă«shtĂ« konvertimi i hash-it tĂ« transaksionit nga formati hex nĂ« hash-in e transaksionit nĂ« formatin bytearray. Ky Ă«shtĂ« njĂ« hap i rĂ«ndĂ«sishĂ«m. NĂ« tĂ« kundĂ«rt, do tĂ« merrni njĂ« gabim qĂ« tregon se nuk ka bllok me atĂ« hash blloku. Le tĂ« marrim njĂ« hash transaksioni nĂ« formatin hex si shembull pĂ«r ta konvertuar atĂ« nĂ« formatin bytearray. Shembulli duket si mĂ« poshtĂ«:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

SĂ« pari inversoni hash-in e transaksionit:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Zhvilluesit mund ta kryejnë këtë hap duke përdorur mjetin e konvertimit Hex Number (little endian) Number, i cili ofrohet nga SmartX.

Pas kësaj, shndërroni rezultatin e marrë 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}

Kjo mund të bëhet me ndihmën e mjetit të konvertimit String Byte Array, i cili ofrohet nga SmartX. Dhe në fund, shndërroni bytearray në një string si ky:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Më poshtë, jepet një shembull i funksionit GetTransactionByHash, i cili merr transaksionin nëpërmjet hash-it të transaksionit:

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 përdoret për të marrë lartësinë e transaksionit përmes hash-it të transaksionit. Le ta marrim hash-in nga shembulli më sipër:

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

GetContract

Zhvilluesit mund të përdorin funksionin GetContract për të marrë kontratën nëpërmjet hash-it të kontratës. Procesi i konvertimit të hash-it të kontratës është i ngjashëm me procesin e konvertimit të hash-it të transaksionit, i përmendur më sipër.

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 përdoret për të marrë një bllok. Ka dy mënyra për të marrë një bllok të caktuar.

1. Merrni bllokun sipas lartësisë së bllokut:

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

2. Merrni bllokun sipas hash-it të bllokut:

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

2. Si të përdorim Block API

Ka tre funksione të disponueshme në Block API: GetTransactions, GetTransactionCount, dhe GetTransactionByIndex. Do t'i shqyrtojmë ato një nga një.

GetTransactionCount

GetTransactionCount përdoret për të marrë numrin e transaksioneve për këtë bllok.

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

Zhvilluesit mund të përdorin funksionin GetTransactions për të marrë të gjitha transaksionet në këtë bllok.

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 përdoret për të marrë një transaksion specifik në këtë bllok.

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

Udhëzuesi i plotë mund të gjendet në GitHub.

Pasthënie

Blockchain & Block API është një pjesë e domosdoshme e kontratave inteligjente, pasi mund t'i përdorni për të kërkuar të dhëna të blockchain-it dhe të dhëna blloku në kontratat inteligjente. Në artikujt e ardhshëm do të diskutojmë se si të përdorim API-të e tjera dhe do të zbulojmë ndërveprimin e tyre me blockchain-in Ontology.

The article was translated by the Hashrate & Shares editorial team specifically for OntologyRussia. klik

Are you a developer? Join our technical community on Discord. Additionally, check out the Developer Center në faqen tonë, aty mund të gjeni mjetet e zhvilluesit, dokumentacionin dhe shumë më tepër.

Ontology

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster