
Dies ist der erste Teil einer Serie von Tutorials über die Erstellung von Smart Contracts in Python für das Ontology-Blockchain-Netzwerk mit dem Smart Contract-Entwicklungstool. .
In diesem Artikel beginnen wir mit der Einführung in die API von Ontology-Smart Contracts. Die API für 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.
Die Blockchain & Block API ist ein zentraler Bestandteil des Smart Contract-Systems von Ontology. Die Blockchain API unterstützt grundlegende Blockchain-Anfragen, wie z.B. das Abrufen der aktuellen Blockhöhe, während die Block API grundlegende Blockanfragen unterstützt, wie z.B. das Anfordern der Anzahl der Transaktionen für einen bestimmten Block.
Lass uns beginnen!
Erstellen Sie zunächst einen neuen Vertrag in , und folgen Sie dann den untenstehenden Anweisungen.
1. So verwenden Sie die Blockchain API
Die Links zu den Smart Contract-Funktionen sind identisch mit den Python-Links. Sie können die entsprechenden Funktionen nach Bedarf eingeben. Zum Beispiel gibt die folgende Anweisung GetHeight ein, um die aktuelle Blockhöhe abzurufen, und GetHeader, um den Header des Blocks abzurufen.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight wird verwendet, um die zuletzt verwendete Blocknummer in der Blockchain abzurufen, wie im folgenden Beispiel gezeigt. Im letzten Beispiel haben wir der Einfachheit halber die Funktion Main weggelassen, aber Sie können sie hinzufügen, wenn dies erforderlich ist.
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 Blockkopf abzurufen, wobei die Blocknummer in der Blockchain als Parameter verwendet wird. 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 dient dazu, eine Transaktion über den Transaktionshash abzurufen. Der Transaktionshash wird gesendet in GetTransactionByHash als Parameter im bytearray-Format. Der Schlüssel zu dieser Funktion ist die Umwandlung des Transaktionshashs im Hex-Format in den Transaktionshash im bytearray-Format. Dies ist ein wichtiger Schritt. Andernfalls würden Sie einen Fehler erhalten, der angibt, dass es keinen Block mit diesem Hash gibt. Lassen Sie uns den Transaktionshash im Hex-Format als Beispiel nehmen, um ihn in das bytearray-Format zu konvertieren. Das Beispiel sieht wie folgt aus:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Zuerst kehren Sie den Transaktionshash um:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Entwickler können diesen Schritt mit dem Hex Number (little endian) Number Konverter durchführen, der von SmartX bereitgestellt wird.
Konvertieren Sie dann das erhaltene Ergebnis in das 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}Dies kann mit dem String Byte Array-Konverter erfolgen, der von SmartX bereitgestellt wird. 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 einer 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 nutzen, um einen Vertrag über den Hash des Vertrags abzurufen. Der Prozess der Umwandlung des Vertrags-Hashes entspricht dem Prozess der Umwandlung des Transaktions-Hashes, der oben erwähnt wurde.
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, um einen bestimmten Block zu erhalten.
1. Block nach Blockhöhe abrufen:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. 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 durchgehen.
GetTransactionCount
GetTransactionCount wird verwendet, um die Anzahl der Transaktionen für einen bestimmten Block abzurufen.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Entwickler können die Funktion GetTransactions verwenden, um alle Transaktionen in diesem Block abzurufen.
from ontology.interop.System.Blockchain import GetBlock
from 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.
from ontology.interop.System.Blockchain import GetBlock
from 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 auf unserer .
Nachwort
Blockchain & Block API sind ein wesentlicher Bestandteil von Smart Contracts, da Sie diese verwenden können, um Blockchain- und Blockdaten in Smart Contracts anzufordern. In den folgenden Artikeln werden wir die Verwendung der anderen APIs besprechen und deren Interaktion mit der Ontology-Blockchain untersuchen.
Der Artikel wurde von der Redaktion Hashrate & Shares speziell für OntologyRussia übersetzt.
Sind Sie Entwickler? Treten Sie unserer technischen Gemeinschaft auf . Außerdem schauen Sie in das auf unserer Website, wo Sie Entwicklerwerkzeuge, Dokumentationen und vieles mehr finden können.
Ontology
- /
- Telegram /
- /
Quelle: habr.com
