Как восстановить первый аргумент обработчика L1 в Starknet
Сообщение из Ethereum в Starknet содержит селектор обработчика и массив пользовательских felt. В calldata транзакции L1_HANDLER перед этим массивом добавляется L1-отправитель.
Сопоставьте два представления
Разберите L1-событие core-контракта и сохраните отправивший L1-контракт, адрес назначения Starknet, селектор, nonce и payload. В примере два пользовательских элемента дают три элемента calldata обработчика.
L1 payload = [recipient, amount]
L1-handler calldata = [L1 sender, recipient, amount]
Если считать первый аргумент обработчика получателем средств, декодер запишет вместо него L1-источник. Сверьте селектор с ABI L2-обработчика и проверьте ожидаемый адрес L1 до назначения прикладных полей.
Не добавляйте nonce в аргументы приложения
Nonce сообщения core-контракта различает повторы в протокольном хешировании. Он не является дополнительным параметром приложения, автоматически приписанным к payload. Сопоставляйте одинаковые переводы по полной протокольной идентичности. docs.starknet.io Starknet documentation