Почему у адресов Ethereum нет контрольных сумм?
Контрольная сумма, аналогичная ее использованию в адресах Bitcoin, может в первую очередь предотвращать использование ошибочных или недопустимых адресов до того, как будет создана транзакция с недопустимым адресом.
Почему у адресов Ethereum нет контрольных сумм? Был ли это надзор, который был упущен дизайнерами, аудиторами и сообществом до тех пор, пока Frontier не был запущен? (Этот вопрос больше связан с историей, чем текущими и будущими усилиями по исправлению.)
4 ответа
Отредактировано для добавления: как и было предсказано, с запуском службы имен имен Ethereum (ENS) пользователи и кошельки постепенно начали переходить на использование строк, таких как «mywallet.eth», вместо необработанных шестнадцатеричных адресов. Поскольку это имя не было известно в то время, когда этот ответ был написан, он относится к той же концепции, что и «namereg».
Я немного разбираюсь в этом, потому что это не просто тот факт, что конечные пользователи, как ожидается, будут использовать удобочитаемые строки для обычных ежедневных транзакций. Это означает, что необработанная шестнадцатеричная строка, которую вы вызываете «адрес Ethereum», даже не была стандартным способом представления этой информации.
Вы можете или не знать, что при отправке транзакции биткойна на «биткойн-адрес», например 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 , сама фактическая транзакция не содержит строку «1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3». Вместо этого он декодирует это представление в адрес real 0xfc916f213a3d7f1369313d5fa30f6168f9446a2d, чистое шестнадцатеричное представление, которое не тратит места на контрольные суммы и биты версий. Посмотрите знакомый?
Это правда, что чистый шестнадцатеричный адрес сам не содержит контрольных сумм. Но ничего не мешает вам писать программное обеспечение, которое использует тот же самый метод, который Биткойн делает , чтобы создать кодировку этой строки в базе 58 со встроенным номером версии и контрольной суммой. Он прекрасно взаимодействует с сетью, молча расшифровывая новый «адрес Ethereum» в необработанную шестнадцатеричную форму. Он может даже принимать оба типа форматов, если вы были осторожны, чтобы всегда включать «0x» на передней части сырых (которые вы должны делать в любом случае). Затем вы можете отправлять и получать с тем же самым опытом, что и в биткойне . Возможно, с другим номером версии, чтобы вы случайно не смешивали адреса.
Vitalik уже указал , по одной причине никто не удосужился это сделать для большинства Пограничные приложения. Но есть еще один, более важный. Приложения Ethereum не используют подход Bitcoin, поскольку существует еще более эффективный способ представления исходных адресов Ethereum, называемый ICAP , который выглядит следующим образом:« XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS ». Как и стандартное представление адреса биткойнов, он использует более широкий диапазон буквенно-цифровых символов для экономии места и включает контрольную сумму. Но это еще не все, люди!
С одной стороны, ICAP является полностью действующим номером международной банковской учетной записи (или IBAN) , Это означает, что существующее банковское программное обеспечение может понимать его и взаимодействовать с ним.
В другом случае ICAP не должен использовать шестнадцатеричные адреса. Вместо этого, после того, как мы все делаем переключимся на использование контрактов namereg, он может просто использовать вашу реальную удобочитаемую строку, чтобы в итоге получилось нечто вроде «XE81ETHXREGJEFFCOLEMAN», которое по-прежнему соответствует форматам банка, но может быть возможно запомнить
Поддержка ICAP постепенно растет, в том числе в рамках официальных клиентов Ethereum. Возможно, однажды, скорее всего, больше не будет так, что в наиболее распространенном представлении адреса Ethereum отсутствует контрольная сумма!
Изменить: По состоянию на февраль 2016 года Vitalik также внедрил переходный метод контрольной суммы , где капитализация нечувствительного к регистру гексагового адреса используется для обеспечения некоторой дополнительной защиты от случайных ошибок, оставаясь обратной совместимостью с программным обеспечением, которое не поддерживает контрольную сумму (и будет игнорировать различия в случае). . Любому разработчику программного обеспечения, которое поддерживает ввод или отображение шестнадцатеричного кодирования с шестнадцатеричным кодированием, настоятельно рекомендуется реализовать этот метод контрольных сумм на основе «capitals» .
Детали:
С помощью метода Виталика адрес:
0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826
сравнивается с исходным двоичным хешем keccack-256 байтов адреса, а там, где буквы в одном и том же соответствующем месте, как бит «1», буква заглавная (буквы, которые соответствуют месту «0» бит, остаются в нижнем регистре, а номера не изменяются) , Это приводит к:
0xCd2a3d9f938e13Cd947eC05ABC7fe734df8DD826
Почти весь код, не поддерживаемый контрольной суммой, просто игнорирует различия в случае, указанные выше, иинтерпретировать это представление идентично первому, поэтому очень мало недостатка в реализации контрольной суммы на основе капиталов.
Вот ответ от V:
эфир
серьезно? нет контрольной суммы? вы опечатываете одного персонажа неправильно, и ваш эфир теряется навсегда? Черт ... TIL Ethereum имеет огромный контроль над проектом Постоянная ссылка
vbuterinEthereum
Вы не должны использовать эфирные адреса; вы должны использовать namereg и эквиваленты таких вещей, как bip70.
Источник: https://www.reddit.com/r/ethereum/comments/33l08f /do_ethereum_address_not_have_a_checksum_like /
Прямо от разработчиков - похоже, контрольные суммы могут быть разработаны в будущих версиях:
taylorgerringEthereum
Я думаю, что все хотят контрольных сумм и понимают преимущества, но обеспечение стабильного обновления сетевого протокола имеет решающее значение прямо сейчас и с самого начала. Дополнительная функциональность в самих клиентах, как мы надеемся, скоро последует после жесткой вилки Хоумстеда. :)
В адресах Ethereum теперь есть контрольная сумма.
См. EIP55 для спецификации и обновлений об осуществлении.
Это необязательно для использования, но если вы видите адрес смешанного случая, он должен быть проверен в соответствии со следующим правилом:
Преобразуйте адрес в шестнадцатеричный, но если i-я цифра является буквой (т. е. является одним из abcdef), напечатайте ее в верхнем регистре, если 4-й бит хэша нижнего регистра шестнадцатеричного адреса равен 1, иначе распечатайте его в нижнем регистре .
Не все требуют этого: например, Coinbase не будет отклонять недопустимые адреса смешанного случая, поэтому вы можете отправлять средства из Coinbase в пустоту для опечатки.
Из тех, которые используют контрольную сумму, ввод всего строчного (или иногда заглавного) адреса иногда пропускает процесс контрольной суммы.
НЕТ, нет, они не делают, и я просто потерял 75 фунтов стерлингов, потому что они этого не делают. Ничего себе, это могло быть 75 КБ! То, что вы говорите, может быть правдой в один прекрасный день, но на данный момент это ложь. У них нет контрольных сумм в общих реализациях, а неправильное копирование одного символа приведет к бесшумной потере средств. Это крайне дилетантски. Aaagh!