نحوه نوشتن قرارداد هوشمند در پایتون در شبکه آنتولوژی قسمت 3: Runtime API

نحوه نوشتن قرارداد هوشمند در پایتون در شبکه آنتولوژی قسمت 3: Runtime API

این قسمت سوم از مجموعه مقالات آموزشی ایجاد قراردادهای هوشمند در پایتون در شبکه بلاک چین آنتولوژی است. در مقالات قبلی با آن آشنا شدیم

  1. Blockchain & Block API
  2. Storage API.

اکنون که ایده ای در مورد نحوه فراخوانی API ذخیره سازی پایدار مناسب هنگام توسعه قرارداد هوشمند با استفاده از پایتون در شبکه Ontology دارید، بیایید به یادگیری نحوه استفاده بپردازیم. Runtime API (API اجرای قرارداد). Runtime API دارای 8 API مرتبط است که رابط های مشترکی را برای اجرای قرارداد فراهم می کند و به توسعه دهندگان کمک می کند تا داده ها را بازیابی، تبدیل و اعتبار سنجی کنند.

در زیر توضیح مختصری از داده های 8 API آورده شده است:

نحوه نوشتن قرارداد هوشمند در پایتون در شبکه آنتولوژی قسمت 3: Runtime API

بیایید نگاهی دقیق تر به نحوه استفاده از داده های 8 API بیندازیم. قبل از این، می توانید یک قرارداد جدید در ابزار توسعه قرارداد هوشمند Ontology ایجاد کنید SmartX و دستورالعمل های زیر را دنبال کنید.

نحوه استفاده از Runtime API

دو راه برای واردات وجود دارد Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.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 رویداد را در سراسر شبکه پخش می کند. در مثال زیر، تابع Notify رشته هگزا "Hello word" را برمی گرداند و آن را در سراسر شبکه پخش می کند.

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

این را می توانید در لاگ ها ببینید:

نحوه نوشتن قرارداد هوشمند در پایتون در شبکه آنتولوژی قسمت 3: Runtime API

GetTime API

تابع GetTime مُهر زمان فعلی را برمی‌گرداند، که زمان یونیکس را که در آن تابع فراخوانی شده است، برمی‌گرداند. واحد اندازه گیری دوم است.

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

سریال سازی و سریال زدایی

این یک جفت توابع سریال سازی و سریال زدایی است. تابع Serialize یک شی را به یک شی بایت آرایه تبدیل می کند و تابع 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) دو عملکرد دارد:

  • بررسی کنید که آیا تماس گیرنده تابع فعلی از Acct است یا خیر. اگر بله (یعنی تأیید امضا تصویب شد)، تابع برمی گردد.
  • بررسی کنید که آیا شیء فراخوانی تابع فعلی یک قرارداد است یا خیر. اگر یک قرارداد باشد و کارکرد از قرارداد اجرا شود، تأیید می شود. یعنی بررسی کنید که fromAcct مقدار بازگشتی GetCallingScriptHash() است یا خیر. تابع GetCallingScriptHash() می تواند مقدار هش قرارداد قرارداد هوشمند فعلی را بگیرد.

GetCallingScriptHash():

بیشتر در مورد گوثوب

from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

اطلاعات بیشتر را می توان در یافت گوثوب. در مقاله بعدی به معرفی خواهیم پرداخت API بومیبرای یادگیری نحوه انتقال دارایی در قراردادهای هوشمند Ontology.

مقاله توسط ویراستاران ترجمه شده است Hashrate&Shares مخصوصاً برای OntologyRussia.

آیا شما یک ارتقاء دهنده هستید؟ به جامعه فناوری ما بپیوندید در اختلاف. همچنین، نگاهی به مرکز توسعه دهندگان هستی شناسی، شما می توانید ابزارها، اسناد و مدارک بیشتری را در آنجا پیدا کنید.

وظایف را برای توسعه دهندگان باز کنید. کار را کامل کنید و جایزه بگیرید.

درخواست دادن برای برنامه استعدادشناسی هستی شناسی برای دانش آموزان

هستیشناسی

وب سایت هستی شناسی - GitHub - اختلاف - تلگرام روسی - توییتر - ق

منبع: www.habr.com

اضافه کردن نظر