Hur man skriver ett smart kontrakt i Python pÄ Ontology-nÀtverket. Del 3: Runtime API

Hur man skriver ett smart kontrakt i Python pÄ Ontology-nÀtverket. Del 3: Runtime API

Det hÀr Àr den tredje delen av en serie utbildningsartiklar om hur man skapar smarta kontrakt pÄ Python i blockchain-nÀtverket Ontology. I de tidigare artiklarna har vi blivit bekanta med

  1. Blockchain & Block API
  2. Storage API.

Nu nÀr du har en uppfattning om hur du anropar det lÀmpliga API:t för permanent lagring nÀr du utvecklar ett smart kontrakt med Python i 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 erbjuder allmÀnna grÀnssnitt för att köra kontrakt och hjÀlper utvecklare att hÀmta, omvandla och verifiera data.

Nedanför finns en kort beskrivning av dessa 8 API:er:

Hur man skriver ett smart kontrakt i Python pÄ Ontology-nÀtverket. Del 3: Runtime API

LÄt oss ta en nÀrmare titt pÄ hur vi anvÀnder dessa 8 API:er. Innan dess kan du skapa ett nytt kontrakt i Ontology:s utvecklingsverktyg för smarta kontrakt SmartX och följa de nedanstÄende instruktionerna.

Hur man anvÀnder Runtime API

Det finns tvÄ sÀtt att importera Runtime API: ontology.interop.System.Runtime och ontology.interop.Ontology.Runtime. Ontology-sökvÀgen innehÄller nyligen tillagda API:er. De följande raderna importerar dessa API:er.

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

Notify API

Funktionen Notify sĂ€nder ett hĂ€ndelse genom hela nĂ€tverket. I det följande exemplet kommer funktionen Notify att returnera hex-strĂ€ngen “hello world” och sprida den över 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Ä Ontology-nÀtverket. Del 3: Runtime API

GetTime API

Funktionen GetTime returnerar den aktuella tidsstÀmpeln, vilket ger Unix-tiden dÄ funktionen anropades. Enheten Àr sekunder.

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

GetCurrentBlockHash API

Funktionen GetCurrentBlockHash returnerar hash av den aktuella block.

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

Serialize och Deserialize

Detta Àr ett par funktioner för serialisering och deserialisering. Funktionen Serialize omvandlar ett objekt till ett bytearray-objekt, medan funktionen Deserialize omvandlar bytearray tillbaka till det ursprungliga objektet. Det följande kodexemplet genomför omvandlingen av inkommande parametrar och sparar dem i kontraktets permanenta lagring. Det hÀmtar ocksÄ data frÄn kontraktets permanenta lagring och omvandlar dem tillbaka till det ursprungliga objektet.

frÄn ontology.interop.System.Runtime importera GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
frÄn ontology.interop.System.Storage importera Put, Get, GetContext

def Main(operation, args):
    om operation == 'serialize_to_bytearray':
        data = args[0]
        return serialize_to_bytearray(data)
    om 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 Àr ett par funktioner för konvertering av adresser. Funktionen Base58ToAddress konverterar en base58-kodad adress till en adress i form av bytearray, medan AddressToBase58 konverterar en adress i form av bytearray till en base58-kodad adress.

frÄn ontology.interop.Ontology.Runtime importera Base58ToAddress, AddressToBase58
def demo():
    base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn"
    addr=Base58ToAddress(base58_addr)
    Log(addr)
    base58_addr=AddressToBase58(addr)
    Log(base58_addr)

CheckWitness

Funktionen CheckWitness(fromAcct) har tvÄ funktioner:

  • Verifiera om objektet fromAcct som anropar den aktuella funktionen. Om sĂ„ Ă€r fallet (dvs. underskriftskontrollen Ă€r godkĂ€nd), returneras funktionen.
  • Kontrollera om objektet som anropar den aktuella funktionen Ă€r ett kontrakt. Om det Ă€r ett kontrakt och funktionen anropas frĂ„n kontraktet, sĂ„ Ă€r verifieringen godkĂ€nd. Det vill sĂ€ga, verifiera om fromAcct Ă€r vĂ€rdet som returneras av GetCallingScriptHash(). Funktionen GetCallingScriptHash() kan ta vĂ€rdet av hashkoden för det aktuella smarta kontraktet.

GetCallingScriptHash():

Mer information finns pÄ Guthub

frÄn ontology.interop.System.Runtime importera CheckWitness
frÄn ontology.interop.Ontology.Runtime importera Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

Mer information kan hittas pÄ Guthub. I nÀsta artikel kommer vi att presentera Native API, för att förstÄ hur man överför tillgÄngar i Ontologys smarta kontrakt.

Artikeln har översatts av redaktionen Hashrate&Shares speciellt för OntologyRussia.

Är du utvecklare? GĂ„ med i vĂ„rt tekniska samhĂ€lle pĂ„ Discord. Dessutom, kolla in Utvecklarcentrum Ontology, dĂ€r du kan hitta fler verktyg, dokumentation och mycket mer.

Öppna uppgifter för utvecklare. StĂ€ng uppgiften — fĂ„ en belöning.

Ansök till Ontologys talangprogram för studenter

Ontology

Ontology-webbplats — GitHub — Discord — Telegram Ryska — Twitter — Reddit

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster