На полях криптовалюты: о бедном блокчеине замолвите слово.
На протяжении трёх постов я говорил о том, что блокчейн - обыкновенная база данных, и что я, как программист, не вижу в ней как особого смысла, так и особого применения. Я был не понят, мне тут же начали кричать: сатрап, ретроград, нуб! Что же, задержался я с новыми постами, нужно развить тему.
(мем не мой, я просто скопировал url)
По старой (нет) доброй (нет) традиции, сразу наброшу жирную лепёху (не надо).
Что происходит в блокчейне (остановись)?
С точки зрения обыкновенного человека, победитель некого спортивно-азартного конкурса ставит печать на шкатулке с бумагами и получает награду.
(вот блять)
Но, всё-таки, вернёмся к блокчейну и кодерам. Блокчейн - цепочка блоков - обыкновенная инкрементная база данных.
Прежде всего, что такое база данных? С точки зрения программиста, база данных - любой структурированный набор данных, к которым имеется однотипный способ обращения. А именно, нам нужны хотя бы три разных обращения: "Найди данные", "Дай данные." и "Сохрани данные."
Пока что звучит сложно, давайте на примерах.
Таблица excel - база данных. Таблица с сохранением данных в xml-файле. Доступ по странице и координатам.
Таблица csv - база данных. Таблица с договорным символьным разделением. Доступ по координатам.
Ini-файл с настройками - база данных. Таблица: ключ - значение, разделитель таблиц - имя группы. Доступ по имени группы и ключа.
Архив rar или zip - база данных. Таблица - список файлов, таблица - сжатые файлы, таблица - данные для расшифровки. Доступ к списку файлов по индексу, к файлам по описанию из списка файлов.
Файловая система - база данных. А "Проводник" - это клиент этой самой базы данных.
ДНК - база данных. Последовательность нуклеотидов, шифрующих синтез белков и РНК.
Текстовый документ с какой-нибудь книгой - это тоже база данных.
Мёртвое тело - база данных. Набор органов-таблиц с клетками-данными.
Изображение BMP - база данных. Таблица цветных точек. Доступ по индексу.
В общем, суть вы поняли, надеюсь. Конечно, под базами данных сейчас понимают различные СУБД, но это, в общем, не так. Для программиста нет особой разницы, как хранить данные. Но ему нужно обеспечить заданные свойства системы.
Нужно иметь простой для пользователя доступ: ini-файлы.
Чуть сложнее, но гибче: XML и JSON.
Нужно максимально эффективно упаковать набор данных? Бинарный файл с уникальным заголовком.
Нужно дать быстрый доступ к простыне данных: популярные SQL движки.
Нужно дать быстрый доступ к структуре по ключу: популярные NoSQL движки.
Нужно передать недвусмысленное послание: мёртвое тело - ваш выбор.
Нужно обеспечить сохранность данных в открытом космосе или после ядерной войны? Встройте данные в неиспользуемые области ДНК тихоходки.
Идём дальше, практически все файлы, которые используют программисты - базы данных, для которых сами программисты пишут реализации этих самых обращений. Разделители, индексы, таблицы, хеши, матан, регуляторы, синтаксические деревья, - чего у нас только не используется.
Я уже описывал блокчейн в общем. Но перейдём на частности. Возьмём блокчеин эфира.
Блокчеин состоит из массива блоков. Его блок состоит из:
- заголовка текущего блока: версия, кошелёк создателя, хеш хранимых данных, состояние, хеш предыдущего блока, сложность, служебная информация;
- заголовка предыдущего блока: то же самое;
- нагрузки: таблица транзакций: число транзакций, данные транзакций;
- мусора: для подгонки хеша, куски с выхода псевдогенератора.
То есть ничего необычного. Служебная информация + таблица данных. С точки зрения программиста это односвязный список со сложным алгоритмом вставки. Всё абсолютно типично. А знаете, что ещё типично? Внезапный Гитлер.
А теперь, забудьте, что у вас шифрованные транзакции, для вас это неизвестная нагрузка, хранимые данные. Вы программист, и у вас три метода: найти, получить, записать данные.
Вы пользуетесь стандартными таблицами сложности алгоритмов.
Что получает программист:
- сложность поиска данных: O(n) - не лучшая;
- сложность добавления данных: O(1) * сложность генерации блока.
На полях:
- O(1) означает, что у вас на выполнение операций на массиве длиной N занимает столько же времени, сколько на массиве длиной 1.
- O(n) означает, что у вас на выполнение операций на массиве длиной N у вас будет тратиться в N раз больше времени, чем на массиве длиной 1.
Вы пользуетесь стандартными стратегиями обнаружения и коррекции ошибок:
- вероятность обнаружения ошибки: очень высокая для любой кратности;
- коррекция ошибок: отсутствует;
Сложность генерации блока состоит из сложности вычисления хеш-функции и размера блока данных.
Хеш-функция - функция получения класса объектов. (Образное объяснение процесса взятия хеш-функции тут) Или, по-русски, нахождение группы, в которую входят конкретные данные. То же самое, что деление на чётные и нечётные, только правила разделения чуть сложнее, да групп не две, а, если брать ныне стандартный для криптовалют SHA256, 115792089237316195423570985008687907853269984665640564039457584007913129639936 штук. Кому интересно, это 1,1579209 × 10^77, масштаб трагедии можно оценить здесь.
С одной стороны, для выполнения хеша требуется не очень много операций (порядка 2000 на каждый кусок в 32 байта, на 100 килобайт получается 6 000 000 наивных операций или примерно 700 000 со всеми аппаратными ускорениями), и для однократного использования он вполне пригоден. Но вот заниматься подбором уже не комфортно: хороший процессор при аппаратной оптимизации может генерировать до миллиона хешей в секунду, старый GeForce 8500 GT строчит около 1-2 Мхе/с, в зависимости от многих факторов, навороченные 1080Ti, которые сливают на столь бездарный процесс, вытаскивают под 25-30 миллионов. В секунду. Мало это или много?
Ну, если мы накладываем условие содержания 6 символов '0' на конце 16-ричного представления хеша, то нам подходит лишь одна из каждых 16 777 216 групп. Чуть меньше пяти миллионных процента. Для сравнения, у вас в 8 раз больше вероятность иметь запись "причина смерти: падение с кровати" в больничной карте. А если мы майним Eth'ом, нам нужно подставлять не случайные данные, а особо сгенерированные на основе хешей от предыдущих блоков. Если честно, его критерий валидности я так и не осознал, и это меня беспокоит.
Продолжаем разбор: блокчейн не предназначен для постоянного доступа к данным. Все основные криптовалюты извлекают данные из блокчейнов в кеш и на блокчейне буй держали. В лучшем случае, вокруг блокчейнов строят индексы для ускорения поиска транзакций, в худшем, всю информацию извлекают в классические БД.
Блокчейн не предназначен для постоянного хранения данных. Когда хранят данные, обеспечивают хотя бы малейший алгоритм коррекции ошибок. Тут есть хотя бы их поиск, на том спасибо.
Блокчейн не предназначен для долгосрочной защиты данных. Хеш, конечно, хорошо, но, напомню, кроме пары хешей данные ничего не защищает. MD5, хеш прошлого века, уже взламывается за пол-дня. Через 5-10 лет подобрать SHA256 будет не особо сложнее, чем сейчас MD5, да и на SHA3 можно будет облизываться. Сейчас уже есть атаки, понижающие сложность подбора хеша на 5-15 порядков от перебора (что, конечно же, мало). Что это даёт? Можно заменить блок в середине блокчейна - и весь ваш блокчейн пойдёт поперде. При этом, атаку на хвост отслеживают редко, а её последствия могут быть катастрофичны, так как будет уничтожена точка отсчёта, и вся сеть подвиснет в воздухе. А авторы сетей ещё и заикаются о столетних перспективах...
Блокчейн - реализация вызова понятых в сети. Подписант блока не является доверенным узлом, он просто участвует в общей лотереи за право им стать. Он подписывает и без того достоверные данные так, что у конкурентов практически не возникает спора, имеет ли победитель право подписать данные или нет.
Единственная цель блокчейна в его текущем виде, которая мне видится реалистичной, - замедление операции вставки так, чтобы все успевали скачать все изменения. Замедление, с одной стороны, естественное, реализованное через сложную операцию, достаточную для генерации награды и создающую ощущение свершения. Но, с другой стороны, абсолютно бесполезную с точки зрения хранимых данных. Иными словами, это, по моему мнению, чисто психологическая операция.
Какие есть альтернативы?
Ну, например, сделать алгоритм добавления транзакций эпохальным, так что блок хранит сразу всю эпоху, а не только случайный набор транзакций, и у всех добытчиков генерируются одинаковые блоки. Старые добрые телефонные справочники из этой серии. У вас их не было? А у меня до сих пор хранится.
Другой способ - убрать сложный хеш и просто разыгрывать лотерею между участниками за право создать блок. Проблема в определении действительных участников, их можно наплодить чрезмерно много. Да и чисто психологически, непонятно, за что тут платят деньги.
Ну, как сказать? Я абсолютно не понимаю ни популярности блокчейнов, ни удобства, ни экономической значимости. Сами крипты выглядят странными поделками с кодом странного качества. Защищённость данных сомнительна, а полная публичность данных неплохо смотрится рядом с завываниями майнеров о тоталитарном государстве, лезущим в их переписку. Единственная понятная мне вещь, это то, что о блокчейне узнали экономисты, а, значит, они уже надувают пузырь и готовят новый кризис доткомов. Не самая, знаете ли, приятная вещь. Но на реакцию хомяков смотреть занимательно.
По традиции, минуса в левом верхнем и левом нижнем углах, вопросы и злобные пожелания исчезнуть в тартаре - в комментариях. А на посошок - контроллер сенсорного экрана от Acer Iconia Tab W4-820. Как-то со швейным делом у меня не задалось, и около гигабайта фоток интересного ливера утеряно. Ладно, у меня ещё есть несколько раритетных плат и полуготовый прикуяльник, что-нить да прикреплю.
Лига Криптовалют
3.7K поста9.3K подписчиков
Правила сообщества
- Будьте вежливы
- Не используйте реферальные ссылки при обсуждении сторонних ресурсов.
- Никаких ссылок на ТГ и другие соц.сети с вашими сигналами, ботами и инсайдами и тому подобных.
- Если ваш канал аналитический и/или с авторским контентом, то ссылку на ваши соц.сети в посте не запрещена. Только пусть ваш пост будет содержательным.