Hvordan skrive en smart kontrakt i Python på Ontology-nettverket. Del 1: Blockchain & Block API

Hvordan skrive en smart kontrakt i Python på Ontology-nettverket. Del 1: Blockchain & Block API

Dette er den første delen i en serie opplæringsprogrammer for å lage Python smarte kontrakter på Ontology blockchain-nettverket ved å bruke smart kontraktutviklingsverktøyet. SmartX.

I denne artikkelen vil vi begynne å bli kjent med Ontology smart contract API. Ontology smart contract API er delt inn i 7 moduler:

  1. Blockchain & Block API,
  2. runtime API,
  3. lagrings-API,
  4. native API,
  5. Oppgrader API,
  6. Execution Engine API og
  7. Statisk og dynamisk anrops-API.

Blockchain & Block API er hoveddelen av Ontology smart contract system. Blockchain API støtter grunnleggende blokkjedespørringsoperasjoner, for eksempel å få gjeldende blokkhøyde, mens Block API støtter grunnleggende blokkjedespørringsoperasjoner, for eksempel å spørre om antall transaksjoner for en gitt blokk.

La oss komme i gang!

Først oppretter du en ny kontrakt i SmartXog følg deretter instruksjonene nedenfor.

1. Hvordan bruke Blockchain API

Lenker til smarte kontraktsfunksjoner er identiske med Python-lenker. Du kan angi de tilsvarende funksjonene etter behov. For eksempel introduserer følgende setning en GetHeight-funksjon for å få gjeldende blokkhøyde, og en GetHeader-funksjon for å få blokkens overskrift.

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

GetHeight

GetHeight brukes til å få det siste blokksekvensnummeret i blokkjeden, som vist i eksemplet nedenfor. I det siste eksemplet vil vi for enkelhets skyld utelate hovedfunksjonen, men du kan legge den til om nødvendig.

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 brukes til å hente blokkhodet, parameteren er serienummeret til blokken i blokkjeden. 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 brukes til å få en transaksjon via en transaksjons-hash. Transaksjons-hashen sendes til GetTransactionByHash som parametere i bytearray-format. Nøkkelen til denne funksjonen er å konvertere transaksjons-hashen i hex-format til transaksjons-hashen i bytearray-format. Dette er et viktig skritt. Ellers vil du få en feilmelding som indikerer at det ikke er noen blokk med den blokkhashen. La oss ta transaksjons-hashen i hex-format som et eksempel for å konvertere den til bytearray-format. Et eksempel ser slik ut:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Først reverserer du transaksjons-hashen:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Utviklere kan oppnå dette trinnet ved å bruke Hex Number (little endian) Number-konverteringsverktøyet levert av SmartX.

Konverter deretter 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 gjøres ved hjelp av konverteringsverktøyet String Byte Array fra SmartX. Til slutt, konverter den resulterende bytearrayen til en lignende streng:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Følgende er et eksempel på GetTransactionByHash-funksjonen, som tar en transaksjon ved å bruke hashen til transaksjonen:

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 brukes til å få transaksjonshøyden via transaksjons-hashen. La oss ta 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

GetContract

Utviklere kan bruke funksjonen GetContract for å få en kontrakt via kontraktens hash. Kontrakts-hash-konverteringsprosessen er den samme som transaksjons-hash-konverteringsprosessen nevnt 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 brukes til å få en blokk. Det er to måter å få en bestemt blokk på.

1. Få blokk for blokk høyde:

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

2. Få en blokk for blokk-hash:

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

2. Hvordan bruke Block API

Det er tre tilgjengelige funksjoner i Block API: GetTransactions, GetTransactionCountOg GetTransactionByIndex. Vi vil bryte dem ned en etter en.

GetTransactionCount

GetTransactionCount brukes til å få antall transaksjoner for en gitt 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

Utviklere kan bruke GetTransactions-funksjonen for å få alle transaksjoner i en gitt 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 brukes til å få en spesifikk transaksjon i en gitt 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

En komplett guide finner du på vår GitHub.

etterord

Blockchain & Block API er en uunnværlig del av smarte kontrakter, da du kan bruke dem til å be om blokkjededata og blokkere data i smarte kontrakter. I fremtidige artikler vil vi diskutere hvordan du bruker resten av API-ene og finne ut hvordan de samhandler med Ontology blockchain.

Artikkelen ble oversatt av redaktørene til Hashrate&Shares spesielt for OntologyRussia. klikk

Er du en utvikler? Bli med i vårt tekniske fellesskap på Discord. Ta også en titt på Utviklersenter på nettsiden vår, hvor du kan finne utviklerverktøy, dokumentasjon og mer.

ontologi

Kilde: www.habr.com

Legg til en kommentar