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

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

Il s'agit de la partie 3 d'une série de tutoriels sur la création de contrats intelligents en Python sur le réseau blockchain Ontology. Dans les articles précédents, nous avons vu

  1. Chaîne de blocs et API de blocs
  2. API de stockage.

Maintenant que vous avez une idée de la façon d'appeler l'API de stockage persistant appropriée lors du développement d'un contrat intelligent avec Python sur le réseau Ontology, passons à l'apprentissage de l'utilisation API d'exécution (API d'exécution de contrat). 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, transformer et valider les données.

Vous trouverez ci-dessous une brève description de l'API data 8 :

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

Voyons 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 suivez les instructions ci-dessous.

Comment utiliser l'API d'exécution

Il existe deux façons d'importer API d'exécution : ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Le chemin d'ontologie contient des API nouvellement ajoutées. Les lignes ci-dessous importent les données de l'API.

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

Notifier l'API

La fonction Notifier diffuse l'événement sur tout le réseau. Dans l'exemple ci-dessous, la fonction Notify renverra la chaîne hexadécimale "mot bonjour" et la diffusera sur tout le réseau.

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

Vous pouvez le voir dans les journaux :

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

API GetTime

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

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 Serialize convertit un objet en un objet bytearray et la fonction Deserialize convertit un bytearray en son objet d'origine. L'exemple de code suivant convertit les paramètres entrants et les stocke dans le stockage persistant du contrat. Il récupère également les données du stockage persistant 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

Base58VersAdresse et AdresseVersBase58

Cette paire de fonctions de traduction d'adresse. La fonction Base58ToAddress convertit une adresse encodée en base58 en une adresse bytearray, et AddressToBase58 convertit une adresse bytearray en une adresse encodée 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)

Vérifier le témoin

La fonction CheckWitness(fromAcct) a deux fonctionnalités :

  • Vérifiez si l'objet appelant la fonction actuelle est fromAcct. Si oui (c'est-à-dire que la vérification de la signature a réussi), la fonction revient.
  • Vérifiez si l'objet appelant la fonction en cours 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 prendre la valeur de hachage du contrat du contrat intelligent actuel.

GetCallingScriptHash() :

Plus d'informations 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 à Guthub. Dans le prochain article, nous présenterons API nativepour apprendre à transférer des actifs dans les contrats intelligents Ontology.

L'article a été traduit par les éditeurs Taux de hachage et partages spécialement pour OntologyRussia.

Vous êtes développeur? Rejoignez notre communauté technologique sur Discorde. Aussi, jetez un oeil à Centre de développement Ontologie pour plus d'outils, de documentation, et plus encore.

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

Appliquer pour le programme de talent Ontologie pour les étudiants

Ontologie

Site d'ontologie - GitHub - Discorde - Télégramme russe - Twitter - Reddit

Source: habr.com

Ajouter un commentaire