Как восстановить первый аргумент обработчика 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