Kaip parašyti išmaniąją sutartį Python ontologijos tinkle. 1 dalis: Blockchain ir Block API

Kaip parašyti išmaniąją sutartį Python ontologijos tinkle. 1 dalis: Blockchain ir Block API

Tai pirmoji edukacinių straipsnių serijos dalis apie išmaniųjų sutarčių kūrimą Python Ontology blockchain tinkle naudojant išmaniųjų sutarčių kūrimo įrankį „SmartX“.

Šiame straipsnyje pradėsime pažintį su Ontologijos išmaniosios sutarties API. Ontologijos išmaniosios sutarties API yra padalinta į 7 modulius:

  1. Blockchain ir Block API,
  2. Vykdymo laiko API
  3. Saugyklos API
  4. Native API
  5. Atnaujinti API,
  6. „Execution Engine“ API ir
  7. Statinio ir dinaminio skambučio API.

„Blockchain & Block API“ yra pagrindinė „Ontology“ išmaniųjų sutarčių sistemos dalis. „Blockchain“ API palaiko pagrindines „blockchain“ užklausos operacijas, pvz., dabartinio bloko aukščio gavimą, o „Block API“ palaiko pagrindines blokų užklausos operacijas, pvz., užklausą dėl tam tikro bloko operacijų skaičiaus.

Pradėkime!

Norėdami pradėti, sukurkite naują sutartį „SmartX“, tada vadovaukitės toliau pateiktomis instrukcijomis.

1. Kaip naudoti Blockchain API

Išmaniųjų sutarties funkcijų nuorodos yra identiškos Python nuorodoms. Jei reikia, galite įvesti atitinkamas funkcijas. Pavyzdžiui, šis teiginys pristato „GetHeight“ – funkciją dabartiniam bloko aukščiui gauti, ir „GetHeader“ – funkciją, leidžiančią gauti bloko pavadinimą.

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

GetHeight

„GetHeight“ naudojamas paskutiniam bloko sekos numeriui gauti blokų grandinėje, kaip parodyta toliau pateiktame pavyzdyje. Paskutiniame pavyzdyje patogumo dėlei praleisime pagrindinę funkciją, bet prireikus galite ją pridėti.

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 naudojamas bloko antraštei gauti, parametras yra bloko serijos numeris bloko grandinėje. Pavyzdys:

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“ naudojamas norint gauti operaciją naudojant operacijos maišą. Sandorio maiša siunčiama į GetTransactionByHash kaip parametrai bytearray formatu. Šios funkcijos raktas yra konvertuoti operacijos maišą šešioliktainiu formatu į operacijos maišą baitų masyvo formatu. Tai svarbus žingsnis. Priešingu atveju gausite klaidą, rodančią, kad nėra bloko su ta bloko maiša. Paimkime operacijų maišą šešioliktainiu formatu kaip pavyzdį, kad konvertuotume jį į baitų masyvo formatą. Pavyzdys atrodo taip:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Pirmiausia pakeiskite operacijos maišą:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Kūrėjai gali atlikti šį veiksmą naudodami šešioliktainio skaičiaus (little endian) skaičių konvertavimo įrankį, kurį teikia SmartX.

Tada konvertuokite gautą rezultatą į bytearray formatą:

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

Tai galima padaryti naudojant „SmartX“ pateiktą String Byte Array konvertavimo įrankį. Galiausiai konvertuokite gautą bytearray į tokią eilutę:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Toliau pateikiamas funkcijos GetTransactionByHash, kuri atlieka operaciją pagal operacijos maišą, pavyzdys:

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“ naudojamas operacijos aukščiui gauti naudojant operacijos maišą. Paimkime maišą iš aukščiau pateikto pavyzdžio:

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

Gaukite kontraktą

Kūrėjai gali naudoti „GetContract“ funkciją norėdami gauti sutartį naudodami sutarties maišą. Sutarties maišos konvertavimo procesas yra toks pat, kaip ir anksčiau minėtas operacijos maišos konvertavimo procesas.

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“ naudojamas blokui gauti. Yra du būdai gauti konkretų bloką.

1. Gaukite bloką pagal bloko aukštį:

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

2. Gaukite bloką po bloko maišos:

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

2. Kaip naudoti Block API

Block API yra trys galimos funkcijos: GetTransactions, GetTransactionCountIr GetTransactionByIndex. Mes juos surūšiuosime po vieną.

GetTransactionCount

GetTransactionCount naudojamas tam tikro bloko operacijų skaičiui gauti.

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

Kūrėjai gali naudoti funkciją GetTransactions, kad gautų visas tam tikro bloko operacijas.

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“ naudojamas norint gauti konkrečią operaciją tam tikrame bloke.

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

Visą vadovą galite rasti mūsų svetainėje GitHub.

Afterword

„Blockchain & Block API“ yra nepakeičiama išmaniųjų sutarčių dalis, nes galite ją naudoti norėdami užklausti „blockchain“ duomenų ir blokuoti duomenis išmaniosiose sutartyse. Kituose straipsniuose aptarsime, kaip naudoti likusias API ir suprasti, kaip jos sąveikauja su ontologijos blokų grandine.

Straipsnį Hashrate&Shares redaktoriai išvertė specialiai OntologyRussia. spustelėkite

Ar esate kūrėjas? Prisijunkite prie mūsų technologijų bendruomenės adresu Discord. Be to, pažiūrėkite Kūrėjų centras mūsų svetainėje, kur galite rasti kūrėjo įrankių, dokumentacijos ir kt.

Ontologija

Šaltinis: www.habr.com

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster