Hoe je een smart contract op Python schrijft in het Ontology-netwerk. Deel 1: Blockchain & Block API

Hoe schrijf je een slim contract in Python op het Ontology-netwerk. Deel 1: Blockchain & Block API

Dit is het eerste deel van een serie leerartikelen over het maken van smart contracts op Python in het blockchain-netwerk Ontology met behulp van de ontwikkeltool voor smart contracts. SmartX.

In dit artikel beginnen we met de kennismaking met de API van het smart contract Ontology. De API van het smart contract Ontology is verdeeld in 7 modules:

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

Blockchain & Block API is de kern van het smart contract systeem Ontology. De Blockchain API ondersteunt basisoperaties voor blockchain-verzoeken, zoals het ophalen van de huidige blokhoogte, terwijl de Block API basisoperaties voor blokverzoeken ondersteunt, zoals het opvragen van het aantal transacties voor een bepaald blok.

Laten we beginnen!

Maak eerst een nieuw contract aan in SmartX, en volg vervolgens de onderstaande instructies.

1. Hoe Blockchain API te gebruiken

De verwijzingen naar functies in smart contracts zijn identiek aan de verwijzingen in Python. Je kunt de relevante functies invoeren wanneer nodig. Bijvoorbeeld, de onderstaande instructie voert GetHeight in— een functie voor het verkrijgen van de huidige blokhoogte, en GetHeader— een functie voor het verkrijgen van de blokheader.

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

GetHeight

GetHeight wordt gebruikt om het laatste volgnummer van een blok in de blockchain te krijgen, zoals getoond in het onderstaande voorbeeld. In het laatste voorbeeld zullen we voor de eenvoud de Main functie overslaan, maar je kunt deze toevoegen indien nodig.

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 wordt gebruikt om de blokheader te verkrijgen, waarbij de parameter het volgnummer van het blok in de blockchain is. Voorbeeld:

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 wordt gebruikt om een transactie te verkrijgen via de transactiehash. De transactiehash wordt verzonden in GetTransactionByHash als parameters in bytearray-formaat. De sleutel tot deze functie is het omzetten van de transactiehash in hex-formaat naar een transactiehash in bytearray-formaat. Dit is een belangrijke stap. Anders zou je een foutmelding krijgen die aangeeft dat er geen blok met die blokhash bestaat. Laten we de transactiehash in hex-formaat als voorbeeld nemen om deze om te zetten naar bytearray-formaat. Het voorbeeld ziet er als volgt uit:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Draai eerst de transactiehash om:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Ontwikkelaars kunnen deze stap uitvoeren met behulp van de Hex Number (little endian) Number-conversietool die door SmartX wordt aangeboden.

Converteer vervolgens het verkregen resultaat naar een bytearray-formaat:

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

Dit kan worden gedaan met behulp van de String Byte Array-conversietool die door SmartX wordt aangeboden. Tot slot, converteer de resulterende bytearray naar een soortgelijke string:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Hieronder is een voorbeeld van de functie GetTransactionByHash, die een transactie haalt op basis van de transactiehash:

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 wordt gebruikt om de hoogte van de transactie op te halen aan de hand van de transactiehash. Laten we de hash uit het bovenstaande voorbeeld nemen:

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

GetContract

Ontwikkelaars kunnen de functie GetContract gebruiken om een contract op te halen aan de hand van de contracthash. Het proces van het converteren van de contracthash is vergelijkbaar met het proces van het converteren van de transactiehash dat hierboven is vermeld.

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 wordt gebruikt om een blok op te halen. Er zijn twee manieren om een specifiek blok te krijgen.

1. Haal het blok op op basis van de blokhoogte:

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

2. Haal het blok op op basis van de blokhash:

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

2. Hoe de Block API te gebruiken

Er zijn drie beschikbare functies in de Block API: GetTransactions, GetTransactionCount, en GetTransactionByIndex. We zullen ze ƩƩn voor ƩƩn bekijken.

GetTransactionCount

GetTransactionCount wordt gebruikt om het aantal transacties voor het opgegeven blok op te halen.

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

GetTransactions

Ontwikkelaars kunnen de functie GetTransactions gebruiken om alle transacties in dit blok te verkrijgen.

van ontology.interop.System.Blockchain import GetBlock
van ontology.interop.System.Block import GetTransactions 
def demo():
    block=GetBlock(1408)
    txs=GetTransactions(block)
    return txs

GetTransactionByIndex

GetTransactionByIndex wordt gebruikt om een specifieke transactie in dit blok op te halen.

van ontology.interop.System.Blockchain import GetBlock
van ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # index begint vanaf 0.
    return tx

Een uitgebreide handleiding is te vinden op onze GitHub.

Naschrift

Blockchain & Block API is een onmisbaar onderdeel van slimme contracten, omdat u deze kunt gebruiken om gegevens van de blockchain en blockgegevens in slimme contracten op te vragen. In de volgende artikelen zullen we bespreken hoe de overige API's gebruikt kunnen worden en hun interactie met de Ontology blockchain worden verduidelijkt.

Dit artikel is vertaald door de redactie van Hashrate&Shares speciaal voor OntologyRussia. klik

Bent u een ontwikkelaar? Sluit u aan bij onze technische gemeenschap op Discord. Bekijk ook ons Ontwikkelaarscentrum op onze website, waar u ontwikkelaarstools, documentatie en meer kunt vinden.

Ontology

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster