-17

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

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

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

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

Найдены дубликаты

0
Вроде Iota перспективно выглядит с технической точки зрения. Нет майнинга, операции быстрые. Вроде вообще не блокчейн
раскрыть ветку 3
0

Не, не вижу ничего нового и интересного.

Во-первых, никто не собирается отказываться от майнинга.

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

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

В итоге, операций на один блок меньше, но операций на один кошелёк - больше и на порядки.

https://iota.org/IOTA_Whitepaper.pdf

More specifically, to issue a transaction, a node does the following:
• First, it chooses two other transactions to approve (in general, these two transactions may coincide), according to some algorithm.
• It checks if the two transactions are not conflicting and do not approve conflicting transactions.
• For the transaction to be valid, the node must solve a cryptographic puzzle (which may be computationally demanding) similar to those in the Bitcoin mining (e.g., it needs to find a nonce such that the hash of that nonce together with some data from the approved transactions has a particular form, for instance, has at least some fixed number of zeros in front).
раскрыть ветку 2
-1

Отдельно по IoT.

Мне дико сомнительно, что какой-нибудь STM32 от кофемолки справится с задачей хотя бы отслеживания актуальности данных своего кошелька в такой сети, тот же размер прошивки ужасает. У меня даже с топовыми ARMv8-A серьёзные вопросы возникают в плане быстродействия, не говоря уже о стоимости каждого камешка.

А ведь IoT предполагает миллиарды устройств, что даёт миллионы транзакций каждую секунду, пропускную способность сети в гигабайты в секунду. Без внешней обработки на сервере с выдачей только полезных данных тут ну никак. Вообще ни шанса.

раскрыть ветку 1
0
Встраивать в ДНК инфу лучше у спророобразующих бактерий: они живущие и копируются быстро
раскрыть ветку 4
-1

Мутации. Не забывайте, что частое копирование данных приводит к повышению вероятности ошибки.

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

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

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

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

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

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

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


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

раскрыть ветку 2
0

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


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

раскрыть ветку 1
Похожие посты
Похожие посты не найдены. Возможно, вас заинтересуют другие посты по тегам: