spesmilo/electrum-server — pull request #27 by jkozera (2013-04-14 22:22:10+00:00)
Title: Order transactions from the same block correctly

Currently transactions are stored in reversed order if they belong to the same block, which can result in holes in history when pruning.

For example, consider a transaction chain A->B->C->D [*], where A,B,C belong to the same block, and D to the next block. It's stored in the history as C,B,A,D. So when C is pruned first, we have B,A,D in history, which results in incorrect balance calculations, because both A and D are considered to come from pruned outputs.

Storing transactions in A,B,C,D order, and then pruning A first, correctly results in only B being considered as coming from pruned output.

[*] by transaction chain I mean transactions from address x to address y, where change comes back to x.