Сегодня тема Bitcoin и Blockchain привлекает невероятное количество внимания. К сожалению, новости не позволяют понять весь масштаб происходящего, так как авторы путаются в терминологии и в спешке выпускают неподготовленные статьи. Что опять же уводит волну обсуждения от технической стороны вопроса к вопросу спекуляции на тему курса Bitcoin.
Попробуем отодвинуть эмоции и вместе изучить, что же происходит и каковы последствия.
Краткое содержание
- Bitcoin — общество любителей математики
- Что такое форк? Почему не так страшна атака 51%
- Segwit. С чего все началось
- Bitcoin Cash — как заработать и как дать другим заработать
- Перспективы
Bitcoin — общество любителей математики
Многие люди представляют bitcoin крайне упрощенной системой. Иногда это удобно, а иногда это приводит к невозможности объяснить текущую проблему. К примеру, Bitcoin представляют как огромную бухгалтерскую книгу, где майнеры каждые 5 минут пытаются написать очередную страницу в бухгалтерской книге, где будет записано, от кого и кому перешли средства. Это аналогия удобна и в 99% так оно и есть, только сложно понять, как можно попасть в эту бухгалтерскую книгу, почему можно создать адрес и счет в offline, даже никогда не контактируя с интернетом и другие вопросы.
Предлагаю другую аналогию, Bitcoin — это сообщество любителей математики. В начале был один математик Satoshi, который написал 1-ую задачу и предложил за ее решение 50 монет (условных единиц). Satoshi был очень хитрый, он предложил такую задачу, на которую только он знал ответ. Но Satoshi был не только хитрый, но и умный, он привлек внимание и понял, что система будет живой только, если в ней будут и другие «математики». Тогда, Satoshi объявил правила, каждый кто решит опубликованную задачу, может опубликовать свои задачи и количество монет из решенной задачи распределить между новыми задачами. В знак подтверждения, Satoshi показал ответ своей задачи и предложил еще 2 задачи, одну очень простую за 20 монет, а другую опять очень сложную за 30 монет. Другой математик, тут же подхватил эту идею и решил простую задачу за 20 монет и снова создал одну очень сложную — за 15 монет, а другую простую — за 5 монет. Итого в системе получилось 3 нерешенные задачи ( 1 от Сатоши, а две от другого математика) и 2 решенные задачи. Много математиков бросились решать простые и сложные задачи и уже через неделю было 100-1000 открытых задач. В то время, сложность задачи абсолютно не зависела от количество монет, но уже тогда математики собирали интуитивно побольше монет под свои задачи.
У системы выявился существенный изъян, ее необходимо было поддерживать online, чтобы математики в любой момент могли спокойно обмениваться решениями и выкладывать новые задачи. Естественно математики решили привлечь других «математиков» (программистов), чтобы те решали более простые задачи, а за это, кто быстрее решит, они получали 50 монет и возможность опубликовать свою задачу. Чтобы компьютеры (программисты запрограммировали решених простых задач) не решали задачи слишком быстро и не получали много монет, сложность задач варьируется динамически, через каждые N блоков. С тех пор все стали жить дружно или почти дружно.
Переведем эту историю на понятный язык Blockchain:
1. Каждая опубликованная задача — это часть транзакции, которая содержит ответ на поставленную ранее задачу (предыдущую транзакцию и scriptSig / signature) и новые задачи (грубое приближение список output), а также распределение input coins к output coins.
2. Каждая простая задача — это задача mining блока, а именно нахождения ключа для хеша с заданными свойствами. Она адаптируется, чтобы решение находилось приблизительно каждые 10 минут.
3. Каждый блок включает в себя ответ на решение задачи mining и список транзакций, которые по своему желанию включил майнер (важно!)
— Насколько такая аналогия близка к реальному состоянию дел в Bitcoin?
— Достаточно сильно близка, вот некоторые суждения:
- Действительно. В Bitcoin input, output (язык описания задач) является специальным стековым языком Bitcoin script. В котором есть до 80 op-code, включая умножение, сложение, хеширование, шифрование, но нет циклов!
- Типичный output транзакции выглядит как
OP_DUP OP_HASH160 a4b4c5245e00d758c4364085d60375b8e22cf482 OP_EQUALVERIFY OP_CHECKSIG
, что по-русски означает, попробуй подбери такое число, что OP_HASH160 будет равняться a4b4c5245e00d758c4364085d60375b8e22cf482. Конечно, же это вопрос с подковыркой, человек, который публикует такую задачу заранее знает ответ, но он не хочет сказать его другим, пусть, как говорится, мучаются, а он, когда захочет новые задачи, так и сделает.
- В Bitcoin нет понятий адресов на нижнем уровне! Грубо говоря можно написать абсолютно космическое (с точки зрения UX) приложение, которое будет именно просить решить математическую задачу и абсолютно нормально взаимодействовать с bitcoin blockchain. На практике адресом является Base56 от числа a4b4c5245e00d758c4364085d60375b8e22cf482, но это верно только для транзакций вида
OP_DUP OP_HASH160 a4b4c5245e00d758c4364085d60375b8e22cf482 OP_EQUALVERIFY OP_CHECKSIG
- В output можно написать OP_RETURN. Что будет означать, что вашу задачу решить крайне просто. И с вероятностью 99% в следующем, а может и в текущем блоке ваши coin уведут (в новую задачу) и это сделает майнер блока.
- Одним из простейших способов сжечь bitcoin, поставить задачу x^3=y^3+z^3. Естественно задача не имеет решения в целых положительных числах и она никогда не будет решена.
- Транзакция может указать несколько input задач, но в транзакции все входные coin, должны быть потрачены (положительный остаток считается fee и достается майнеру).
- Transaction (TX1) Input ссылается на Transaction Id (TX0), которая уже опубликована, и представляет входные параметры в TX0 output, при подстановке которых output предыдущей транзакции (TX0) вычисляется в TRUE.
- Входные параметры, тоже могут быть скриптом, но это редкое явление
- В output, можно написать любую строку. Некоторые люди пишут «marry me»?
Вот еще несколько суждений, для которых можно будет провести развернутый анализ (но не сейчас):
- Если output простой (нешифрованный), то его скорее всего заберет майнер блока, даже если вы запушите свою транзакцию и она будет абсолютно валидна.
- Чтобы майнер не воровал все транзакции, входной input шифруется таким образом, что он может быть применен, только к конкретному output. Таким образом майнер может провалидировать транзакцию, но поменять output он не может, иначе транзакция станет невалидной.
- Важно! Майнер может майнить «валидный» блок и включать невалидные транзакции. Так как все клиенты подключенные биткоину перевалидируют транзакции, они не будут считать блок валидным. Другие майнеры могут своровать блок и включить уже правильные транзакции и уже они получат вознаграждение за блок. Грубо говоря у разных майнеров (клиентов) будет разная история блоков, это и есть hard fork
Возможно теперь понятно, почему бухгалтерская книга слишком упрощенная аналогия, ведь в blockchain даже нет понятия адресов.
Что такое форк? Почему не так страшна атака 51%.
Даже сегодня была статья, что атака 51% страшна и более 80% майнинговых мощностей находится в Китае и нам уже пора бояться. Опять же если мы представим аналогию, что есть книга записей и у кого-то 51% или больше и он начинает в нее писать, что захочет. То, да, атака 51% уже становится просто неотразимой. На практике, все не так.
Вернемся к аналогии сообщества с математиками, предположим майнеры захватили 100% мощностей и публикуют задачи с неправильными ответами в различных научных журналах с бешеной скоростью. Естественно сообщество математиков впадет в уныние, но они никогда не признают неправильные ответы и не запишут в свой личный журнал. В blockchain каждый (!) хранит свой журнал. Как бы повело себя адекватное научное сообщество? Оно бы составило список хороших научных журналов или установило бы другой канал связи и начало бы с момента последней «валидной» транзакции. Да это бы отняло некоторое количество сил и времени, но эта атака никак бы не повлияла на «истинность» журнала. Это явление называется hard fork. Появилось 2 цепочки и каждый со своей правотой.
Между майнерами и математиками (пользователями), сложились уникальные отношения, одних не бывает без других и наоборот. И этот баланс соблюдается. Как и любая система, bitcoin требует улучшений. Bitcoin Core — группа людей, которая пользовалась и разрабатывала bitcoin практически с самого начала. И с самого начала они столкнулись с первой трудностью разработки. Как выпускать обновления? Если даже провести атаку 100% и обновить всех майнеров, можно получить сломанный blockchain и вероятность hard fork (если клиенты не обновятся), что абсолютно нежелательно. Поэтому была разработана концепция soft fork: все майнеры обновляются, но клиентам продолжают присылать валидные (backward compatibility) блоки и транзакции. Клиенты обновляются по мере необходимости.Некоторые изменения было достаточно просто осуществить. Например, в языке Bitcoin были NO_OP1-10 операции, которые ничего не значили, их начали использовать для новой валидации.
Любой процесс обновления сложная процедура и спустя некоторое время был выделен
формальный процесс обновления через soft fork (используя следующие договоренности):
1. Все майнеры которые смайнили блок, включают в блок информацию, что они готовы обновиться и включить некоторые функции.
2. Спустя некоторый промежуток времени, когда блоков становится 95% подряд (договорились на этом числе, хотя и не обязательно), майнеры начинают осуществлять атаку большинства. Т.е. отказываются принимать блоки, которые не поддерживают новую функцию (BIP — bitcoin internal proposal). Это является сигналом, что пора обновляться всем майнерам, иначе им не видать их mining fee.
3. Активация фичи может происходит с запозданием, т.е. NO_OP1 -> DIG_SIG_OP может начать работать через 100 блоков, что дает время обновиться клиентам, которые уже знают, когда фича будет включена по маркерам в блоках.
P.S. Все это должно работать в обратно совместимом режиме, т.е. те кто не обновился продолжат получать обновления и работать правильно.
Алгоритм обновления — это договоренности, а не формальный алгоритм! А договоренности дают сбои. Самый известный случай произошел с обновлением block_version=3, когда прошел 95% сигнал о включении атаки большинства, но AntPool продолжил майнить блоки с версией (3) и к сожалению между ними по-прежнему включал блоки от других майнеров с версией 2. Это был самый настоящий hard fork, потому что AntPool с другими майнерами обладал большой мощностью и смог выстраивать самую длинную цепочку (по умолчанию клиенты bitcoin берут самую длинную цепочку). Проблема была с другими майнерами, которые не могли провалидировать эту цепочку (так как были блоки и 2 и 3) и отказывались ее принимать. После 6 часов форка с администраторами AntPool связались и они отказались от своих блоков. Заметьте hard fork происходил по тем же транзакциям, т.е. транзакции попадали сразу в 2 fork, правда в разных блоках.
Как видите механизм обновления придумали не математики, а программисты-политики, поэтому он иногда дает сбои (шутка).
Segwit. С чего все началось
Segwit крайне интересное обновление для Bitcoin, которое позволяет сделать Transaction ID стабильными для изменений со стороны майнеров. Сегодня существуют методики, когда майнер, или владелец может поменять внутренность транзакции, что суть останется той же, но id изменится. Про Segwit стоит рассказать отдельно и подробно, но главное отличие Segwit обновления от других обновлений, что оно крайне объемное.
Для Segwit обновления, обновленные системы должны держать аж два blockchain (!), один который они будут показывать всем нодам до SegWit, а другим нодам после SegWit. Суть транзакций и output, конечно, же будут совпадать, но input немного отличаются. Дело в том, что поменялся механизм расчет transactionId, а это необходимый параметр для input. Изменение segwit блокчейна необратимо, так как новые блоки не могут перемешиваться со старыми и должно пройти строго по договоренностям, что как раз и вызвало большую задержку и множество переговоров.
1 августа произошел locked-in для Segwit, т.е. блоки которые не заявляют поддержку segwit не включаются в блокчейн. 22 августа произойдет окончательная активация Segwit и можно будет хранить witness data в транзакциях.
1 байт Witness data считается как 0.25 байт, а 1 байт остальной data остался одним 1 байтом. Размер блока без witness data не увеличился и по прежнему составляет 1 МБ, зато с segwit может быть и 4 MB! Segwit является soft fork и не может увеличить размер блока иначе предыдущие версии не смогут провалидировать новые блоки. Ирония состоит в том, что майнеры адаптируют новые блоки для старых клиентов, чтобы они могли быть провалидированы. Новый формат транзакций также отличается и также требует адаптирования между версиями.
Возможно найдется еще какой-то способ увеличить размер блока, сохраняя backward compatibility. К примеру, уменьшить сложность mining задачи и генерировать блоки чаще.
Bitcoin Cash — как заработать и как дать другим заработать
Что ждали 1 августа? Что произойдет hard fork и мы увидим несогласных. А что произошло?
Произошло нечто странное… Так как во всех планах hard fork ожидался 1 августа, то все сайты написали 2 августа, что биткоин разделился и эту идею подхватили все комментаторы и ситуация стала запутанной.
Рассмотрим + и — является ли Bitcoin Cash форком или нет:
— Bitcoin Cash действительно взял всю историю Bitcoin до 1-го августа как есть (+ hard fork)
— Bitcoin Cash мгновенно прекратил обрабатывать валидные транзакции распространявшиеся по сети Bitcoin (- не fork)
— Bitcoin Cash отключился от сети Bitcoin? ( -нетипичный форк)
— Bitcoin Cash стал отклонять новые Bitcoin блоки (+ hard fork, новые блоки не совместимы по валидации)
— Bitcoin Cash провел несовместимое изменение с Bitcoin — увеличил блок до 8 Мб (+ hard fork)
— Bitcoin Cash отказался включать SegWit (+ hard fork)
В принципе, можно при оговорках назвать, что Bitcoin Cash — это форк. Но 2 фактора все-таки говорят, что это bitcoin history fork, а не bitcoin fork.
— прекратил обрабатывать валидные транзакции (требует проверки)
— выглядело крайне спланированной акцией со стороны организаторов BCH, а не атакой или защитой своих интересов в Bitcoin (появился сразу же новый кошелек, новые mining тулы, новые blockchain explorer ..)
Кому это выгодно?
— В принципе, всем, у кого были биткоины, теперь их стало на 20-30% больше.
— У нас появилась новая уже популярная блокчейн-структура с 8МБ на транзакцию, что в 8 раз больше, а соответственно и дешевле.
— Тем, кто до сплита закупил очень много Bitcoin, а сразу после сплита их продал. Fee от продаж составил 0.2-0.5% от X, а доход за 10 минут 30% от X. Если положить X = 10 000 000, то дальше посчитайте сами.
Перспективы и что дальше
Самое интересное, что биткоин провел только soft fork и только готовится к hard fork в 20 ноября. Уже в ноябре произойдет настоящий hard fork и он будет неминуем (наверное). Майнеры приняли решение увеличить блок до 2МБ, это автоматически сделает несовместимыми старые версии Bitcoin wallet, что приведет, к тому, что люди или обновятся и примут 2 МБ или продолжать мусорить сеть альтернативной версией blockchain, а возможно кто-то продолжит майнить блоки по 1 МБ. Очень надеюсь, что этого не произойдет.
После segwit2x возможно bitcoin core группа снова соберется и вернется к разработке новых BIP, а также обновит официальный клиент bitcoin core для поддержки 2MB block. По крайней мере, все существующие BIP были разработаны с ее поддержкой.
P.S. Допускаю большое количество технических неточностей, пожалуйста, комментируйте — будем исправлять.
P.P.S Что не удалось рассказать, но возможно удастся в следующий раз, отпишитесь если интересно
- Что такое transaction malleability и как Segwit ее решил
- Как происходит шифрование транзакции и почему майнерам не удается ее украсть
- Как сделать примитивные и сложные контракты на Bitcoin (создать счет для 3 человек и разрешить платежи только при согласии двоих)
- Что такое lightning network и почему готовая идея ждет segwit
Комментарии (13)
Epiphany
22.08.2017 10:34+2Эм, так понимаю, решение задач ради решения задач? Какая-то бессмыслица и пустая трата ресурсов разве нет?
vics001 Автор
22.08.2017 10:40+1Вопрос философский. Bitcoin состоит из множества случайных нодов, построить такую систему на обычном доверии крайне сложно. Следовательно трата ресурсов уходить на защиту системы от нарушения правил и от спама. С другой стороны доказано, что Bitcoin с proof of work, не является самой эффективной системой.
Hardcoin
22.08.2017 11:11+6Ради отказа от третьих лиц, которые могут распоряжаться вашими деньгами. Если вас это не беспокоит — просто не используете биткоин, ресурсы сэкономятся.
*Если б людям не нужна была защита от других людей, можно было бы начать экономить с расходов на армию, там побольше затрат, чем в pow.
TimTowdy
22.08.2017 13:47Как бы повело себя адекватное научное сообщество? Оно бы составило список хороших научных журналов или установило бы другой канал связи и начало бы с момента последней «валидной» транзакции.
Такое себе сферическое адекватное научное сообщество в вакууме.
Почему вы не рассматриваете ситуацию когда сообщество распадается на несколько «школ» (форков) и каждая тянет одеяло на себя? В жизни это происходит постоянно (религия, наука, политика...). Вот и в битке произошло.
Ну и стандартный вопрос: а судьи кто? Сообщество — это слишком абстрактно.
Как вам отделить «адекватное сообщество» от «врагов», которые захватили 51%? Каждое сообщество считает своих членов адекватными, а своих оппонентов — нет. Вам почему-то кажется что можно провести объективную грань между «адекватными» и «неадекватными». Но
это не так, грань — субъективна.
Проблема 51% процента возникает за счет децентрализации, а вы получается предлагаете от нее отказаться и ввести судей, которые решат кто из нас тут входит в «адекватное сообщество», а кого расстрелять?vics001 Автор
22.08.2017 14:31Я не предлагаю, я предполагаю, что так и произойдет. То, что в Bitcoin не появилось школ, сект и других делений, просто означает, что он слишком молод. Хотя есть существенное отличие, школы и секты могут заимствовать идеи у других и даже сотрудничать в некоторых теориях. Так как Bitcoin привязан к деньгам, любое разделение вызовет вопрос, денег стало в два раза больше или меньше? Что произойдет, если в одной цепочке я заплатил кому-то, а во второй нет.
Возможно это и сдерживает биткоин целостным — привязка к курсу USD.
P.S. Я не считаю Bitoin Cash настоящим форком, а считаю альтернативным coin.winnipeg
22.08.2017 18:12Утверждение, Биткоин привязан к деньгам, мне кажется сомнительным. Если мы берем 2 валюты в вакууме (ну нету никаких государств, нефти, газа, национальных достояний, и других, не только сырьевых продуктов), то они не могут быть привязаны друг к другу.
В нашем случае, Биткоин — это не национальная валюта. И вообще, это таки валюта, а не продукт. Какие могут быть привязки?vics001 Автор
22.08.2017 18:14Абстрактной привязки нет, но есть конкретная, когда вы знаете, что 1 output с 1 bitcoin вы можете обменять на 3000 американских долларов, ваше отношение к Bitcoin меняется (возможно).
winnipeg
22.08.2017 18:59«Так как Bitcoin привязан к деньгам, любое разделение вызовет вопрос, денег стало в два раза больше или меньше?»
О каких «деньгах» идет речь? Доллары живут своей жизнью, кроме как быть напечатанными ФРС у них шансов нет. Так же как у Битконов и Биткоин Кэшэй — только быть намайненными. Что должно удвоиться или разделиться пополам?
Starche
23.08.2017 01:40>Что такое lightning network и почему готовая идея ждет segwit
Ну не так чтобы прям очень ждёт.
news.bitcoin.com/bitfury-successfully-tests-lightning-network-across-bitcoins-mainnet
Так что теперь можно LN и на BCH запустить при желании.vics001 Автор
23.08.2017 01:58Lightning Network от Transaction Malleability, которую SegWit пофиксит, но вот BCH по-прежнему страдает от Transaction Malleability.
ProRunner
Прямо сейчас до активации 234 блока, а это 39 часов, если брать 1 блок в 10 минут. Вероятно, ещё больше, так как существенная часть майнеров переключилась на более доходный в данный момент bitcoin cash, в результате чего блоки создаются с задержкой. То есть скорее всего активация произойдет ночью-утром 24 августа.