Transaction Pool
Creates a transaction pool, adds transactions to it as it sees them.
Removes transactions from the pool if they are added in a block.
Adds them back into the pool when rewinding the block.
Pretty simple. Uses a map that tracks which outputs are being spent, which is how you resolve conclicts. Adds all outputs to the map when adding a transction, and removes all outputs from the map when removing the transaction. Not completely intuitive but super simple.