Що таке EIP-55: контрольна сума адрес Ethereum
EIP-55 — стандарт контрольної суми для адрес Ethereum, який кодує перевірку в регістрі літер шістнадцяткового рядка.
Адреса Ethereum — це 20 байтів, записаних 40 шістнадцятковими символами з префіксом 0x. Спочатку в такій адресі не було контрольної суми: помилка в одному символі давала іншу, але цілком валідну адресу, і кошти безповоротно зникали. EIP-55 запропонував витончене рішення без зміни формату.
Алгоритм такий: беруть адресу в нижньому регістрі без 0x, обчислюють від неї хеш keccak-256 і проходять по символах. Якщо символ — літера (a–f), а відповідна шістнадцяткова цифра хешу дорівнює 8 або більше, літеру записують великою, інакше — малою. Цифри не змінюються. Виходить адреса на кшталт 0xAbC…, де регістр і є контрольною сумою.
Гаманці й бібліотеки (ethers, viem, web3) перевіряють регістр: якщо адреса змішаного регістру не проходить EIP-55, її відхиляють. Але адреса повністю в нижньому чи верхньому регістрі вважається адресою без контрольної суми і приймається як є. Тому зберігати й показувати адреси варто в checksum-форматі, а порівнювати — без урахування регістру.
EIP-55 захищає від випадкових опечаток, але не від підміни. Якщо шкідливе ПЗ чи атака address poisoning підсунули чужу адресу, вона матиме правильну контрольну суму. Крім того, EIP-55 однаково працює в Ethereum і BNB Smart Chain, тож не допоможе відрізнити мережу.
Moonvex показує EVM-адреси в checksum-форматі EIP-55 і разом з назвою мережі, щоб клієнт міг перевірити адресу й не сплутав Ethereum з BSC.
Правила роботи з EVM-адресами в коді
- Валідуйте адресу бібліотекою, яка перевіряє EIP-55.
- Зберігайте адресу в checksum-форматі.
- Порівнюйте адреси після приведення до одного регістру.
- Не вважайте коректну контрольну суму доказом, що адреса «своя».