# Comprehensive Review of Storage Optimization Techniques in Blockchain Systems
## 4 Methods
### Erasure Coding
GCBlock introduces the concept of grouped storage by clustering nodes based on physical proximity; nodes within each group only need to store encoded fragments of blockchain data rather than the complete ledger. This grouped storage is implemented at the overlay network, which does not alter the underlying blockchain architecture and allows nodes the flexibility to opt in or out of the grouped network, significantly alleviating storage  
Figure 11: Reed–Solomon coding principle. pressure on individual nodes. TFR coding serves as the core technology of the GCBlock scheme. Built upon traditional Fractional Repetition (FR) coding, TFR coding employs a multiple-layer structure to enhance adaptability and efficiency. Initially, TFR coding utilizes Maximum Distance Separable (MDS) codes to partition blockchain data into multiple segments, which are then encoded into additional redundant fragments and distributed across different nodes, substantially reducing the storage requirements for each node. The multiple-layer structure of TFR coding enables dynamic adjustment capabilities. As the number of network nodes increases, the system automatically generates new layers, with each layer replicating the redundant segments from the initial layer. Through this multiple-layer storage mechanism, GCBlock ensures that even as the node count fluctuates, storage redundancy remains low. This dynamic hierarchical structure not only adapts flexibly to node additions and departures but also improves the overall storage efficiency and resource utilization of the system. [PERSON] et al. [85] propose a storage optimization framework that combines Reed-Solomon (RS) coding with a Byzantine Fault Tolerance (BFT) consensus protocol. This approach encodes blockchain data blocks into multiple data and parity blocks, which are then distributed across multiple nodes, reducing storage requirements from O(N) to O(1). In BFT-store, the system assumes a total of N nodes, with f being malicious. The data from N-2f consecutive blocks is encoded to produce N-2f data fragments and 2f redundancy fragments. The generated data and redundancy fragments are of equal size and are stored across different nodes. Traditional blockchain systems employ a full-replication model, where each node stores a complete copy of the entire blockchain. By using erasure coding, BFT-store requires each data block to be stored only once across all nodes, while redundancy fragments occupy minimal storage space. This reduces the storage complexity of each block from O(N) to O(1), significantly decreasing the overall storage demand. [PERSON] et al. [86] propose a method that optimizes blockchain storage using Reed-Solomon (RS) codes. This approach encodes blockchain data blocks into multiple parity blocks, which are distributed across multiple nodes to reduce storage demands on each individual node. The authors introduce a Latency-aware Encoded data chunks Allocation algorithm (LEA). By solving a relaxed problem and its dual, the LEA algorithm determines the optimal storage locations and the number of encoded data blocks. The algorithm minimizes the number of nodes storing copies of encoded data blocks while ensuring these copies meet data reliability requirements. Experimental results demonstrate that this method effectively reduces storage overhead in blockchain systems, improves storage scalability, and achieves a good balance between storage cost and data retrieval performance. [PERSON] et al. [87] propose a distributed encoding scheme based on Exact-Regeneration Minimum Storage Regenerating (ER-MSR) codes, which significantly reduces storage redundancy in blockchain systems. Specifically, ER-MSR codes employ erasure coding to group and encode multiple blockchain blocks, requiring only the storage of encoded data equivalent to a single block size, thus reducing the storage demands on each node. In this approach of paper, full nodes no longer store the complete blockchain ledger but instead store encoded codewords and the hash values of block headers.