Because of the required scale of processing pending transactions from numerous blockchains we needed to have a large amount of processors running at any given time, but this yielded some unique challenges, because the actual nodes did not care about which processors were already aware of the transaction. This lead to conditions where every processor would be informed about the same transaction, sometimes more than once due to the nature of the nodes. To resolve this (and prevent processing duplicate transactions, as this was a time-consuming task) we implemented a locking mechanism utilizing REDIS that allowed only one processor to work on a transaction at a time. We had a separate service that was responsible for populating a queue of events, and the processors would pickup items from that queue in order of priority, ignoring all locked items. If an item was not resolved within a timeframe of being locked, it became unlocked. This was to prevent any issues where a service potentially hangs or dies. Since the item would be older, it would now have a higher priority and be picked up by the next available processor.