Wéi schreift e Smart Kontrakt am Python am Ontology Netzwierk. Deel 1: Blockchain & Block API

Wéi schreift e Smart Kontrakt am Python am Ontology Netzwierk. Deel 1: Blockchain & Block API

Dëst ass den éischten Deel vun enger Serie vun edukativen Artikelen iwwer d'Schafe vu Smart Kontrakter am Python am Ontology Blockchain Netzwierk mat dem Smart Kontrakt Entwécklungsinstrument SmartX.

An dësem Artikel fänken mir eis Bekanntschaft mat der Ontology Smart Contract API un. Den Ontology Smart Contract API ass a 7 Moduler opgedeelt:

  1. Blockchain & Block API,
  2. Runtime API
  3. Stockage API
  4. Native API
  5. Upgrade API,
  6. Ausféierung Engine API an
  7. Statesch & Dynamic Call API.

Blockchain & Block API ass de Kär Deel vum Ontology Smart Kontrakt System. De Blockchain API ënnerstëtzt Basis Blockchain Ufro Operatiounen, sou wéi d'aktuell Héicht vun engem Block ze kréien, während de Block API Basis Block Ufro Operatiounen ënnerstëtzt, sou wéi d'Ufro vun der Unzuel vun Transaktioune fir e bestëmmte Block.

Loosst eis ufänken!

Fir unzefänken, erstellt en neie Kontrakt an SmartX, a befollegt dann d'Instruktioune hei ënnen.

1. Wéi benotzt Dir Blockchain API

Smart Kontrakt Funktioun Referenze sinn identesch ze Python Referenze. Dir kënnt relevant Funktiounen aginn wéi néideg. Zum Beispill, déi folgend Ausso stellt GetHeight vir, eng Funktioun fir déi aktuell Héicht vun engem Block ze kréien, a GetHeader, eng Funktioun fir den Titel vum Block ze kréien.

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

GetHeight

GetHeight gëtt benotzt fir déi lescht Blocksequenznummer an der Blockchain ze kréien, wéi am Beispill hei ënnen gewisen. Am leschte Beispill, fir d'Kamoudheet, wäerte mir d'Haaptfunktioun iwwersprangen, awer Dir kënnt et derbäisetzen wann néideg.

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 gëtt benotzt fir de Block Header ze kréien; de Parameter ass d'Seriennummer vum Block an der Blockchain. Beispill:

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 gëtt benotzt fir eng Transaktioun mat engem Transaktiounshash ze recuperéieren. Den Transaktiounshash gëtt op GetTransactionByHash als Parameter am Bytearray-Format. De Schlëssel fir dës Funktioun ass den Transaktiounshash am Hexformat an den Transaktiounshash am Bytearray Format ze konvertéieren. Dëst ass e wichtege Schrëtt. Soss kritt Dir e Feeler deen uginn datt et kee Block mat deem Blockhash gëtt. Loosst eis den Transaktiounshash am Hexformat als Beispill huelen fir se an Bytearray Format ze konvertéieren. D'Beispill gesäit esou aus:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Éischt ëmgedréint den Transaktiounshash:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Entwéckler kënnen dëse Schrëtt erreechen mat der Hex Nummer (kleng endian) Nummer Konversiounsinstrument, dat vum SmartX geliwwert gëtt.

Da konvertéiert dat resultéierend Resultat op 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}

Dëst kann mat dem String Byte Array Konversiounstool gemaach ginn, dee vum SmartX geliwwert gëtt. Endlech konvertéiert de resultéierende Bytearray an eng String wéi dës:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Drënner ass e Beispill vun der GetTransactionByHash Funktioun, déi eng Transaktioun mam Transaktiounshash hëlt:

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 gëtt benotzt fir d'Transaktiounshéicht mam Transaktiounshash ze kréien. Loosst eis den Hash aus dem Beispill hei uewen huelen:

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

GetContract

Entwéckler kënnen d'GetContract Funktioun benotzen fir e Kontrakt iwwer e Kontrakt Hash ze recuperéieren. De Kontrakt Hash Konversiounsprozess ass d'selwecht wéi den Transaktioun Hash Konversiounsprozess uewen ernimmt.

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 gëtt benotzt fir e Block ze kréien. Et ginn zwou Weeër fir e spezifesche Block ze kréien.

1. Kritt e Block no Block Héicht:

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

2. Kritt e Block duerch Blockhash:

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

2. Wéi benotzt Block API

Et ginn dräi verfügbare Funktiounen an der Block API: GetTransaktiounen, GetTransactionCountan GetTransactionByIndex. Mir sortéieren se een nom aneren.

GetTransactionCount

GetTransactionCount gëtt benotzt fir d'Zuel vun den Transaktioune fir e bestëmmte Block ze kréien.

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

GetTransaktiounen

D'Entwéckler kënnen d'GetTransactions Funktioun benotzen fir all Transaktiounen an engem bestëmmte Block ze recuperéieren.

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 gëtt benotzt fir eng spezifesch Transaktioun an engem bestëmmte Block ze recuperéieren.

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

De komplette Guide fannt Dir op eisem GitHub.

Afterword

Blockchain & Block API ass en onverzichtbaren Deel vu Smart Kontrakter well Dir et benotze kënnt fir Blockchain Daten ze froen an Daten a Smart Kontrakter ze blockéieren. An zukünfteg Artikele wäerte mir diskutéieren wéi déi verbleiwen APIe benotzt ginn a verstoen wéi se mat der Ontologie Blockchain interagéieren.

Den Artikel gouf vun den Redaktoren vun Hashrate&Shares speziell fir OntologyRussia iwwersat. klickt

Sidd Dir en Entwéckler? Maacht mat bei eiser Tech Gemeinschaft um Schwaarz. Och kuckt op Entwéckler Center op eiser Websäit, wou Dir Entwéckler Tools, Dokumentatioun a vill méi fannt.

Ontologie

Source: will.com

Setzt e Commentaire