So erstellen Sie einen Smart Python-Vertrag im Ontology-Netzwerk. Teil 1: Blockchain & Block API

Bild

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:

  1. Blockchain & Block API,
  2. Speicher-API
  3. Laufzeit-API
  4. Native API
  5. API aktualisieren
  6. Execution Engine API und
  7. 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) # print height return height #return height after running the function 

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(): # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1" tx_hash=bytearray(b"\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") tx=GetTransactionByHash(tx_hash) return tx 


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(): # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1" tx_hash=bytearray(b"\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") height=GetTransactionHeight(tx_hash) return height 

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(): # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa" contract_hash=bytearray(b"\xfa\x98\x96\x21\x32\x32\xbb\xf0\x9f\x23\x91\xfa\xef\x95\x9b\xff\xa5\x75\x1a\xd8") contract=GetContract(contract_hash) return contract 

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) # index starts from 0. return tx 

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


Source: https://habr.com/ru/post/de474966/


All Articles