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

image

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

Dans cet article, nous allons commencer notre introduction à l'API Ontology Smart Contract. L'API Smart Contract d'Ontology est divisée en 7 modules:

  1. Blockchain & Block API,
  2. API de stockage
  3. API d'exécution
  4. API native
  5. API de mise à niveau
  6. API Execution Engine et
  7. API d'appel statique et dynamique.

L'API Blockchain & Block est une partie essentielle du système de contrat intelligent Ontology. L'API Blockchain prend en charge les opérations de demande de chaîne de bloc de base, telles que l'obtention de la hauteur de bloc actuelle, tandis que l'API de bloc prend en charge les opérations de demande de bloc de base, telles que la demande du nombre de transactions pour un bloc donné.

Commençons!

Pour commencer, créez un nouveau contrat dans SmartX , puis suivez les instructions ci-dessous.

1. Comment utiliser l'API Blockchain


Les liens vers les fonctionnalités du contrat intelligent sont identiques aux liens Python. Vous pouvez saisir les fonctions appropriées selon vos besoins. Par exemple, l'instruction suivante présente 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 de bloc dans la blockchain, comme indiqué dans l'exemple ci-dessous. Dans le dernier exemple, pour plus de commodité, nous ignorerons 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, utilisé pour obtenir le titre du bloc, le paramètre est le numéro de série du bloc dans la blockchain. Un 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 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 un hachage de la transaction au format bytearray. Il s'agit d'une étape importante. Sinon, vous obtiendrez une erreur indiquant qu'il n'y a pas de bloc avec un tel hachage de bloc. Prenons un hachage hexadécimal d'une transaction, par exemple, pour la convertir au format bytearray. Un exemple est le suivant:

 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1 

Commencez par inverser le hachage de la transaction:

 c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279 

Les développeurs peuvent effectuer cette étape avec l'outil de conversion de numéro hexadécimal (little endian) 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 tableau de bord résultant en une chaîne similaire:

 \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 

Voici un exemple de fonction GetTransactionByHash qui prend une transaction à l'aide d'un hachage de transaction:

 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 est utilisé pour obtenir la hauteur d'une transaction via un 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"\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


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

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

1. Obtenez le bloc par hauteur de bloc:

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

2. Obtenez le hachage bloc par bloc:

 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. Comment utiliser l'API Block


Il y a trois fonctions disponibles dans l'API Block: GetTransactions , GetTransactionCount et GetTransactionByIndex . Nous les trierons un par un.

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 de 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) # index starts from 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 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écouvrir leur interaction avec la blockchain d'Ontology.


L'article a été traduit par Hashrate & Shares spécifiquement pour OntologyRussia. cliquer
Êtes-vous développeur? Rejoignez notre communauté technologique sur Discord . De plus, jetez un œil au Developer Center sur notre site Web, où vous pouvez trouver des outils de développement, de la documentation et bien plus encore.

Ontologie


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


All Articles