I've gotten a bit bored of all these block size increase proposals so here's a proposal to extremely decrease block sizes.
So let's say we take our good ol' blocks and we just just chop them down so there are no scripts, nor does a transaction even hold any numerical data. All a transaction is, is an arbitrary packet of data, which would probably be most useful as a hash, more on that later.
tiny-Block;
Field | Description | Size
Magic no | identifies network | 4 bytes
Blockheader | consists of 6 items | 77 bytes
transaction | the transaction | 4 bytes
Because we know the transaction size ahead of time, and the block size is also uniform, those fields have been removed entirely.
tiny-Block Header;
Field | Purpose | Updated when... | Size (Bytes)
Version Block version number | You upgrade the software and it specifies a new version | 1
hashPrevBlock | 256-bit hash of the previous block header | A new block comes in | 32
hashMerkleRoot | 256-bit hash based on all of the transactions in the block | A transaction is accepted | 32
Time | Current timestamp as seconds since started | Every few seconds | 4
Bits | Current target in compact format | The difficulty is adjusted | 4
Nonce | 32-bit number (starts at 0) | A hash is tried (increments) | 4
I reduced the version field to 1 byte, but left the rest of the block header the same.
That leaves us with some nice 85 byte blocks. So we could have this blockchain running on almost every device that exists, and over a 200 year period, there would be about 10518980 transactions, or about a 894MB blockchain.
I suspect technology should be able to keep up with this storage capacity requirement.
At first consideration this whole thing seems totally silly, after all, what could we possibly do with a system that can only accept 1 transaction per 10 minutes, and does zero verification of the transactions it's accepting?
As it turns out, I think there's quite a bit that could be accomplished with this kind of system.
I would suggest that this root block chain would be the hashpower provider of larger data structures, so for example, if we wanted to attach Bitcoin to this, all we would need to do is mine a block on this tiny-blockchain which contains a hash of a Bitcoin block.
The new Bitcoin block header might look like this;
Field | Purpose | Updated when... | Size (Bytes)
Version | Block version number | You upgrade the software and it specifies a new version | 4
tiny-hashPrevBlock | 32-bit FNV-1a hash of the previous block header | A new block comes in | 4
tiny-hashMerkleRoot | 32-bit FNV-1a hash based on all of the transactions in the block | A transaction is accepted | 4
The Time, Bits, and Nonce fields can all be removed because this is all provided by the tiny-blockchain. The hashes can also be dramatically reduced because the hash does not have to be cryptographically secure, all it needs to do is be fairly resistance to collisions. Note that the tiny-blockchain is storing a hash of potentially very large Bitcoin blocks.
A miner would run the tiny blockchain software, but not necessarily the Bitcoin software. A miner may be configured, by extension, to accept a hash along with a promise of payment of bitcoins. (What that "promise" looks like, could vary widely.)
Now a Bitcoin "miner" would necessarily run both it's own software along with the tiny-blockchain software and wait for a tiny-blockchain block to roll in (or mine one itself).
Then it will wait for a block to come in that matches the hash in the tiny-blockchain block (or create one itself, if it self-mined a tiny-block).
Then it will verify that this block legitimately follows the rules, if it does not then the block is ignored (Or broadcasts it's own blocks).
Since the Bitcoin software fully verifies the blocks, there is no danger of a bad tiny-blockchain block forking the Bitcoin chain, and we have the same level of confidence in the integrity of the Blockchain as we do now.
However, it would necessarily mean that "bad" blocks are permanently stored on the tiny-blockchain.
I don't think this is a big deal. The sheer cost of putting a bad block in the tiny-blockchain should heavily mitigate this sort of behavior.
The biggest problem with this, is that it requires a reasonable degree of certainty that the tiny-blockchain node will be paid, even though the tiny-blockchain node might not necessarily be running cryptocurrency software it's being paid in.
The most straightforward way to resolve this problem is to rely on something I'll call a "Payment Authority" which is just an entity that verifies that payment will occur before it passes the hash onto the tiny-blockchain nodes. On the flipside, the nodes would whitelist the Payment Authorities they trust.
This does not mean that the tiny-blockchain nodes must trust these third parties, as a last resort they can always run the full cryptocurrency software itself and verify the blocks that way.
I know that's not an ideal solution, but off-the-cuff it should at least show that it's not an intractable problem.
There are at least three major advantages to this kind of system.
Since the tiny-blockchain is completely abstracted from the underlying protocols that are providing the hashes it's storing, it is trivial to swap out protocols, or even run more than one at the same time, without forking the tiny-blockchain.
It is also extremely small, so there is a much greater ability to decentralize the proof of the accuracy of any kind of data-set amongst many nodes.
A cryptocurrency could also be highly centralized while proof of it's state is highly decentralized, whereas at the moment those attributes are tightly coupled.
Maybe food for thought, or maybe totally crazy. I'm not so sure myself.
https://en.bitcoin.it/wiki/Block