This is a link to the most updated version of the problem and my proposed solution, granted it still needs work, but this problem needs to be resolved quickly. So I hope it will receive the attention it deserves, even if the solution comes from somebody else. https://bitcointalk.org/index.php?topic=2126152.new#new The latest version of the day: *Solving the Scalability issue for Bitcoin * *What am I trying to solve?* Currently Bitcoin’s blockchain is around 140GB. In 2011 it took 1GB, and it was predicted back then that in 2020 that size would be 4GB. As you can see it is not yet 2020, and we are way over that predicted size. At our current time, prune nodes which make the block smaller, but they can not be validated without the full node. And this full node is getting exponentially bigger, we need to stop that. Because if we don’t no private citizen will have the capability of storing the full node in his computer, and all full nodes will be at private multi-million dollar companies. That would literally be the end of decentralization (or non-centralization). What I am proposing also makes sure the blockchain has a maximum finite size, because today the blockchain can grow to any size without limit while it approaches an infinite size! Today our blockchain is growing at speed which is much faster than Moore’s law! This proposal will help set storage growth at a reasonable number. *A short list of what I am about to explain: Steps that need to be taken:* --------------------------------------------------------------------------------------------------------------------- (The details are not described in this order) 1) Create a pair of keys, called the Genesis Pair, or Genesis Account, a private and public key which will be publicly known to all and yet it’s use will be restricted and monitored by all. The key will be the source of all funds (Point A). 2) Preserve the Genesis Block, its hash code is needed. And personally I think its of historical value. 3) Combine all Blocks up to the most recent (not including the Genesis Block), and cut out all intermediary transactions, by removing All transactions, and replacing them with new transactions sent from A to every public key which has funds in the most recent block, in the amount they have. And sign these transactions with A’s private-key. And create a new block with this information. 4) This Combined/Pruned Block should point to the Genesis Block hash, and the next block created should point to the Pruned Blocks hash. The random number used for this pruned block will be predefined, this random number normally used to meet the hash difficulty requirement in this case is not needed, since no difficulty setting is necessary for this block, and by predefining it, this block can be easily identified. 5) Download the pruned block from another node or create it yourself, the hash code will be identical for everyone, since the block will be created exactly the same everywhere. 6) Preserve a certain amount of the most recent blocks, just in case a longer blockchain is discovered, and then the Pruned Block should be recalculated. --------------------------------------------------------------------------------------------------------------------- *Now for a more detailed description: * I have this idea to solve the scalability problem I wish to make public. If I am wrong I hope to be corrected, and if I am right we will all gain by it. Currently each block is being hashed, and in its contents are the hash of the block preceding it, this goes back to the genesis block. What if we decide, for example, we decide to combine and prune the blockchain in its entirety every 999 blocks to one block (Genesis block not included in count). How would this work?: Once block 1000 has been created, the network would be waiting for a special "pruned block", and until this block was created and verified, block 1001 would not be accepted by any nodes. This pruned block would prune everything from block 2 to block 1000, leaving only the genesis block. Blocks 2 through 1000, would be calculated, to create a summed up transaction of all transactions which occurred in these 999 blocks. And its hash pointer would be the Genesis block. This block would now be verified by the full nodes (or created by them), which if accepted would then be willing to accept a new block (block 1001, not including the pruned block in the count). The new block 1001, would use as its hash pointer the pruned block as its reference. And the count would begin again to the next 1000. The next pruned block would be created, its hash pointer will be referenced to the Genesis Block. And so on.. In this way the ledger will always be a maximum of 1000 blocks. A bit more detail: All the relevant outputs needed to verify early transactions will all be preserved in the pruning block. The only information you lose are of the intermediate transactions, not the final ones the community has already accepted. Although the origin of the funds could not be known, there destination is preserved, as well a validation that the transactions are legitimate. For example: A = 2.3 BTC, B=0 BTC, C=1.4 BTC. (Block 1) If A sends 2.3 BTC to B. (Block 2) And then B sends 1.5 BTC to C. (Block 3) The pruning block will report: A->B = 0.8 BTC and A->C=2.9 BTC. The rest of the information you lose, is irrelevant. No one needs to know, what exactly happened, who sent who what, or when. All that is needed is the funds currently owned by each key. Note: The Transaction Chain would also need to be rewritten, to delete all intermediate transactions, it will show as though transactions occurred from the Genesis block directly to the pruned block, as though nothing ever existed in between. This will be described below in more detail. You can keep the old blocks on your drive for 10 more blocks or so, just in case a longer block chain is found, but other than that the information it holds is useless, since it has all been agreed upon. And the pruning block holds all up to date account balances, so cheating is impossible. Granted this pruning block can get extremely large in the future, it will not be the regular size of the other blocks. For example if every account has only 1 satoshi in it, which is the minimum, then the amount of accounts will be at its maximum. Considering a transaction is about 256bytes. That would mean the pruning block would be approximately 500PB, which is 500,000 Terra-bytes. That is a theoretical scenario, which is not likely to occur. (256bytes*21M BTC*100M (satoshis in 1 BTC)) A scenario which could be solved by creating a minimum transaction fee of for example: 100 satoshis, which would insure that even in the most unlikely scenario, at worst the pruning block would be 5PB in size. Which is still extremely large for today. But without implementing this idea the blockchain literally does not have a finite maximum size, and over time approaches infinity! *Also, this pruning block does not even need to be downloaded, it could be created by already existing information, each full node by itself, by: * 1) combining and pruning all previous blocks 2) using the genesis block as its hash pointer 3) using a predefined random number "2", which will be used by all. A random number which is normally added to a block to ensure the block's hash-rate difficulty, is not needed in this case, since all information can be verified by each node by itself through pruning. This number can also be used to identify this block as the Pruned/Combined Block since it is static. 4) Any other information which is needed for the SHA256 hash, for example a time-stamp could be copied off the last block in the block chain. These steps will ensure each full node, will get the exact hash code as the others have gotten for this pruning block. And as I previously stated the next block will use this hash code as its hash reference. By creating a system like this, the pruning block does not have to be created last minute, but gradually over time, every time a new block comes in, and only when the last block arrives (block 1000), will it be finalized, and hashed. And since this block will always be second, it should go by the name "Exodus Block". Above, I showed a way to minimize the blocks on the block chain, to lower the amount of space it takes on the hard drive, without losing any relevant information. I added a note, saying that the transaction chain needs to be rewritten, but I did not give much detail to it. Here is how that would work: *The Genesis Account (Key Pair):* --------------------------------------------------- The problem with changing the transaction and block chain, is that it cannot be done without knowing the private key of the sender of the of the funds for each account. To illustrate the problem: If we have a series of block chains with a string of transactions that are A→B→C→D, and to simplify the problem, all money was sent during each transaction, so that no money is left in A or B or C. And I was to prune these transactions, by replacing them with A→D. Only this transaction never occurred, nor can anyone create it without A’s private key. There is however a way to circumvent that problem. That is to create a special account called the “Genesis Account”, this account’s Private Key and Public Key will be available to everyone. (Of course, accounts do not really exist in Bitcoin, when I say account what I really mean is a Private/Public Key pair) This account will be the source of all funds But this account will not be able to send or receive any funds in a normal block, it will be blocked--blacklisted. So no one can intentionally use it. The only time this account will be used is in the pruning block, a.k.a Exodus Block. When creating the new pruned block chain and transaction chain, all the funds that are now in accounts must be legitimate, and it would be difficult to legitimize them unless they were sent from a legitimate private key, which can be verified. That is where the Genesis account comes in. All funds in the Exodus Block will show as though they originated and were sent with the Genesis private-key to generate each transaction. The funds which are sent, must match exactly the funds existing in the most updated ledger in block 1000. In this way the Exodus Block can be verified, and the Genesis Account cannot give free money to anyway, because if someone tried to, it would fail verification. Now the next problem is that the number of Bitcoins keeps expanding and so the funds in the Genesis Account need to expand as well. That can be done by showing as though this account is the account which is mining the coins, and it will be the only account in the Exodus Block which “mines” the coins, and receives the mining bonus. In the Exodus Block all coins mined by the real miners will show as though they were mined by Genesis and sent to the miners through a regular transaction. I hope this proposal will be implemented as soon as possible so that we can avoid a problem which is growing by the minute. It was brought up about 6 years ago when the blockchain was only 1GB in size, nobody imagined back then that it would grow so quickly, and the problem was ignored. Today all solutions implemented have been implemented by software, and not on the blockchain itself, these solutions are not helpful in the long run. The full node needs to be publicly available to everyone, and at this rate, nobody will have the hard-drive capacity to store. This will make us more dependent on private corporation’s to store the blockchain, which will lead us quickly to a centralized currency platform. By then it will be too late, and the corporations will have complete control of what happens next. Please take this problem seriously and work with me, to prevent it while we still have some time. The exact details can be worked out at a later time, but for now we need at least an acknowledgment that this problem is dire, and needs to be solved in a year’s time. I have presented a solution, if someone has a better one, then let him/her step forward, but in any case a solution needs to be implemented as soon as possible. *I have given a basic proposal, I am sure there are those among us with more technical understanding to the nuances of how this idea should be implemented. I am counting on their help to see this through.* Adam Shem-Tov