One of the main arguments used against Bitcoin Cash — perhaps we could even say “against Satoshi Nakamoto” — is that large blocks are an inefficient way to scale the number of transactions per second that the network can support.
For those of us who do support Satoshi’s idea of increasing the maximum block size as demand for space grows, the issue is simple: the larger the block, the more space there is for all the transactions that occur every ten minutes. If we were to arbitrarily restrict that metric, we would be placing an artificial limit on the processing capacity of the network, which is exactly what happens in the most popular version of Bitcoin.
While it is true that 1 GB blocks seem like a somewhat distant future — the Scalenet is working to implement blocks of “only” 256 MB — the reality is that even that block size would not present a huge challenge given the current state of Internet speeds and storage prices. It is common today to have home connections that reach speeds of several hundred megabits per second.
However, when 1 GB blocks are needed, we would be talking about 53 TB of storage per year dedicated to processing and storing the more than 6500 transactions per second that will be occurring. So, how are we going to store all those transactions and what will be the incentives to maintain them?
The mining nodes, which are the ones that validate and secure the Bitcoin Cash network, are not required to store all the transactions and blocks, since they only need the UTXO set and the block headers. These nodes will probably choose to keep a number n of blocks, discarding the rest.
On the other hand, new nodes that want to join the network must download and validate all transactions from the genesis block. This, which today takes a few hours, could take weeks to complete in the future, making it very difficult to add new nodes to the existing network.
That is why from now on, before Bitcoin Cash takes off and adoption begins to massify, we must consider the need to find a solution to the storage to be able to query and the blockchain. And one interesting option, which I would like to see considered, would be to do it using a distributed technology designed for this purpose: IPFS.
What is IPFS?
IPFS (‘interplanetary file system’) is, a P2P protocol that allows storing data in a distributed network between several computers. The information is not obtained by searching a location, but by requesting a file or folder from the IPFS nodes using the hash of the file or folder. The IPFS nodes receive the request and can return the file, the hash of which can be compared to the one requested to verify the authenticity of the information.
If you want to store the Bitcoin Cash blockchain using IPFS, all you need to do is for nodes that currently own a copy of it to make it available using this protocol, which works in a similar way to BitTorrent. Eventually, when the blockchain grows large enough, it would be possible for only one part to be maintained by each node, but allowing several redundant copies to be made accessible to the entire network.
Logically, implementing IPFS as one of the primary mechanisms for accessing transaction history would have several advantages, for example:
Anyone can allocate storage space on their computer in order to contribute to the network (from a hobbyist to a specialized data center).
Data redundancy can be guaranteed by scheduling IPFS to prioritize the download of blocks that recur fewer times in the known network, which on a large scale generates huge availability of storage capacity and data redundancy and makes it extremely difficult to delete all existing copies.
Smaller nodes can participate by allocating whatever storage space they have available without requiring a full copy.
Access to blocks would be much faster, making it possible to download and validate transactions from several separate nodes instead of a single centralized server (traditionally known as an archival node).
The scalability of the network in terms of storage makes it possible for many more copies of the blockchain to exist. And the benefits gained in lower data storage costs — due to Moore’s law — would be coupled with those gained by the overall efficiency of a distributed network.
And all this without compromising the security of the blockchain. Because of the properties of IPFS, the transaction history would remain intact.
IPFS is not a secondary blockchain, but a decentralized file system that is agnostic of the information stored (files, web pages and dapps possible).
What incentives would exist to store blockchain history?
One option would be to charge a fee in exchange for providing access to a particular block or transaction. For example, a wallet could connect to IPFS automatically when the user wants to browse a particular block or transaction. In this case, the node that holds the desired information can charge a fraction of a cent in exchange for providing access. The user can validate that the information is correct because the IPFS protocol compares the hash requested with the hash of the file received, ensuring that nodes cannot lie about the transaction history.
Therefore, using distributed technologies to enable blockchain scalability is a necessary step if we want to ensure that Bitcoin Cash remains the currency envisioned by Satoshi Nakamoto in his whitepaper.
It's great to see more people thinking about these scaling issues. Something to consider: Filecoin is interested in hosting blockchain data for all blockchains. Their recent 'Slingshot' competition took snapshots of all the leading Bitcoin blockchain histories, including BCH.
https://github.com/blockchain-etl/public-datasets
I'm working with Textile to upload snapshot of the infrastructure I run at FullStack.cash to Filecoin. That will make it a lot cheaper for me to share these pre-synced databases, to help more people run their own independent infrastructure:
https://fullstack.cash/cashstrap