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

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

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

44 голоса | спросил eth 21 Jpm1000000pmThu, 21 Jan 2016 21:27:38 +030016 2016, 21:27:38

4 ответа


39

Отредактировано для добавления: как и было предсказано, с запуском службы имен имен 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

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

ответил Jeff Coleman 22 Jam1000000amFri, 22 Jan 2016 04:10:02 +030016 2016, 04:10:02
7

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

  

эфир

     

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

     

vbuterinEthereum

     

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

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

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

  

taylorgerringEthereum

     

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

https://www.reddit.com/r/ethereum/комментарии /425js8 /maybe_we_should_reconsider_checksums_as_default /

ответил high110 21 Jpm1000000pmThu, 21 Jan 2016 22:09:50 +030016 2016, 22:09:50
5

В адресах Ethereum теперь есть контрольная сумма.

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

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

  

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

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

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

ответил WBT 18 Jpm1000000pmThu, 18 Jan 2018 20:40:51 +030018 2018, 20:40:51
1

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

ответил Mark 19 Jam1000000amFri, 19 Jan 2018 04:50:37 +030018 2018, 04:50:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132