Si të shkruani një kontratë smart në Python në rrjetin Ontology. Pjesa 3: Runtime API

Si të shkruani një kontratë smart në Python në rrjetin Ontology. Pjesa 3: Runtime API

Ky është pjesa e 3-të e një serie artikujsh mësimorë për krijimin e kontratave të mençura në Python në rrjetin blockchain Ontology. Në artikujt e mëparshëm, u njohëm me

  1. Blockchain & Block API
  2. Storage API.

Tani, kur keni një ide se si të thërrisni API-në e duhur për depozitimin e qëndrueshëm gjatë zhvillimit të një kontrate të mençur me Python në rrjetin Ontology, le të kalojmë te njohja se si të përdorim Runtime API (Contract Execution API). API e Runtime ka 8 API të lidhura që ofrojnë ndërfaqe të zakonshme për ekzekutimin e kontratave dhe ndihmojnë zhvilluesit të marrin, konvertojnë dhe verifikojnë të dhënat.

Më poshtë është një përshkrim i shkurtër i këtyre 8 API-ve:

Si të shkruani një kontratë smart në Python në rrjetin Ontology. Pjesa 3: Runtime API

Le të shqyrtojmë më në detaje se si të përdorim këto 8 API. Para kësaj, mund të krijoni një kontratë të re në mjetin e zhvillimit të kontratave të mençura Ontology SmartX dhe të ndiqni udhëzimet e mëposhtme.

Si të përdorni API-në e Runtime

Ka dy mënyra për të importuar API-në e Runtime: ontology.interop.System.Runtime dhe ontology.interop.Ontology.Runtime. Rruga Ontology përmban API-të që janë shtuar së fundmi. Rreshtat e mëposhtëm importojnë këto API.

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

Notify API

Funksioni Notify transmeton ngjarjen për gjithë rrjetin. Në shembullin më poshtë, funksioni Notify do të kthejë një string hex "hello world" dhe do ta transmetojë për gjithë rrjetin.

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

Ju mund ta shihni këtë në të dhënat:

Si të shkruani një kontratë smart në Python në rrjetin Ontology. Pjesa 3: Runtime API

GetTime API

Funksioni GetTime kthen vulĂ«n aktuale tĂ« kohĂ«s, e cila kthen kohĂ«n Unix kur funksioni u thirr. NjĂ«si matĂ«se — sekonda.

from ontology.interop.System.Runtime import GetTime
def demo():
    time=GetTime()
    return time # kthe një numër uint

GetCurrentBlockHash API

Funksioni GetCurrentBlockHash kthen hash-in e bllokut aktual.

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

Serialize dhe Deserialize

Këto janë dy funksione përseritëse dhe anullimi. Funksioni Serialize konverton një objekt në një objekt bytearray dhe funksioni Deserialize konverton bytearray në objektin fillestar. Shembulli i mëposhtëm i kodit realizon konvertimin e parametrave të ardhshëm dhe i ruan ato në depozitimin e qëndrueshëm të kontratës. Ai gjithashtu nxjerr të dhënat nga depozitimi i qëndrueshëm të kontratës dhe i konverton ato në objektin fillestar.

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

Kjo çift funksionesh realizon konvertimin e adresave. Funksioni Base58ToAddress konverton adresën e koduar base58 në një adresë në formën e bytearray, ndërsa AddressToBase58 konverton adresën në formën e bytearray në një adresë të koduar base58.

nga 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)

KontrolloDëshminë

Funksioni CheckWitness(fromAcct) ka dy funksionalitete:

  • Verifikon nĂ«se objekti qĂ« thĂ«rret funksionin aktual Ă«shtĂ« fromAcct. NĂ«se po (dmth, testi i nĂ«nshkrimit Ă«shtĂ« kaluar), funksioni kthehet.
  • Kontrollon nĂ«se objekti qĂ« thĂ«rret funksionin aktual Ă«shtĂ« njĂ« kontratĂ«. NĂ«se kjo Ă«shtĂ« njĂ« kontratĂ« dhe funksioni ekzekutohet nga kontrata, atĂ«herĂ« verifikimi Ă«shtĂ« kaluar. DomethĂ«nĂ«, verifikoni nĂ«se fromAcct Ă«shtĂ« vlera e kthyer nga GetCallingScriptHash(). Funksioni GetCallingScriptHash() mund tĂ« marrĂ« vlerĂ«n e hash-it tĂ« kontratĂ«s sĂ« smart kontratĂ«s aktuale.

GetCallingScriptHash():

Më shumë informacion në Guthub

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

Më shumë informacion mund të gjendet në Guthub. Në artikullin e ardhshëm ne do të paraqesim API Nativ, për të mësuar se si të transferoni asete në smart kontratat Ontology.

Artikulli është përkthyer nga redaksia Hashrate&Shares veçanërisht për OntologyRussia.

Are you a developer? Join our technical community on Discord. Additionally, check out the Developer Center Ontology, where you can find more tools, documentation, and much more.

Open tasks for developers. Close the task — receive a reward.

Apply for the Ontology talent program for students.

Ontology

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

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster