Comment écrire un contrat intelligent en Python sur le réseau Ontology. Partie 1 : Blockchain et Block API

Comment écrire un contrat intelligent en Python sur le réseau Ontology. Partie 1 : Blockchain et Block API

Il s'agit de la première partie d'une série de tutoriels sur la création de contrats intelligents Python sur le réseau blockchain Ontology à l'aide de l'outil de développement de contrats intelligents. SmartX.

Dans cet article, nous allons commencer à nous familiariser avec l'API de contrat intelligent Ontology. L'API de contrat intelligent d'Ontology est divisée en 7 modules :

  1. Chaîne de blocs et API de blocs,
  2. API d'exécution,
  3. API de stockage,
  4. API native,
  5. API de mise à niveau,
  6. API du moteur d'exécution et
  7. API d'appel statique et dynamique.

Blockchain & Block API est la partie principale du système de contrat intelligent Ontology. L'API Blockchain prend en charge les opérations de requête de base de la blockchain, telles que l'obtention de la hauteur de bloc actuelle, tandis que l'API Block prend en charge les opérations de requête de bloc de base, telles que l'interrogation du nombre de transactions pour un bloc donné.

Commençons!

Tout d'abord, créez un nouveau contrat dans SmartXpuis suivez les instructions ci-dessous.

1. Comment utiliser l'API Blockchain

Les liens vers les fonctions de contrat intelligent sont identiques aux liens Python. Vous pouvez entrer les fonctions correspondantes selon vos besoins. Par exemple, l'instruction suivante introduit une fonction GetHeight pour obtenir la hauteur de bloc actuelle et une fonction GetHeader pour obtenir l'en-tête du bloc.

from ontology.interop.System.Blockchain import GetHeight, GetHeader

ObtenirHauteur

GetHeight est utilisé pour obtenir le dernier numéro de séquence de bloc dans la blockchain, comme illustré dans l'exemple ci-dessous. Dans le dernier exemple, nous omettons la fonction Main pour plus de commodité, mais vous pouvez l'ajouter si nécessaire.

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

Obtenir l'en-tête

GetHeader est utilisé pour obtenir l'en-tête du bloc, le paramètre est le numéro de série du bloc dans la blockchain. Exemple:

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 est utilisé pour obtenir une transaction via un hachage de transaction. Le hachage de la transaction est envoyé à GetTransactionByHash en tant que paramètres au format bytearray. La clé de cette fonction est de convertir le hachage de transaction au format hexadécimal en hachage de transaction au format bytearray. Ceci est une étape importante. Sinon, vous obtiendrez une erreur indiquant qu'il n'y a pas de bloc avec ce hachage de bloc. Prenons comme exemple le hachage de transaction au format hexadécimal pour le convertir au format bytearray. Un exemple ressemble à ceci :

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Tout d'abord, inversez le hachage de la transaction :

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Les développeurs peuvent accomplir cette étape à l'aide de l'outil de conversion Hex Number(little endian)Number fourni par SmartX.

Convertissez ensuite le résultat au 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}

Cela peut être fait en utilisant l'outil de conversion String Byte Array fourni par SmartX. Enfin, convertissez le bytearray résultant en une chaîne similaire :

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Voici un exemple de fonction GetTransactionByHash qui prend une transaction en utilisant le hachage de la transaction :

from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
    # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    tx=GetTransactionByHash(tx_hash)
    return tx

ObtenirTransactionHeight

GetTransactionHeight est utilisé pour obtenir la hauteur de transaction via le hachage de transaction. Prenons le hachage de l'exemple ci-dessus :

from ontology.interop.System.Blockchain import  GetTransactionHeight
def demo():
    #   tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    height=GetTransactionHeight(tx_hash)
    return height

Obtenir un contrat

Les développeurs peuvent utiliser la fonction GetContract pour obtenir un contrat via le hachage du contrat. Le processus de conversion de hachage de contrat est le même que le processus de conversion de hachage de transaction mentionné ci-dessus.

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 est utilisé pour obtenir un bloc. Il existe deux façons d'obtenir un bloc spécifique.

1. Obtenez la hauteur bloc par bloc :

from ontology.interop.System.Blockchain import GetBlock
def demo():
    block=GetBlock(1408)
    return block

2. Obtenez un hachage bloc par bloc :

from ontology.interop.System.Blockchain import GetBlock
def demo():    
    block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
    block=GetBlock(block_hash)

2. Comment utiliser l'API Block

Trois fonctions sont disponibles dans l'API Block : Obtenir des transactions, ObtenirTransactionCountEt GetTransactionByIndex. Nous allons les décomposer un par un.

ObtenirTransactionCount

GetTransactionCount est utilisé pour obtenir le nombre de transactions pour un bloc donné.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
    block=GetBlock(1408)
    count=GetTransactionCount(block)
    return count

Obtenir des transactions

Les développeurs peuvent utiliser la fonction GetTransactions pour obtenir toutes les transactions dans un bloc donné.

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 est utilisé pour obtenir une transaction spécifique dans un bloc donné.

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

Un guide complet est disponible sur notre GitHub.

Postface

L'API Blockchain & Block est un élément indispensable des contrats intelligents car vous pouvez les utiliser pour demander des données de blockchain et bloquer des données dans des contrats intelligents. Dans les articles suivants, nous verrons comment utiliser le reste des API et découvrirons comment elles interagissent avec la blockchain Ontology.

L'article a été traduit par les éditeurs de Hashrate&Shares spécialement pour OntologyRussia. клик

Vous êtes développeur? Rejoignez notre communauté technologique sur Discorde. Aussi, jetez un oeil à Centre de développement sur notre site Web, où vous trouverez des outils de développement, de la documentation, etc.

Ontologie

Source: habr.com

Ajouter un commentaire