Обновить

🗝 Так вот он какой мой адрес кошелька в Ethereum

Почти три года занимаюсь разработкой смарт-контрактов для Ethereum и ему подобных. И сегодня коллега задал мне вопрос на который я не смог ответить сразу!

Есть два адреса: 0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed и 0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed. Это один и тот же адрес? Или два разных?

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

И вот тут я крепко задумался… Тем более когда начинаешь копать, то ответ лежит наверху: Ethereum адреса не чувствительны к регистру!

В природе Ethereum адреса можно встретить разные:

  • 0xabc... (нижний регистр)

  • 0xABC... (верхний регистр)

  • 0xAbC... (смешанный регистр)

▫️Но как их видит сама EVM?

Любой адрес преобразуется в 40 шестнадцатеричных символов (hex) нижнего регистра (без 0x). Используются символы [0-9A-F]*. Однако EVM не важен регистр, так как она все символы преобразует в нижний регистр по умолчанию. Таким образом в EVM наш адрес будет всегда 5aaeb…435e7ef1beaed.

Но зайдем в etherscan, вставим наш адрес и увидим некоторые буквы с верхним регистром в поле адреса.

▫️Что не так с etherscan?

А все так! Ответ на этот казус кроется в ERC-55: Mixed-case checksum address encoding. Согласно спецификации, "сбоку» (сугубо off-chain) для адресов вводится понятие checksum (контрольная сумма). В Ethereum — это механизм проверки целостности адреса, который помогает обнаружить ошибки ввода (опечатки) за счёт использования заглавных букв в шестнадцатеричной записи адреса.

Существует простой алгоритм, который определяет какие буквы необходимо перевести из нижнего регистра в верхний. Адрес хешируется, затем каждая буква адреса сопоставляется с символом в хеше и если он больше или равен 8, то букву нужно преобразовать в верхний регистр.

Сама EVM не проверяет checksum — это делают только кошельки и интерфейсы (например, MetaMask или Etherscan). Если отправить транзакцию на 0x5AAEB... (все буквы с верхним регистром), EVM всё равно обработает её, как 0x5aaeb.... Получается, что пользователи могут видеть, что адрес введён верно (ошибки в регистре могут сигнализировать об опечатке или мошенничестве).

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

▫️Проверь свой адрес

Используй Etherscan или ETH Checksum Tool. При помощи этих сервисов можно проверить контрольную сумму адреса.

▫️Вывод

EVM понимает адрес в любом регистре, но checksum — наша близкая к стопроцентной защита от ошибок и опечаток! Не стоит пугаться, если разные кошельки в разные моменты времени показывают адреса то в нижнем регистре, то в смешанном.

@pnaydanovgoo

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0
ЕЖЕДНЕВНЫЙ ХАБР | 12 АВГ 2026
Охват58K

Мир, рассчитанный на рост, заканчивается

Некоторые графики объясняют происходящее лучше, чем десяток книг с прогнозами. Вот, например.

Это структура демографической нагрузки в Европе с 1950 года. В 1950-м на сто человек трудоспособного возраста приходился 41 ребёнок и 12 пожилых. В 2023-м - 24 ребёнка и 31 пожилой. Сама нагрузка почти не сдвинулась: 53 иждивенца тогда, 55 сейчас. Перевернулась её структура.

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

Мир, рассчитанный на рост, заканчивается

Публикации