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 tretë e një seri artikujsh trajnues mbi krijimin e kontratave inteligjente në Python në rrjetin blockchain Ontology. Në artikujt e mëparshëm u njohëm me

  1. Blockchain & Block API
  2. Storage API.

Tani që keni një kuptim të mënyrës se si të thërrisni API-në e duhur për magazinat e përhershme ndërsa zhvilloni një kontratë inteligjente me Python në rrjetin Ontology, le të kalojmë në se si të përdorim Runtime API (API e Ekzekutimit të Kontratave). API Runtime ka 8 API të lidhura që ofrojnë ndërfaqe të përgjithshme për ekzekutimin e kontratave dhe ndihmojnë zhvilluesit të marrin, përpunojnë dhe verifikojnë të dhënat.

Më poshtë është një përmbledhje e 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 mënyrën e përdorimit të këtyre 8 API-ve. Para kësaj, mund të krijoni një kontratë të re në mjetin e zhvillimit të kontratave inteligjente Ontology SmartX dhe ndiqni udhëzimet më poshtë.

Si të përdorni API-në Runtime

Ekzistojnë dy mënyra për të importuar API-në Runtime: ontology.interop.System.Runtime dhe ontology.interop.Ontology.Runtime. Rruga Ontology përmban API 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

API e Njoftimit

Funksioni Notify transmeton një ngjarje në të gjithë rrjetin. Në shembullin e mëposhtëm, funksioni Notify do të kthejë një varg hex "hello world" dhe do ta dërgojë në të gjithë rrjetin.

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

Mund ta shihni këtë në logët:

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

API e GetTime

Funksioni GetTime kthen stampën aktuale të kohës, e cila kthen kohën Unix, kur është thirrur funksioni. Njësia e matjes është sekonda.

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

API e GetCurrentBlockHash

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

Kjo është një çift funksionesh për serializimin dhe deserializimin. Funksioni Serialize konverton një objekt në një objekt bytearray, ndërsa funksioni Deserialize e konverton bytearray në objektin fillestar. Shembulli i mëposhtëm i kodit realizon transformimin e parametrave hyrës dhe i ruan ato në magazinën e përhershme të kontratës. Ai gjithashtu nxjerr të dhënat nga magazina e përhershme e kontratës dhe i konverton në objektin fillestar.

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

Ky është një çift funksionesh për konvertimin e adresave. Funksioni Base58ToAddress konverton një adresë të koduar base58 në një adresë në formën bytearray, ndërsa AddressToBase58 konverton një adresë në formën bytearray në adresë të koduar base58.

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

Funksioni CheckWitness(fromAcct) ka dy funksionalitete:

  • Verifikoni nĂ«se objekti qĂ« thĂ«rret aktualisht funksionin Ă«shtĂ« fromAcct. NĂ«se po (dmth, kalimi i verifikimit tĂ« nĂ«nshkrimit), funksioni kthehet.
  • Kontrolloni nĂ«se objekti qĂ« thĂ«rret aktualisht funksionin Ă«shtĂ« njĂ« kontratĂ«. NĂ«se Ă«shtĂ« njĂ« kontratĂ« dhe funksioni ekzekutohet nga kontrata, atĂ«herĂ« verifikimi kalon. DMTH, verifikoni nĂ«se fromAcct Ă«shtĂ« vlera qĂ« kthehet nga GetCallingScriptHash(). Funksioni GetCallingScriptHash() mund tĂ« marrĂ« vlerĂ«n e hash-it tĂ« kontratĂ«s sĂ« kontratĂ«s aktuale.

GetCallingScriptHash():

Më shumë detaje në 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

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

Artikulli është përkthyer nga ekipi Hashrate&Shares vendosur posaçërisht për OntologyRussia.

Jeni zhvillues? Bashkohuni me komunitetin tonë teknik në Discord. Për më tepër, shikoni në Qendrën e zhvilluesve Ontology, aty mund të gjeni më shumë vegla, dokumentacion dhe shumë më tepër.

Detyrat e hapura për zhvilluesit. Mbylle det në mënyrë që të marrësh shpërblimin.

Apliko për programin e talenteve Ontology për studentët

Ontology

Website-i i Ontology — GitHub — Discord — Telegram Rus — Twitter — Reddit

Burimi: habr.com

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