Hoe schrijf je een smart contract in Python op het Ontology-netwerk. Deel 3: Runtime API

Hoe schrijf je een smart contract in Python op het Ontology-netwerk. Deel 3: Runtime API

Dit is het derde deel van een serie informatieve artikelen over het creƫren van smart contracts met Python binnen het Ontology blockchain netwerk. In de vorige artikelen hebben we kennisgemaakt met

  1. Blockchain & Block API
  2. Storage API.

Nu je een idee hebt van hoe je de juiste API voor de permanente opslag kunt aanroepen bij het ontwikkelen van een smart contract met Python in het Ontology netwerk, laten we ons richten op hoe we Runtime API de (Contract Execution API) gebruiken. De Runtime API heeft 8 gerelateerde API's die algemene interfaces bieden voor het uitvoeren van contracten en helpen ontwikkelaars bij het verkrijgen, converteren en controleren van gegevens.

Hieronder vindt u een kort overzicht van deze 8 API's:

Hoe schrijf je een smart contract in Python op het Ontology-netwerk. Deel 3: Runtime API

Laten we dieper ingaan op hoe we deze 8 API's kunnen gebruiken. Voordat we dat doen, kun je een nieuw contract aanmaken in de Ontology smart contract ontwikkeltool SmartX en de onderstaande instructies volgen.

Hoe de Runtime API te gebruiken

Er zijn twee manieren om de Runtime API te importeren: ontology.interop.System.Runtime en ontology.interop.Ontology.Runtime. Het Ontology pad bevat recent toegevoegde API's. Onderstaande regels importeren deze API's.

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

Notify API

De Notify functie zendt een gebeurtenis door het hele netwerk. In het onderstaande voorbeeld zal de Notify functie de hex-reeks ā€œhello worldā€ retourneren en deze door het hele netwerk verzenden.

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

Dit kun je zien in de logs:

Hoe schrijf je een smart contract in Python op het Ontology-netwerk. Deel 3: Runtime API

GetTime API

De functie GetTime retourneert de huidige tijdstempel, die de Unix-tijd retourneert waarop de functie werd aangeroepen. Eenheid is seconden.

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

GetCurrentBlockHash API

De functie GetCurrentBlockHash retourneert de hash van de huidige blok.

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

Serialize en Deserialize

Dit is een paar functies voor serialisatie en deserialisatie. De Serialize functie converteert een object naar een bytearray object, terwijl de Deserialize functie een bytearray terug omzet naar het oorspronkelijke object. Het onderstaande codevoorbeeld voert de conversie van de invoerparameters uit en slaat deze op in de permanente opslag van het contract. Het haalt ook gegevens op uit de permanente opslag van het contract en zet deze om in het oorspronkelijke object.

van ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
van 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 AddressToBase58

Deze functie-paar converteert adressen. De functie Base58ToAddress converteert een gecodeerd base58-adres naar een bytearray-formaat, terwijl AddressToBase58 een adres in bytearray-formaat naar een gecodeerd base58-adres converteert.

van 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

De functie CheckWitness(fromAcct) heeft twee functionaliteiten:

  • Verificeren of de oproepende functie-object fromAcct. Als dat zo is (dat wil zeggen, de handtekening is geldig), retourneert de functie.
  • Controleer of het oproepende functie-object een contract is. Als dit een contract is en de functie wordt uitgevoerd vanuit een contract, is de verificatie goedgekeurd. Dat wil zeggen, verifiĆ«ren of fromAcct de waarde teruggegeven door GetCallingScriptHash() is. De functie GetCallingScriptHash() kan de hashwaarde van het huidige slimme contract verkrijgen.

GetCallingScriptHash():

Meer informatie op Guthub

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

Meer informatie is te vinden op Guthub. In het volgende artikel zullen we introduceren Native API, om te leren hoe activa kunnen worden overgedragen in slimme contracten op Ontology.

Het artikel is vertaald door de redactie Hashrate&Shares speciaal voor OntologyRussia.

Bent u een ontwikkelaar? Sluit u aan bij onze technische gemeenschap op Discord. Bekijk ook ons Ontwikkelaarscentrum Ontology, waar u meer tools, documentatie en meer kunt vinden.

Openstaande taken voor ontwikkelaars. Sluit de taak af — ontvang een beloning.

Aanmelden voor het Ontology talentprogramma voor studenten

Ontology

Ontology website — GitHub — Discord — Telegram Russisch — Twitter — Reddit

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster