«Локальный блокчейн» — это как «жареный лёд», это оксюморон, взаимоисключающее сочетание слов.
На этих словах даже Сам возразил, мол:
По мне понимание блокчейнов как глобальных сетей типа биткоина — это олдскул, где кроме STONKS ничего полезного и не придумали, а реальная прикладная польза сейчас вся в локальных. Но это для отдельного треда тема, да. Пиши пост :)
Ну что ж, это пост для программистов, для тех, кто разбирается или хочет разбираться в блокчейнах. К концу прочтения вы либо будете меня ненавидеть (и это нормально, особенно если вы получаете зарплату за разработку локальных блокчейнов), либо убедитесь, "локальный блокчейн" это и правда "жареный лёд". Не ради срача, а правды ради написан этот пост.
Вся соль в том, что в отличие от открытого неизменяемого глобального блокчейна, локальный блокчейн по своим возможностям вообще ничем не отличается от обычного трёхкопеечного хранилища данных из прошлого века. Какой бы функционал не прикручивали, какие бы API наружу ни выставляли, локальный блокчейн ничем, кроме цены разработки и хайпа, не отличается от самого обычного сервачка с базой. Ручаюсь.
Как, спросите вы, разве локальный блокчейн не решает проблему доверия? Нет, не решает.
Разве локальный блокчейн не обеспечивает неизменяемость занесённых в него данных? Нет, не обеспечивает.
Разве локальный блокчейн не позволяет выводить на чистую виду мухлёж с данными задним числом? Нет, не позволяет.
Если совсем точно, то всё вышеперечисленное он умеет делать в точности так же, как обычное хранилище данных с внешним API, даже без всяких хитрых алгоритмов (ну то есть никак).
Для иллюстрации представляем себе, что у нас есть блоки данных...
...и у каждого блока данных есть хэш-сумма, определяющая всё его содержимое...
...и каждый блок внутри себя ссылается на хэш предыдущего блока...
...и каждый блок криптографически подписан проверяемым криптографическим ключом.
Внимание вопрос: что я вот только что описал? (скролл вниз до спойлера)
(скролль ещё ниже...)
А я описал git, простецкую копеечную систему контроля версий, которая появилась задолго до изобретения любых блокчейнов и их особых свойств, из-за которых, собственно, и поднялся когда-то весь блокчейн-хайп. Сюрприз, ёпт!
Я читаю публичные лекции про блокчейн с 2014 года и ещё не было аудитории, в которой на этом слайде сидящие в зале программисты, понимающие в вопросе, не заржали бы в голос.
Да, локальные блокчейны сводятся к такому вот связному списку a la git, где ключи контролирует владелец системы (правительство города, банк, госреестр недвижимости и т.д.)
Если подушнить, то есть ещё всяческие экзотические схемы, к примеру те, что сводятся к P2P-чатам без гарантии порядка сообщений, но я их покрою только если кто-нибудь в комментах тему разовьёт, там букв надо писать много, а толку ноль, результат тот же.
А ещё некоторые — я таких встречал — думают, что блокчейн это когда "ну вот хэши там всякие, ЭЦП, криптография". Муахахахаха. Надеюсь, тут у нас таких нет.
! По опыту я знаю, что многим кажется, что даже
git
это адекватный локальный блокчейн. С первого и даже второго взгляда и правда так может казаться, но дьявол тут в деталях, и в некоторые из них я сейчас подробно залезу. Пожалуйста, ползунок внимания ненадолго передвиньте на максималку.
Обеспечивает ли git
или локальный блокчейн неизменяемость занесённых данных?
Нет конечно, всю историю можно с самого первого блока переписать, пересчитав все хэши и подписи, ключи-то у владельца(ев) есть. Для примера, в git
'е это функции git reset
и git push --force
, в локальном блокчейне возможно ровно то же самое.
Решает ли git
или локальный блокчейн проблему доверия?
Нет конечно. Например, возмущённая общественность видит, что в локальном блокчейне госреестра недвижимости у N
-го блока засветилось аж два варианта следующего блока, считай, две ветки. В одной из них следующим блоком идёт (N+1)
, а в другой — (N+1)'
("н-плюс-один-штрих"), оба варианта блока правильно подписаны, обе ветки легитимно ссылаются на все предыдущие блоки, вплоть до генезис-блока и вообще выглядят полностью красиво и официально.
Только вот одна из них появилась позже, и почему-то в ней запись о том, что владельцем квартиры является Вася Пупкин, отсутствует, а владелец блокчейна (госреестр) говорит, что так всегда и было. Умеет ли git
или локальный блокчейн указать какая из двух разошедшихся веток истинная и защитить Васю Пупкина?
Нет, не умеет. Только высший авторитет, центральный сервер, владелец, которому требуется доверять, сможет сказать какая из веток истинная. Опять же, в примере с git
'ом эту роль выполняет владелец репки на условном github'е или собственном сервере: кто имеет право пушить в мастер, тот и определяет какая ветка "правильная".
А когда госреестр и так царь и бог всех данных, то будь там хоть реляционная база, хоть txt-файлик, хоть локальный блокчейн — никакой разницы вообще. Только в последнем случае подрячики съели жирный кусок из денег налогоплательщиков. А Васе Пупкину теперь на социальное жильё не хватит.
В противоположных локальным блокчейнам, в открытых глобальных неизменяемых криптовалютных блокчейнах, есть механизм выбора главной ветки, не требующий доверия третьим лицам. А в локальных блокчейнах его нет даже теоретически.
Маленький прикол: забавано, но хоть как-то эту проблему в локальных блокчейнах можно решить, если взять за основу правило "первое слово дороже второго": мол, если первый вариант мастера появился раньше, то он и правее. Но, во-первых, **доказательное таймстэмпирование** (неопровержимая привязка данных ко временной шкале, не требующая доверия третьему лицу) умеют обеспечивать только открытые публичные глобальные криптовалютные блокчейны, а во-вторых, даже в таком случае локальный блокчейн ненужон, ибо достаточно было бы таймстэмпировать просто хэш-сумму всего реестра даже если бы он был в виде обычной экселевской/реляционной таблички с ЭЦП, без всяких там блоков и чейнов.
Разве git
или локальный блокчейн не позволяет выводить на чистую виду мухлёж с данными задним числом?
Если задача показать просто сам факт того, что были две разных версии одних и тех же данных, а сейчас раздаётся только одна из них, то тут вообще никакие блокчейны не нужны, ибо имея на руках две подписанные настоящим ключом версии данных вы уже имеет доказательство.
Более того, данные даже не должны быть специально подписаны, достаточно чтобы они раздавались с сервера по HTTPS, и тогда через трюк под названием TLS Notary можно неопровержимо доказать всему честному народу и товарищу майору, что вон тот сервак с тем SSL/TLS-сертификатом раздавал вот эти данные, вот хорошая реализация этого трюка.
А если есть задача доказать, какая из версий данных правильная или какая была раньше, то тут, повторюсь, никакие локальные блокчейны не помогут, ибо в локальном блокчейне держатель ключей и/или нод — царь и бог. Ну а если владелец сам честен, а мухлюет кто-то из других игроков, пользующихся системой, то у нас получается самая обычная trust system, где мы доверяем владельцу, что он разрулит конфликт данных, а для этого и расшаренной экселевской таблички достаточно, локальный блокчейн тут не сделает никакой разницы.
К слову, аналогия с
git
'ом настолько популярна, что вот это теперь один из самых залайканных моих ответов на stackoverflow.
— Слушай, ну что ты привязался, ну называем мы это блокчейном, и что? Ну да, ничего это не даёт, и что теперь-то. Считай у нас вот просто такой формат хранения и представления данных, типа как нереляционная база, тебе жалко чтоли? Люди, между прочим, зарплату получают, чё душнишь-то?
А вот это самое важное, почему это не безобидный дебат определений слова "блокчейн", и не "широкое прочтение термина", а именно зашквар и зло.
В 2008 произошла настоящая революция: была решена Задача Византийских Генералов, которую многие считали нерешаемой, это был настоящий научный прорыв в математической теории игр. Редко когда до этого математический результат насколько непосредственно стал влиять на жизнь настоящих людей, компьютеры научились делать принципиально новые вещи, которые раньше многие считали даже теоретически невозможными, именно потому что они сводились к Задаче Византийских Генералов, которая в общем случае считалась нерешаемой. Именно этот научный прорыв и принципиально новую функциональность назвали блокчейном.
Заметьте, что асимметричное шифрование, хэш-функции, связные списки, P2P-сети (привет, торрент!) и даже proof-of-work существовали задолго до того, изобретател(и) блокчейна стояли на плечах этих гигантов.
Есть причина почему люди хотят называть свои продукты "блокчейном": потому тем самым они примазываются к флёру инновационности, они абьюзят поверье "блокчейн придёт, всюду порядок наведёт" в свою пользу. А поверье это массовое, реальное и осязаемое, вот тут его транслирует Плющев (промежуток с 7:04 - 7:15) (кому охота посраться на тему блокчейнов в выборах, мигом сюда, а тут буду выжигать после первого же предупреждения).
Да и вообще, скучная автоматизация без слова "блокчейн" в названии втридорога не продаётся, правда ведь?
Отдельный и очень важный вопрос: локальные блокчейны есть у правительства Германии, ОАЭ, да и у консорциума банков R3 тоже. Они что, идиоты? Почему всякие нанотехнологии, ИИ и псевдо-блокчейны так охотно проглатываются казалось бы умными структурами. Дело далеко не [только] в коррупции. Эти структуры неоднородны и в них есть три группы людей, которые кровно заинтереснованы в таких недо-инновациях. Я это видел своими глазами, пишите в комментах, если хотите пост про это.
Я точно знаю, что огромная часть тех, кто пилит такие локальные блокчейны — не обманщики и не мошенники, а добросовестные программисты. Я сам ошибался похожим образом, да и сейчас вижу, что дьявол в очень тонких деталях и нужно наловчиться глубоко копать, чтобы аргументировано рассуждать где применим, а где неприменим блокчейн.
Но откровенные мошенники тоже есть (надеюсь, что не среди нас). Они прекрасно знают, что они втридорога втюхивают обычный CRUD с ЭЦП. Я таких видел, и не раз, и даже с удовольствием участвовал в их разоблачении. А некоторые из них даже не стесняются, вот скриншот с сайта одного из блакчейнч-стартапов:
Но вернёмся к добросовестным. Никто никого обвинять не собирается, но вот вам простая мысль: можешь ли ты продавать под именем "Сметана" свой сметанный молочносодержащий продукт в странах, где это не запрещено законом?
Ну да, можешь, только не удивляйся, что люди вокруг тебя будут считать это зашкваром. И будут полностью правы. Можешь сколько угодно отмазываться "сейчас в индустрии принята широкая трактовка термина "сметана", так что потребители сами виноваты, что не являются экспертами в этой области", но ты же сам всё в глубине души понимаешь.
А если ты говоришь, что "понимание блокчейнов как глобальных сетей типа биткоина — это олдскул, где кроме STONKS ничего полезного и не придумали" (да, это про тебя, @vas3k), то про применение глобальных блокчейнов это прям тема отдельного поста, но вот тебе простая мысль:
Это правда, что у публичных глобальных блокчейнов довольно узкие области применения. Но у локальных блокчейнов их нет вовсе, они неотличимы от обычных трёкопеечных инструментов из прошлого века. В выборе "шашечки или ехать" локальный блокчейн прицепил шашечки, а ехать не прицепил совсем.
😱 Комментарий удален модератором...
Urvi Babla — шикарно!
Спасибо за раскрытие темы в отдельном посте.
Но я прочитал это так: локальный блокчейн это просто децентрализованный связанный список, типа git. Окей, но ведь git и есть пример охуенно полезной штуки, решающей свою задачу. И намного более полезной, чем какой-нибудь догекоин, что я и говорил в приведённой тобой цитате.
Так что локальные блокчейны получаются МОГУТ быть полезны и никакое не зло, как написано в заголовке. Да, в них нет каких-то свойств глобальных блокчейнов, ну и ок. Просто не применяй их там, где эти свойства нужны.
Это как говорить, что велосипеды зло потому что нормального транспортного средства всегда должно быть четыре колёса для устойчивости. Ну нет же, я понял, но все ещё не согласен :)
Вынужден ворваться в тред. Очень этого не хотелось делать, так как и пост, и мой эмоциональный отклик вызвал у меня дежавю 10+ летней давности. То самое несладкое ощущение, когда "в интернете кто-то не прав" :)
Какую цепочку я увидел в посте:
"все ключи у кого-то одного" => "этот кто-то может заменить всю историю/леджер" => "это всё не имеет смысла. Зло, фарс и распил"
За последний пункт я не могу ничего сказать, так как я всего лишь разработчик, и это уже вне моих технических компетенций. Но с первыми двумя вещами готов поспорить.
Кроме примера с гитом, в посте нету даже общих объяснений того, как работает блокчейн. А тем временем, ключевой особенностью является наличие в сети правил консенсуса, которые на уровне протокола диктуют участникам сети то, какие блоки считать валидными.
Для блокчейнов разработано много различных консенсусов. Proof-of-Work и Proof-of-Stake, пожалуй, самые популярные из них. Они применяются в основном в публичных сетях по ряду свойств, одно из наиболее важных из которых является экономическая мотивация участников сети. Также у этих консенсусов есть ряд недостатков, которые несущественны для публичных сетей.
В приватных же сетях применение таких консенсусов недопустимо по ряду причин:
При разработке приватных блокчейн решений очень много внимания как раз требует работа над протоколом и разработка подходящего консенсуса. Потому как это:
Я уже более 3.5 лет работаю над блокчейн платформой, которая ныне называется Waves Enterprise. Свой путь мы начинали как раз с того, что у нас был форк публичной платформы Waves с консенсусом Proof-of-Stake, и стояла задача слепить из этой платформы энтерпрайз решение. Одной из моих самых крупных задач была как раз разработка нашего Proof-of-Authority консенсуса, с помощью которого мы хотели упорядочить работу майнеров: задать понятные правила выбора майнера (детерминированная очередь майнеров, а не игра в хешики или сравнение стейков у кого больше), увеличить частоту выпуска блоков, а следовательно и скоростные показатели.
В прошлом году моя команда модифицировала алгоритм, и мы выпустили так называемый Crash Fault Tolerance. По технической внутрянке, это тот же PoA, в который добавили обратную связь в виде голосований за финализацию блока. Таким образом, к скорости добавили безопасности и гарантий. Валидаторы должны голосовать за принятие блока, и впоследствии эти голоса также записываются в блокчейн. Блок без достаточного количества голосов валидным не считается. Если консенсуса валидаторов не собирается (например, происходит сетевая сегментация сети, ну связь между ЦОДДами рвётся), то блокчейн встаёт колом, никто не майнит альтернативные цепочки, т.к. нет гарантий их финальности.
Возвращаясь к бизнес-применениям.
Как я упоминал в своём интро, на нашей платформе построена крупнейшая блокчейн сеть РФ, это так называемая блокчейн платформа ФНС. Туда входят все российские банки (за редким исключением иностранных банков), налоговая, аудиторы и регуляторы. На каждой стороне стоят блокчейн ноды в количестве 1-3 штук (в зависимости от нагрузки сегмента сети). Всего более 200+ узлов. Изначально решаемая задача была выдача льготных кредитов малому-среднему бизнесу в пандемию. Было требование, что кредит должен быть выдан один раз одному юр-лицу. Плюс впоследствии списки должны отгружаться куда-то, чтобы государство за этих юр-лиц платило банкам проценты.
Системы, которая позволяла бы достоверно между банками договариваться и защищаться от факта фрода, если юрлицо параллельно подавало 10 заявок в разные банки, не существовало. Тут и пригодился блокчейн, поверх которого был написан приклад, реализующий этот бизнес-процесс. Блокчейн выступает как единый источник правды, и по результатам выполнения смарт-контракта приклад на стороне каждого участника может выдать однозначный ответ.
Сейчас поверх этой блокчейн сети разрабатывается ряд новых проектов.
Исходя из этого примера, я в упор не вижу, где тут существует какой-то один единственный "владелец всех ключей" и какую атаку он может произвести на 200+ узлов, большая часть из которых живёт в закрытых контурах и защищается свирепыми банковскими безопасниками с винтовками. Более того, в недалёком будущем эта блокчейн сеть будет мигрироваться с PoA алгоритма на CFT, где атака полной замены всего леджера просто невозможна в случае, если один участник не владеет физически всеми ключами и нодами. А он и не владеет.
Фух, не хотел я врываться в эту интернетную битву. Но надеюсь, что эти знания были хоть кому-нибудь интересны и познавательны.
Солидарен с тобой, братан!
Но будь морально готов к тому, что всем пофиг. Когда несколько лет назад появлялись все эти РКН блокировки под соусом защиты детей от чего-то "страшного", многие из нас думали, что все фигня. Норм спецы не пойдут это дело пилить, и нехорошие люди с авторитарными замашками лососнут, ведь они тупые. И трансгранничных коннектов с провайдерами очень много, не чета Китаю. А сейчас куча хардскиллованных спецов работают на конторки, которые поставляют всякие DPI решения и прочее. И гордятся этим! И даже что-то лопочут про то, что надо ведь как-то с "плохой информацией" бороться, и что да, начальники тупые, но мы вроде "норм все делаем". И ведь у этих людей даже нет финансовой необходимости это делать, какая есть у всяких бедных учителей.
И все опять упирается в социальную и политическую образованность и борьбу со своей ограниченностью.
Так и не понял чем отличается локальный блокчейн от глобального, кроме стоимости обмана.
Ок, тогда предположим что мы государство. Мы хотим выкладывать в общий доступ документы с нашей подписью и гарантией что их никто задним числом не может модифицировать (все же помнят сюжет Навального где кто-то подредачил эксельку).
Первый вопрос: как это сделать на настоящем блокчейне?
В варианте с «локальным» блокчейном кажется что можно поступить так:
И заменить это гитом нельзя, потому что для гита у нас документы не подписаны закрытым ключом государства.
Второй вопрос: чем это не использование локального блокчейна?
Когда локальный блокчейн становится глобальным и когда появляется то необходимое доверие?
Если я запущу его для двух сервисов на одной малинке он ещё локальный?
Если запустил блокчейн на двух сервисах на двух разных малинках он уже глобальный?
Где мы приобретаем то "необходимое" доверие для обоснованности его использования?
Даже сейчас, если постараться, можно создать ботнет, который перепишет одну небольшую строчку в последней транзакции биткоина...
Всё, биткоин тоже бесполезен?
😱 Комментарий удален его автором...
Мне аналогия с git нравится!
Но кажется, что git лучше сравнивать с глобальным блокчейном.
Git он же ведь тоже децентрализованный. Ты можешь как угодно изменить историю локально используя -force. Но ты не сможешь подменить эти изменения всем. Взять например любой популярный репозиторий на Github. Ты, как автор репозитория можешь сделать изменения задним числом, поменять историю как тебе вздумается. Но это не пройдет незамеченным, если этот репозиторий склонирован у других.
Та же история с блокчейном - в локальном ты можешь пересчитать все хеши. Но как подменить эти же хеши в глобальном - тут уже проблема.
Локальный блокчейн - это локальный git, который ты никуда не заливаешь
Все хорошо, но у меня есть вопрос. Под локальным подразумевается любой публично доступный блокчейн или как? К примеру если блок подписывается моим закрытым ключом и я предоставляю блок с хешем и подписью и публичным ключом в блокчейн, то в блокчейне подлог данных уже не сделать. Ну при условии конечно если у нас публичный ключ подписан независимым CA.
Давайте начнем отсюда https://vybory.gov.ru/materials
Тут есть техническая информация о том как это все организовано.
НО там нет описания схемы переголосования. А весь кавардак был заведен через него.