Hvernig á að skrifa snjallsamning í Python á Ontology netinu. Hluti 1: Blockchain & Block API

Hvernig á að skrifa snjallsamning í Python á Ontology netinu. Hluti 1: Blockchain & Block API

Þetta er fyrsti hluti af röð fræðslugreina um að búa til snjalla samninga í Python á Ontology blockchain netinu með því að nota snjallsamningaþróunartæki SmartX.

Í þessari grein munum við hefja kynni okkar af Ontology smart contract API. Ontology snjallsamnings API er skipt í 7 einingar:

  1. Blockchain & Block API,
  2. Runtime API
  3. Geymsla API
  4. Native API
  5. Uppfærsla API,
  6. Execution Engine API og
  7. Static & Dynamic Call API.

Blockchain & Block API er kjarnahluti Ontology snjallsamningakerfisins. Blockchain API styður grunn blockchain fyrirspurnaaðgerðir, svo sem að fá núverandi hæð blokkar, en Block API styður grunn blokkafyrirspurnaraðgerðir, svo sem að spyrjast fyrir um fjölda viðskipta fyrir tiltekna blokk.

Byrjum!

Til að byrja skaltu búa til nýjan samning í SmartX, og fylgdu síðan leiðbeiningunum hér að neðan.

1. Hvernig á að nota Blockchain API

Snjall samningsaðgerðatilvísanir eru eins og Python tilvísanir. Þú getur slegið inn viðeigandi aðgerðir eftir þörfum. Til dæmis kynnir eftirfarandi setning GetHeight, fall til að fá núverandi hæð blokkar, og GetHeader, fall til að fá titil blokkarinnar.

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

GetHeight

GetHeight er notað til að fá síðasta blokkarraðnúmerið í blokkarkeðjunni, eins og sýnt er í dæminu hér að neðan. Í síðasta dæminu, til hægðarauka, sleppum við aðalaðgerðinni, en þú getur bætt henni við ef þörf krefur.

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 er notað til að fá blokkhausinn; færibreytan er raðnúmer blokkarinnar í blockchain. Dæmi:

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 er notað til að sækja viðskipti með því að nota viðskiptakássa. Viðskiptakássið er sent til GetTransactionByHash sem færibreytur á bytearray sniði. Lykillinn að þessari aðgerð er að umbreyta færslukássinu á hex-sniði í færslukássið á bætafylkissniði. Þetta er mikilvægt skref. Annars myndirðu fá villu sem gefur til kynna að það sé engin blokk með því blokkarhash. Tökum viðskiptakássið á hex sniði sem dæmi til að umbreyta því í bytearray snið. Dæmið lítur svona út:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Snúðu fyrst viðskiptakássinu við:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Hönnuðir geta náð þessu skrefi með því að nota Hex Number (little endian) númerumbreytingartólið sem SmartX býður upp á.

Umbreyttu síðan niðurstöðunni sem myndast í bytearray snið:

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

Þetta er hægt að gera með því að nota String Byte Array umbreytingartólið sem SmartX býður upp á. Að lokum, umbreyttu bætrarásinni sem myndast í streng eins og þetta:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Hér að neðan er dæmi um GetTransactionByHash aðgerðina, sem tekur færslu með færslukássinu:

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 er notað til að fá færsluhæðina með því að nota færslukássa. Tökum hassið úr dæminu hér að ofan:

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

Get Contract

Hönnuðir geta notað GetContract aðgerðina til að endurheimta samning í gegnum samningshash. Umbreytingarferli samnings kjötkássa er það sama og umbreytingarferli viðskiptakássa sem nefnt er hér að ofan.

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 er notað til að fá blokk. Það eru tvær leiðir til að fá ákveðna blokk.

1. Fáðu blokk eftir blokkarhæð:

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

2. Fáðu blokk fyrir blokk hash:

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

2. Hvernig á að nota Block API

Það eru þrjár tiltækar aðgerðir í Block API: GetTransactions, GetTransactionCountOg GetTransactionByIndex. Við munum raða þeim út eitt af öðru.

GetTransactionCount

GetTransactionCount er notað til að fá fjölda viðskipta fyrir tiltekna blokk.

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

Hönnuðir geta notað GetTransactions aðgerðina til að sækja öll viðskipti í tiltekinni blokk.

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 er notað til að sækja tiltekna færslu í tiltekinni blokk.

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

Leiðsögnina í heild sinni má finna á okkar GitHub.

Eftirsögn

Blockchain & Block API er ómissandi hluti af snjöllum samningum vegna þess að þú getur notað það til að spyrjast fyrir um blockchain gögn og loka fyrir gögn í snjöllum samningum. Í framtíðargreinum munum við ræða hvernig eigi að nota API sem eftir eru og skilja hvernig þau hafa samskipti við Ontology blockchain.

Greinin var þýdd af ritstjórum Hashrate&Shares sérstaklega fyrir OntologyRussia. smelltu á

Ertu verktaki? Vertu með í tæknisamfélaginu okkar á Discord. Skoðaðu líka Þróunarmiðstöð á vefsíðu okkar, þar sem þú getur fundið verkfæri fyrir þróunaraðila, skjöl og fleira.

Ontology

Heimild: www.habr.com

Bæta við athugasemd