
Dette er den 3. del af en serie af vejledende artikler om oprettelse af smart contracts i Python i Ontology blockchain-netværket. I de foregående artikler har vi gjort os bekendt med
- .
Nu hvor du har en idé om, hvordan du kalder det relevante API til det permanente lager, når du udvikler en smart contract med Python i Ontology-netværket, lad os gå videre til at lære om, hvordan man bruger Runtime API (Contract Execution API). Runtime API har 8 relaterede API'er, som giver fælles interfaces til at udføre kontrakten og hjælper udviklere med at hente, transformere og verificere data.
Nedenfor er en kort beskrivelse af de 8 API'er:

Lad os se nærmere på, hvordan man bruger de 8 API'er. Før dette kan du oprette en ny kontrakt i Ontology smart contract udviklingsværktøjet og følge de nedenstående instruktioner.
Sådan anvendes Runtime API
Der er to måder at importere Runtime API: ontology.interop.System.Runtime og ontology.interop.Ontology.Runtime. Ontology-stien indeholder nyligt tilføjede API'er. De følgende linjer importerer disse API'er.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHashNotify API
Notify-funktionen transmitterer en begivenhed på tværs af netværket. I det følgende eksempel vil Notify-funktionen returnere en hex-streng “hello world” og sende den over hele netværket.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")Du kan se dette i loggene:

GetTime API
GetTime-funktionen returnerer det aktuelle tidsstempel, som returnerer Unix-tidspunktet, hvornår funktionen blev kaldt. Måleenheden er sekunder.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint numGetCurrentBlockHash API
GetCurrentBlockHash-funktionen returnerer hash-værdien af den nuværende blok.
from ontology.interop.Ontology.Runtime import GetCurrentBlockHash
def demo():
block_hash = GetCurrentBlockHash()
return block_hashSerialize og Deserialize
Dette er et par funktioner til serialisering og deserialisering. Serialize-funktionen konverterer et objekt til et bytearray-objekt, mens Deserialize-funktionen konverterer bytearray til det oprindelige objekt. Det følgende kodeeksempel udfører konverteringen af indgående parametre og gemmer dem i det permanente lager af kontrakten. Det henter også data fra kontraktens permanente lager og konverterer dem til det oprindelige objekt.
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 dataBase58ToAddress og AddressToBase58
Disse to funksjonene konverterer adresser. Funksjonen Base58ToAddress konverterer en base58-kodet adresse til bytearray-format, mens AddressToBase58 konverterer en adresse i bytearray-format til en base58-kodet adresse.
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
Funksjonen CheckWitness(fromAcct) har to funksjoner:
- Verifisere om den som kaller funksjonen er objektet fromAcct. Hvis ja (dvs. signaturen er godkjent), returneres funksjonen.
- Sjekke om objektet som kaller funksjonen er et kontrakt. Hvis dette er en kontrakt og funksjonen utføres fra en kontrakt, er verifiseringen bestått. Det vil si, verifiser om fromAcct er returverdien fra GetCallingScriptHash(). Funksjonen GetCallingScriptHash() kan hente verdien av hashen til kontrakten i gjeldende smarte kontrakt.
GetCallingScriptHash():
Mer informasjon om
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return resMer informasjon kan bli funnet på . I den neste artikkelen vil vi presentere Native API, for å lære hvordan man overfører aktiva i Ontology smarte kontrakter.
Artikkelen ble oversatt av redaksjonen spesielt for OntologyRussia.
Er du utvikler? Bli med i vårt tekniske fellesskap på . I tillegg, ta en titt på Ontology, hvor du kan finne flere verktøy, dokumentasjon og mye mer.
Lukk oppgaven – få belønning.
til Ontology-talentsprogrammet for studenter
Ontology
— — — — —
Kilde: habr.com
