Как восстановить sourceHash пользовательского депозита OP Stack
Одна L1-транзакция может породить несколько событий депозита. Если использовать только её хеш, разные депозиты L2 сольются, а вычисленный sourceHash окажется неверным.
Используйте индекс лога во всём блоке
Найдите событие TransactionDeposited от настроенного OptimismPortal и сохраните хеш канонического блока L1 и logIndex. Закодируйте индекс как 32-байтовое целое big-endian. Нулевой домен в формуле относится к пользовательскому депозиту.
depositId = keccak256(l1BlockHash || uint256(logIndex))
sourceHash = keccak256(bytes32(0) || depositId)
Если у двух событий одной L1-транзакции индексы 9 и 10, вычислите два depositId и два sourceHash. Позиция в отфильтрованной выборке не заменяет исходный индекс лога.
Различайте sourceHash и хеш транзакции L2
Вычисленный sourceHash — отдельное поле типизированной транзакции депозита. Хеш транзакции L2 охватывает всю сериализованную транзакцию. При реорганизации L1 хеш исходного блока может измениться, поэтому привязывайте наблюдение к каноническому включению. specs.optimism.io OP Stack specification