Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.
Краткий ответ
В экосистеме EVM идентификатор сети — это настроенное целое число, используемое как параметр домена защиты от повтора. EIP-155 связывает его с защищёнными подписями legacy-транзакций; типизированные форматы, например тип 2, включают его в собственную подписываемую нагрузку; CHAINID предоставляет его во время исполнения EVM; eth_chainId сообщает его через JSON-RPC. Это связанные интерфейсы, а не универсальный сертификат идентичности.
Глобальная уникальность и постоянство значения не гарантированы. Частные сети и спорные форки могут повторно использовать его, RPC способен сообщить ложное значение, а по одному адресу в разных сетях могут находиться разные код и состояние. В EIP-712 поле идентификатора сети в домене необязательно, а для необработанных сообщений и систем вне EVM действуют другие правила повтора и идентификации сети. Поэтому нужно точно установить схему подписи, конечную точку, генезис или контрольную точку и домен приложения.
Как это работает
- Сначала определите экосистему и смысл идентификатора: целое EIP-155 в EVM, домен EIP-712, пространство имён и ссылка CAIP-2, строковый идентификатор Cosmos, хеш генезиса Solana или другая схема. Не сравнивайте число без квалификатора между экосистемами.
- Зафиксируйте доверенный снимок сети: URL RPC, ожидаемый идентификатор сети в десятичном и шестнадцатеричном виде, генезис или финализированную контрольную точку, головной блок, конфигурацию клиента,
codeHashключевого контракта и время источника. Название и значок сети в кошельке — недоверенные метаданные. - Для подписи EVM запросите
eth_chainIdи без потери точности разберите шестнадцатеричную величину JSON-RPC. Сравните нормализованное целое с ожидаемой конфигурацией и состоянием провайдера кошелька; не подменяйте егоnet_versionи отклоняйте несовпадение до создания подписи. - Точно восстановите домен подписи. Различайте незащищённые legacy-транзакции, защищённое legacy-кодирование EIP-155 и типизированные конверты; для EIP-712 проверяйте поля домена,
verifyingContract, nonce и срок действия; для ретранслируемых намерений и намерений смарт-аккаунта исследуйте внутренний хеш протокола. - Проверьте цель исполнения в активной сети: получателя, сумму, calldata, адрес токена, код контракта или реализацию прокси, nonce аккаунта, комиссии и смоделированное состояние. Идентификатор сети разделяет домены, но не подтверждает подлинность этих объектов.
- Считайте EIP-1193
chainChanged, смену аккаунтов и отключение жёсткими границами состояния. Сбросьте кэшированные котировки, разрешения, nonce, результаты симуляции и запросы подписи, перечитайте сеть и цель и отправляйте проверенную сырую транзакцию только в закреплённую конечную точку. - Сверьте транзакцию в целевой сети: сырые подписанные байты и хеш, принятие RPC, статус квитанции, номер и хеш блока, использование nonce, изменения состояния и требуемую финальность. Отслеживайте расколы сети, изменение идентификатора, путаницу доменов L1/L2 и дрейф провайдера; при необъяснимом различии прекращайте операцию.
Примеры с расчётами
- Шлюз между шестнадцатеричным и десятичным значениями RPC. Десятичный идентификатор Base равен
8453, аeth_chainIdпредставляет его как0x2105:2 * 4096 + 1 * 256 + 0 * 16 + 5 = 8453. Ethereum Mainnet —1 = 0x1, Arbitrum One —42161 = 0xa4b1. Если кошелёк ожидает8453, но получает0x1, он должен прекратить операцию до подписи, а не доверять показанному названию сети. - Значение v защищённой legacy-транзакции. Для legacy-транзакций EIP-155
v = 35 + 2 * chainId + yParity. При идентификаторе1получаются37или38, при идентификаторе61—157или158. Обратно,floor((37 - 35) / 2) = 1. Этот расчёт неприменим к полю y-parity типизированной транзакции и к незащищённым legacy-подписям со значениями27или28. - Типизированная транзакция и отклонение не той сетью. Нагрузка типа 2 привязана к
chain_id=8453. При21,000 gas, базовой комиссии20 gwei, максимальной приоритетной комиссии2 gweiи максимальной комиссии30 gweiэффективная цена газа равнаmin(30, 20 + 2) = 22 gwei, а комиссия —21,000 * 22 gwei = 0.000462 ETH. Корректно проверяющая сеть с идентификатором1отклонит подписанную нагрузку из-за несовпадения домена, поэтому само отклонение не расходует газ в этой сети; в сети 8453 транзакция всё равно может завершиться неудачей по другой причине. - Система вне EVM и два идентификатора. Развёртывание Cosmos EVM может иметь строковый идентификатор Cosmos SDK
local-1и независимый целочисленный идентификатор EVM262144 = 0x40000. Нативная подпись Cosmos использует строку вместе с номером и sequence аккаунта, а подпись EVM-транзакции — числовой домен. Solana вместо этого предоставляет хеш генезиса и использует недавний хеш блока или долговечный nonce в сообщениях транзакций, а не целое EIP-155.
Риски
- Подключение не к той конечной точке RPC или не к той активной сети кошелька.
- Доверие вредоносному RPC, который лжёт об идентификаторе, состоянии или результате отправки.
- Путаница шестнадцатеричного и десятичного представления идентификатора.
- Потеря точности при разборе большого идентификатора небезопасным числовым типом.
- Использование
net_versionкак безусловного эквивалентаeth_chainId. - Пропуск EIP-1193
chainChangedили гонка при переключении сети. - Повторное использование кэшированных nonce, котировок, разрешений или симуляций после переключения.
- Предположение о глобальной регистрации и отсутствии коллизий идентификаторов.
- Подпись в частных сетях или форках, повторно использующих один идентификатор.
- Отсутствие заданного поведения при смене или сохранении идентификатора после форка.
- Принятие незащищённой legacy-транзакции без домена EIP-155.
- Применение legacy-формулы
vк типизированным транзакциям или другим подписям. - Предположение, что сырое сообщение или запрос
personal_signсодержит домен сети. - Пропуск или неверное кодирование идентификатора в домене EIP-712.
- Пропуск
verifyingContract, nonce приложения, срока действия или назначения. - Доверие одинаковым адресам контрактов без сравнения кода и состояния.
- Путаница доменов L1, L2, исходной и целевой сторон моста.
- Игнорирование внутреннего домена ретранслируемого намерения, permit или операции смарт-аккаунта.
- Восприятие метаданных добавления сети, меток обозревателя или значков как проверки подлинности сети.
- Перенос семантики EVM на Cosmos, Solana, Bitcoin или другой протокол.
Распространённые заблуждения
- Идентификатор сети — глобально уникальный и постоянный официальный регистрационный номер.
- Верный идентификатор подтверждает подлинность RPC, сети и контрактов.
- Каждая подпись Ethereum автоматически включает идентификатор сети.
- Разные идентификаторы предотвращают повтор любого подписанного сообщения и намерения приложения.
- Каждый блокчейн использует целочисленный идентификатор в стиле EIP-155.
Связанные темы
Источники
- EIP-155: Simple replay attack protection - Ethereum Improvement Proposals (дата обращения: 2026-08-12)
- EIP-1559: Fee market change for ETH 1.0 chain - Ethereum Improvement Proposals (дата обращения: 2026-08-12)
- EIP-1344: ChainID opcode - Ethereum Improvement Proposals (дата обращения: 2026-08-12)
- EIP-1193: Ethereum Provider JavaScript API - Ethereum Improvement Proposals (дата обращения: 2026-08-12)
- EIP-3085: wallet_addEthereumChain RPC Method - Ethereum Improvement Proposals (дата обращения: 2026-08-12)
- EIP-712: Typed structured data hashing and signing - Ethereum Improvement Proposals (дата обращения: 2026-08-12)
- CAIP-2: Blockchain ID Specification - Chain Agnostic Improvement Proposals (дата обращения: 2026-08-12)
- getGenesisHash RPC Method - Solana Documentation (дата обращения: 2026-08-12)