Comment écrire un smart contract en Python sur le réseau Ontology. Partie 3 : API Runtime

Comment écrire un smart contract en Python sur le réseau Ontology. Partie 3 : API Runtime

C'est la 3Úme partie d'une série d'articles pédagogiques sur la création de contrats intelligents en Python dans le réseau blockchain Ontology. Dans les articles précédents, nous avons découvert

  1. Blockchain & Block API
  2. Storage API.

Maintenant que vous avez une idée de la maniÚre d'appeler l'API appropriée pour le stockage permanent lors du développement d'un contrat intelligent avec Python dans le réseau Ontology, passons à l'apprentissage de comment utiliser API d'exécution (API d'exécution de contrat). L'API Runtime possÚde 8 API connexes qui fournissent des interfaces communes pour exécuter le contrat et aident les développeurs à obtenir, transformer et vérifier des données.

Voici un bref aperçu de ces 8 API :

Comment écrire un smart contract en Python sur le réseau Ontology. Partie 3 : API Runtime

Examinons plus en détail comment utiliser ces 8 API. Avant cela, vous pouvez créer un nouveau contrat dans l'outil de développement de contrats intelligents Ontology SmartX 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 Ontology contient les API récemment ajoutées. Les lignes ci-dessous 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 Notify

La fonction Notify diffuse un événement à travers le réseau. Dans l'exemple ci-dessous, la fonction Notify renverra une chaßne hexadécimale "hello world" 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 :

Comment écrire un smart contract en Python sur le réseau Ontology. Partie 3 : API Runtime

API GetTime

La fonction GetTime renvoie l'horodatage actuel, qui retourne le temps Unix auquel 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

Ce sont deux fonctions de sérialisation et de désérialisation. La fonction Serialize transforme un objet en un objet bytearray, tandis que la fonction Deserialize transforme un bytearray en l'objet initial. L'exemple de code ci-dessous effectue la transformation des paramÚtres d'entrée et les sauvegarde dans le stockage permanent du contrat. Il extrait également les données du stockage permanent du contrat et les transforme en objet initial.

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 convertit des adresses. La fonction Base58ToAddress convertit une adresse encodée en base58 en une adresse sous forme de bytearray, tandis que AddressToBase58 convertit une adresse sous forme de bytearray en une adresse encodée en 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Ă©rifier si l'objet appelant la fonction actuelle est fromAcct. Si oui (c'est-Ă -dire si la vĂ©rification de signature est rĂ©ussie), la fonction retourne.
  • VĂ©rifier si l'objet appelant la fonction actuelle est un contrat. Si c'est un contrat et que la fonction est exĂ©cutĂ©e depuis un contrat, alors la vĂ©rification est rĂ©ussie. C'est-Ă -dire, vĂ©rifier si fromAcct est la valeur renvoyĂ©e par GetCallingScriptHash(). La fonction GetCallingScriptHash() peut prendre la valeur du hachage du contrat du contrat intelligent actuel.

GetCallingScriptHash() :

Pour en savoir 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 l'article suivant, nous prĂ©senterons API natif, pour apprendre Ă  transfĂ©rer des actifs dans des contrats intelligents Ontology.

L'article a été traduit par la rédaction Hashrate&Shares spécialement pour OntologyRussia.

Vous ĂȘtes dĂ©veloppeur ? Rejoignez notre communautĂ© technique sur Discord. De plus, jetez un coup d'Ɠil Ă  Centre des dĂ©veloppeurs Ontology, oĂč vous pouvez trouver plus d'outils, de la documentation et bien plus encore.

TĂąches ouvertes pour les dĂ©veloppeurs. Fermez la tĂąche — recevez une rĂ©compense.

Postuler au programme des talents Ontology pour les étudiants.

Ontology

site Ontology — GitHub — Discord — Telegram Russe — Twitter — Reddit

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster