ProHoster > blog > administratie > Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 3: Runtime-API
Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 3: Runtime-API
Dit is het derde deel in een reeks educatieve artikelen over het creëren van slimme contracten in Python op het Ontology blockchain-netwerk. In eerdere artikelen maakten we kennis met
Nu je een idee hebt hoe je de juiste persistente opslag-API kunt aanroepen bij het ontwikkelen van een slim contract met behulp van Python op het Ontology-netwerk, gaan we verder met het leren gebruiken Runtime-API (Contractuitvoering-API). De Runtime API heeft 8 gerelateerde API's die gemeenschappelijke interfaces bieden voor contractuitvoering en ontwikkelaars helpen gegevens op te halen, te transformeren en te valideren.
Hieronder vindt u een korte beschrijving van de 8 API-gegevens:
Laten we eens nader bekijken hoe we de 8 API-gegevens kunnen gebruiken. Voordien kunt u een nieuw contract aanmaken in de Ontology smart contract development tool SmartX en volg de onderstaande instructies.
Hoe de Runtime-API te gebruiken
Er zijn twee manieren om te importeren Runtime-API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Het Ontology-pad bevat de nieuw toegevoegde API's. De onderstaande regels importeren de API-gegevens.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
API op de hoogte stellen
De Notify-functie zendt de gebeurtenis door het hele netwerk uit. In het onderstaande voorbeeld retourneert de Notify-functie de hexadecimale tekenreeks “hallowoord” en zendt deze door het hele netwerk uit.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")
Dit kun je zien in de logs:
GetTime-API
De GetTime-functie retourneert de huidige tijdstempel, die de Unix-tijd retourneert waarop de functie werd aangeroepen. De meeteenheid is de tweede.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
GetCurrentBlockHash-API
De functie GetCurrentBlockHash retourneert de hash van het huidige blok.
Dit is een paar serialisatie- en deserialisatiefuncties. De functie Serialize converteert een object naar een bytearray-object, en de functie Deserialize converteert een bytearray naar het originele object. In het onderstaande codevoorbeeld worden de binnenkomende parameters geconverteerd en opgeslagen in de permanente opslag van het contract. Het haalt ook gegevens op uit de permanente opslag van het contract en transformeert deze in het originele object.
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 en AdresToBase58
Dit paar adresvertaalfuncties. De functie Base58ToAddress converteert een met base58 gecodeerd adres naar een bytearray-adres, en AddressToBase58 converteert een bytearray-adres naar een met base58 gecodeerd adres.
De functie CheckWitness(fromAcct) heeft twee functionaliteiten:
Controleer of de aanroeper van de huidige functie fromAcct is. Indien ja (dat wil zeggen, handtekeningverificatie geslaagd), retourneert de functie.
Controleer of het object dat de huidige functie aanroept een contract is. Als het een contract is en de functie vanuit het contract wordt uitgevoerd, is de verificatie geslaagd. Dat wil zeggen: controleer of fromAcct de retourwaarde is van GetCallingScriptHash(). De functie GetCallingScriptHash() kan de contracthashwaarde van het huidige slimme contract overnemen.
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return res
Meer informatie vindt u op Guthub. In het volgende artikel zullen we introduceren Native APIom te leren hoe u activa kunt overdragen in slimme contracten van Ontology.
Het artikel is door de redactie vertaald Hashrate en aandelen vooral voor OntologyRusland.
Ben je een ontwikkelaar? Word lid van onze technische gemeenschap op Discord. Kijk ook eens naar Ontwikkelaarscentrum Ontologie, je kunt daar meer tools, documentatie en nog veel meer vinden.