Почему универсальные решения не работают
Ethereum развивается через форки, и каждый крупный релиз меняет правила игры: структуру блока, стоимость газа, форматы транзакций, дерево состояний и даже модель консенсуса. Универсальный скрипт восстановления, написанный под London, может неверно прочитать данные эпохи Frontier или потерять поля, появившиеся в Shanghai и Cancun. Поэтому разработка кастомных скриптов восстановления для конкретных версий Ethereum становится обязательным этапом, если речь идет о доступе к кошельку, средствам, состоянию контракта или данным узла.
Что именно восстанавливают
- Доступ к кошельку: проверка BIP-39, BIP-32, BIP-44, нестандартных путей деривации и EIP-155 chainId.
- Состояние смарт-контракта: слоты storage, прокси-паттерны, mapping и динамические массивы, события и логи.
- Данные узла: chaindata, receipts, headers, freezer-файлы, индексы и Merkle Patricia Trie.
- Транзакции: legacy, EIP-2930, EIP-1559 и EIP-4844 blob-транзакции, подписи и nonce.
- Ключи и подписи: восстановление из фрагментов, проверка контрольных сумм, офлайн-подпись и безопасный sweep.
Ключевые различия версий Ethereum

- Frontier и Homestead: ранние правила EVM, отсутствие многих современных предкомпилированных контрактов и иной газовый учет.
- Byzantium, Constantinople, Istanbul: изменения opcode, газовых стоимостей, EIP-1884 и EIP-2200.
- Berlin и London: EIP-2929, EIP-3529, EIP-1559 и baseFeePerGas; скрипт должен корректно рассчитывать эффективную цену газа.
- Merge/Paris: переход на Proof-of-Stake, поля parentBeaconBlockRoot и новая логика финализации.
- Shanghai и Cancun: withdrawals, withdrawalsRoot, blobGasUsed, excessBlobGas и EIP-4844; восстановление старых данных требует учета новых полей заголовка.
Архитектура кастомного скрипта
- Модуль идентификации версии: определяет chainId, номер блока, форк, клиент и доступный диапазон archive-данных.
- Сборщик артефактов: получает ABI, bytecode, storage dump, заголовки блоков, receipts, логи и, при необходимости, фрагменты seed-фразы.
- Декодеры: разбирают RLP, SSZ, ABI, события, storage layout и типы транзакций, специфичные для версии.
- Реконструктор состояния: собирает Merkle Patricia Trie, проверяет proofs и восстанавливает значения слотов.

- Верификатор: сверяет хеши, подписи, балансы и ожидаемое состояние контракта.
- Модуль безопасного вывода: формирует восстановленные данные или транзакции без утечки секретов в логи.
Этапы разработки
- Фиксация требований: что восстанавливаем, на какой версии Ethereum, в каком окружении и с какими ограничениями по приватности.
- Выбор инструментов: web3.py, ethers.js, Foundry, Hardhat, Anvil, ethereumjs, py-evm, rlp, trie, geth, erigon, reth.
- Реализация: модульный код, тесты на исторических блоках, воспроизводимость и детерминированные результаты.
- Тестирование: unit-тесты, fork-тесты, mainnet-fork, проверка на Anvil и сравнение с эталонными данными.
- Аудит и запуск: проверка безопасности, изоляция секретов, ограничение RPC-запросов и документирование процедуры восстановления.
Пример сценария

Требуется восстановить доступ к прокси-контракту, развернутому до London. Скрипт читает bytecode, ABI и storage dump, определяет EIP-1967-слоты администратора и реализации, проверяет delegatecall и формирует транзакцию с учетом EIP-1559. Для контракта, созданного в эпоху Frontier, дополнительно проверяются старые правила gas и отсутствие chainId в подписи. Если же данные относятся к Shanghai или Cancun, скрипт учитывает withdrawals и blob-поля, но не применяет их к старым транзакциям без необходимости.
Безопасность и аудит
- Работа в air-gapped-среде для операций с приватными ключами.
- Шифрование резервных копий и фрагментов seed-фразы.
- Запрет на логирование секретов, адресов с балансом и путей деривации в открытом виде.
- Проверка контрольных сумм, хешей и подписей перед любой отправкой транзакции.
- Независимый аудит кода и тестовые прогоны на локальном форке.
Заключение
Разработка кастомных скриптов восстановления для конкретных версий Ethereum требует глубокого понимания форков, форматов данных, криптографии и безопасности. Такой подход позволяет восстановить доступ, средства и состояние контрактов даже на устаревших, переходных или новейших версиях сети, снижая риск необратимых ошибок.