It's probably best to keep this discussion on just one mailing list. It's confusing to have duplicate threads in different places. People will end up making the same points.

To repeat what I posted elsewhere, for now I'd just start with the simplest possible approach:

- Ignore version skew for now (disconnect older clients)

- Don't send received transactions/blocks to the bitcoind. Let it hear about them from its own p2p connections. That way you will always receive all valid transactions/blocks which you can then relay/cache/drop inbound duplicates.

- Parse/handle inv/getblocks/getheaders requests so clients that connect and catch up with the chain don't place any load on the bitcoind. If a client requests data the proxy doesn't have in RAM, it can go fetch it from the underlying bitcoind.

If you can make v1 work and demonstrate actual scalability improvements, then you can always go back and make it smarter in v2.