Как написать смарт-контракт на Python в сети Ontology. Часть 2: Storage API

Original author: Ontology Network
  • Translation
  • Tutorial
image

Это вторая часть из серии обучающих статей о создании смарт-контрактов на Python в блокчейн сети Ontology. В предыдущей статье мы познакомились с Blockchain & Block API смарт-контракта Ontology.

Сегодня мы обсудим, как использовать второй модуль— Storage API. Storage API имеет пять связанных API, которые позволяют добавление, удаление и изменения в постоянном хранилище в смарт-контрактах на блокчейне.

Ниже краткое описание данных пяти API:

image

Давайте более подробно разберём, как использовать эти пять API.

0. Создадим новый контракт SmartX

1. Как использовать Storage API


GetContext & GetReadOnlyContext


GetContext и GetReadOnlyContext получают контекст, в котором выполняется текущий смарт- контракт. Return value является обратным текущему хешу смарт-контракта. Как следует из названия, GetReadOnlyContext берёт контекст режима только для чтения. В нижеприведённом примере return value является обратным хешу контракта, отображаемому в верхнем правом углу.

image

Put


Функция Put является ответственной за хранение данных в блокчейне в форме словаря. Как показано, Put принимает три параметра. GetContext берёт контекст текущего выполняемого смарт- контракта, key— это значение ключа, которое необходимо, чтобы сохранить данные, а value— это значением данных, которые необходимо сохранить. Обратите внимание, если значение ключа уже находится в хранилище, то функция обновит его соответствующее значение.

imagehashrate-and-shares.ru/images/obzorontology/python/functionput.png

Get


Функция Get является ответственной за чтение данных в текущем блокчейне посредством значения ключа. В нижеприведённом примере Вы можете заполнить значение ключа в панели параметров справа, чтобы выполнить функцию и считать данные, соответствующие значению ключа в блокчейне.

image

Delete


Функция Delete является ответственной за удаление данных в блокчейне посредством значения ключа. В нижеприведённом примере Вы можете заполнить значение ключа для выполнения функции в панели параметров справа и удалить данные, соответствующие значению ключа в блокчейне.

image

2. Пример кода Storage API


Нижеприведённый код даёт детальный пример использования пяти API: GetContext, Get, Put, Delete и GetReadOnlyContext. Вы можете попробовать запустить данные API в SmartX.

from ontology.interop.System.Storage import GetContext, Get, Put, Delete, GetReadOnlyContext
from ontology.interop.System.Runtime import Notify

def Main(operation,args):
    if operation == 'get_sc':
        return get_sc()
    if operation == 'get_read_only_sc':
        return get_read_only_sc()
    if operation == 'get_data':
        key=args[0]
        return get_data(key)
    if operation == 'save_data':
        key=args[0]
        value=args[1]
        return save_data(key, value)
    if operation == 'delete_data':
        key=args[0]
        return delete_data(key)
    return False

def get_sc():
    return GetContext()
    
def get_read_only_sc():
    return GetReadOnlyContext()

def get_data(key):
    sc=GetContext() 
    data=Get(sc,key)
    return data
    
def save_data(key, value):
    sc=GetContext() 
    Put(sc,key,value)
    
def delete_data(key):
    sc=GetContext() 
    Delete(sc,key)

Послесловие


Блокчейн-хранилище является ядром всей блокчейн-системы. Ontology Storage API прост в применении и удобен для разработчиков.

С другой стороны, на хранилище сфокусированы атаки хакеров, например, угроза безопасности, о которой мы упоминали в одной из предыдущих статей— storage injection attack, разработчики обязаны уделять особое внимание безопасности при написании кода, который связан с хранилищем. Вы можете найти полное руководство на нашем GitHub здесь.

В следующей статье мы обсудим как использовать Runtime API.


Статья была переведена редакцией Hashrate&Shares специально для OntologyRussia. клик

Вы разработчик? Присоединяйтесь к нашему техническому сообществу на Discord. Кроме того, загляните в Центр разработчиков Ontology, там можно найти больше инструментов, документацию и многое другое.


Открытые задачи для разработчиков. Закрой задачу — получи вознаграждение.

Подать заявку на программу талантов Ontology для студентов

Ontology


Ontology websiteGitHubDiscordTelegram RussianTwitter Reddit
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 9

    0
    Какой-то сложный Main, можно же тупее:
    return locals()[operation](*args)

      0
      Так тестировать удобнее и отлавливать ошибку

      Сильно проще переписать Main не получится, только если достать argparse. Ну можно во все функции передавать args, а сами функции записать в словарь и тогда Main будет проще. но такое сокращение скорее преждевременная оптимизация. Она не несёт особого value, но делает код чуть менее читабельным. Конечно, можно сделать чуть проще, но стоит ли это того — вопрос.

      Предлагаю открыть issue на гитхабе и там обсудить с сообществом. или на дискоре
        0
        Без глубокого погружения в тему смарт-контрактов продуктивная дискуссия с обществом не представляется возможным, особенно по китайской документации :).

        На мой взгляд — редактировать Main при добавлении каждой новой функции излишне, лучше чтобы сами функции там регистрировались, например, при помощи декоратора.

          0
          так на всякий случай: центр документации docs.ont.io
          еще у нас есть два онлайн курса раз два
          и разработчики этих курсов находятся в этом чате

      0
      Прежде чем писать какие то контракты, стоило бы ответить на вопрос — зачем? 100500 супер-пупер-бч сетей. Примеров реально работавших где то контактов на пальцах одной руки можно перечесть. Неужели создателям сего еще не понятно — что фича создана мертворожденной, в том виде в котором она реализована? У нее просто нет никаких областей применения, от слова вообще.
        0
        В частных распределённых бухгалтерских книгах смарт-контракты являются одним из тех терминов, которыми консультантами разбрасываются без особого внимания к чётким определениям или цели. Консультанты по корпоративному программному обеспечению обычно зарабатывают на двусмысленности, а смарт-контракты — апофеоз корпоративного мракобесия, потому что их можно определить буквально как что угодно.

        habr.com/ru/post/475022
          0
          Забавно, что еще 2-3 года назад никто из сих «консультантов» и «експертов» даже и слова то такого как БЧ не слышал ;-)

          Да, их (смартконтракты) и определяют как все что угодно на каждом углу, бухгалтера точно например знают что это такое и зачем он нужен. А тут еще череда бесполезных статей про то как «программировать» контракты.

          Ontologic, лучше напишите про то как и где сии поделки уже применяются (в реальной жизни и примерах) — про теорию не требюется. А не про то, как это никому не нужное чудо программировать.
            0
            привет! мы пишем о внедрении наших блокчейн решений в бизнес в блоге на медиуме.

            вот инфографика с партнерами и приложениями на базе онтолоджи
            image
            мы также поддерживаем мультичейн и шардирование что позволяет делать кастомные решения для бизнеса которому не подходит public chain

            спасибо за интерес, я обязательно напишу статью для хабра о протоколе и решениях которые мы уже внедрили с бизнес :)
        0
        Так тестировать удобнее и отлавливать ошибку

        Сильно проще переписать Main не получится, только если достать argparse. Ну можно во все функции передавать args, а сами функции записать в словарь и тогда Main будет проще. но такое сокращение скорее преждевременная оптимизация. Она не несёт особого value, но делает код чуть менее читабельным. Конечно, можно сделать чуть проще, но стоит ли это того — вопрос.

        Предлагаю открыть issue на гитхабе и там обсудить с сообществом. или на дискоре

        Only users with full accounts can post comments. Log in, please.