How did my testnet node finish syncing within hours, though? It runs over Tor too.
Sorry for answering your question towards Dave, but maybe just the much smaller size
~
BTC blockchain is around 380GB, yes, it needs some time, even on a good connection. 4 hours is nothing, most of us need at least a day to sync the blockchain, if not days or weeks depending on the hardware and internet connection. Just get a 500 or 1TB SSD and let it run. It's normal that your device gets a bit hot, it needs to perform lots of computations (verification), it's not a plain download. Every block is verified.
This is where 'verify' in our mantra
'don't trust, verify' comes from.
For more info about the IBD (initial block download), refer to this good page:
Downloader Behavior
When receiving an inv (Inventory Message)
For each block
If already have as orphan, send getblocks(locator(chainHead), orphanRoot(block))
If not already have
send getdata(block)
If already have and this is last block in message (NOTE: this triggers specific behavior in peer getdata)
send getdata(block)
When receiving a block
If already have, ignore
Else if have parent not in main chain
store as orphan
getblocks(locator(chainHead), orphanRoot(block))
Else
Accept block
Accept orphan blocks that depend on this one
When starting download from a peer
getblocks(locator(chainHead), 0)