
Dies ist der erste Teil einer Reihe von Lernprogrammen zum Erstellen intelligenter Verträge in Python im Ontology-Blockchain-Netzwerk mithilfe des
SmartX-Tools zur
Entwicklung intelligenter Verträge.
In diesem Artikel beginnen wir mit der Einführung in die Ontology Smart Contract API. Die Ontology Smart Contract API ist in 7 Module unterteilt:
- Blockchain & Block API,
- Speicher-API
- Laufzeit-API
- Native API
- API aktualisieren
- Execution Engine API und
- Statische und dynamische Aufruf-API.
Die Blockchain & Block API ist ein wesentlicher Bestandteil des Ontology Smart Contract Systems. Die Blockchain-API unterstützt grundlegende Blockchain-Anforderungsoperationen, z. B. das Abrufen der aktuellen Blockhöhe, während die Block-API grundlegende Blockanforderungsoperationen unterstützt, z. B. das Anfordern der Anzahl von Transaktionen für einen bestimmten Block.
Fangen wir an!Erstellen Sie zunächst einen neuen Vertrag in
SmartX und befolgen Sie dann die nachstehenden Anweisungen.
1. So verwenden Sie die Blockchain-API
Verknüpfungen zu Smart Contract-Funktionen sind mit Python-Verknüpfungen identisch. Sie können die entsprechenden Funktionen nach Bedarf eingeben. Die folgende Anweisung führt beispielsweise 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, GetHeader
Getheight
GetHeight wird verwendet, um die letzte Blocksequenznummer in der Blockchain abzurufen, wie im folgenden Beispiel gezeigt. Im letzten Beispiel überspringen wir der Einfachheit halber die Hauptfunktion, aber Sie können sie bei Bedarf hinzufügen.
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)
Getheader
GetHeader, um den Titel des Blocks abzurufen. Der Parameter ist die Seriennummer des Blocks in der Blockchain. Ein 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 header
GetTransactionByHash
GetTransactionByHash wird verwendet, um eine Transaktion über einen Transaktionshash abzurufen. Der Transaktions-Hash wird als Parameter im Bytearray-Format an
GetTransactionByHash gesendet. Der Schlüssel zu dieser Funktion besteht darin, den Transaktions-Hash im Hex-Format in einen Hash der Transaktion im Bytearray-Format zu konvertieren. Dies ist ein wichtiger Schritt. Andernfalls erhalten Sie eine Fehlermeldung, die darauf hinweist, dass es keinen Block mit einem solchen Block-Hash gibt. Nehmen wir als Beispiel einen Hex-Hash einer Transaktion, um sie in das Bytearray-Format zu konvertieren. Ein Beispiel ist wie folgt:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1
Stornieren Sie zuerst den Transaktions-Hash:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279
Entwickler können diesen Schritt mit dem von SmartX bereitgestellten Konvertierungstool für Hex-Zahlen (Little Endian) ausführen.
Konvertieren Sie dann das 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 von SmartX bereitgestellten String Byte Array-Konvertierungstool durchgeführt werden. Konvertieren Sie schließlich das resultierende Bytearray in eine ähnliche Zeichenfolge:
\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f
Das folgende Beispiel zeigt eine GetTransactionByHash-Funktion, die eine Transaktion mithilfe eines Transaktionshashs ausführt:
from ontology.interop.System.Blockchain import GetTransactionByHash def demo():
GetTransactionHeight
GetTransactionHeight wird verwendet, um die Höhe einer Transaktion über einen Transaktions-Hash zu ermitteln. Nehmen wir den Hash aus dem obigen Beispiel:
from ontology.interop.System.Blockchain import GetTransactionHeight def demo():
Getcontract
Entwickler können die GetContract-Funktion verwenden, um einen Vertrag über einen Vertragshash abzurufen. Der Vertrags-Hash-Konvertierungsprozess ist der entsprechende oben erwähnte Transaktions-Hash-Konvertierungsprozess.
from ontology.interop.System.Blockchain import GetContract def demo():
Getblock
GetBlock wird verwendet, um einen Block abzurufen. Es gibt zwei Möglichkeiten, einen bestimmten Block abzurufen.
1. Block für Blockhöhe abrufen: from ontology.interop.System.Blockchain import GetBlock def demo(): block=GetBlock(1408) return block
2. Holen Sie sich den Block-für-Block-Hash: from ontology.interop.System.Blockchain import GetBlock def demo(): block_hash=bytearray(b'\x16\xe0\xc5\x40\x82\x79\x77\x30\x44\xea\x66\xc8\xc4\x5d\x17\xf7\x17\x73\x92\x33\x6d\x54\xe3\x48\x46\x0b\xc3\x2f\xe2\x15\x03\xe4') block=GetBlock(block_hash)
2. Verwendung der Block API
In der Block-API stehen drei Funktionen zur Verfügung:
GetTransactions ,
GetTransactionCount und
GetTransactionByIndex . Wir werden sie eins nach dem anderen sortieren.
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 count
Gettransactions
Entwickler können die GetTransactions-Funktion 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 txs
GetTransactionByIndex
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)
Die komplette Anleitung finden Sie auf unserem
GitHub .
Nachwort
Die Blockchain & Block API ist ein unverzichtbarer Bestandteil intelligenter Verträge, da Sie sie zum Anfordern von Blockchain-Daten und zum Blockieren von Daten in intelligenten Verträgen verwenden können. In den folgenden Artikeln wird die Verwendung der restlichen APIs und deren Interaktion mit der Ontology-Blockchain erläutert.
Der Artikel wurde von Hashrate & Shares speziell für OntologyRussia übersetzt. klicke
Sind Sie Entwickler? Treten Sie unserer Tech-Community bei
Discord bei . Besuchen Sie auch
das Developer Center auf unserer Website, wo Sie Entwicklertools, Dokumentationen und vieles mehr finden.
Ontologie