Hur man skriver ett smart kontrakt i Python på ontologinätverket. Del 3: Runtime API

Hur man skriver ett smart kontrakt i Python på ontologinätverket. Del 3: Runtime API

Detta är den tredje delen i en serie utbildningsartiklar om att skapa smarta kontrakt i Python på Ontology blockchain-nätverket. I tidigare artiklar har vi bekantat oss med

  1. Blockchain & Block API
  2. Lagrings-API.

Nu när du har en idé om hur du anropar lämpligt beständig lagrings-API när du utvecklar ett smart kontrakt med Python på Ontology-nätverket, låt oss gå vidare till att lära oss hur man använder Runtime API (Contract Execution API). Runtime API har 8 relaterade API:er som tillhandahåller gemensamma gränssnitt för kontraktsutförande och hjälper utvecklare att hämta, transformera och validera data.

Nedan följer en kort beskrivning av de 8 API-data:

Hur man skriver ett smart kontrakt i Python på ontologinätverket. Del 3: Runtime API

Låt oss ta en närmare titt på hur man använder 8 API-data. Innan detta kan du skapa ett nytt kontrakt i Ontologys smarta kontraktsutvecklingsverktyg SmartX och följ instruktionerna nedan.

Hur man använder Runtime API

Det finns två sätt att importera Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ontologisökvägen innehåller de nyligen tillagda API:erna. Raderna nedan importerar API-data.

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

Meddela API

Meddelandefunktionen sänder händelsen i hela nätverket. I exemplet nedan kommer Notify-funktionen att returnera hex-strängen "hej ord" och sända den i hela nätverket.

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

Du kan se detta i loggarna:

Hur man skriver ett smart kontrakt i Python på ontologinätverket. Del 3: Runtime API

GetTime API

Funktionen GetTime returnerar den aktuella tidsstämpeln, som returnerar den Unix-tid då funktionen anropades. Måttenheten är andra.

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

GetCurrentBlockHash API

Funktionen GetCurrentBlockHash returnerar hashen för det aktuella blocket.

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

Serialisera och deserialisera

Detta är ett par serialiserings- och deserialiseringsfunktioner. Funktionen Serialize konverterar ett objekt till ett bytearray-objekt och funktionen Deserialize konverterar en bytearray till det ursprungliga objektet. Kodexemplet nedan konverterar de inkommande parametrarna och lagrar dem i kontraktets beständiga lagring. Den hämtar också data från kontraktets beständiga lagring och omvandlar den till det ursprungliga objektet.

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 och AddressToBase58

Detta par av adressöversättningsfunktioner. Base58ToAddress-funktionen konverterar en base58-kodad adress till en bytearray-adress, och AddressToBase58 konverterar en bytearray-adress till en base58-kodad adress.

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)

Kontrollera vittne

Funktionen CheckWitness(fromAcct) har två funktioner:

  • Verifiera om den aktuella funktionens uppringare är från Acct. Om ja (det vill säga signaturverifiering godkänd) returnerar funktionen.
  • Kontrollera om objektet som anropar den aktuella funktionen är ett kontrakt. Om det är ett kontrakt och funktionen utförs från kontraktet, är verifieringen godkänd. Det vill säga verifiera om fromAcct är returvärdet för GetCallingScriptHash(). Funktionen GetCallingScriptHash() kan ta kontraktshashvärdet för det aktuella smarta kontraktet.

GetCallingScriptHash():

Mer om 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

Mer information finns på Guthub. I nästa artikel kommer vi att presentera Native APIför att lära dig hur man överför tillgångar i Ontology smarta kontrakt.

Artikeln översattes av redaktionen Hashrate & Aktier speciellt för OntologyRussia.

Är du en utvecklare? Gå med i vår tekniska community på Discord. Ta också en titt på Utvecklarcenter Ontologi, du kan hitta fler verktyg, dokumentation och mycket mer där.

Öppna uppgifter för utvecklare. Slutför uppgiften och få en belöning.

Tillämpa för talentprogrammet Ontology för studenter

Ontologi

Ontologi webbplats - GitHub - Discord - Telegram ryska - Twitter - reddit

Källa: will.com

Lägg en kommentar