Please add parallelism (at least, multithreading; multithreading + some kind of clustering are better) for downloading blockchain by client/wallet (required by getblocktemplate
).
The speed of downloading the blockchain of Bitcoin is very slow, so much time is required, it’s absolutely awful. And the further, the worse.
As I can understand, it happens because of nature of blockchain processing: first, client must check block N contents (transactions), then it can proceed to check of block N+1.
But we can behave like modern CPUs branch predictors. Why not? Just pretend block N is correct for thread M and let thread M+1 check block N+1. Then let thread M+1 pass necessary information to thread M+2 for checking block N+2. And so on. So all threads can check it’s blocks, doing CPUs utilization. Threads can be reused as they become free. Just break processing at some points and do rollback, if some previous blocks (N, N+1, …) gets corrupted.
As far I can see by CPUs usage, Bitcoin Core/Wallet does not behave like that. My Internet connection is not such slow and unstable; I once experimented with connection limit options, it didn’t work for me.
The behavior I suggest has some performance risk, so it can be explicitly controlled by the user with launch option[s] (command line, …).
(I aware about the security considerations, but this is not a issue if the user just wants to try mining or something.)