
Верификация контрактов — важнейшая услуга, предоставляемая обозревателями блоков блокчейнам. Благодаря процессу верификации базовый код становится доступным для чтения человеком, что позволяет любому пользователю проверять код контракта и взаимодействовать с методами чтения и записи внутри контракта.
Обычно смарт-контракты развёртываются в блокчейне внешним пользователем в любое время и во время развёртывания им присваивается адрес 0x. Часто инструменты разработчика, такие как Hardhat или Remix, позволяют мгновенно верифицировать контракт через API обозревателя, или же адрес, с которого был развёрнут контракт, может выполнить все этапы верификации через пользовательский интерфейс обозревателя.
Однако контракты прекрасно работают в блокчейне без верификации, и многие развёртыватели никогда не верифицируют свои контракты или верифицируют их только в одних обозревателях. Это приводит к отсутствию прозрачности, потенциальным проблемам безопасности (если пользователи не могут легко прочитать код, они не смогут выявить проблемы безопасности) и недоступности.
В то время как внешние смарт-контракты развёртываются по адресам в любое время для создания новой функциональности в блокчейне, часть контрактов развёртывается с заданными адресами во время самих обновлений Ethereum. Контракты предварительного развертывания (или системные контракты) добавляются во время хардфорков для включения различных предложений по улучшению Ethereum (EIP) и реализации основных функций в виртуальной машине Ethereum.
В ходе недавнего этапа Pectra HF было добавлено несколько важных предварительных развертываний. Хотя разработчики обычно могли проверять контракты в обозревателе, эти системные контракты были написаны на языке GEAS, который в настоящее время не поддерживается для целей верификации.
GEAS (Good Ethereum Assembler) — это язык ассемблера, поддерживающий все инструкции EVM и разработанный и оптимизированный для низкоуровневого взаимодействия с EVM. Blockscout поддерживает верификацию для языков разработки контрактов Solidity, Vyper и Yul, но GEAS не является общепринятым языком для разработчиков вечных контрактов.
Поскольку контракты было сложно проверить, они были нечитаемыми для человека, и пользователи не могли проверять функции чтения и записи. Среди рассматриваемых контрактов один был развернут во время модернизации Dencun (BeaconRoots), а три — в рамках Pectra.

BeaconRoots: Предоставляет уровню исполнения доступ к состоянию и данным уровня консенсуса (Beacon Chain).
HistoryStorage: Хранит исторические хэши блоков (8192 блока) для быстрого запроса последних блоков без сохранения состояния.
WithdrawalRequest: Валидаторы Beacon Chain могут инициировать вывод средств и выходы через уровень исполнения.
ConsolidationRequest: Валидаторы, работающие с большим количеством узлов, могут консолидироваться в меньшее количество узлов с большим балансом (до 2048 ETH на валидатор).
Мы посчитали важным показать код для этих предварительных развертываний и раскрыть базовые методы, но поддержка GEAS в пользовательском интерфейсе Blockscout или верификаторе не является обязательной, учитывая его ограниченное использование.
Чтобы обеспечить прозрачность контрактов и выполнить верификацию, мы использовали нашу базу данных байт-кодов Ethereum. Эта база данных компилирует и хранит развёрнутый байт-код из различных контекстов и цепочек, а затем использует сохранённый байт-код для проверки вновь развёрнутых контрактов в цепочках (контракты можно проверить, если байт-код уже существует в базе данных).
В данном случае мы жёстко запрограммировали соответствующие байт-коды для контрактов, подготовленных до развёртывания, включая их источники и соответствующие метаданные, непосредственно в базу данных. Мы также обновили пользовательский интерфейс Blockscout, чтобы показать, что эти контракты написаны в GEAS, и обеспечить фильтрацию по конкретным контрактам GEAS.
После развёртывания достаточно было один раз открыть страницу контракта через пользовательский интерфейс Blockscout для завершения проверки. При первом посещении пользовательский интерфейс отправляет в базу данных запрос на наличие байт-кода, и если он существует, заполняет соответствующую информацию о контракте и подтверждает его проверку.
После проверки информация о контракте и методы становятся прозрачными и доступными. Теперь можно считывать данные контракта и даже инициировать запрос на вывод или консолидацию непосредственно из Blockscout при желании.

Pectra HF представил множество новых функций и расширенный функционал для Ethereum. Blockscout помогает расширить контекст и сделать эти функции более удобными в использовании, предоставляя верификацию контрактов GEAS перед развертыванием.
Blockscout стремится предоставлять открытый доступ к контрактам в Ethereum и связанной с ним экосистеме L2 и L3. Благодаря нашей базе данных байт-кодов Ethereum и участию в Verifier Alliance, который теперь включает более 8 миллионов контрактов, мы продолжим обеспечивать доступность и прозрачность контрактов для всех пользователей блокчейна.
Связанные запросы на выдачу контрактов
