Giunsa pagsulat ang usa ka intelihente nga kontrata sa Python sa network sa Ontology. Bahin 3: Runtime API

Giunsa pagsulat ang usa ka intelihente nga kontrata sa Python sa network sa Ontology. Bahin 3: Runtime API

Kini ang ika-3 nga bahin sa usa ka serye sa mga artikulo sa edukasyon sa paghimo og mga smart nga kontrata sa Python sa Ontology blockchain network. Sa miaging mga artikulo atong nasinati

  1. Blockchain ug Block API
  2. API sa pagtipig.

Karon nga adunay ka ideya kung giunsa pagtawag ang angay nga padayon nga pagtipig nga API kung nagpalambo usa ka intelihente nga kontrata gamit ang Python sa network sa Ontology, magpadayon kita sa pagkat-on kung giunsa ang paggamit Runtime API (Contract Execution API). Ang Runtime API adunay 8 ka may kalabutan nga mga API nga naghatag og komon nga mga interface alang sa pagpatuman sa kontrata ug nagtabang sa mga developers sa pagkuha, pagbag-o, ug pag-validate sa datos.

Sa ubos usa ka mubo nga paghulagway sa 8 nga datos sa API:

Giunsa pagsulat ang usa ka intelihente nga kontrata sa Python sa network sa Ontology. Bahin 3: Runtime API

Atong tan-awon pag-ayo kon unsaon paggamit ang 8 API data. Sa wala pa kini, makahimo ka og bag-ong kontrata sa Ontology smart contract development tool SmartX ug sunda ang mga instruksyon sa ubos.

Giunsa paggamit ang Runtime API

Adunay duha ka paagi sa pag-import Runtime API: ontology.interop.System.Runtime ΠΈ ontology.interop.Ontology.Runtime. Ang dalan sa Ontology naglangkob sa bag-ong gidugang nga mga API. Ang mga linya sa ubos nag-import sa datos sa API.

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

Pahibalo sa API

Ang Notify function nagsibya sa panghitabo sa tibuok network. Sa pananglitan sa ubos, ibalik sa function sa Notify ang hex string nga "hello word" ug i-broadcast kini sa tibuok network.

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

Makita nimo kini sa mga log:

Giunsa pagsulat ang usa ka intelihente nga kontrata sa Python sa network sa Ontology. Bahin 3: Runtime API

GetTime API

Ang GetTime function nagbalik sa kasamtangan nga timestamp, nga nagbalik sa Unix nga oras diin ang function gitawag. Ang yunit sa pagsukod mao ang ikaduha.

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

GetCurrentBlockHash API

Ang GetCurrentBlockHash function nagbalik sa hash sa kasamtangan nga block.

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

Serialize ug Deserialize

Kini usa ka pares sa serialization ug deserialization function. Ang Serialize function nag-convert sa usa ka butang ngadto sa usa ka bytearray nga butang, ug ang Deserialize function nag-convert sa usa ka bytearray ngadto sa orihinal nga butang. Ang sample sa code sa ubos nagbag-o sa umaabot nga mga parameter ug nagtipig niini sa padayon nga pagtipig sa kontrata. Gikuha usab niini ang datos gikan sa padayon nga pagtipig sa kontrata ug gibag-o kini sa orihinal nga butang.

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

Kini nga parisan sa paghubad sa adres naglihok. Ang Base58ToAddress function nag-convert sa base58 nga naka-encode nga adres ngadto sa usa ka bytearray nga adres, ug ang AddressToBase58 nag-convert sa usa ka bytearray nga adres ngadto sa base58 nga naka-encode nga adres.

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)

Susihon ang Saksi

Ang CheckWitness(fromAcct) function adunay duha ka gamit:

  • Tinoa kung ang nagtawag karon nga function gikan saAcct. Kung oo (nga mao, gipasa ang pag-verify sa pirma), ang function mobalik.
  • Susiha kung ang butang nga nagtawag sa kasamtangan nga function usa ka kontrata. Kung kini usa ka kontrata ug ang function gipatuman gikan sa kontrata, nan ang pag-verify gipasa. Kana mao, pamatud-i kung gikan saAcct ang pagbalik nga kantidad sa GetCallingScriptHash(). Ang GetCallingScriptHash() function mahimong makakuha sa contract hash value sa kasamtangang smart contract.

GetCallingScriptHash():

Magbasa pa sa 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

Dugang nga impormasyon makita sa Guthub. Sa sunod nga artikulo atong ipaila Lumad nga APIaron mahibal-an kung giunsa pagbalhin ang mga kabtangan sa mga kontrata sa Ontology.

Ang artikulo gihubad sa mga editor Hashrate & Shares ilabi na alang sa OntologyRussia.

Ikaw ba usa ka developer? Apil sa among tech nga komunidad sa Pagsabut. Usab, tan-awa ang Developer Center Ontology, makit-an nimo ang daghang mga himan, dokumentasyon ug daghan pa didto.

Bukas nga mga buluhaton alang sa mga developer. Kompletoha ang buluhaton ug makakuha usa ka ganti.

Apply karon alang sa Ontology talent program alang sa mga estudyante

Ontology

Ontology nga website - GitHub - Pagsabut - Telegram nga Ruso - Twitter - Reddit

Source: www.habr.com

Idugang sa usa ka comment