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

Комментарии (9)


  1. GCU
    13.11.2019 11:40

    Какой-то сложный Main, можно же тупее:

    return locals()[operation](*args)


    1. Ontologic Автор
      13.11.2019 12:51

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

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

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


      1. GCU
        13.11.2019 13:23

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

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


        1. Ontologic Автор
          13.11.2019 13:48

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


  1. lowtechomega
    13.11.2019 12:13

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


    1. GCU
      13.11.2019 12:54

      В частных распределённых бухгалтерских книгах смарт-контракты являются одним из тех терминов, которыми консультантами разбрасываются без особого внимания к чётким определениям или цели. Консультанты по корпоративному программному обеспечению обычно зарабатывают на двусмысленности, а смарт-контракты — апофеоз корпоративного мракобесия, потому что их можно определить буквально как что угодно.

      habr.com/ru/post/475022


      1. lowtechomega
        13.11.2019 13:01

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

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

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


        1. Ontologic Автор
          13.11.2019 13:29

          привет! мы пишем о внедрении наших блокчейн решений в бизнес в блоге на медиуме.

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

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


  1. Ontologic Автор
    13.11.2019 12:51

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

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

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