Wie man einen Smart Contract in Python im Ontology-Netzwerk schreibt. Teil 1: Blockchain & Block API

Wie man einen Smart Contract in Python im Ontology-Netzwerk schreibt. Teil 1: Blockchain & Block API

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. SmartX.

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:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API und
  7. 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 SmartX, 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, GetHeader

GetHeight

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 function

GetHeader

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 header

GetTransactionByHash

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:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Zuerst kehren Sie den Transaktionshash um:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Entwickler 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:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Im 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 tx

GetTransactionHeight

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 height

GetContract

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 contract

GetBlock

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 block

2. 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 count

GetTransactions

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 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) # Der Index beginnt bei 0.
    return tx

Eine vollständige Anleitung finden Sie auf unserer GitHub.

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. klicken

Sind Sie Entwickler? Treten Sie unserer technischen Gemeinschaft auf Discord. Außerdem schauen Sie in das Entwicklerzentrum auf unserer Website, wo Sie Entwicklerwerkzeuge, Dokumentationen und vieles mehr finden können.

Ontology

Quelle: habr.com

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster