Сегодня тема 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+x^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 даже нет понятия адресов.
Мнение:
В этой довольно простой разнице и зародился конфликт Bitcoin Core группы со всеми остальными. Грубо говоря то, что для вас раньше было сообществом математиков, сначала стало финтехом, потом диктатом майнеров, а потом диктатом банкиров и спекулянтов, которых больше всего волнует курс BTC/USD.
Что такое форк? Почему не так страшна атака 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. С чего все началось
Мнение:
Разработчики Bitcoin Core были и есть романтики. Они развивают сложную математическую систему, которая не учитывает, что большинство пользователей и даже майнеров не понимают и не используют сложность этой системы. Bitcoin используется только на 1% от своей сложности, в то же время Bitcoin Core группа двигалась достаточно быстро и предлагала все новые технологии. Некоторые разработчики это понимали и создавали altcoin, хотя большинство соглашалось, что неплохо бы иметь все в Bitcoin. Все это развивалось относительно хорошо, пока курс Bitcoin не начал взлетать. Каждое изменение (soft fork) обходилось все дороже и требовало все большей координации. Bitcoin буквально перестал использоваться для smart contract, fee стали увеличиваться и все это вызывало дебаты между майнерами, которые зависят скачков курса, и разработчиками. Пользователи оставались в стороне до тех пор, пока fee не выросли настолько и пока транзакций стало так много, что приходилось ждать часами. Тогда майнеры решили отстранить разработчиков и скооперироваться с большими пользователями (владельцами бирж, сайтов — coinbase, blockchain, etc). По сути разработчики остались в стороне, но запас той работы, которую они уже проделали и использовали майнеры, пользователи для новых обновлений.
.
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
Автор: vics001