Почему адреса Ethereum не имеют контрольных сумм?

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

Почему адреса Ethereum не имеют контрольных сумм? Было ли это упущением, на которое не обращали внимания дизайнеры, аудиторы и сообщество до запуска Frontier? (Этот вопрос больше об истории, чем о текущих и будущих усилиях по исправлению.)

Ответы (4)

Отредактировано для добавления: как и предполагалось, с запуском службы имен Ethereum (ENS) пользователи и кошельки постепенно начали переходить на использование строк, таких как «mywallet.eth», вместо необработанных шестнадцатеричных адресов. Поскольку это имя не было известно во время написания этого ответа, оно относится к тому же понятию, что и «namereg».

Я могу немного остановиться на этом, потому что дело не только в том, что конечные пользователи в конечном итоге должны использовать удобочитаемые строки для обычных повседневных транзакций. Дело в том, что необработанная шестнадцатеричная строка, которую вы называете «адресом Ethereum», даже не предназначалась для использования в качестве стандартного способа представления этой информации.

Вы можете знать или не знать, что когда вы отправляете биткойн-транзакцию на «биткойн-адрес», такой как 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 , сама фактическая транзакция не содержит строки «1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3». Вместо этого он декодирует это представление в реальный адрес 0xfc916f213a3d7f1369313d5fa30f6168f9446a2d, чистое шестнадцатеричное представление, которое не тратит место на контрольные суммы и биты версии. Выглядит знакомо?

Это правда, что сам чистый шестнадцатеричный адрес не содержит никаких контрольных сумм. Но ничто не мешает вам писать программное обеспечение, которое использует тот же метод, что и Биткойн, для создания кодировки этой строки в базе 58 со встроенным номером версии и контрольной суммой. Он будет идеально взаимодействовать с сетью, молча декодируя новый «адрес Ethereum» в необработанную шестнадцатеричную форму. Он может даже принимать оба типа форматов, если вы всегда будете включать «0x» перед необработанными форматами (что вы должны делать в любом случае). Тогда вы сможете отправлять и получать с тем же опытом, что и в биткойнах . Возможно с другим номером версии, чтобы случайно не перепутать адреса,

Виталик уже указал на одну причину, по которой никто не удосужился сделать это для большинства приложений Frontier. Но есть еще один, гораздо более актуальный. Приложения Ethereum не используют подход Биткойн, потому что существует еще более функциональный способ представления необработанных адресов Ethereum, называемый ICAP , который выглядит так: «XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS». Как и стандартное представление биткойн-адреса, оно использует более широкий диапазон буквенно-цифровых символов для экономии места и включает контрольную сумму. Но это еще не все, друзья!

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

Во-вторых, ICAP не должен использовать шестнадцатеричные адреса. Вместо этого, как только мы все переключимся на использование контрактов namereg, он может просто использовать вашу настоящую удобочитаемую строку, чтобы в итоге получить что-то вроде «XE81ETHXREGJEFFCOLEMAN», которое по-прежнему соответствует банковским форматам, но может действительно запомниться!

Поддержка ICAP постепенно растет, в том числе в официальных клиентах Ethereum. Возможно, в скором времени в наиболее распространенном представлении адреса Ethereum больше не будет контрольной суммы!

Редактировать: по состоянию на февраль 2016 года Виталик также реализовал переходный метод контрольной суммы, в котором использование заглавных букв в шестнадцатеричном адресе без учета регистра используется для обеспечения некоторой дополнительной защиты от случайных ошибок, при этом оставаясь обратно совместимым с программным обеспечением, которое не поддерживает контрольную сумму (и будет игнорировать регистр различия). Всем, кто разрабатывает программное обеспечение, которое поддерживает ввод или отображение необработанной шестнадцатеричной кодировки, настоятельно рекомендуется реализовать этот метод «контрольной суммы на основе заглавных букв» .

Подробности:
При методе Виталика адрес:

0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826

сравнивается с необработанным двоичным хэшем keccack-256 байтов адреса, и там, где буквы находятся в том же соответствующем месте, что и бит «1», буква делается заглавной (буквы, которые соответствуют биту «0», остаются в строчной форме, а цифры неизменны). Это приводит к:

0xCd2a3d9f938e13Cd947eC05ABC7fe734df8DD826

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

«Ваш» код должен был бы «молча декодировать новый «адрес Ethereum» в необработанную шестнадцатеричную форму», верно? Можете ли вы уточнить, потому что «вы пишете программное обеспечение», похоже, отличается от «оно» в «оно будет взаимодействовать ...»
Мне не совсем понятно, о чем вы спрашиваете. «Это» относится к программному обеспечению, которое «вы» могли бы создать. Какую часть мне следует уточнить?
Спасибо, вашего комментария достаточно для меня. (Ваш ответ можно было интерпретировать как то, что сам Эфириум уже обрабатывает адреса в кодировке base58, если кто-то сам закодировал его. Возможно, пояснение той части, которую нужно было бы написать как для кодирования, так и для декодирования.)
Вау, какие невероятные археологические находки сверхинженерии. Я рад, что теперь они остановились на несколько запутанной контрольной сумме, основанной на прописных буквах.

Вот ответ от В:

эфирный

серьезно? нет контрольной суммы? вы напечатали один символ неправильно, и ваш эфир потерян навсегда? Черт.... TIL Ethereum имеет массовый надзор за дизайном постоянная ссылка

vbuterinЭфириум

Вы не должны использовать эфирные адреса; вы должны использовать namereg и эквиваленты таких вещей, как bip70.

Источник: https://www.reddit.com/r/ethereum/comments/33l08f/do_ethereum_address_not_have_a_checksum_like/

Прямо от разработчиков - кажется, контрольные суммы могут быть разработаны в будущих версиях:

Эфириум

Я думаю, что все хотят иметь контрольные суммы и понимают преимущества, но предоставление стабильного обновления сетевого протокола имеет первостепенное значение прямо сейчас и было с самого начала. Мы надеемся, что вскоре после хард-форка Homestead появятся дополнительные функции в самих клиентах. :)

https://www.reddit.com/r/ethereum/comments/425js8/maybe_we_should_reconsider_checksums_as_default/

@eth любезно натыкается сюда, так как ENS теперь в эфире :)

Адреса Ethereum теперь имеют контрольную сумму.

См. EIP55 для спецификации и обновлений о реализации.

Это необязательно для использования, но если вы видите адрес в смешанном регистре, его следует проверить в соответствии со следующим правилом:

Преобразуйте адрес в шестнадцатеричный, но если i-я цифра является буквой (т. е. одной из abcdef), напечатайте ее в верхнем регистре, если 4-й бит хэша строчного шестнадцатеричного адреса равен 1, в противном случае напечатайте ее в нижнем регистре.

Не всем это требуется: например, Coinbase не будет отклонять недействительные адреса в смешанном регистре, поэтому вы все равно можете отправить средства из Coinbase в пустоту за опечатку.

Из тех, которые используют контрольную сумму, ввод адреса только в нижнем регистре (или иногда только в верхнем регистре) иногда пропускает процесс контрольной суммы.

НЕТ, нет, они этого не делают, и я только что потерял 75 фунтов стерлингов, потому что они этого не делают. Ничего себе, это могло быть 75k! То, что вы говорите, когда-нибудь может оказаться правдой, но сейчас это ложь. У них нет контрольных сумм в обычных реализациях, и неправильное копирование одного символа приведет к тихой потере средств. Это в высшей степени дилетантский подход. Аааа!

Я сожалею о вашей потере. Существует необязательная контрольная сумма, реализованная в EIP-55, но ее реализация зависит от биржи или кошелька, а многие этого не делают. Первоначально необработанные адреса не предназначались для использования людьми, отсюда и отсутствие контрольной суммы в исходном дизайне. (Никогда не вводите необработанный адрес вручную. Люди плохо разбираются в шестнадцатеричных числах. Всегда копируйте и вставляйте, где можете. Если вы не можете копировать и вставлять, ищите кошельки, которые позволяют использовать QR-коды или 24-словные мнемотехника.)