Hur man skriver ett smart kontrakt i Python på ontologinätverket. Del 1: Blockchain & Block API

Hur man skriver ett smart kontrakt i Python på ontologinätverket. Del 1: Blockchain & Block API

Detta är den första delen i en serie handledningar om att skapa Python smarta kontrakt på Ontology blockchain-nätverket med hjälp av det smarta kontraktsutvecklingsverktyget. SmartX.

I den här artikeln kommer vi att börja vår bekantskap med Ontology smart contract API. Ontology smart contract API är uppdelat i 7 moduler:

  1. Blockchain & Block API,
  2. runtime API,
  3. lagrings-API,
  4. inbyggt API,
  5. Uppgradera API,
  6. Execution Engine API och
  7. Statiskt och dynamiskt samtals-API.

Blockchain & Block API är huvuddelen av Ontologys smarta kontraktssystem. Blockchain API stöder grundläggande blockchain-frågeoperationer, som att hämta den aktuella blockhöjden, medan Block-API:et stöder grundläggande blockfrågeoperationer, som att fråga antalet transaktioner för ett givet block.

Låt oss börja!

Skapa först ett nytt kontrakt i SmartXoch följ sedan instruktionerna nedan.

1. Hur man använder Blockchain API

Länkar till smarta kontraktsfunktioner är identiska med Python-länkar. Du kan ange motsvarande funktioner efter behov. Till exempel introducerar följande sats en GetHeight-funktion för att få den aktuella blockhöjden och en GetHeader-funktion för att hämta blockets rubrik.

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

GetHeight

GetHeight används för att få det sista blocksekvensnumret i blockkedjan, som visas i exemplet nedan. I det sista exemplet kommer vi att utelämna huvudfunktionen för enkelhetens skull, 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 serienumret på blocket i blockkedjan. 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 få en transaktion via en transaktionshash. Transaktions-hash skickas till GetTransactionByHash som parametrar i bytearray-format. Nyckeln till denna funktion är att konvertera transaktions-hash i hex-format till transaktions-hash i bytearray-format. Detta är ett viktigt steg. Annars skulle du få ett felmeddelande som indikerar att det inte finns något block med den blockhash. Låt oss ta transaktionshashen i hex-format som ett exempel för att konvertera den till bytearray-format. Ett exempel ser ut så här:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Reversera först transaktionshash:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Utvecklare kan utföra detta steg med hjälp av konverteringsverktyget Hex Number (little endian) Number från SmartX.

Konvertera sedan resultatet till 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}

Detta kan göras med hjälp av konverteringsverktyget String Byte Array från SmartX. Slutligen, konvertera den resulterande bytearrayen till en liknande sträng:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Följande är ett exempel på GetTransactionByHash-funktionen, som tar en transaktion med hash för transaktionen:

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 få transaktionshöjden via transaktionshashen. Låt oss ta hashen 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 få ett kontrakt via kontraktets hash. Kontraktshashkonverteringsprocessen är densamma som transaktionshashkonverteringsprocessen som nämns 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 få ett block. Det finns två sätt att få ett specifikt block.

1. Få block för block höjd:

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

2. Få ett block för block-hash:

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, GetTransactionCountOch GetTransactionByIndex. Vi kommer att bryta ner dem en efter en.

GetTransactionCount

GetTransactionCount används för att få 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 GetTransactions-funktionen för att få alla transaktioner i ett givet 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 få en specifik transaktion i ett givet 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 starts from 0.
    return tx

En komplett guide finns på vår GitHub.

efterordet

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 blockera data i smarta kontrakt. I följande artiklar kommer vi att diskutera hur man använder resten av API:erna och ta reda på hur de interagerar med Ontology blockchain.

Artikeln översattes av redaktörerna för Hashrate&Shares speciellt för OntologyRussia. gråta

Är du en utvecklare? Gå med i vår tekniska community på Discord. Ta också en titt på Utvecklarcenter på vår webbplats, där du kan hitta utvecklarverktyg, dokumentation med mera.

Ontologi

Källa: will.com

Lägg en kommentar