Одна идея, которая была предложена, состоит в том, что в каждом новом блоке coinbase будет указывать корень Merkle дерева, содержащего весь набор не потраченных транзакций.
Это приведет только к мягкой вилке, потому что старые узлы могут иметь блок, у которого нет требуемого нового параметра coinbase и который был отклонен сетью, но они наверстают упущенное и присоединятся к основной цепочке, которую ведет сеть.
Для других изменений может потребоваться жесткая вилка.
Примером этого является добавление новых опккодов в биткойн, изменение ограничений на размер блоков или транзакций, или различные исправления ошибок.
Чтобы исправить ошибку, о которой мы говорили ранее, где инструкция MULTISIG выталкивает дополнительное значение из стека, на самом деле требуется жесткая вилка.
Это объясняет, почему, несмотря на то, что это раздражающая ошибка, гораздо проще оставить ее в протоколе и заставить людей работать с ней, а не создавать жесткий форк в биткойне.
Жесткие форки, даже если они были бы успешными, вряд ли произойдут в нынешнем Биткойне.
Но многие из этих идей были протестированы и оказались успешными в альтернативных крипторесурсах, которые стартовали с нуля.
Как хранить и использовать биткойны
Начнем с простейшего способа хранения биткойнов, который просто помещает их на локальное устройство.
Чтобы потратить биткойн, вам нужно знать определенную публичную информацию и определенную секретную информацию.
Публичная информация – это то, что происходит в цепочке блоков – движение монеты, ее стоимость и так далее.
Секретная информация – это секретный ключ владельца биткойна.
Вам не нужно беспокоиться о том, как хранить публичную информацию, потому что вы всегда можете ее получить, когда она вам понадобится.
Но секретный ключ цифровой подписи – это то, что вам следует тщательно охранять.
Поэтому на практике хранение биткойнов – это хранение и управление секретными ключами.
Когда вы определяете, как хранить и управлять ключами, нужно иметь в виду три цели.
Первая – это доступность: возможность тратить свои монеты, когда вы этого захотите.
Вторая – это безопасность: нужно быть уверенным, что никто не сможет потратить ваши монеты, кроме вас самих.
Если кто-то получит доступ к ключу, они могут просто отправить ваши монеты себе.
Третья цель – удобство, то есть управление ключами должно быть относительно легким.
Как вы можете себе представить, достижение всех трех целей одновременно может быть проблемой.
Различные подходы к управлению ключами предлагают различные компромиссы между доступностью, безопасностью и удобством.
Самый простой способ управления ключами – хранить их в файле на своем локальном устройстве: компьютере, телефоне или каком-либо другом гаджете, который вы носите, или владеете, или управляете.
Этим достигается удобство: наличие приложения для смартфонов позволяет тратить монеты с помощью нескольких кнопок.
Но это нарушает доступность или безопасность – вы можете потерять устройство, устройство может выйти из строя, и вы можете стереть данные, или если ваш файл поврежден, ваши ключи будут потеряны, и, следовательно, вы потеряете ваши монеты.
Аналогично это нарушает обеспечение безопасности: кто-то может украсть или сломать ваше устройство или заразить вредоносным ПО, кто-то может копировать ваши ключи, а затем отправить все ваши монеты себе.
Другими словами, хранение ваших приватных ключей на локальном устройстве, особенно мобильном устройстве, очень похоже на хранение денег в вашем кошельке.
Полезно иметь некоторые карманные деньги, но вы не носите с собой все свои сбережения, потому что можете их потерять, или кто-то может их украсть.
Так что обычно вы храните немного информации / немного денег в кошельке и храните большую часть своих денег в другом месте.
Если вы храните биткойны локально, вы обычно используете программное обеспечение для кошелька, которое является программным обеспечением, отслеживающим все ваши монеты, которое управляет вашими ключами и имеет удобный пользовательский интерфейс.
Программное обеспечение кошелька позволяет вам легко использовать целую кучу разных адресов с разными ключами.
Как вы помните, создание пары публичный-приватный ключей является легким, и вы можете использовать это для своей анонимности или конфиденциальности.
Программное обеспечение кошелька дает вам простой интерфейс, который показывает вам, сколько монет в вашем кошельке.
И когда вы хотите потратить биткойны, кошелек обрабатывает детали того, какие ключи использовать и как создать новый адрес и т. д.
Чтобы тратить или получать биткойны, вам также нужен способ обмена адресом с другой стороной – адресом, которому должны быть отправлены биткойны.
Существует два основных способа кодирования адресов, которые могут быть переданы от получателя к отправителю: это передача текстовой строки или передача QR-кода.
Чтобы закодировать адрес в виде текстовой строки, мы берем биты ключа и преобразуем их из двоичного числа в число base 58.
Что означает base58?
«base» означает число символов, которые вы используете для представления числа.
В своей повседневной жизни мы пользуемся числами base10.
Чем больше символов у вас в базе, тем меньше их вам нужно использовать для представления больших чисел. Таким образом, чем больше база, тем короче число.
Почему используется base58?
58 – это усеченное количество символов алфавитно-цифрового алфавита, где есть 62 символа.
В base58 удалены плохие символы, такие как 0, O, L и I, которые легко можно спутать.
Таким образом, base58 имеет два преимущества:
Эта база дает большой набор символов, чтобы представлять большие числа в более коротком формате.
И эта база не содержит неудобные символы, чтобы вы не ошибались при расшифровке.
Например, чтобы перевести десятичное число в 58-ричное, нужно все время делить на 58, брать остаток и сопоставлять его номеру символа базы.
Таким образом, чтобы закодировать адрес в виде текстовой строки, мы берем биты публичного ключа и преобразуем их из двоичного числа в число base 58.