Skip to content

feat: skip slot validation for durable nonce txs (Fireblocks)#114

Open
drift-internal-ai-bot[bot] wants to merge 1 commit intomasterfrom
feat/fireblocks-durable-nonce-support
Open

feat: skip slot validation for durable nonce txs (Fireblocks)#114
drift-internal-ai-bot[bot] wants to merge 1 commit intomasterfrom
feat/fireblocks-durable-nonce-support

Conversation

@drift-internal-ai-bot
Copy link
Copy Markdown

Summary

  • Adds is_durable_nonce_tx() helper that detects durable nonce transactions by checking for an AdvanceNonceAccount (SystemProgram) instruction as the first instruction - a Solana protocol-level convention
  • Skips the 500-slot expiry check in validate_order for durable nonce transactions in the /depositTrade path
  • Adds tests for durable nonce detection and slot validation skip behavior

Context

Fireblocks (and other custodial wallets) replace the recentBlockhash with a durable nonce before signing, making transactions valid beyond the normal ~151 slot window. Swift current 500-slot expiry check (taker_slot < current_slot - 500) would reject these transactions as slot too old even though they are still valid.

The detection is tamper-proof: the AdvanceNonceAccount instruction is part of the signed transaction and cannot be faked.

Note: This only covers the /depositTrade path where a VersionedTransaction is available. The /orders path (signed messages only, no transaction) still uses the 500-slot check. If custodial wallet users also need extended validity for signed-message-only orders, that would need a separate approach.

Relates to BE-256

Test plan

  • Verify test_is_durable_nonce_tx passes
  • Verify test_extract_signed_message_info_slot_validation passes
  • Verify all existing tests still pass
  • Test with actual Fireblocks deposit+trade flow on devnet

… support)

Custodial wallets like Fireblocks replace the recentBlockhash with a
durable nonce, making transactions valid beyond the normal ~151 slot
window. This change detects durable nonce transactions by checking for
an AdvanceNonceAccount instruction as the first instruction (Solana
protocol convention) and skips the 500-slot expiry check for them.

Changes:
- Add is_durable_nonce_tx() to detect durable nonce transactions
- Add skip_slot_validation parameter to validate_order and
  extract_signed_message_info
- In deposit_trade, auto-detect durable nonce from deposit tx
- Add tests for durable nonce detection and slot validation skip

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants