diff --git a/cadence/contracts/FlowYieldVaultsSchedulerRegistry.cdc b/cadence/contracts/FlowYieldVaultsSchedulerRegistry.cdc index 645d7e0a..42cccbdb 100644 --- a/cadence/contracts/FlowYieldVaultsSchedulerRegistry.cdc +++ b/cadence/contracts/FlowYieldVaultsSchedulerRegistry.cdc @@ -153,6 +153,11 @@ access(all) contract FlowYieldVaultsSchedulerRegistry { return self.pendingQueue.keys } + /// Check if a yield vault ID is in the pending queue - O(1) lookup + access(all) view fun isPending(yieldVaultID: UInt64): Bool { + return self.pendingQueue.containsKey(yieldVaultID) + } + /// Get paginated pending yield vault IDs /// @param page: The page number (0-indexed) /// @param size: The page size (defaults to MAX_BATCH_SIZE if nil) diff --git a/cadence/contracts/FlowYieldVaultsSchedulerV1.cdc b/cadence/contracts/FlowYieldVaultsSchedulerV1.cdc index dd15812c..a8b0ecdf 100644 --- a/cadence/contracts/FlowYieldVaultsSchedulerV1.cdc +++ b/cadence/contracts/FlowYieldVaultsSchedulerV1.cdc @@ -186,9 +186,7 @@ access(all) contract FlowYieldVaultsSchedulerV1 { scanned = scanned + 1 // Skip if already in pending queue - // TODO: This is extremely inefficient - accessing from mapping is preferrable to iterating over - // an array - if FlowYieldVaultsSchedulerRegistry.getPendingYieldVaultIDs().contains(yieldVaultID) { + if FlowYieldVaultsSchedulerRegistry.isPending(yieldVaultID: yieldVaultID) { continue }