Блокчейн. Принципы и основы | страница 54
Вернемся к генерации ключей. Сначала случайным образом создается 256-битный закрытый ключ, а затем из него математически вычисляется публичный ключ точно такого же размера. Однако публичный ключ – это еще не совсем адрес Биткоин. Для того чтобы он стал адресом, с ним необходимо провести определенные процедуры. Сначала открытый ключ последовательно пропускают через два различных алгоритма хеширования (SHA-256 и MD5). В последнем случае его адрес укорачивается с 256 бит до 160. Затем к полученному результату в начало добавляют один байт идентификатора сети (основная сеть или тестовая), а в конец – четыре байта контрольной суммы адреса, которая также представляет собой часть хеша последнего результата. Контрольная сумма необходима для проверки, если ввод адреса осуществляется вручную: в случае ошибочного ввода система выдаст предупреждение. Транзакции в блокчейн являются безотзывными, поэтому отправитель криптосредств не имеет права на ошибку. Если адрес будет введен некорректно, средства отправителя уйдут «в никуда». А точнее – на адрес, от которого ни у кого из потенциальных пользователей сети не будет «отмычки» в виде секретного ключа. В результате никто не сможет предъявить права на эти средства, которые, таким образом, будут безвозвратно потеряны для системы.
Завершающий шаг в процедуре получения адреса Биткоин – его преобразование в более «читаемый» вид. Для этого блок данных в формате шестнадцатеричного кода (использующего цифры от 0 до 9 и буквы от A до F) преобразуется алгоритмом Base58 в строку, содержащую цифры, а также маленькие и большие латинские буквы. Данная процедура необходима, чтобы исключить из адреса символы, которые могут двояко трактоваться при ручном наборе: например, латинская маленькая l и большая латинская I или большая буква O и цифра 0. Все эти меры направлены на дополнительную защиту от ошибочного ввода адреса при совершении транзакций. По завершении всех необходимых процедур Биткоин-адрес может приобрести, например, следующий вид:
Теперь у пользователя есть свой адрес в сети Биткоин, хотя сама сеть об этом пока еще ничего не знает, поскольку пользователь осуществлял генерацию адреса на своем локальном устройстве. Но имея пару ключей и сформированный из них адрес, пользователь может получать на него криптосредства, а затем отправлять их на любой другой адрес, который пожелает. И тогда с первой транзакцией, по мере ее распространения по сети, об этом адресе начнут узнавать как о новом участнике системы. Возникает вопрос: куда именно попадет транзакция? Логично было бы предположить, что она должна быть включена в блок, который в данный момент формируется сетью. Однако это не совсем так – сначала транзакция рассылается по всей сети через прямые соединения между различными узлами. При этом каждый из узлов, получив новую транзакцию, осуществляет ее проверку на «валидность». Узлы проверяют, располагает ли в действительности отправитель той суммой, которую он желает переслать. Осуществить такую проверку возможно, вычисляя все «непотраченные выходы» по предыдущим транзакциям в пользу данного отправителя. Также математически проверяется соответствие цифровой электронной подписи отправителя указанному им своему открытому ключу. Это нужно для того, чтобы удостовериться, что отправитель транзакции обладает закрытым ключом от адреса, с которого он собирается потратить деньги. Если транзакция успешно прошла все необходимые проверки, то она попадает во временное хранилище, которое называется «мемпул» (mempool).