Paano magsulat ng isang matalinong kontrata sa Python sa network ng Ontology. Bahagi 3: Runtime API

Paano magsulat ng isang matalinong kontrata sa Python sa network ng Ontology. Bahagi 3: Runtime API

Ito ang ika-3 bahagi sa isang serye ng mga pang-edukasyon na artikulo sa paglikha ng mga matalinong kontrata sa Python sa Ontology blockchain network. Sa mga nakaraang artikulo ay nakilala natin

  1. Blockchain at Block API
  2. Storage API.

Ngayon na mayroon ka nang ideya kung paano tumawag sa naaangkop na persistent storage API kapag bumubuo ng matalinong kontrata gamit ang Python sa Ontology network, magpatuloy tayo sa pag-aaral kung paano gamitin Runtime API (Contract Execution API). Ang Runtime API ay may 8 nauugnay na API na nagbibigay ng mga karaniwang interface para sa pagpapatupad ng kontrata at tumutulong sa mga developer na kunin, baguhin, at patunayan ang data.

Nasa ibaba ang isang maikling paglalarawan ng 8 data ng API:

Paano magsulat ng isang matalinong kontrata sa Python sa network ng Ontology. Bahagi 3: Runtime API

Tingnan natin kung paano gamitin ang data ng 8 API. Bago ito, maaari kang gumawa ng bagong kontrata sa Ontology smart contract development tool SmartX at sundin ang mga tagubilin sa ibaba.

Paano gamitin ang Runtime API

Mayroong dalawang paraan upang mag-import Runtime API: ontology.interop.System.Runtime ΠΈ ontology.interop.Ontology.Runtime. Ang Ontology path ay naglalaman ng mga bagong idinagdag na API. Ang mga linya sa ibaba ay nag-i-import ng data ng API.

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

Abisuhan ang API

Ang Notify function ay nagbo-broadcast ng kaganapan sa buong network. Sa halimbawa sa ibaba, ibabalik ng Notify function ang hex string na "hello word" at i-broadcast ito sa buong network.

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

Makikita mo ito sa mga log:

Paano magsulat ng isang matalinong kontrata sa Python sa network ng Ontology. Bahagi 3: Runtime API

GetTime API

Ibinabalik ng GetTime function ang kasalukuyang timestamp, na nagbabalik ng Unix time kung saan tinawag ang function. Ang yunit ng pagsukat ay pangalawa.

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

GetCurrentBlockHash API

Ang GetCurrentBlockHash function ay nagbabalik ng hash ng kasalukuyang block.

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

Serialize at Deserialize

Isa itong pares ng serialization at deserialization function. Ang Serialize function ay nagko-convert ng isang object sa isang bytearray object, at ang Deserialize function ay nag-convert ng isang bytearray sa orihinal na object. Kino-convert ng sample ng code sa ibaba ang mga papasok na parameter at iniimbak ang mga ito sa patuloy na storage ng kontrata. Kinukuha din nito ang data mula sa patuloy na imbakan ng kontrata at ginagawa itong orihinal na bagay.

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

Ang pares na ito ng pagsasalin ng address ay gumagana. Ang Base58ToAddress function ay nagko-convert ng base58 na naka-encode na address sa isang bytearray address, at ang AddressToBase58 ay nag-convert ng isang bytearray na address sa isang base58 na naka-encode na address.

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)

Suriin ang Saksi

Ang CheckWitness(fromAcct) function ay may dalawang functionality:

  • I-verify kung ang tumatawag sa kasalukuyang function ay mula saAcct. Kung oo (iyon ay, naipasa ang signature verification), babalik ang function.
  • Suriin kung ang object na tumatawag sa kasalukuyang function ay isang kontrata. Kung ito ay isang kontrata at ang function ay naisakatuparan mula sa kontrata, pagkatapos ay ang pag-verify ay naipasa. Iyon ay, i-verify kung ang fromAcct ay ang return value ng GetCallingScriptHash(). Maaaring kunin ng GetCallingScriptHash() function ang contract hash value ng kasalukuyang smart contract.

GetCallingScriptHash():

Higit 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

Higit pang impormasyon ay matatagpuan sa Guthub. Sa susunod na artikulo ay ipakikilala natin Katutubong APIpara matutunan kung paano maglipat ng mga asset sa mga smart contract ng Ontology.

Ang artikulo ay isinalin ng mga editor Hashrate&Shares lalo na para sa OntologyRussia.

Ikaw ba ay isang developer? Sumali sa aming tech community sa Hindi magkasundo. Gayundin, tingnan mo Developer Center Ontology para sa higit pang mga tool, dokumentasyon, at higit pa.

Buksan ang mga gawain para sa mga developer. Isara ang gawain - makakuha ng gantimpala.

Mag-apply para sa Ontology talent program para sa mga mag-aaral

Ontolohiya

Website ng ontology - GitHub - Hindi magkasundo - Telegram na Ruso - kaba - reddit

Pinagmulan: www.habr.com

Magdagdag ng komento