Hur man skriver ett smart kontrakt i Python pÄ Ontology-nÀtverket. Del 1: Blockchain & Block API

Hur man skriver ett smart kontrakt i Python pÄ Ontology-nÀtverket. Del 1: Blockchain & Block API

Detta Àr den första delen av en serie utbildningsartiklar om hur man skapar smarta kontrakt pÄ Python i blockchain-nÀtverket Ontology med hjÀlp av verktyget för utveckling av smarta kontrakt. SmartX.

I den hÀr artikeln börjar vi bekantskapen med API:et för Ontology-smartkontrakt. API:et för Ontology-smartkontrakt Àr indelat i 7 moduler:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API och
  7. Static & Dynamic Call API.

Blockchain & Block API Àr den centrala delen av Ontology-smarta kontraktsystemet. Blockchain API stöder grundlÀggande blockchain-förfrÄgningsoperationer, som att hÀmta den aktuella blockhöjden, medan Block API stöder grundlÀggande block-förfrÄgningsoperationer, som att hÀmta antalet transaktioner för ett givet block.

LÄt oss börja!

Först skapar du ett nytt kontrakt i SmartX, och följ sedan instruktionerna nedan.

1. Hur man anvÀnder Blockchain API

Referenser till smartkontraktsfunktioner Ă€r identiska med lĂ€nkarna i Python. Du kan ange motsvarande funktioner efter behov. Till exempel, nedanstĂ„ende instruktion anger GetHeight—funktionen för att hĂ€mta den aktuella blockhöjden, och GetHeader—funktionen för att hĂ€mta blockhuvudet.

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

GetHeight

GetHeight anvÀnds för att hÀmta det senaste blocknumret i blockchain, som visas i det följande exemplet. I det sista exemplet av bekvÀmlighet utelÀmnar vi funktionen Main, men du kan lÀgga till den om det behövs.

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 anvÀnds för att hÀmta blockhuvudet, parametern Àr blocknumret i blockchain. Exempel:

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 anvÀnds för att hÀmta en transaktion via transaktionshash. Transaktionshash skickas i GetTransactionByHash som parametrar i bytearray-format. Nyckeln till denna funktion Àr att konvertera hash av transaktionen frÄn hex-format till hash av transaktionen i bytearray-format. Detta Àr ett viktigt steg. Annars fÄr du ett felmeddelande som indikerar att det inte finns nÄgot block med en sÄdan hash. LÄt oss ta hash av transaktionen i hex-format som exempel för att konvertera den till bytearray-format. Exemplet ser ut som följer:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Först vÀnd hash av transaktionen:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Utvecklare kan genomföra detta steg med hjÀlp av verktyget Hex Number(little endian)Number, som tillhandahÄlls av SmartX.

Omvandla sedan det erhÄllna resultatet till formatet bytearray:

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

Detta kan göras med verktyget String Byte Array, som tillhandahÄlls av SmartX. Slutligen omvandla den resulterande bytearrayen till en liknande strÀng:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Nedan Àr ett exempel pÄ funktionen GetTransactionByHash, som hÀmtar en transaktion via transaktionshash:

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 anvÀnds för att hÀmta höjden pÄ en transaktion via transaktionshash. LÄt oss anvÀnda hash frÄn exemplet ovan:

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

GetContract

Utvecklare kan anvÀnda funktionen GetContract för att hÀmta ett kontrakt via kontrakts-hash. Processen för att omvandla kontrakts-hash Àr densamma som för transaktionshash, som nÀmnts ovan.

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 anvÀnds för att hÀmta ett block. Det finns tvÄ sÀtt att hÀmta ett specifikt block.

1. HÀmta blocket efter blockhöjd:

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

2. HĂ€mta blocket efter blockhash:

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

2. Hur man anvÀnder Block API

Det finns tre tillgÀngliga funktioner i Block API: GetTransactions, GetTransactionCount, och GetTransactionByIndex. Vi kommer att gÄ igenom dem en och en.

GetTransactionCount

GetTransactionCount anvÀnds för att hÀmta antalet transaktioner för ett givet block.

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

Utvecklare kan anvÀnda funktionen GetTransactions för att hÀmta alla transaktioner inom denna block.

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 anvÀnds för att hÀmta en specifik transaktion inom detta block.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # index börjar frÄn 0.
    return tx

Den fullstÀndiga guiden finns pÄ vÄr GitHub.

Epilog

Blockchain & Block API Àr en oumbÀrlig del av smarta kontrakt, eftersom du kan anvÀnda dem för att begÀra blockchain-data och blockdata i smarta kontrakt. I kommande artiklar kommer vi att diskutera hur man anvÀnder de andra API:erna och reda ut deras interaktion med Ontology-blockchain.

Artikeln översattes av Hashrate&Shares speciellt för OntologyRussia. klicka

Är du utvecklare? GĂ„ med i vĂ„rt tekniska samhĂ€lle pĂ„ Discord. Dessutom, kolla in Utvecklarcentrum pĂ„ vĂ„r webbplats, dĂ€r du kan hitta utvecklarverktyg, dokumentation och mycket mer.

Ontology

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster