
Dies ist der erste Teil einer Reihe von Lehrartikeln über die Erstellung von Smart Contracts in Python im Ontology-Blockchain-Netzwerk mithilfe des Smart Contract-Entwicklungstools. .
In diesem Artikel beginnen wir mit der Einführung in die API des Ontology-Smart Contracts. Die API des Ontology-Smart Contracts ist in 7 Module unterteilt:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API und
- Static & Dynamic Call API.
Blockchain & Block API ist der Hauptbestandteil des Ontology-Smart Contractsystems. Die Blockchain API unterstützt grundlegende Blockchain-Abfrageoperationen, wie das Abrufen der aktuellen Blockhöhe, während die Block API grundlegende Block-Abfrageoperationen unterstützt, wie z. B. das Abfragen der Anzahl der Transaktionen für einen bestimmten Block.
Lass uns anfangen!
Zuerst erstellen Sie einen neuen Vertrag in , und folgen Sie dann den nachstehenden Anweisungen.
1. So verwenden Sie die Blockchain API
Die Links zu den Smart Contract-Funktionen sind identisch mit den Links in Python. Sie können die entsprechenden Funktionen nach Bedarf eingeben. Beispielsweise führt die folgende Anweisung die Funktion GetHeight ein - eine Funktion zum Abrufen der aktuellen Blockhöhe, und GetHeader - eine Funktion zum Abrufen des Blockheaders.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight wird verwendet, um die letzte Reihenfolge eines Blocks in der Blockchain zu erhalten, wie im folgenden Beispiel gezeigt. Im letzten Beispiel lassen wir die Main-Funktion der Einfachheit halber weg, aber Sie können sie hinzufügen, wenn nötig.
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 functionGetHeader
GetHeader wird verwendet, um den Blockheader abzurufen, wobei der Parameter die Reihenfolge des Blocks in der Blockchain ist. Beispiel:
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 headerGetTransactionByHash
GetTransactionByHash wird verwendet, um eine Transaktion über den Transaktionshash abzurufen. Der Transaktionshash wird als Parameter im bytearray-Format übergeben. Der Schlüssel zu dieser Funktion ist die Umwandlung des Transaktionshashs im hexadezimalen Format in den Transaktionshash im bytearray-Format. Dies ist ein wichtiger Schritt. Andernfalls erhalten Sie eine Fehlermeldung, die darauf hinweist, dass kein Block mit diesem Blockhash exists. Lassen Sie uns den Transaktionshash im hexadezimalen Format als Beispiel verwenden, um ihn in das bytearray-Format umzuwandeln. Das Beispiel sieht wie folgt aus: GetTransactionByHash 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1
Zuerst kehren Sie den Transaktionshash um:Zuerst kehren Sie den Transaktions-Hash um:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Entwickler können diesen Schritt mit dem von SmartX bereitgestellten Hex Number (little endian) Number-Konvertierungswerkzeug durchführen.
Konvertieren Sie dann das erhaltene Ergebnis in das Format 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}Dies kann mit dem von SmartX bereitgestellten String Byte Array-Konvertierungswerkzeug erfolgen. Schließlich konvertieren Sie das erhaltene bytearray in eine ähnliche Zeichenkette:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fIm Folgenden finden Sie ein Beispiel für die Funktion GetTransactionByHash, die eine Transaktion anhand des Transaktionshashs abruft:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight wird verwendet, um die Höhe der Transaktion anhand des Transaktionshashs abzurufen. Lassen Sie uns den Hash aus dem obigen Beispiel verwenden:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Entwickler können die Funktion GetContract verwenden, um einen Vertrag anhand des Vertrags-Hashes abzurufen. Der Prozess der Konvertierung des Vertrags-Hashes entspricht dem oben genannten Prozess zur Konvertierung des Transaktions-Hashes.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock wird verwendet, um einen Block abzurufen. Es gibt zwei Möglichkeiten, einen bestimmten Block zu erhalten.
1. Einen Block nach Blockhöhe abrufen:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Einen Block nach Block-Hash abrufen:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Wie man die Block-API verwendet
Es gibt drei verfügbare Funktionen in der Block-API: GetTransactions, GetTransactionCount, und GetTransactionByIndex. Wir werden sie nacheinander behandeln.
GetTransactionCount
GetTransactionCount wird verwendet, um die Anzahl der Transaktionen für diesen Block abzurufen.
von ontology.interop.System.Blockchain import GetBlock
von ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Entwickler können die Funktion GetTransactions nutzen, um alle Transaktionen in diesem Block abzurufen.
von ontology.interop.System.Blockchain import GetBlock
von ontology.interop.System.Block import GetTransactions
def demo():
block=GetBlock(1408)
txs=GetTransactions(block)
return txsGetTransactionByIndex
GetTransactionByIndex wird verwendet, um eine bestimmte Transaktion in diesem Block abzurufen.
von ontology.interop.System.Blockchain import GetBlock
von ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # Der Index beginnt bei 0.
return txEine vollständige Anleitung finden Sie in unserem .
Nachwort
Die Blockchain & Block API ist ein unverzichtbarer Teil von Smart Contracts, da Sie sie verwenden können, um Daten aus der Blockchain und dem Block in Smart Contracts abzufragen. In den folgenden Artikeln werden wir erörtern, wie die anderen APIs verwendet werden können und welche Wechselwirkungen sie mit der Ontology-Blockchain haben.
Der Artikel wurde von der Redaktion Hashrate&Shares speziell für OntologyRussia übersetzt.
Sind Sie Entwickler? Treten Sie unserer technischen Gemeinschaft bei auf . Schauen Sie auch in das auf unserer Website, wo Sie Entwicklerwerkzeuge, Dokumentationen und vieles mehr finden können.
Ontology
- /
- Telegram /
- /
Quelle: habr.com
