Comment écrire un contrat intelligent avec Python sur l'ontologie? Partie 1: l'API Blockchain & Block

image

Ceci est un tutoriel officiel publié plus tôt sur le blog d' Ontology Medium
Excité de le publier pour les lecteurs Habr. N'hésitez pas à poser des questions connexes et à suggérer un meilleur format pour le matériel didactique

Préface


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


Dans cet article, nous présenterons la Blockchain & Block API , qui est la partie la plus élémentaire 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 la requête du nombre de transactions pour un bloc donné.

Commençons!

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

1. Comment utiliser l'API Blockchain


Les références aux fonctions de contrat intelligent sont identiques aux références de Python. Les développeurs peuvent introduire les fonctions appropriées selon les besoins. Par exemple, l'instruction suivante présente GetHeight , la fonction pour obtenir la hauteur de bloc actuelle, et GetHeader , la fonction pour obtenir l'en-tête du bloc.

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

1.1. Getheight


Vous pouvez utiliser GetHeight pour obtenir la dernière hauteur de bloc, comme indiqué dans l'exemple suivant. Dans ce dernier exemple, pour plus de commodité, nous allons omettre 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 

1.2 GetHeader


Vous pouvez utiliser GetHeader pour obtenir l'en-tête de bloc, et le paramètre est la hauteur de bloc d'un bloc. Voici 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 

1.3 GetTransactionByHash


Vous pouvez utiliser la fonction GetTransactionByHash pour obtenir des transactions via le 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 savoir comment convertir un hachage de transaction au format hexadécimal en un hachage de transaction au format bytearray. Il s'agit d'une étape importante. Sinon, vous obtiendrez une erreur qui indique qu'il n'y a pas de bloc de ce hachage de bloc.

Prenons l'exemple du hachage de transaction au format hexadécimal pour le convertir au format bytearray. L'exemple est le suivant:

 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1 

Commencez par inverser le hachage de la transaction:

 c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279 

Les développeurs peuvent implémenter cette étape avec l'outil de conversion Hex Number (little endian) <--> Number fourni par SmartX.

Ensuite, convertissez-le 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} 

Les développeurs peuvent le faire avec l'outil de conversion String <--> Tableau d'octets fourni par SmartX. Enfin, convertissez le tableau de bord résultant en la chaîne correspondante:

 \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 la fonction GetTransactionByHash qui obtient une transaction via 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 

1.4 GetTransactionHeight


Les développeurs peuvent utiliser la fonction GetTransactionHeight pour obtenir la hauteur de transaction via le hachage de transaction. Prenons le hachage dans 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 

1.5 GetContract


Vous pouvez utiliser la fonction GetContract pour obtenir un contrat via le hachage de contrat. Le processus de conversion du hachage de contrat est cohérent avec 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"\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 

1.6 GetBlock


Vous pouvez utiliser la fonction GetBlock pour obtenir le 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, qui sont GetTransactions, GetTransactionCount et GetTransactionByIndex . Nous les présenterons un par un.

2.1 GetTransactionCount


Vous pouvez utiliser la fonction GetTransactionCount 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 

2.2 GetTransactions


Vous pouvez 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 

2.3 GetTransactionByIndex


Vous pouvez utiliser la fonction GetTransactionByIndex pour obtenir des transactions spécifiques 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 

Retrouvez le tutoriel complet sur notre GitHub ici .

Postface


L'API Blockchain & Block est la partie la plus indispensable des contrats intelligents, car vous pouvez les utiliser pour interroger les données de la chaîne de blocs et bloquer les données dans les contrats intelligents. Dans les prochains articles, nous verrons comment utiliser d'autres API pour explorer leur interaction avec la blockchain d'Ontology.



Êtes-vous développeur? Assurez-vous que vous avez rejoint notre communauté technologique sur Discord . Jetez également un œil au Developer Center sur notre site Web, où vous pouvez trouver des outils de développement, de la documentation et plus encore.

Trouvez l'ontologie ailleurs


Site Web d'ontologie
Github / discorde
Télégramme ( anglais / russe )
Twitter / Reddit /

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


All Articles