Онтология тармагында Pythonдо акылдуу келишимди кантип жазуу керек. 3-бөлүк: Runtime API

Онтология тармагында Pythonдо акылдуу келишимди кантип жазуу керек. 3-бөлүк: Runtime API

Бул Ontology блокчейн тармагында Pythonдо акылдуу келишимдерди түзүү боюнча билим берүүчү макалалардын сериясынын 3-бөлүгү. Мурунку макалаларда биз таанышканбыз

  1. Blockchain & Block API
  2. Storage API.

Эми сиз Ontology тармагында Python аркылуу акылдуу келишимди иштеп чыгууда ылайыктуу туруктуу сактагыч APIди кантип чакыруу керектиги жөнүндө түшүнүккө ээ болгондон кийин, келгиле, кантип колдонууну үйрөнүүгө өтөлү. Runtime API (Контракттарды аткаруу API). Runtime API'де келишимди аткаруу үчүн жалпы интерфейстерди камсыз кылган жана иштеп чыгуучуларга маалыматтарды алууга, өзгөртүүгө жана текшерүүгө жардам берген 8 байланыштуу API бар.

Төмөндө 8 API маалыматтарынын кыскача баяндамасы келтирилген:

Онтология тармагында Pythonдо акылдуу келишимди кантип жазуу керек. 3-бөлүк: Runtime API

Келгиле, 8 API берилиштерин кантип колдонууну кененирээк карап чыгалы. Буга чейин сиз Ontology акылдуу келишимди иштеп чыгуу куралында жаңы келишим түзө аласыз SmartX жана төмөнкү нускамаларды аткарыңыз.

Runtime API кантип колдонсо болот

Импорттун эки жолу бар Runtime API: ontology.interop.System.Runtime и онтология.аралаш.онтология.иштөө убактысы. Онтология жолу жаңы кошулган API'лерди камтыйт. Төмөнкү саптар API дайындарын импорттоо.

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

API кабарлоо

Эскертүү функциясы окуяны бүт тармакка таратат. Төмөндөгү мисалда, Notify функциясы он алтылык сапты "саламатсызбы, сөздү" кайтарып берет жана аны бүт тармакка таркатат.

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

Муну журналдардан көрө аласыз:

Онтология тармагында Pythonдо акылдуу келишимди кантип жазуу керек. 3-бөлүк: Runtime API

GetTime API

GetTime функциясы учурдагы убакыт белгисин кайтарат, ал функция чакырылган Unix убактысын кайтарат. Өлчөө бирдиги экинчи болуп саналат.

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

GetCurrentBlockHash API

GetCurrentBlockHash функциясы учурдагы блоктун хэштерин кайтарат.

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

Сериялаштыруу жана Сериялаштыруу

Бул сериалдаштыруу жана сериялаштыруу функцияларынын жуптары. Сериялаштыруу функциясы объектти байт массивинин объектисине, ал эми Deserialize функциясы байт массивди баштапкы объектке айлантат. Төмөндөгү код үлгүсү кирген параметрлерди өзгөртүп, аларды келишимдин туруктуу сактагычында сактайт. Ал ошондой эле келишимдин туруктуу сактагычынан маалыматтарды чыгарып, аны баштапкы объектке айлантат.

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 жана AddressToBase58

Бул жуп даректи которуу функциялары. Base58ToAddress функциясы base58 коддолгон дарегин байт массивинин дарегине, ал эми AddressToBase58 байт массивинин дарегин 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(fromAcct) функциясы эки функцияга ээ:

  • Учурдагы функциянын чалуучусу fromAcct экенин текшериңиз. Ооба болсо (башкача айтканда, колтамга текшерүүдөн өттү), функция кайтарылат.
  • Учурдагы функцияны чакырган объект келишим экендигин текшериңиз. Эгерде бул келишим болсо жана функция келишимден аткарылса, анда текшерүү өткөрүлөт. Башкача айтканда, fromAcct GetCallingScriptHash() кайтаруу мааниси экенин текшериңиз. GetCallingScriptHash() функциясы учурдагы акылдуу келишимдин келишим хэш маанисин ала алат.

GetCallingScriptHash():

боюнча көбүрөөк маалымат 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

Көбүрөөк маалыматты төмөнкү даректен тапса болот Guthub. Кийинки макалада биз тааныштырабыз Жергиликтүү APIOntology акылдуу келишимдеринде активдерди кантип өткөрүп берүүнү үйрөнүү.

Макала редакция тарабынан которулган Hashrate & Shares өзгөчө OntologyRussia үчүн.

Сиз иштеп чыгуучусузбу? Биздин технологиялык коомчулукка кошулуңуз келишпестиктерге. Ошондой эле, карап көрүңүз Иштеп чыгуучу борбор Онтология, сиз ал жерден көбүрөөк куралдарды, документтерди жана башка көп нерселерди таба аласыз.

Иштеп чыгуучулар үчүн ачык тапшырмалар. Тапшырманы аткарып, сыйлык алыңыз.

Арыз берүү студенттер үчүн онтология талант программасы үчүн

онтология

Онтология сайты - GitHub - келишпестиктерге - Telegram орусча - Twitter - Reddit

Source: www.habr.com

Комментарий кошуу