... or as I've stated before ...
Only transfer the block header, coinbase txn and merkle tree by default then get the recipient to say if it wants the transactions and which ones (a list) from the merkle tree.
Most bitcoinds already have ALL txn but the coinbase, so that is a massive waste and always has been.
Secondly, why are the txn's re-validated, shouldn't they have been validated when they were received the first time?
I'm certainly by far not an expert at this.. but I would assume that you there is a "trust no one" factor here, you can't safely assuming incoming transactions are validated already.
He meant the clients might have already seen the transaction broadcast before, so would have validated it themselves already. That is indeed already cached, but there are a lot of transactions that don't get seen by any given node (about 10% IIRC), and the back-and-forth of requesting missing transactions would add delays - though it might make sense on top of the basic block distribution parallelization I mentioned, but it will need to be benchmarked.
Well the request would simply be a full request (from the merkle tree) of the missing transactions.
A single request not multiple.
Very simply to know what is missing since the merkle tree lists all the txns and thus the reply would be those at the bottom of the tree you don't already have.
As for 10%? Where do you get that figure from?
I wrote a little transaction processing module to add to bitcoind (that I run all the time), that, among other things, specifically tells me the number of missing transactions.
After about a day from a restart, it was EXTREMELY rare for it to not have every txn except of course the coinbase (which no one will already have except the person/pool who found the block - and why of course I said that should always be sent)
I'd very much doubt that 10% number.
However, even if it was as extremely high as 10%, it would be way faster to send back a reply of 10% of the transaction numbers, then get those 10%, than sending the full 100% every time when 90% of them are unnecessary.
As for the memory pool txn's - why would there be a txn in there that wasn't already verified?
What extra verification is done when the txn's are received with a new block that isn't already done as each txn comes in?