Россия, Москва, МГОУ, 2007 |
Транзакции Биткоина
Ограничения и улучшения
В заключение рассмотрим ограничения, встроенные в протокол Биткоина. Протокол Биткоина содержит в себе множество жестко закодированных констант, которые были в него внедрены еще в 2009 году, когда никто и представить себе не мог, что Биткоин станет всемирно известной валютой.
Жестко закодированные ограничения в Биткоине:
- 10 минут – среднее время, затрачиваемое на создание блока
- 1 млн. байтов в блоке
- 20,000 операций подписывания на блок
- 100 млн. сатоши на биткоин
- 21 млн. – максимально возможное число биткоинов
- 50, 25, 12.5… поощрение за добычу Биткоинов
Одними из ключевых ограничений являются: ограничение по времени, отведенное в среднем на каждый блок; количество блоков; число операций подписывания в блоке, делимость валюты.
Также есть ограничение на максимально существующее число Биткоинов и на систему поощрения майнинга. Скорее всего, они никогда не изменятся, так как экономические последствия их изменения могут быть непоправимы. Майнеры вложили слишком много материальных ресурсов, что стать майнерами, рассчитывая на то, что доходы от Биткоинов станут материальны, и что поддержка Биткоина продолжится по тому пути, что идет сейчас. Если система изменится, майнеры понесут огромные финансовые потери.
Пропускные ограничения Биткоина
- 1 млн. байтов на блок (10 минут)
- больше 250 байтов на транзакцию (сделку)
- Как следствие – 7 транзакций в секунду
В качестве примера:
- VISA: от 2 до 10 тысяч транзакций в секунду
- PayPal: от 50 до 100 сделок в секунду
Проблема Биткоина в том, что он не был идеально спроектирован с самого начала. И исправить это теперь сложно. Ограничение пропускной способности Биткоина исходит от жестко закодированного предела на размер блоков. Каждый блок ограничен одним миллионом байтов.
И каждая транзакция должна иметь размер, по меньшей мере, в 250 байтов, то есть если разделить эти значения и принять во внимание, что каждый блок находится в течение 10 минут, то в результате получится 7 транзакций в секунду - такова пропускная способность сети Биткоина.
Для сравнения приведем платежную систему Visa, которая по оценкам совершает около 2000 транзакций в секунду по всему миру. А в самые загруженные дни, такие как суббота перед Рождеством, это число может увеличиваться до 10 000 транзакций в секунду. Другие платежные системы примерно так же продуктивны. Например, PayPal пропускает через себя около 1000 транзакций в секунду, что в разы превышает пропускную способность Биткоина.
Криптографические ограничения в Биткоине
- Только 1 алгоритм подписи (ESCADA/P256)
- Жестко закодированные хеш-функции
Еще одно ограничение - криптография Биткоина не меняется. Она содержит лишь пару хеш-алгоритмов и только один алгоритм подписи, - отдельный тип эллиптической кривой SecP256.
Фактически для любого алгоритма подписи и хеш-функции всегда есть вероятность взлома.
Что будет, если какую-то из указанных проблем исправить в новой версии программного обеспечения? Тогда всем узлам необходимо будет обновиться. Этот процесс называется "твердовилочное изменение" ( рис. 3.31).
На практике, ошибочным будет считать, что обновится каждый узел. Некоторые узлы сети не смогут перейти на новое ПО или сделают это с опозданием. Давайте посмотрим на сеть, где большая часть узлов обновилась, а малая часть - нет. И вот, один из обновленных блоков говорит: "Смотрите, я нашел этот большой, изящный новый блок. Может быть, одна из его транзакций содержит новый ЭЦП-алгоритм, который мы недавно добавили в Биткоин". Пусть его нашел блок 4, и вот он говорит: "Окей, сейчас я обновлюсь и объявлю, что это самый свежий блок. Индекс блока - 24, остальная сеть знает лишь о 23-ем. Но я сейчас продвину свой блок остальным пирам, использовав стандартный алгоритм-заливку".
Итак, узел 4 посылает блок №24 своим соседям - узлам 3 и 2. Узел 3 его примет и скажет: "Отлично, я его принял, сейчас я обновлю свой блокчейн и объявлю, что этот блок теперь - самый последний".
В свою очередь, узел 2 сообщит: "Это безумие, у вас есть какой-то код операции, который у меня отключен или зарезервирован, я вынужден отвергнуть этот блок, я его не понимаю, я не могу его принять".
Аналогично с узлом 6, он так же даст отказ, сообщив, что он тоже не может принять этот блок.
И теперь новые узлы имеют единую картину о состоянии блокчейна (с последним блоком 24), а старые узлы отказались принять последний блок (у них последний блок 23). В итоге, новые узлы продолжат работу с новым представлением о блокчейне, включая блок со своей новой особенностью, а старые узлы застрянут в старой версии блокчейна и, к сожалению, уже не смогут наверстать упущенное, потому что пока они не обновят свое ПО, они продолжат отвергать все те блоки, которые будут передавать им обновленные узлы с новыми версиями протоколов.
Причиной тому, почему это называется "твердой вилкой", является то, что блокчейн будет разделен, и узлы в сети будут находиться по разные стороны, в зависимости от имеющейся у них версии протокола, и в таком случае, они уже никогда не сработаются. Сообщество посчитало неприемлемым отключать от сети Биткоина те узлы, которые не обновляют свое ПО.
"Мягкие вилки"
Наблюдение: можно добавить новые возможности, которые только ограничат количество подлинных транзакций
Необходимо, чтобы большинство узлов соблюдало новые правила.
Старые узлы продолжат одобрять недействительные блоки.
Для контраста, существует также подход с названием "мягкая вилка". Он позволяет добавлять новые особенности в протокол Биткоина, но лишь в том случае, если это ограничивает набор валидных сделок или набор валидных блоков.
Необходимо, чтобы большинство узлов соблюдало новые правила.
При использовании "мягкой вилки" есть вероятность того, что старые узлы будут майнить недействительный блок, потому что он будет вмещать в себя сделку, которая когда-то считалась валидной, но теперь, согласно новым, более строгим правилам, она больше таковой не является. В определенный момент старые узлы поймут, что блок с их сделкой отвергается участниками сети. Тогда они перейдут на ту версию блокчейна, к которой перешли их пиры и твердая вилка исчезнет. Поначалу у пиров возникнет временная вилка из-за свойств нового блока, который попытались смайнить. Блок отвергнется сетью, но пиры его восстановят и вернут обратно в основную цепочку.
Классический пример изменения через мягкую вилку - оплата по хэшу скрипта, которая была рассмотрена во второй лекции.
Скрипт P2SH не присутствовал в первой версии протокола Биткоина–Скрипт хеширует одно значение данных, а затем проверяет, равно ли оно значению, указанному в скрипте вывода. Старые узлы никогда не выполняют второй этап верификации в P2SH-скрипте.
Возможности "мягкой вилки"
- Новые схемы (алгоритмы) подписей
- Дополнительные метаданные в блоках
Благодаря мягкой вилке успешно была добавлена оплата по хешу скрипта. Также с мягкой вилкой можно реализовать новые криптографические схемы, или какие-нибудь дополнительные, имеющие смысл, метаданные в блоках. А добавить их можно в параметр монетной базы. На данный момент в параметр монетной базы добавляются любые значения, но в будущем его можно будет использовать под что-то конкретное.
Одной из предложенных идей было, чтобы монетная база содержала корень Меркла, состоящий из полного набора неизрасходованных сделок. Это привело бы к мягкой вилке, потому что старые узлы могут добыть блок, который не будет иметь нового необходимого параметра монетной базы, и будет отвергнут сетью. Но они смогут сойтись и присоединиться к основной цепочке, которую майнит сеть.
"Жесткие вилки"
- Новые коды операций
- Изменения в ограничении размеров
- Изменения в частоте майнинга
- Исправление множества маленьких багов
НА ДАННЫЙ МОМЕНТ ПОДОБНЫЕ ИЗМЕНЕНИЯ МАЛОВЕРОЯТНЫ
Другие изменения могут потребовать твердую вилку, например, если возникнет необходимость добавить новые коды операций для Биткоина, изменить ограничения на блоки или размер транзакции, или исправить множественные баги. Например, исправление бага, где инструкция MULTISIG удаляет из стека одно лишнее значение, потребует твердой вилки, и именно поэтому на первый взгляд раздражающий баг, на текущий момент проще оставить в протоколе, чем использовать твердую вилку для его исправления.
Таким образом добавление любого изменения, требующего твердой вилки, является крайне нежелательным в сети Биткоин. Однако уже были проверены и признаны успешными множество идей и альтернативных валют, которые были созданы с нуля, лишенные этих недостатков. О них будет рассказано в лекции про альткоины