With the many scalability discussions and proposals out there, I was wondering if anyone ever considered the following.
Current situation.Blocks take an average of 10 minutes (600 seconds) to mine. Each block has a size of 1 MB (1.000.000 bytes (8.000.000 bits)), and each transaction is on average 250 bytes. So, each block can contain approximately 4.000 transactions. With an average of 600 seconds per generated block, 4000/600 = 6,6 = 7 transactions per second (tps).
Valid transactions are stored in the mempool. Bitcoin transactions propagate in the network within, say, 10 seconds to 90% of the network (
http://bitcoinstats.com/network/propagation/).
IdeaNow, what if all nodes create a hash (SHA256 (each hash is 256 bits)) of each valid transaction received. Each mempool stores 1. the transaction and 2. its hash. A miner creates a block, but instead of collecting actual transactions in the block body, the block body contains hashes of the transactions. On average, each ten minutes a block is propagated in the network, and all nodes receiving the block match the hashes in the block body with the hashes (and their corresponding transactions) in the mempool. The mempool is cleared of those transactions (assuming no fork occurs), and a block is added to the blockchain containing a body with both hashes and transactions.
By doing so, each block can contain (excluding the coinbase transaction) 1 MB = 8.000.000 bits / 256 bits = 31.250 transactions. The number of transactions in a block is 7 times larger (edit: 14x with SHA128, almost 100 tps without tree optimization), without having to increase the block size.
FeedbackMy guess is that, similar to Gavin Andresen's IBLT proposal (
https://gist.github.com/gavinandresen/e20c3b5a1d4b97f79ac2) a possible concern is that mempools are not synced. In the above example, I'm assuming that the transactions of which the hash is included in blocks, are stored in mempools considering the 10 second transaction propagation time versus the 600 second block mining time.
Any thoughts?