На полях криптовалюты: о бедном блокчеине замолвите слово.

На протяжении трёх постов я говорил о том, что блокчейн - обыкновенная база данных, и что я, как программист, не вижу в ней как особого смысла, так и особого применения. Я был не понят, мне тут же начали кричать: сатрап, ретроград, нуб! Что же, задержался я с новыми постами, нужно развить тему.

На полях криптовалюты: о бедном блокчеине замолвите слово. Блокчейн, Программирование, Длиннопост
(мем не мой, я просто скопировал 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 подписчиков

Добавить пост

Правила сообщества

- Будьте вежливы

- Не используйте реферальные ссылки при обсуждении сторонних ресурсов.

- Никаких ссылок на ТГ и другие соц.сети с вашими сигналами, ботами и инсайдами и тому подобных.

- Если ваш канал аналитический и/или с авторским контентом, то ссылку на ваши соц.сети в посте не запрещена. Только пусть ваш пост будет содержательным.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий
Все что ты сказал, и так известно. Одна из причин появления эфириума со своим алгоритмом даггерчтототам. Но ты красиво разложил по полочкам. И вроде описал блокчейн именно биткоина как я понял. Он является альфой всех валют и поэтому такой дорогой. Но не забываем о новых валютах. Кстати расскажи пожалуйста мне о zcash. Там вроде черт ногу сломит
раскрыть ветку (3)
1
Автор поста оценил этот комментарий

Хм, потыкал в гитхаб с другого конца и он выдал другую справку. Странно.

У эфира всё то же самое, хоть и хитрее.

https://github.com/ethereum/wiki/wiki/Ethash

Тебе генерируется огромное поле данных на основе хеша предыдущего блока. Как в майнкрафте, целый мир из строчки текста.

Тебе даётся заголовок, ты прибавляешь к нему случайное число и тыкаешься по кусочкам этого поля, пока у тебя не получится "хеш" меньше, чем некоторая функция от сложности. Результатом будет случайное число и индекс кусочка поля, из которых собираются все данные для проверки.

Сложность вычисления выше, требование к оборудованию выше, ASIC сделать сложнее, а сумма выхлопа та же.


По zcash что конкретно интересует? Могу покурить отдельно, но, в целом, в первый раз слышу.

раскрыть ветку (2)
Автор поста оценил этот комментарий

я не хочу напрягать тебя по этой теме. Просто помоему это первая монета без отслеживаемой транзакцией. Это раз(могу ошибаться) и там разрабы намутили с шифрованием самого блокчейна(тоже могу быть не прав).


но буду признателен

раскрыть ветку (1)
Автор поста оценил этот комментарий

Посмотрел, что там. Много матана в достаточно мутных терминах. Я в нём далеко не так хорош, как хотелось бы, и, надеюсь, не навру в объяснении.

Если в двух словах, для шифрования используют эллиптические кривые.

https://habrahabr.ru/post/188958/


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

https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/


Я не особо продвинут в криптографии, но, ИМХО, как минимум, начальные данные, которые используются для формулы проверки, имеют фатальное значение: если общий ключ оказался уязвимым или если создатели не уничтожили его, может статься худо.

Про алгоритм не имею ничего сказать особого. Хотя странно, что за пределами zcoin он не встречается. Будь он вправду такой вкусный, его бы уже всосали в OpenSSL. А о нём нигде ни слова.


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


Есть определённая планка, и довольно низкая, в которой этот блокчейн может существовать в виде распределённой сети. Если я не напутал в выводах, не более 10 транзакций в секунду на душу среднего ядра процессора 2013 года.

http://eprint.iacr.org/2013/879.pdf страница 20.

На уровне 40-60 транзакций в секунду отвалюсь сферический я. Это только если получать транзакции, если есть желание ещё и шифровать, делите на 10. Если бы речь шла только о майне, можно было бы говорить о GPU и ASIC, но это обновление кошелька.


Если вам покажется, что это много, 850000 операций в сутки, вы весьма ошибаетесь. Этого впритирку хватит обслужить самые крупные российские федеральные торговые сети. На AliExpress уже не хватит. Мощности только одной ноды MasterCard только в РФ переваливают за 50 000 000 операций в сутки, а у нас и нод несколько, и платёжных систем дофига. И они дополнительно готовятся к распродажам, вроде 11.11


Увы и ах, снова не серебряная пуля, а пшик для фриков и их дилеров. Прости, если разрушаю надежды.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку