From eadd4b8e297ccc22ec78e087c4dd7ca8daac3a5c Mon Sep 17 00:00:00 2001 From: Step7750 Date: Wed, 15 Apr 2026 00:54:47 -0600 Subject: [PATCH] Throttles Background Notary Proofs on Failure If a user is having issues with notary proofs, this PR prevents background rollback proofs for an hour after a failure. Ref CSF-753 --- src/lib/alarms/rollback.ts | 25 ++++++++++++++++++------- src/lib/storage/keys.ts | 1 + 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lib/alarms/rollback.ts b/src/lib/alarms/rollback.ts index 167f63c6..aab38f67 100644 --- a/src/lib/alarms/rollback.ts +++ b/src/lib/alarms/rollback.ts @@ -4,6 +4,8 @@ import {PingRollbackTrade} from '../bridge/handlers/ping_rollback_trade'; import {TradeStatus} from '../types/steam_constants'; import {isBackgroundNotaryRollbackEnabled, proveTradesInBackground} from './notary'; import {reportTradeError} from './error_report'; +import {gStore} from '../storage/store'; +import {StorageKey} from '../storage/keys'; interface RollbackTradeInfo { steamTrade: TradeHistoryStatus; @@ -52,13 +54,22 @@ export async function pingRollbackTrades(pendingTrades: SlimTrade[], tradeHistor } if (await isBackgroundNotaryRollbackEnabled()) { - try { - await proveTradesInBackground(rollbackTrades.map((r) => r.steamTrade)); - console.log(`proved ${rollbackTrades.length} rollback trade(s) via notary`); - return; - } catch (e) { - console.error('notary proving failed, falling back to legacy ping', e); - reportTradeError(rollbackTrades[0].csfloatTrade.id, `background extension notary failed: ${e}`); + const lastFailure = await gStore.getWithStorage( + chrome.storage.local, + StorageKey.LAST_NOTARY_BG_PROOF_FAILURE + ); + if (lastFailure && lastFailure > Date.now() - 60 * 60 * 1000) { + console.log('skipping notary proof, last failure was less than 60 minutes ago'); + } else { + try { + await proveTradesInBackground(rollbackTrades.map((r) => r.steamTrade)); + console.log(`proved ${rollbackTrades.length} rollback trade(s) via notary`); + return; + } catch (e) { + console.error('notary proving failed, falling back to legacy ping', e); + await gStore.setWithStorage(chrome.storage.local, StorageKey.LAST_NOTARY_BG_PROOF_FAILURE, Date.now()); + reportTradeError(rollbackTrades[0].csfloatTrade.id, `background extension notary failed: ${e}`); + } } } diff --git a/src/lib/storage/keys.ts b/src/lib/storage/keys.ts index 5035e44a..32eb11fe 100644 --- a/src/lib/storage/keys.ts +++ b/src/lib/storage/keys.ts @@ -12,6 +12,7 @@ export enum StorageKey { ACCESS_TOKEN = 'access_token', LAST_TRADE_PING_ATTEMPT = 'last_trade_ping_attempt', LAST_TRADE_BLOCKED_PING_ATTEMPT = 'last_trade_blocked_ping_attempt', + LAST_NOTARY_BG_PROOF_FAILURE = 'last_notary_bg_proof_failure', PRICE_CACHE = 'price_cache', // Stores market hash name -> price mapping (~0.86MB) SCHEMA_CACHE = 'schema_cache', // Stores the full CSFloat schema payload }