
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į .
Šiame straipsnyje pradėsime pažintį su Ontologijos išmaniosios sutarties API. Ontologijos išmaniosios sutarties API yra padalinta į 7 modulius:
- Blockchain ir Block API,
- Vykdymo laiko API
- Saugyklos API
- Native API
- Atnaujinti API,
- „Execution Engine“ API ir
- 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į , 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, GetHeaderGetHeight
„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 functionGetHeader
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 headerGetTransactionByHash
„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:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Pirmiausia pakeiskite operacijos maišą:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Kū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ę:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fToliau 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 txGetTransactionHeight
„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 heightGaukite 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 block2. 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 countGetTransactions
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 txsGetTransactionByIndex
„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 txVisą vadovą galite rasti mūsų svetainėje .
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.
Ar esate kūrėjas? Prisijunkite prie mūsų technologijų bendruomenės adresu . Be to, pažiūrėkite mūsų svetainėje, kur galite rasti kūrėjo įrankių, dokumentacijos ir kt.
Ontologija
- /
- Telegram /
- /
Šaltinis: www.habr.com
