Как Π΄Π° напишСм смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π° Python Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ontology. Част 3: Runtime API

Как Π΄Π° напишСм смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π° Python Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ontology. Част 3: Runtime API

Π’ΠΎΠ²Π° Π΅ Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° част ΠΎΡ‚ сСрията ΠΎΠ±ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈ статии Π·Π° създаванС Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Python Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ontology. Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ статии сС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ…ΠΌΠ΅ с

  1. Blockchain & Block API
  2. Storage API.

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ прСдстава ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ API Π·Π° постоянно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Python Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ontology, Π½Π΅ΠΊΠ° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅Ρ‚ΠΎ с Runtime API (API Π·Π° изпълнСниС Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ). API Π·Π° изпълнСниС ΠΈΠΌΠ° 8 ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ API, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят ΠΎΠ±Ρ‰ΠΈ интСрфСйси Π·Π° изпълнСниС Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΈ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ ΠΈ провСряват Π΄Π°Π½Π½ΠΈ.

По-Π΄ΠΎΠ»Ρƒ Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ описаниС Π½Π° Ρ‚Π΅Π·ΠΈ 8 API:

Как Π΄Π° напишСм смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π° Python Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ontology. Част 3: Runtime API

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ 8 API. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½ΠΎΠ² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² инструмСнта Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Ontology SmartX ΠΈ Π΄Π° слСдватС слСднитС инструкции.

Как Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ API Π·Π° изпълнСниС

Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½Π° API Π·Π° изпълнСниС: ontology.interop.System.Runtime ΠΈ ontology.interop.Ontology.Runtime. ΠŸΡŠΡ‚ΡΡ‚ Ontology ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° наскоро Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈΡ‚Π΅ 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

Ѐункцията Notify ΠΏΡ€Π΅Π΄Π°Π²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π² цялата ΠΌΡ€Π΅ΠΆΠ°. Π’ слСдващия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ функцията Notify Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ hex-стринг "hello world" ΠΈ Ρ‰Π΅ я ΠΏΡ€Π΅Π΄Π°Π΄Π΅ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

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

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅:

Как Π΄Π° напишСм смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π° Python Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ontology. Част 3: Runtime API

API GetTime

Ѐункцията GetTime Π²Ρ€ΡŠΡ‰Π° Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°, която прСдоставя Unix Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ функцията Π΅ Π±ΠΈΠ»Π° ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π°. Π•Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° Π·Π° ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ Π΅ сСкунда.

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

API GetCurrentBlockHash

Ѐункцията GetCurrentBlockHash Π²Ρ€ΡŠΡ‰Π° Ρ…Π΅Ρˆ Π½Π° тСкущия Π±Π»ΠΎΠΊ.

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

Serialize ΠΈ Deserialize

Π’ΠΎΠ²Π° Π΅ Π΄Π²ΠΎΠΉΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° сСриализация ΠΈ дСсСриализация. Ѐункцията Serialize ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° ΠΎΠ±Π΅ΠΊΡ‚ Π² ΠΎΠ±Π΅ΠΊΡ‚ bytearray, Π° функцията Deserialize ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° bytearray ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² оригиналния ΠΎΠ±Π΅ΠΊΡ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° входящитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ Π³ΠΈ Π·Π°ΠΏΠ°Π·Π²Π° Π² постоянното Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠ·Π²Π»ΠΈΡ‡Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ постоянното Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΈ Π³ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² оригиналния ΠΎΠ±Π΅ΠΊΡ‚.

ΠΎΡ‚ ontology.interop.System.Runtime ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
ΠΎΡ‚ ontology.interop.System.Storage ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Put, Get, GetContext

def Main(operation, args):
    Π°ΠΊΠΎ operation == 'serialize_to_bytearray':
        data = args[0]
        return serialize_to_bytearray(data)
    Π°ΠΊΠΎ 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 Π² адрСс Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ bytearray, Π° AddressToBase58 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° адрСс Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ bytearray Π² ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ адрСс base58.

ΠΎΡ‚ ontology.interop.Ontology.Runtime ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Base58ToAddress, AddressToBase58
def demo():
    base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn"
    addr=Base58ToAddress(base58_addr)
    Log(addr)
    base58_addr=AddressToBase58(addr)
    Log(base58_addr)

CheckWitness

Ѐункцията CheckWitness(fromAcct) ΠΈΠΌΠ° Π΄Π²Π΅ функционалности:

  • ΠŸΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Ρ‚Π΅, Π°ΠΊΠΎ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‰ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° функция, Π΅ fromAcct. Ако Π΄Π° (Ρ‚.Π΅. ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π·Π° подпис Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ‚Π°), функцията Π²Ρ€ΡŠΡ‰Π°.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅, Π°ΠΊΠΎ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‰ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° функция, Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚. Ако Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈ функцията сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ‚Π°. ВоСст, ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Ρ‚Π΅, Π°ΠΊΠΎ fromAcct Π΅ стойността, Π²ΡŠΡ€Π½Π°Ρ‚Π° ΠΎΡ‚ GetCallingScriptHash(). Ѐункцията GetCallingScriptHash() ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ Ρ…Π΅Ρˆ стойността Π½Π° тСкущия смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚.

GetCallingScriptHash():

НаучСтС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π½Π° Guthub

ΠΎΡ‚ ontology.interop.System.Runtime ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ CheckWitness
ΠΎΡ‚ ontology.interop.Ontology.Runtime ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

ΠŸΠΎΠ²Π΅Ρ‡Π΅ информация ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Guthub. Π’ слСдващата статия Ρ‰Π΅ прСдставим Native API, Π·Π° Π΄Π° сС Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈ Π² смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π° Ontology.

Бтатията бСшС ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° ΠΎΡ‚ рСдакцията Hashrate&Shares спСциално Π·Π° OntologyRussia.

Π’ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ? ΠŸΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½Π΅Ρ‚Π΅ сС към Π½Π°ΡˆΠ΅Ρ‚ΠΎ тСхничСско общСство Π½Π° Discord. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π² Π¦Π΅Π½Ρ‚ΡŠΡ€ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Ontology, Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ инструмСнти, докумСнтация ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.

ΠžΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Π—Π°Π²ΡŠΡ€ΡˆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° β€” ΠΏΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ Π½Π°Π³Ρ€Π°Π΄Π°.

ΠŸΠΎΠ΄Π°ΠΉΡ‚Π΅ заявлСниС Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° Ρ‚Π°Π»Π°Π½Ρ‚ΠΈ Π½Π° Ontology Π·Π° студСнти

Ontology

Ontology website β€” GitHub β€” Discord β€” Telegram руски β€” Twitter β€” Reddit

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster