Коротко и быстро о технологии, которая скоро будет использоваться везде |
||||||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-10-19 23:01 Коротко и быстро о технологии, которая скоро будет использоваться везде Слово «блокчейн» немного пугает, но на самом деле всё просто: оно состоит из слов «блок» и «цепь» (то бишь связанный список). Начнем со списка. Чтобы понять, что такое «связанный», вернемся на минуту мыслью в студенческие времена. Допустим, вы староста курса и играете роль местной кассы взаимопомощи. В памяти все проходящие по ней операции удержать невозможно, и поэтому в холле общежития вы повесили обычную грифельную доску, на которой написано что-то вроде: Я одолжил Ольге 200 рублей. Сразу видно, что в итоге Ольга должна вам (кассе) 200 рублей, а Егор — целых 700. Некоторое время записи в безопасности, но потом любящий одалживаться Егор, впав в отчаяние, берет тряпку и стирает в последней записи «1», заменив ее на «8». Раз — и он избавился от долга, а вы потеряли 700 рублей. Как обезопасить кассу? Сосед по общежитию, Иван, не пользуется кассой, у него и так все отлично. Зато он программист и при случае рассказывает вам про хеширование. Это процесс, при котором любой массив данных любой длины, от полного собрания сочинений Тургенева до записки «ужин на столе», можно легко преобразовать в строку фиксированной длины с уникальным набором символов. Причем изменение любого знака в оригинальных данных полностью изменит всю строку хэша. И вы, последовав его совету, берете общедоступную функцию хэширования (например, SHA256) и приписываете к каждой строке хэш-значение (выбрав любой удобный онлайн-генератор хэша, хоть вот этот, например). Получаете таблицу вида:
Как видите, содержание «понятной» части таблицы (слева) во второй и третьей строках отличается лишь одним-единственным символом: «3» вместо «5». При этом хэш-значения в этих строках отличаются полностью, кардинально. Это очень удобно: теперь Егору, замыслившему подмену, придется стирать не только одну-единственную цифру в последней строчке, а полностью пересчитать и записать новое хэш-значение этой строки. Но Егор не лыком шит, и у него тоже есть доступ к генератору хэшей, так что вы лишь слегка усложнили ему жизнь. Можно усложнить ее еще сильнее и хэшировать не только саму запись, но и складывать ее с хэшем от предыдущей записи.
Так вы завели связанный список. Это «чейн», цепь. Пока без «блока». Чтобы поменять в нем хоть одну цифру, придется пересчитать хэши всех записей. Если их много, это долго. И тем не менее реализуемо: Егор садится с ноутбуком на всю ночь, приглашает своих друзей с ноутбуками, они считают и переписывают хэши на доске до утра, и вот опять он вам не должен 700 рублей. Что делать? А вот что: при добавлении каждой записи вы можете решать связанное с ней любое сложное уникальное уравнение, на ваш выбор. Теперь Егору с друзьями придется еще хуже — на каждое уравнение по четверти часа, десятки записей, пересчет всех хэшей… Долго, очень долго. А вот проверить список легко, по-прежнему сверкой хэшей. Однако Егор не сдается — компьютеры хорошо решают задачи, и он в какой-то момент таки справится с уничтожением своего долга в 700 рублей. Поэтому автору блокчейна пришла в голову идея не решать уравнения, а найти такое число хэша, чтобы итоговый хэш всего списка начинался на 10 нолей. Закавыка тут в том, что эту задачу можно решить простым перебором. Но даже для гигантских вычислительных мощностей, для кластеров в тысячи серверов этот «простой» перебор займет изрядное количество времени, а вручную вы его не решите и за все время жизни Вселенной. (Если, конечно, у вас нет квантового компьютера. Но его у вас нет — пока.) Теперь никакой Егор вам не страшен. Вы прекрасный староста — вы только что создали домашний, практически не взламываемый блокчейн. Но теперь к вам подходят другие студенты и говорят: «Мы перестали понимать твой список. Господи, что это за миллионы безумных закорючек ты понаписал? А кто может поручиться, что Егор не прокрался ночью и не переписал его полностью? Мы ведь больше не можем тебя (то есть список) проверить». Сведущий в программировании Иван на это отвечает: «Отлично, давайте хранить копию этого списка у каждого из нас». И верно — Егор, даже с друзьями, не сможет корректно переделать все списки всего курса. Есть только один неудобный момент — при любой новой записи нужно предупредить всех держателей списка об изменениях. Но если это связанные сетью компьютеры, а не сотня студентов, то это не проблема. Теперь все участники верят только своему списку, как и положено в децентрализованной сети, и сами вносят в него изменения. Но как им понять, что присланное от соседа изменение «Егор таки уже наконец отдал 700 рублей в кассу» настоящее? Может быть, оно пришло как раз от не оставляющего надежд «сломать систему» Егора — у него ведь тоже есть своя копия списка. В блокчейне для этого используется асимметричное шифрование (механизм публичных и приватных ключей). Оно работает так: вы генерируете пару длинных простых чисел — публичный и приватный ключ. Приватный оставляете себе и никому никогда не показываете, а публичный раздаете: с его помощью любой может зашифровать сообщение так, что расшифруете его только вы, своим приватным ключом. Это работает и наоборот: с помощью публичного ключа можно понять, что сообщение зашифровали именно вы, но не получить при этом доступа к его содержимому. Теперь всякая транзакция подписывается приватным ключом и вместе с публичным ключом отсылается в специальное хранилище — пул неподтвержденных транзакций. Так любой участник сети может проверить, что именно вы были ее инициатором, а не кто-то еще хочет расплатиться чужими деньгами. В криптовалютных системах, собственно, ваш публичный ключ и есть номер вашего кошелька. А почему существует этот самый «пул неподтвержденных транзакций»? Ведь можно и их записывать прямо в блокчейн, прямо в этот самый общий список, и дело с концом. Но напомню, что мы с вами находимся в децентрализованной сети, где нет единого центра доверия и проверки валидности (то есть нет банка). Допустим, сообщения о двух транзакциях вышли почти одновременно из одного узла разным адресатам, и в каждой написано «отправляю 400 рублей» с кошелька, в котором, например, всего и осталось, что 400 рублей. Какая из них будет признана первой, если вышедшая второй двигалась быстрее и достигла своего адресата раньше? Боюсь, что вторая, хотя «по понятиям» она была выдана из узла, в котором уже не осталось денег. Как с этим справиться? В обычной сети — никак. Нет решения. Это, собственно, и есть проблема двойного расходования, из-за которой без банков в сфере электронных денег не обойтись. Должен кто-то сидеть и следить, чтобы подобного не происходило. Блоки и майнинг И тут мы подошли к главной, пожалуй, идее создателя блокчейна Сатоши Накамото — к собственно блокам. Каждый компьютер в сети, работающий с блокчейном (и имеющий внутри себя локальную копию всего блокчейна), набирает себе любые транзакции из пула неподтвержденных транзакций. Любые, которые ему нравятся. И составляет из них примерно такой же список, кким развлекались в начале статьи наши студенты. Затем хэширует его, присоединяет к своей копии блокчейна и кричит на всю сеть: «Эй, ребята, я сделал новый блок!» Остальные должны этот блок проверить и встроить в свои блокчейны (копии списка), верно? Не тут-то было. Не он один такой умный. Таких криков одновременно раздастся очень много, ведь в сети много компьютеров. Значит, надо максимально усложнить задачу, заставить компьютеры делать очень сложные переборы (тот же поиск нулей в начале хэша) — тогда они явно закончат не одновременно (точнее, вероятность закончить одновременно все же есть, но ничтожная). Побеждает единственный — он и получит право внести свой блок в блокчейн. Это и есть майнинг — бесконечный перебор вариантов хэшей с большим количество нулей на конце. В биткойне сейчас вознаграждение за каждый найденный блок — 12,5 BTC. Чем дальше, тем больше вычислительной мощности требуется для новых блоков. Домашний майнинг давно потерял смысл: вам может никогда не повезти построить новый блок, всё время будет везти кому-то другому, поэтому майнеры объединяются в очень большие пулы. Рано или поздно все биткойны будут «добыты» (всего их будет не более 21 000 000), и тогда майнеры будет зарабатывать на цене обработки транзакций (те покупатели и продавцы биткойнов, которым надо побыстрее, уже сейчас готовы платить за то, чтобы их транзакции посчитали в первую очередь). Конечно же, блокчейн можно использовать не только для криптовалют. Можете даже сами предложить другие применения: от публичной энциклопедии с пожертвованиями и медицинских карточек — до распределенного суперкомпьютера и распределенных файловых хранилищ и систем репостинга авторского контента. Однако важен вопрос майнинга: если, скажем, Министерство здравоохранения решит создать свой блокчейн, то кто его будет майнить? И зачем? Система должна быть распределенной и децентрализованной, чтобы можно было использовать ее плюсы, иначе останутся только минусы. Источник: chrdk.ru Комментарии: |
|||||||||