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