Что такое EIP-55: контрольная сумма адреса Ethereum
EIP-55 — стандарт записи адреса Ethereum в смешанном регистре, где заглавные буквы кодируют контрольную сумму и позволяют поймать опечатку.
Адрес Ethereum — это 20 байт, записанные как 0x и 40 шестнадцатеричных символов. В исходном виде у него нет контрольной суммы: если перепутать один символ, получится другой, но вполне валидный адрес, и средства уйдут в никуда. EIP-55 решает эту проблему, не меняя сам адрес: он лишь определяет, какие буквы a–f нужно писать заглавными.
Алгоритм простой. Берут адрес в нижнем регистре без 0x и вычисляют от него хеш keccak-256. Затем для каждой буквы адреса смотрят на соответствующий символ хеша: если он равен 8 или больше, буква пишется заглавной, иначе — строчной. Цифры остаются как есть. В итоге адрес выглядит как смесь заглавных и строчных букв, и любая ошибка в одном символе почти наверняка нарушит этот рисунок.
Проверка работает только при смешанном регистре. Адрес, записанный целиком строчными или целиком заглавными, считается валидным, но без контрольной суммы, — кошелёк не сможет поймать в нём опечатку. Поэтому платёжные сервисы и кошельки показывают адреса в формате EIP-55, а библиотеки (ethers, viem, web3) умеют и вычислять, и проверять его. Тот же формат используется в BNB Smart Chain и других EVM-сетях.
Для разработчика важно не «ломать» контрольную сумму: не приводить адрес к нижнему регистру перед показом клиенту, а при сравнении адресов в коде, наоборот, сравнивать в одном регистре, иначе одинаковые адреса будут считаться разными. Ещё одна ошибка — считать, что EIP-55 защищает от подмены адреса вредоносной программой: подменённый адрес будет иметь свою корректную контрольную сумму.
На странице оплаты Moonvex адрес показывается вместе с QR-кодом, так что клиенту не приходится набирать его вручную, а значит, и шанс опечатки минимален.