Comment écrire un contrat intelligent en Python sur le réseau Ontology. Partie 1 : Blockchain & API de blocs

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

Ceci est la première partie d'une série d'articles éducatifs sur la création de contrats intelligents en Python dans le réseau blockchain Ontology à l'aide d'un outil de développement de contrats intelligents. SmartX.

Dans cet article, nous commencerons notre introduction à l'API des contrats intelligents Ontology. L'API des contrats intelligents Ontology est divisée en 7 modules :

  1. API Blockchain & Block,
  2. API Runtime,
  3. API Storage,
  4. API Native,
  5. API Upgrade,
  6. API Execution Engine et
  7. API Static & Dynamic Call.

L'API Blockchain & Block est la partie principale du système des contrats intelligents Ontology. L'API Blockchain prend en charge les opérations de base des requêtes blockchain, comme par exemple obtenir la hauteur actuelle du bloc, tandis que l'API Block prend en charge les opérations de base des requêtes de blocs, par exemple demander le nombre de transactions pour ce bloc.

Commençons !

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

1. Comment utiliser l'API Blockchain

Les appels aux fonctions des contrats intelligents sont identiques aux appels Python. Vous pouvez saisir les fonctions appropriées selon vos besoins. Par exemple, l'instruction ci-dessous appelle GetHeight— une fonction pour obtenir la hauteur actuelle du bloc, et GetHeader— une fonction pour obtenir l'en-tête du bloc.

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

GetHeight

GetHeight est utilisé pour obtenir le dernier numéro de séquence du bloc dans la blockchain, comme illustré dans l'exemple ci-dessous. Dans le dernier exemple, pour des raisons de commodité, nous omettrons la fonction Main, 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

GetHeader

GetHeader est utilisé pour obtenir l'en-tête du bloc, le paramètre étant le numéro de séquence 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 par son hash. Le hash de la transaction est envoyé dans GetTransactionByHash comme paramètres au format bytearray. La clé de cette fonction est de convertir le hash de la transaction en format hexadécimal en hash de transaction au format bytearray. C'est une étape importante. Sinon, vous obtiendrez une erreur indiquant qu'il n'y a pas de bloc avec ce hash de bloc. Prenons un hash de transaction en format hexadécimal, par exemple, pour le convertir en format bytearray. L'exemple est le suivant :

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Inversez d'abord le hash de la transaction :

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

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

Ensuite, convertissez le résultat obtenu 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 réalisé à l'aide de l'outil de conversion String Byte Array fourni par SmartX. Enfin, convertissez le bytearray obtenu en une chaîne semblable à :

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Voici un exemple de la fonction GetTransactionByHash, qui récupère une transaction à partir de son hachage :

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 est utilisé pour obtenir la hauteur d'une transaction à partir de son hachage. Prenons le hachage de l'exemple précédent :

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

GetContract

Les développeurs peuvent utiliser la fonction GetContract pour récupérer un contrat à partir de son hachage. Le processus de conversion du hachage du contrat est similaire à celui de la conversion du hachage de la transaction mentionnée 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 récupérer un bloc. Il existe deux façons d'obtenir un bloc spécifique.

1. Obtenir un bloc par sa hauteur :

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

2. Obtenir un bloc par son hachage :

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

2. Comment utiliser l'API Block

Il existe trois fonctions disponibles dans l'API Block : GetTransactions, GetTransactionCountet GetTransactionByIndex. Nous les examinerons une par une.

GetTransactionCount

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

GetTransactions

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

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 ce bloc.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # l'index commence à 0.
    return tx

Le guide complet se trouve sur notre GitHub.

Postface

L'API Blockchain & Block est une partie indispensable des contrats intelligents, car vous pouvez les utiliser pour demander des données sur la blockchain et des données sur le bloc dans les contrats intelligents. Dans les prochains articles, nous discuterons de la façon d'utiliser les autres API et découvrirons comment elles interagissent avec la blockchain Ontology.

Cet article a été traduit par l'équipe de Hashrate & Shares spécialement pour OntologyRussia. cliquer

Vous êtes développeur ? Rejoignez notre communauté technique sur Discord. De plus, jetez un coup d'œil à Centre des développeurs sur notre site, où vous pouvez trouver des outils pour développeurs, de la documentation et bien plus encore.

Ontology

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster