Ինչպես գրել խելացի պայմանագիր Python-ում Ontology ցանցում: Մաս 1. Blockchain & Block API

Ինչպես գրել խելացի պայմանագիր Python-ում Ontology ցանցում: Մաս 1. Blockchain & Block API

Սա Python-ում խելացի պայմանագրեր ստեղծելու մասին ուսուցողական հոդվածների առաջին մասն է Ontology blockchain ցանցում՝ օգտագործելով խելացի պայմանագրերի մշակման գործիքը: SmartX.

Այս հոդվածում մենք կսկսենք մեր ծանոթությունը Ontology smart contract API-ի հետ: Ontology smart contract API-ն բաժանված է 7 մոդուլի.

  1. Blockchain & Block API,
  2. Runtime API
  3. Պահպանման API
  4. Մայրենի API
  5. Թարմացնել API-ն,
  6. Execution Engine API և
  7. Ստատիկ և դինամիկ զանգերի API:

Blockchain & Block API-ն Ontology խելացի պայմանագրերի համակարգի հիմնական մասն է: Blockchain API-ն աջակցում է բլոկչեյնի հարցումների հիմնական գործառնություններին, ինչպիսիք են բլոկի ընթացիկ բարձրությունը ստանալը, մինչդեռ Block API-ն աջակցում է բլոկային հարցումների հիմնական գործողություններին, օրինակ՝ տվյալ բլոկի համար գործարքների քանակի հարցումը:

Եկեք սկսենք!

Սկսելու համար ստեղծեք նոր պայմանագիր SmartX, ապա հետևեք ստորև ներկայացված հրահանգներին:

1. Ինչպես օգտվել Blockchain API-ից

Խելացի պայմանագրային ֆունկցիայի հղումները նույնական են Python-ի հղումներին: Անհրաժեշտության դեպքում կարող եք մուտքագրել համապատասխան գործառույթներ: Օրինակ՝ հետևյալ հայտարարությունը ներկայացնում է GetHeight՝ բլոկի ընթացիկ բարձրությունը ստանալու ֆունկցիա, և GetHeader՝ բլոկի անվանումը ստանալու ֆունկցիա։

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

Ստացեք բարձրություն

GetHeight-ն օգտագործվում է բլոկչեյնում վերջին բլոկի հաջորդականության համարը ստանալու համար, ինչպես ցույց է տրված ստորև բերված օրինակում: Վերջին օրինակում, հարմարության համար, մենք բաց կթողնենք Main ֆունկցիան, բայց անհրաժեշտության դեպքում կարող եք ավելացնել այն:

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-ն օգտագործվում է բլոկի վերնագիրը ստանալու համար, պարամետրը բլոկի սերիական համարն է բլոկչեյնում: Օրինակ:

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-ն օգտագործվում է գործարքը առբերելու համար՝ օգտագործելով գործարքի հեշը: Գործարքի հեշը ուղարկվում է GetTransactionByHash որպես բայթերի ձևաչափով պարամետրեր: Այս ֆունկցիայի բանալին գործարքի հեշը վեցանկյուն ձևաչափով գործարքի հեշի փոխակերպումն է բայթերի ձևաչափով: Սա կարևոր քայլ է։ Հակառակ դեպքում դուք կստանաք սխալ, որը ցույց է տալիս, որ այդ բլոկի հեշով բլոկ չկա: Եկեք որպես օրինակ վերցնենք գործարքի հեշը վեցանկյուն ձևաչափով՝ այն բայթերի ձևաչափի փոխարկելու համար: Օրինակն այսպիսի տեսք ունի.

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Նախ փոխեք գործարքի հեշը.

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Մշակողները կարող են իրականացնել այս քայլը՝ օգտագործելով SmartX-ի կողմից տրամադրված Hex Number(little endian)Number-ի փոխակերպման գործիքը:

Այնուհետև ստացված արդյունքը փոխարկեք բայթերի ձևաչափի.

{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}

Դա կարելի է անել SmartX-ի կողմից տրամադրված String Byte Array փոխակերպման գործիքի միջոցով: Վերջապես, ստացված բայթերի զանգվածը վերածեք հետևյալ տողի.

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Ստորև բերված է GetTransactionByHash ֆունկցիայի օրինակ, որն ընդունում է գործարքը գործարքի հեշի միջոցով.

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-ն օգտագործվում է գործարքի բարձրությունը ստանալու համար՝ օգտագործելով գործարքի հեշը: Վերցնենք հեշը վերը նշված օրինակից.

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

GetContract

Ծրագրավորողները կարող են օգտագործել GetContract ֆունկցիան՝ պայմանագիրը առբերելու համար պայմանագրի հեշի միջոցով: Պայմանագրի հեշ փոխակերպման գործընթացը նույնն է, ինչ վերը նշված գործարքի հեշ փոխակերպման գործընթացը:

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-ը օգտագործվում է բլոկ ստանալու համար: Կոնկրետ բլոկ ստանալու երկու եղանակ կա.

1. Ստացեք բլոկ ըստ բլոկի բարձրության.

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

2. Ստացեք բլոկ առ բլոկ հեշ.

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

2. Ինչպես օգտվել Block API-ից

Block API-ում կան երեք հասանելի գործառույթներ. GetTransactions, GetTransactionCountԻսկ GetTransactionByIndex. Մենք դրանք մեկ առ մեկ կդասավորենք։

GetTransactionCount

GetTransactionCount-ն օգտագործվում է տվյալ բլոկի համար գործարքների քանակը ստանալու համար:

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

Մշակողները կարող են օգտագործել GetTransactions ֆունկցիան՝ տվյալ բլոկի բոլոր գործարքները վերբերելու համար:

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-ն օգտագործվում է տվյալ բլոկում որոշակի գործարք ստանալու համար:

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

Ամբողջական ուղեցույցը կարելի է գտնել մեր կայքում GitHub.

Հետո

Blockchain & Block API-ն խելացի պայմանագրերի անփոխարինելի մասն է, քանի որ այն կարող եք օգտագործել բլոկչեյնի տվյալները հարցումներ անելու և խելացի պայմանագրերում տվյալները արգելափակելու համար: Հետագա հոդվածներում մենք կքննարկենք, թե ինչպես օգտագործել մնացած API-ները և հասկանալ, թե ինչպես են դրանք փոխազդում Ontology բլոկչեյնի հետ:

Հոդվածը թարգմանվել է Hashrate&Shares-ի խմբագիրների կողմից հատուկ OntologyRussia-ի համար։ լաց

Դուք ծրագրավորող եք: Միացեք մեր տեխնոլոգիական համայնքին Discord. Բացի այդ, նայեք Մշակողների կենտրոն մեր կայքում, որտեղ կարող եք գտնել մշակողի գործիքներ, փաստաթղթեր և այլն:

Ontology- ը

Source: www.habr.com

Добавить комментарий