Главная | Контакты



Главная > Технологии > Сети

Что такое блокчейн и зачем он нужен

Выдержка в обсуждениях материала: Что такое блокчейн и зачем он нужен

В статье приведена распространенная но слишком грубая метафора блокчейна, которая не объясняет ничего, но наводит мысли о наличии какой-то криптомагии.

Гораздо проще понять блокчейн, представив его как технологию подтверждения неких связанных действий. При этом не особо важно каких. Эта технология позволяет при получении базы этих связанных действий от какого-либо источника проверить, было ли потрачено на «некое действие» над каждым шагом очень большое количество времени, а точнее вычислительных ресурсов. При этом информация, над которым проводится «некое действие», очередной шаг или транзакция — это просто текст, НО, и это очень важно, с дополнительной частью в которой находится хеш предыдущего шага. Таким образом «некое действие» зависит не только от самого шага, но и от всех предыдущих шагов, т.к. оно зависит от хеша от хеша… от хеша самого первого шага. Вот вам и цепочка — chain в слове blockchain.
Помимо этого в полученной базе, разумеется, можно проверить, не нарушают ли все шаги какие-либо правила. Например, в случае криптовалют, что имеющимися деньгами нельзя расплатиться дважды, и что расплатиться можно только подтвердив право владения ими (подтверждение владения — это еще одна криптомагия основанная на цифровой подписи). Но это уже не относится к самому блокчейну.

Вот собственно и все. Пока никакой распределенной базы. Но осталось самое сложное — понять, что это вообще дает? А дает это следующее. Представьте себе, что все данные о шагах с подтверждениями «неких действий» над ними есть в открытом доступе. Каждый может их легко проверить, например, есть ли среди них шаг о перечислении денег на свой кошелек (оплатили ли мне товар). И только в результате использования огромных вычислительных ресурсов можно подтвердить (осуществить над ним «некое действие») новый такой шаг. Кто будет тратить эти вычислительные ресурсы? Тот, кому это выгодно. А выгодно это может быть, например, если по правилам этих шагов подтверждающий может получить комиссию за это. Если желающих на этом заработать много, то возникает следующая ситуация, когда множество желающих пытается наперебой подтвердить новые шаги. Кому повезло первым это сделать, получает гонорар в рамках этого шага, и сразу же старается передать этот шаг всем другим. Большинству остальных пользователей системы выгодно его принять, т.к. новый шаг подтверждает и все предыдущие шаги, т.е. в том числе и шаги отвечающие за благостостояние этих пользователей. Конечно при этом они проверят шаг не только на наличие подтверждения, но и на соответствие его правилам, а то вдруг подтверждающий зачислит из воздуха деньги себе, или приведет их со случайных счетов, не подтвердив право их использования, а какой смысл принимать такой шаг, если остальные его не примут, т.к. он нарушит работоспособность системы.

Вот вам и распределенность. Большинству выгодно хранить у себя эту базу (чтобы иметь возможность подтвердить перевод себе любимому денег), и расширять (совершать перевод одним и подтверждать эти переводы за вознаграждение другим).

Теперь сам корень этой магии. Подтверждением «некоего действия» служит угаданное число хеш от сочетания шага (транзакции) с которым, дает число начинающееся с нескольких нулей. Такое число можно только угадать. Таким образом «некое действие» — это угадывание такого числа. Сделать это сложно (зависит от количества нулей), отсюда и потраченные ресурсы на его угадывание.

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

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

Второй вопрос интереснее. Почему проверка выполнения «некой операции» не требует тех же ресурсов, что само выполнение «некой операции»? Если очень абстрактно, то представьте эту операцию как поиск иголки в стоге сена. Искать ее долго (хотя вам может и повезти), а проверить, что вы ее нашли легко, если вы поставили на найденном месте флажок. Флажок и будет подтверждением вашей находки.

Математически же эту логику можно реализовать так. Представьте, что у вас есть алгоритм сложного перемешивания и преобразования исходного текста любой длинны, например «Большой большой стог сена», в небольшую строку. Получаться будет какая-то каша вроде «Ав02Й», но при этом, поскольку алгоритм осуществляет точный компьютер, то сколько не перемешивай копии одного и тот же текста, результат всегда будет одинаковым, а вот если изменить или добавить хоть одну букву к тексту, то результат перемешивания будет скорее всего совсем другим:

«Большой большой стог сена» ----> «Ав02Й»
«Большой большой стог сена A» -> «В59ф9»

И вот представьте, что вы пытаетесь добавить к тексту такую строку, чтобы в результате перемешивания, ну скажем получилось слово «иголка». И вот, несколько миллиардов попыток спустя вы нашли такую добавочную строку:

«Большой большой стог сена 0юФВа2дафВ3ущшч34» -> «иголка»

Эта строка и есть ваш флажок, указывающий на иголку, и подтверждение проделанной работы. Чтобы проверить, действительно ли получается в итоге «иголка», вам нужно перемешать исходную строку с добавленной строкой-флажком один раз. А вот чтобы найти строку-флажок вам нужно мноооого попыток.

В принципе любая система, основанная на блокчейне нуждается в больших вычислительных ресурсах на поддержание ее безопасности. При этом, эти ресурсы должны быть обязательно распределены между независимыми участниками, иначе возможен сговор и дискредитация системы. Если система предоставляет какую-то услугу, то за нее, как и за любую услугу, нужно платить. Как за пользование банковской карточкой вы платите деньги банку, который тратит эти деньги на мероприятия по поддержанию безопасности банковской системы. В случае с блокчейном вы можете сами осуществлять мероприятия по поддержанию безопасности сервиса — то есть осуществлять подтверждения своей и чужих транзакций. На начальном этапе развития системы это даже вполне реально. С ростом системы, будет все сложнее это сделать, т.к. требуемая сложность подтверждений увеличится. Но что если и в этом сервисе ввести свою виртуальную валюту, которой можно будет расплачиваться за подтверждение своей транзакции. Таким образом вы можете:
а) купить вычислительные мощности (компьютер помощнее) и самим подтверждать свои транзакции;
б) арендовать вычислительные мощности у других пользователей системы, купив у них виртуальную валюту. Это рождает рынок виртуальной валюты, и в результате вы покупаете безопасность не у выбранного банка, а у всего сообщества пользователей системы.

На сколько я знаю, таким образом, например работает блокчейн система Эфириум. Она позволяет осуществлять произвольные операции (контракты), расплачиваясь за вычисление операции «газом» (хз что это) а за подтверждение транзакций, то есть за безопасность, общей для всей системы валютой «эфиром». На базе этой технологии можно создать свои сервисы, например синхронизацию работы распределенной по разным странам конторы, с системой голосования при принятии решений. За эту услугу конторе придется платить, либо вычислительными ресурсами, либо «эфиром», который придется купить у сообщества. Таким образом «эфир» всегда кому-то нужен и его всегда выгодно добывать, так как всегда можно продать. Это есть ликвидность — основное свойство реальных валют.

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

Транзакции подписываются пачками (блоками), периодичность блоков заложена в распределённый алгоритм: чтобы подписать блок, нужно найти требуемый хэш, сложность поиска которого устанавливается алгоритмически, в Биткойне периодичность ~10 минут.
Клиенты могут генерировать хоть миллион транзакций в секунду, сеть узлов их примет только с момента подписания очередного блока. И ещё несколько блоков транзакция считается неподтверждённой, это защита от форка.

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

https://habrahabr.ru/company/bitfury/blog/321474/

Ссылки по теме:

Майнинг - это пирамида? Сложность и доходность
Bitcoin in a nutshell — Transaction
Что такое блокчейн и зачем он нужен
Майнинг и как он работает: матчасть
How the Bitcoin protocol actually works
Bitcoin: основные принципы майнинга


Главная > Технологии > Сети