Формат криптовалютных адресов: Пишем правильно

Формат криптовалютных адресов: Пишем правильно

В 99% случаев, в реальной жизни вы не будете вводить адрес вручную. Однако знать, как устроен адрес, полезно, и иногда это может спасти вас от потери средств.


Количество криптовалют на сегодняшний день превышает все разумные и даже неразумные пределы. И большая часть из них являются мертворожденными треш-коинами. Мы же рассмотрим несколько самых популярных и распространенных представителей индустрии. И начну я, что логично, с bitcoin, как основателя и прародителя жанра. 

При создании bitcoin создатели уделили немалое внимание формату адресов, чтобы исключить ситуацию "ой, не туда!". Мы ведь помним, что транзакция в blockchain является не только безотзывной, но и анонимной? 

Как следствие - маленькая ошибка при вводе адреса может просто отправить средства "на деревню дедушке, Константину Федоровичу". Причем произойдет это так, что вероятнее всего эти средства никто больше не увидит. 

Чтобы описанные выше аттракционы невиданной щедрости были невозможны, адрес организован весьма хитро. Для записи адреса используется система base58. Которая, в свою очередь, является видоизмененной системой base64. 

Base64 родился во времена аналоговых модемов, электронной почты UUCP и других древних компьютерных технологий. Проблема, которую решала base64 заключалась в следующем: большинство каналов связи было ориентировано на передачу текстовой информации. И при попадании в такие каналы связи бинарных данных, им становилось грустно.

Под текстовой информацией подразумевалось: буквы (латинского алфавита) от A до Z в верхнем и нижнем регистре, цифры от 0 до 9, знаки пунктуации: точка, запятая, кавычки, плюс, минус, и некоторые спецсимволы - например пробел или перевод строки. Все остальное - условно считается бинарными или двоичными данными.

Так вот, чтобы передавать эти самые бинарные данные, но не "поломать интернет" хитрые программисты придумали запись base64 - систему записи только печатными символами и цифрами. 64 в этом контексте - это 64 используемых символа, A-Z, a-z, 0-9. Конечно объем данных заметно набирал в весе, но зато старые системы его спокойно глотали, думая что это текст. Были конечно и другие вариации, такие как UU-encode, но в целом схема была подобная.

Нас же интересует base64, а точнее - его вариация base58. 

Вопрос - куда делось 6 символов, и какие именно символы? из base58 исключены все символы, которые могут быть визуально сходными и создать путаницу при ручном вводе. Исключены 0 (ноль), O (заглавная латинская o), I (заглавная латинская i), l (маленькая латинская L). Так же в base64 использовались "+"(плюс) и "/" (дробная черта) - они так же были исключены. Таким образом в адресах bitcoin вы никогда не встретите указанные символы. Вот полный список символов, которые могут применяться вадресах:


123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Но это еще не все. 

Для записи адресов bitcoin (и его наследников litecoin, dash) используется вариант base58check - данные не просто кодируются в текстовую форму, но и дополнительно получают защиту от искажения. Точнее не то чтобы защиту, но при неправильном вводе даже одного символа программное обеспечение сразу определит, что с адресом что то не так и не даст возможности отправить средства в неизвестном направлении. 

Ну и, наконец, адрес содержит так называемый NetID - дополнительную информацию, что это за адрес, и для чего он предназначен. Визуально это выражается в том, что часть bitcoin адресов начинается с символа 1 (так называемые P2PKH-адреса) а часть с "3" (так называемые P2SH-адреса). Есть еще адреса начинающиеся с "2", "m/k" - но вы их увидите только если вы разработчик и пользуетесь тестовыми сетями. 

Теперь несколько слов о Ethereum и их записи адреса.

 Разработчики эфира решили делать все по своему, не заморачиваться, а просто использовать в качестве адреса HEX-последовательность. HEX-это запись в шеснадцатиричном виде, то есть цифры от 0 до 9 и латинские буквы A, B, C, D, E, F. начинается такая запись с префикса "0x". При этом регистр не имеет никакого значения и адреса:


0xc2d7cf95645d33006175b78989035c7c9061d3f9 
0xC2D7CF95645D33006175B78989035C7c9061d3F9

Эти адреса, с точки зрения сети, идентичны. И при передаче средств на любой из этих вариантов результат будет одинаковым. Однако многие пользователи встречают странную запись, когда часть адреса записана в верхнем регистре (естественно только буквы) а часть - в нижнем. 

Такая запись появилась в стандарте EIP55 (Ethereum Improvement Protocol), когда разработчики внезапно вспомнили о том, что неплохо бы иметь способ проверки корректности переданных данных, но менять длинну адреса, добавляя в него контрольную сумму, было уже поздно. Таким нехитрым способов в адрес вшивается контрольная сумма, которая позволяет определить - был ли адрес искажен при передаче или нет. 


Так адрес 0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359 с проверкой контрольной суммы будет выглядеть так: 0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359 

Конечно, такой костыль не то чтобы позволяет нормально вводить адрес вручную, но хотя бы при передаче адреса позволяет проверить его целостность.




1295

Автор

Свежие новости

Выбор редакции

Аналитика