Это вторая часть из серии обучающих статей о создании смарт-контрактов на Python в блокчейн сети Ontology. В предыдущей статье мы познакомились с Blockchain & Block API смарт-контракта Ontology.
Сегодня мы обсудим, как использовать второй модуль— Storage API. Storage API имеет пять связанных API, которые позволяют добавление, удаление и изменения в постоянном хранилище в смарт-контрактах на блокчейне.
Ниже краткое описание данных пяти API:
Давайте более подробно разберём, как использовать эти пять API.
0. Создадим новый контракт SmartX
1. Как использовать Storage API
GetContext & GetReadOnlyContext
GetContext и GetReadOnlyContext получают контекст, в котором выполняется текущий смарт- контракт. Return value является обратным текущему хешу смарт-контракта. Как следует из названия, GetReadOnlyContext берёт контекст режима только для чтения. В нижеприведённом примере return value является обратным хешу контракта, отображаемому в верхнем правом углу.
Put
Функция Put является ответственной за хранение данных в блокчейне в форме словаря. Как показано, Put принимает три параметра. GetContext берёт контекст текущего выполняемого смарт- контракта, key— это значение ключа, которое необходимо, чтобы сохранить данные, а value— это значением данных, которые необходимо сохранить. Обратите внимание, если значение ключа уже находится в хранилище, то функция обновит его соответствующее значение.
hashrate-and-shares.ru/images/obzorontology/python/functionput.png
Get
Функция Get является ответственной за чтение данных в текущем блокчейне посредством значения ключа. В нижеприведённом примере Вы можете заполнить значение ключа в панели параметров справа, чтобы выполнить функцию и считать данные, соответствующие значению ключа в блокчейне.
Delete
Функция Delete является ответственной за удаление данных в блокчейне посредством значения ключа. В нижеприведённом примере Вы можете заполнить значение ключа для выполнения функции в панели параметров справа и удалить данные, соответствующие значению ключа в блокчейне.
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 website — GitHub — Discord — Telegram Russian — Twitter — Reddit
Комментарии (9)
lowtechomega
13.11.2019 12:13Прежде чем писать какие то контракты, стоило бы ответить на вопрос — зачем? 100500 супер-пупер-бч сетей. Примеров реально работавших где то контактов на пальцах одной руки можно перечесть. Неужели создателям сего еще не понятно — что фича создана мертворожденной, в том виде в котором она реализована? У нее просто нет никаких областей применения, от слова вообще.
GCU
13.11.2019 12:54В частных распределённых бухгалтерских книгах смарт-контракты являются одним из тех терминов, которыми консультантами разбрасываются без особого внимания к чётким определениям или цели. Консультанты по корпоративному программному обеспечению обычно зарабатывают на двусмысленности, а смарт-контракты — апофеоз корпоративного мракобесия, потому что их можно определить буквально как что угодно.
habr.com/ru/post/475022lowtechomega
13.11.2019 13:01Забавно, что еще 2-3 года назад никто из сих «консультантов» и «експертов» даже и слова то такого как БЧ не слышал ;-)
Да, их (смартконтракты) и определяют как все что угодно на каждом углу, бухгалтера точно например знают что это такое и зачем он нужен. А тут еще череда бесполезных статей про то как «программировать» контракты.
Ontologic, лучше напишите про то как и где сии поделки уже применяются (в реальной жизни и примерах) — про теорию не требюется. А не про то, как это никому не нужное чудо программировать.Ontologic Автор
13.11.2019 13:29привет! мы пишем о внедрении наших блокчейн решений в бизнес в блоге на медиуме.
вот инфографика с партнерами и приложениями на базе онтолоджи
мы также поддерживаем мультичейн и шардирование что позволяет делать кастомные решения для бизнеса которому не подходит public chain
спасибо за интерес, я обязательно напишу статью для хабра о протоколе и решениях которые мы уже внедрили с бизнес :)
Ontologic Автор
13.11.2019 12:51Так тестировать удобнее и отлавливать ошибку
Сильно проще переписать Main не получится, только если достать argparse. Ну можно во все функции передавать args, а сами функции записать в словарь и тогда Main будет проще. но такое сокращение скорее преждевременная оптимизация. Она не несёт особого value, но делает код чуть менее читабельным. Конечно, можно сделать чуть проще, но стоит ли это того — вопрос.
Предлагаю открыть issue на гитхабе и там обсудить с сообществом. или на дискоре
GCU
Какой-то сложный Main, можно же тупее:
Ontologic Автор
Так тестировать удобнее и отлавливать ошибку
Сильно проще переписать Main не получится, только если достать argparse. Ну можно во все функции передавать args, а сами функции записать в словарь и тогда Main будет проще. но такое сокращение скорее преждевременная оптимизация. Она не несёт особого value, но делает код чуть менее читабельным. Конечно, можно сделать чуть проще, но стоит ли это того — вопрос.
Предлагаю открыть issue на гитхабе и там обсудить с сообществом. или на дискоре
GCU
Без глубокого погружения в тему смарт-контрактов продуктивная дискуссия с обществом не представляется возможным, особенно по китайской документации :).
На мой взгляд — редактировать Main при добавлении каждой новой функции излишне, лучше чтобы сами функции там регистрировались, например, при помощи декоратора.
Ontologic Автор
так на всякий случай: центр документации docs.ont.io
еще у нас есть два онлайн курса раз два
и разработчики этих курсов находятся в этом чате