Метамодель Сабчейна на Стим
Пост о Сабчейнах от Дена Ларимера, перевод которого я опубликовал в своем прошлом посте, не остался пустой декларацией, на Стимит нашелся и человек, который сделал работающий прототип такого сабчейна.
Я собираюсь перевести несколько его постов, описывающих то, что им было сделано.
Надеюсь, это сможет вдохновить кого то поисследовать эту тему и для Голоса.
Ссылка на оригинал первого из постов:
https://steemit.com/steem/@biophil/mist-a-meta-model-for-steem-subchains
Что такое сабчейн ?
Слышали когда нибудь о проектах Omni https://coinmarketcap.com/currencies/omni/
или Counterparty https://coinmarketcap.com/currencies/counterparty/
( бывший Мастеркойн ) ? Это именно то, что Дэн Лаример назвал сабчейнами: это приложения, построенные "поверх" основного блокчейна Биткойна. Имеется в виду то, что для отправки ( например) токена XCP на Counterparty, вы включаете специально отформатированную инструкцию в трансакцию Биткойна, оплачиваете стоимость трансакции, и после её записи в блокчейн Биткойна сеть Counterparty анализирует эту инструкцию и записывает, что вы отослали заданное количество токенов XRP.
Разумеется, в сетях Omni и Counterparty возможны и многие другие операции, но все они работают по тому же принципу.
Сабчейны позволяют разработчикам строить блокчейны, не беспокоясь о поддержании их функционирования. Разработчики Omni и Counterparty доверяют тому, что майнеры Биткойна сделают свою работу правильно и, соответственно, история инструкций Omni и Counterparty, которая записана в блокчейн Биткойна не будет произвольно изменена.
Все, о чем должны позаботиться Omni и Counterparty - это обеспечить возможность для их собственных протоколов анализировать ( парсить ) историю своих операций, записанных в блокчейн Биткойна, с тем, чтобы генерировать состояния своей собственной базы данных однозначным образом.
То, что я сейчас буду описывать, не является в полной мере протоколом. Это всего лишь некоторое простое правило, которое "картографирует" список операций блокчейна Стим в состояния некой базы данных.
Для начала, базовое описание того, как организован блокчейн Стим:
- Блоки: блок - это список трансакций Стим. Блоки публикуются каждые три секунды.
- Трансакции: трансакция - это список, состоящий из одной или многих операций
- Операция: операция - это фундаментальный базовый элемент "взаимодействия" с блокчейном Стим. Когда вы публикуете или редактируете пост или комментарий на Стим, на самом деле на базовом уровне вы заносите "операцию комментирования" в трансакцию, которая затем будет записана в блок. То же самое относится к "голосованию", "подписке" и так далее.
Операции включаются в трансакции в фиксированном порядке; трансакции включаются в блоки также в фиксированном порядке. Благодаря такой структуре, для наших целей мы можем игнорировать блоки и трансакции и думать о блокчейне Стим просто как о списке операций. Через несколько минут после создания порядок в этом списке уже не может быть изменён и, соответственно, информация, включённая в каждую операцию уже не может быть изменена.
Фундаментальная диаграмма работы "Стим - Внутренний Токен" ( далее СВТ)
Таким образом, для создания собственного Сабчейна в соответствии с этим внутренним протоколом, все, что вам нужно сделать, это ответить на три фундаментальных вопроса:
- Каково начальное состояния базы данных СВТ?
- Что представляет собой "валидная"инструкция для СВТ?
- Для каждой из "валидных" инструкций, каким будет соответствующее изменение исходной базы данных?
Простейший пример - Счётчик Операций
- [ ] Это самый простой пример, который я смог придумать. Пусть наша база данных СВТ имеет только один параметр: "счётчик"или
counter
начальное значение которого будет равно0
. Далее я отвечу на два остальных вопроса так:
- Каждая операция Стим отображается в нашей базе данных в виде одной инструкции, называемой "плюсованием", или
increment
- Для каждой инструкции
increment
изменяемcounter = counter + 1
Что будет происходить ? Наш протокол будет генерировать "бегущую строку", отображающую количество операций, записанных на текущий момент в блокчейн Стим. И в чем тут смысл, спросите вы ? Ну, просто это самый простой пример "внутреннего токена", который я смог придумать.
Это настолько просто, что даже несколько глупо именовать это Сабчейном, но поскольку этот пример вписывается в нашу фундаментальную диаграмму, на самом деле это вполне корректный пример.
И что же ещё мы можем делать с СВТ?
Буквально Все Что Угодно - все, что может блокчейн - все то же самое может и СВТ. Например, мы можем импортировать тот же самый Counterparty на Стим, переименовав его в Steemparty ;)
Например, сделать многовариантную систему репутации - конечно, да.
Нынешняя система, в которой сайт steemit.com отображает некоторое число, которое как бы означает "репутацию", возможно может помочь понять, является ли ваш контрагент серийным спаммером, но совсем не помогает, если вы например пытаетесь понять, можно ли доверить вашему контрагенту выполнить какую то работу для вас.
Так почему бы не создать СВТ, который позволит людям делать отзывы о различных аспектах того, что именно они относят к "репутации"? Например, есть кто то, кто в ведет себя как мудак, но при этом не кидает вас на деньги. Возможно, для такого случая стоит ввести две шкалы: "мудаковатости" и "честности".
Рынки предсказаний - это всегда интересно. Gnosis, не имея работающего прототипа, смог собрать миллионы долларов просто под обещание создать рынок предсказаний.
Или, почему бы не смарт-контракты, как о том писал Дэн Лаример в своём оригинальном посте ?
Может быть, хотите создать собственный форк Биткойна? Готов держать пари, что вы можете придумать способ позволить людям использовать их приватные ключи Биткойна для получения соответствующих балансов созданного вами на базе блокчейна Стим токена Steem.BTC
Вы даже сможете позволить людям его майнить.
Вопрос
Можем ли мы добавлять в блокчейн Стим любую операцию, которую только захотим? Разве мы не ограничены только операциями, которые заданы блокчейном Стим ? Если так, то мы должны будем дополнять ( piggyback) эти операции определенными параметрами, например делая трансферы с определенным заданным memo, или, например, делая специфические комментарии и так далее ?
Ответ
Разумеется, это один из путей. Он имеет то преимущество, что при этом у вас не будет жесткой необходимости создавать также и собственный фронтэнд.
Однако блокчейн Стима имеет также и специальную операцию custom_json
, которая позволят вам записывать в блокчейн абсолютно любые данные.
Кстати, функция "поделиться постом" реализована именно таким образом.
Оставайтесь на связи.
Возможно у меня в рукаве есть ещё кое что интересное ;)