Как проверить защиту от повтора в нативном смарт-аккаунте ZKsync
Смарт-аккаунт может правильно проверить подпись и всё же не пройти системную валидацию. Протокол проверяет использование nonce именно во время фазы валидации аккаунта.
Воспроизведите проверку до и после валидации
В локальном окружении EraVM отправьте подписанный запрос с ещё не использованным N штатным путём аккаунта. Изучите этап валидации и взаимодействие с NonceHolder. Одной записи в собственной карте контракта может быть недостаточно для системной проверки.
before validation: nonce N unused
validateTransaction: authenticate request and mark N used
post-validation check: nonce N must be used
Отдельно проверьте корректный запрос, повтор и неверную подпись. После успешного принятия повтор должен отклониться. Успех отдельно вызванной функции валидации ещё не проверяет окружающие действия bootloader.
Учитывайте поддерживаемую политику nonce
Используйте предусмотренный механизм системного вызова и фактическую политику аккаунта. Возможности протокола могут отличаться от правил упорядочивания мемпула. Учёт deployment nonce ведите отдельно от защиты обычных транзакций от повтора. docs.zksync.io ZKsync documentation