Sådan skriver du en smart kontrakt i Python på Ontology-netværket. Del 1: Blockchain & Block API

Sådan skriver du en smart kontrakt i Python på Ontology-netværket. Del 1: Blockchain & Block API

Dette er den første del i en række tutorials om at skabe Python smarte kontrakter på Ontology blockchain netværket ved hjælp af smart kontraktudviklingsværktøjet. SmartX.

I denne artikel vil vi begynde vores bekendtskab med Ontology smart contract API. Ontology smart contract API er opdelt i 7 moduler:

  1. Blockchain & Block API,
  2. runtime API,
  3. storage API,
  4. native API,
  5. Opgrader API,
  6. Execution Engine API og
  7. Statisk og dynamisk opkald API.

Blockchain & Block API er hoveddelen af ​​Ontology smart contract system. Blockchain API understøtter grundlæggende blockchain-forespørgselsoperationer, såsom at få den aktuelle blokhøjde, mens Block-API'en understøtter grundlæggende blokforespørgselsoperationer, såsom forespørgsel efter antallet af transaktioner for en given blok.

Lad os komme igang!

Først skal du oprette en ny kontrakt i SmartXog følg derefter instruktionerne nedenfor.

1. Sådan bruger du Blockchain API

Links til smarte kontraktfunktioner er identiske med Python-links. Du kan indtaste de tilsvarende funktioner efter behov. For eksempel introducerer følgende sætning en GetHeight-funktion til at få den aktuelle blokhøjde og en GetHeader-funktion til at hente blokkens header.

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

GetHeight

GetHeight bruges til at få det sidste bloksekvensnummer i blokkæden, som vist i eksemplet nedenfor. I det sidste eksempel vil vi for nemheds skyld udelade hovedfunktionen, men du kan tilføje den, hvis det er nødvendigt.

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 bruges til at få blokoverskriften, parameteren er serienummeret på blokken i blockchain. Eksempel:

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 bruges til at få en transaktion via en transaktions-hash. Transaktions-hashen sendes til GetTransactionByHash som parametre i bytearray-format. Nøglen til denne funktion er at konvertere transaktions-hash i hex-format til transaktions-hash i bytearray-format. Dette er et vigtigt skridt. Ellers vil du få en fejl, der indikerer, at der ikke er nogen blok med den blokhash. Lad os tage transaktions-hashen i hex-format som et eksempel for at konvertere den til bytearray-format. Et eksempel ser således ud:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Først skal du vende transaktionens hash:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Udviklere kan udføre dette trin ved hjælp af Hex Number (little endian) Number-konverteringsværktøjet leveret af SmartX.

Konverter derefter resultatet til 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}

Dette kan gøres ved hjælp af String Byte Array-konverteringsværktøjet leveret af SmartX. Til sidst skal du konvertere den resulterende bytearray til en lignende streng:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Følgende er et eksempel på GetTransactionByHash-funktionen, som tager en transaktion ved hjælp af hash for 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 bruges til at få transaktionshøjden via transaktions-hashen. Lad os tage hashen fra eksemplet ovenfor:

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

Få Kontrakt

Udviklere kan bruge funktionen GetContract til at få en kontrakt via kontraktens hash. Kontrakt-hash-konverteringsprocessen er den samme som transaktions-hash-konverteringsprocessen nævnt ovenfor.

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 bruges til at få en blok. Der er to måder at få en bestemt blok på.

1. Få blok for blok højde:

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

2. Få en blok for blok hash:

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

2. Sådan bruger du Block API

Der er tre tilgængelige funktioner i Block API: Hent Transaktioner, GetTransactionCountOg GetTransactionByIndex. Vi vil nedbryde dem en efter en.

GetTransactionCount

GetTransactionCount bruges til at få antallet af transaktioner for en given blok.

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

Hent Transaktioner

Udviklere kan bruge GetTransactions-funktionen til at få alle transaktioner i en given blok.

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 bruges til at få en specifik transaktion i en given blok.

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 komplet guide kan findes på vores GitHub.

efterskrift

Blockchain & Block API er en uundværlig del af smarte kontrakter, fordi du kan bruge den til at forespørge blockchain-data og blokere data i smarte kontrakter. I fremtidige artikler vil vi diskutere, hvordan man bruger de resterende API'er og forstår, hvordan de interagerer med Ontology blockchain.

Artiklen er oversat af redaktørerne af Hashrate&Shares specielt til OntologyRussia. skrig

Er du udvikler? Tilmeld dig vores tech-fællesskab på Discord. Tag også et kig på Udviklercenter på vores hjemmeside, hvor du kan finde udviklerværktøjer, dokumentation og meget mere.

Ontologi

Kilde: www.habr.com

Tilføj en kommentar