Comment écrire un contrat intelligent avec Python sur l'ontologie? Partie 3: API d'exécution

image

Présentation


Plus tôt, j'ai présenté le contrat ontologique intelligent dans
Partie 1: Blockchain & Block API et
Partie 2: API de stockage
Maintenant, lorsque vous avez une idée de la façon d'appeler l'API appropriée pour le stockage persistant lors du développement d'un contrat intelligent Python sur Ontology, passons à l' API Runtime (Contract Execution API). L'API Runtime dispose de 8 API associées qui fournissent des interfaces communes pour l'exécution des contrats et aident les développeurs à obtenir, convertir et valider les données. Voici une brève description de ces 8 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 Ontology SmartX et suivre les instructions ci-dessous. Comme d'habitude, à la fin de l'article, je fournirai un lien vers le code source.

Comment utiliser l'API Runtime


Il existe 2 chemins pour importer l'API Runtime, ontology.interop.System.Runtime et ontology.interop.Ontology.Runtime . Le chemin de l'ontologie contient les API nouvellement ajoutées. Les lignes suivantes importent ces 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 des événements sur l'ensemble du réseau. Dans l'exemple suivant, la fonction Notify renverra une chaîne hexadécimale «hello world» et la diffusera à l'ensemble du 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


Il s'agit d'une paire de fonctions de sérialisation et de désérialisation. La fonction Sérialiser sérialise un objet dans un objet tableau d'octets et la fonction Désérialiser désérialise le tableau d'octets dans l'objet d'origine. L'exemple de code suivant implémente la sérialisation des paramètres entrants et les stocke dans le stockage persistant du contrat. Il extrait également les données du stockage persistant du contrat et les désérialise.

 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 & AddressToBase58


Il s'agit d'une paire de fonctions de conversion d'adresse. La fonction Base58ToAddress convertit l'adresse codée en base58 en une adresse de forme de tableau d'octets et AddressToBase58 convertit l'adresse en forme de tableau d'octets en une 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 fonctionnalités:

  • Vérifiez si l'appelant de la fonction actuelle est fromAcct. Si oui (c.-à-d. Vérification de signature réussie), la fonction retourne.
  • Vérifiez si l'appelant de 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 est la valeur de retour de GetCallingScriptHash (). La fonction GetCallingScriptHash () peut obtenir la valeur de hachage du contrat du contrat intelligent actuel.

GetCallingScriptHash () :


Compilateur Python d'ontologie

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

Retrouvez le tutoriel complet ici .

Résumé


Dans cet article, j'ai présenté l' API Runtime de la blockchain Ontology, qui est très importante dans le contrat intelligent Python Ontology. Dans le prochain article, nous examinerons l' API native pour explorer comment transférer des actifs dans des contrats intelligents Ontology.



Ceci est un tutoriel officiel publié plus tôt sur le blog d' Ontology Medium

Ê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/fr470722/


All Articles