Comment écrire un contrat Python intelligent sur le réseau Ontology. Partie 3: API d'exécution

image

Ceci est la troisième partie d'une série de tutoriels sur la création de contrats intelligents en Python sur le réseau de blockchain d'Ontology. Dans des articles précédents, nous nous sommes rencontrés

  1. Blockchain & Block API
  2. API de stockage

Maintenant que vous avez une idée de comment appeler l'API de stockage persistant appropriée lors du développement d'un contrat intelligent à l'aide de Python sur le réseau Ontology, apprenons à utiliser l' API Runtime (Contract Execution API). L'API Runtime dispose de 8 API associées qui fournissent des interfaces communes pour l'exécution du contrat et aident les développeurs à recevoir, transformer et valider les données.

Voici une brève description des 8 données API:

image

Examinons de plus près comment utiliser ces 8 API. Avant cela, vous pouvez créer un nouveau contrat dans l'outil de développement de contrat intelligent SmartX d' Ontology et suivre les instructions ci-dessous.

Comment utiliser l'API Runtime


Il existe deux façons d'importer l' API Runtime: ontology.interop.System.Runtime et ontology.interop.Ontology.Runtime . Le chemin d'ontologie contient les API récemment ajoutées. Les lignes ci-dessous importent les données API.

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash 

API de notification


La fonction Notify diffuse l'événement à travers le réseau. Dans l'exemple ci-dessous, la fonction Notify renverra la chaîne hexadécimale «hello word» et la transmettra à travers le réseau.

 from ontology.interop.System.Runtime import Notify def demo(): Notify("hello world") 

Vous pouvez le voir dans les journaux:

image

API GetTime


La fonction GetTime renvoie l'horodatage actuel, qui renvoie l'heure Unix à laquelle la fonction a été appelée. L'unité est deuxième.

 from ontology.interop.System.Runtime import GetTime def demo(): time=GetTime() return time # return a uint num 

API GetCurrentBlockHash


La fonction GetCurrentBlockHash renvoie le hachage du bloc actuel.

 from ontology.interop.Ontology.Runtime import GetCurrentBlockHash def demo(): block_hash = GetCurrentBlockHash() return block_hash 

Sérialiser et désérialiser


Ce sont quelques fonctions de sérialisation et de désérialisation. La fonction Serialize convertit l'objet en un objet bytearray et la fonction Deserialize convertit le bytearray en l'objet d'origine. L'exemple de code suivant convertit les paramètres entrants et les stocke dans le stockage permanent du contrat. Il extrait également les données du stockage permanent du contrat et les convertit en objet d'origine.

 from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.System.Storage import Put, Get, GetContext def Main(operation, args): if operation == 'serialize_to_bytearray': data = args[0] return serialize_to_bytearray(data) if operation == 'deserialize_from_bytearray': key = args[0] return deserialize_from_bytearray(key) return False def serialize_to_bytearray(data): sc = GetContext() key = "1" byte_data = Serialize(data) Put(sc, key, byte_data) def deserialize_from_bytearray(key): sc = GetContext() byte_data = Get(sc, key) data = Deserialize(byte_data) return data 

Base58ToAddress et AddressToBase58


Cette paire de fonctions de traduction d'adresses. La fonction Base58ToAddress convertit l'adresse codée de base58 en une adresse sous la forme de bytearray, et AddressToBase58 convertit l'adresse sous la forme de bytearray en l'adresse codée de base58.

 from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58 def demo(): base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn" addr=Base58ToAddress(base58_addr) Log(addr) base58_addr=AddressToBase58(addr) Log(base58_addr) 

Checkwitness


La fonction CheckWitness (fromAcct) a deux fonctions:

  • Vérifiez si l'objet fromAcct appelle la fonction actuelle. Si oui (c'est-à-dire que la vérification de la signature a réussi), la fonction retourne.
  • Vérifiez si l'objet appelant la fonction actuelle est un contrat. S'il s'agit d'un contrat et que la fonction est exécutée à partir du contrat, la vérification est réussie. Autrement dit, vérifiez si fromAcct la valeur de retour de GetCallingScriptHash (). La fonction GetCallingScriptHash () peut prendre la valeur de hachage du contrat du contrat intelligent actuel.

GetCallingScriptHash () :


Plus sur Guthub

 from ontology.interop.System.Runtime import CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress def demo(): addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z") res=CheckWitness(addr) return res 

Plus d'informations peuvent être trouvées sur Guthub . Dans le prochain article, nous présenterons l' API native pour apprendre à transférer des actifs dans les contrats intelligents d'ontologie.


L'article a été traduit par Hashrate & Shares spécifiquement pour OntologyRussia.

Êtes-vous développeur? Rejoignez notre communauté technologique sur Discord . Consultez également le Centre de développement d' Ontology pour plus d'outils, de documentation et plus encore.


Tâches ouvertes pour les développeurs. Fermez la tâche - obtenez une récompense.

Postulez pour le programme de talent étudiant en ontologie

Ontologie


Site Web d'ontologie - GitHub - Discord - Telegram Russian - Twitter - Reddit

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


All Articles