Cumu scrive un cuntrattu intelligente in Python nantu à a reta di Ontology. Parte 3: Runtime API

Cumu scrive un cuntrattu intelligente in Python nantu à a reta di Ontology. Parte 3: Runtime API

Questa hè a 3a parte in una seria d'articuli educativi nantu à a creazione di cuntratti intelligenti in Python nantu à a reta di blockchain di Ontology. In articuli precedenti avemu cunnisciutu

  1. Blockchain & Block API
  2. API di Storage.

Avà chì avete una idea di cumu chjamà l'API di almacenamiento persistente adattatu quandu si sviluppa un cuntrattu intelligente cù Python nantu à a reta di Ontologia, andemu à amparà à aduprà Runtime API (API di esecuzione di u cuntrattu). L'API Runtime hà 8 API cunnessi chì furniscenu interfacce cumuni per l'esecuzione di u cuntrattu è aiutanu i sviluppatori à ricuperà, trasfurmà è validà e dati.

Quì sottu hè una breve descrizzione di i dati 8 API:

Cumu scrive un cuntrattu intelligente in Python nantu à a reta di Ontology. Parte 3: Runtime API

Fighjemu un ochju più vicinu à cumu utilizà i dati 8 API. Prima di questu, pudete creà un novu cuntrattu in l'uttellu di sviluppu di cuntrattu intelligenti Ontology SmartX è seguitate e struzzioni sottu.

Cumu utilizà l'API Runtime

Ci hè dui manere di impurtà Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. A strada di l'Ontology cuntene l'API di novu aghjuntu. I linii sottu importanu i dati API.

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

Notify API

A funzione Notify trasmette l'avvenimentu in tutta a reta. In l'esempiu sottu, a funzione Notify restituverà a stringa hex "hello word" è a trasmette in tutta a reta.

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

Pudete vede questu in i logs:

Cumu scrive un cuntrattu intelligente in Python nantu à a reta di Ontology. Parte 3: Runtime API

GetTime API

A funzione GetTime torna u timestamp currente, chì torna l'ora Unix in quale a funzione hè stata chjamata. L'unità di misura hè a seconda.

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

GetCurrentBlockHash API

A funzione GetCurrentBlockHash torna l'hash di u bloccu attuale.

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

Serializà è deserializà

Questu hè un paru di funzioni di serializazione è deserializazione. A funzione Serialize cunverte un ughjettu in un ughjettu bytearray, è a funzione Deserialize cunverte un bytearray à l'ughjettu originale. L'esempiu di codice quì sottu cunverte i paràmetri entranti è li guarda in l'almacenamiento persistente di u cuntrattu. Hè ancu ricuperà e dati da l'almacenamiento persistente di u cuntrattu è a trasforma in l'ughjettu originale.

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

Questa coppia di funzioni di traduzzione di indirizzu. A funzione Base58ToAddress cunverte un indirizzu codificatu base58 à un indirizzu bytearray, è AddressToBase58 cunverte un indirizzu bytearray à un indirizzu codificatu 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)

Verificate u Testimone

A funzione CheckWitness (fromAcct) hà duie funziunalità:

  • Verificate se u chjamante di a funzione attuale hè daAcct. Se sì (vale à dì, a verificazione di a firma passata), a funzione torna.
  • Verificate se l'ughjettu chì chjama a funzione attuale hè un cuntrattu. S'ellu hè un cuntrattu è a funzione hè eseguita da u cuntrattu, allura a verificazione hè passata. Questu hè, verificate se fromAcct hè u valore di ritornu di GetCallingScriptHash (). A funzione GetCallingScriptHash() pò piglià u valore hash di u cuntrattu di u cuntrattu intelligente attuale.

GetCallingScriptHash ():

Leghjite più 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

Più infurmazione pò esse truvata à Guthub. In u prossimu articulu avemu da presentà API nativaper amparà cumu trasfiriri l'assi in i cuntratti intelligenti di Ontology.

L'articulu hè statu traduttu da l'editori Hashrate & Shares in particulare per OntologyRussia.

Sò un sviluppatore? Unisci à a nostra cumunità tecnologica à Discord. Inoltre, fate un ochju Centru di sviluppatori Ontologia per più arnesi, documentazione è più.

Apertura di i travaglii per i sviluppatori. Chiudi u compitu - uttene una ricumpensa.

Applica per u prugramma di talentu Ontology per i studienti

Ontologia

U situ di l'ontologia - GitHub - Discord - Telegram inglese - Twitter - Reddit

Source: www.habr.com

Add a comment