1,000,000 free RPC requestsJust a wallet, via x402.
Start buildingUnderstanding Blockchain Reorgs: Why Block Numbers Don't Matter as Much as You Think
Dive into the intricacies of blockchain reorgs and discover why hashes, not block numbers, are the true backbone of blockchain.

August 23, 2023 — 5 min read

You've probably heard the term "blockchain" tossed around a lot lately, especially if you're venturing into the world of cryptocurrencies. But what exactly does it mean when people talk about a blockchain "reorganization" or "reorg?" And why should you shift your focus away from block numbers and concentrate more on the current hash and the previous hash? Let's break it down in the most understandable terms.
Imagine a blockchain as a chain of digital "blocks." Each block contains a list of transactions, like a page in a ledger. Every new block is meticulously linked to the previous one, forming a secure chain. This chain's integrity guarantees the security of the information contained within.
In the intricate world of blockchain, reorganizations (reorgs) are a standard mechanism for maintaining integrity. Although the term might seem daunting, the concept behind a reorg is more straightforward than you might think.
A blockchain reorg occurs when there's a conflict in the chain, forcing the system to decide which path to follow. It's akin to reaching a fork in the road and having to choose the right direction.
When discussing a blockchain, people often refer to block numbers as if they're paramount. However, fixating on block numbers is akin to obsessing over the page numbers in a book without considering the content within.
What really matters are the "hashes" - think of them as digital fingerprints that connect one block to the next, uniquely identifying each block and its contents.

The actual heroes of the blockchain story are the current hash and the previous hash. These elements connect each block to the preceding one. If you understand the current and previous hashes, you can ascertain the blockchain's essential path and verify the information's integrity.
Picture a series of puzzle pieces. The current hash is the shape of the piece you're holding, and the previous hash is the shape of the connecting piece. If the pieces fit together, you know you're on the right track.
The pseudo-code below illustrates how to handle a blockchain reorg. It emphasizes the hash's importance - the digital fingerprint that links one block to the next - in determining the correct path.
In this example, a reorg is triggered when a new block is added that doesn't align with the existing chain. The blockchain then switches to an alternative path, preserving data integrity.
Though this model is highly simplified for clarity, it serves as a visualization aid to understand how reorgs function.
Now, let's explore the pseudo-code:
class Block:
def __init__(self, previous_hash, transactions):
self.previous_hash = previous_hash
self.transactions = transactions
self.hash = generate_hash(self)
def generate_hash(block):
# Generating a hash from the block's contents
return hash_function(block.previous_hash + block.transactions)
def add_block_to_chain(blockchain, new_block):
last_block = blockchain[-1]
# Check if the new block's previous hash matches the last block's hash
if new_block.previous_hash == last_block.hash:
blockchain.append(new_block)
else:
print("Reorg needed! The block does not fit into the chain.")
# Call the reorganization function to handle the mismatch
handle_reorg(blockchain, new_block)
def handle_reorg(blockchain, new_block):
# Assuming there is a way to get the alternative chain (e.g., from other network nodes)
alternative_chain = get_alternative_chain(new_block)
print("Switching to a new chain!")
# Replacing the current blockchain with the alternative
blockchain.clear()
blockchain.extend(alternative_chain)
# Simulating a blockchain
genesis_block = Block(previous_hash="genesis", transactions="transaction_data_0")
blockchain = [genesis_block]
# Adding blocks that fit into the chain
block1 = Block(previous_hash=genesis_block.hash, transactions="transaction_data_1")
add_block_to_chain(blockchain, block1)
block2 = Block(previous_hash=block1.hash, transactions="transaction_data_2")
add_block_to_chain(blockchain, block2)
# Simulating a reorg by trying to add a block with a mismatched previous hash
reorg_block = Block(previous_hash="different_hash", transactions="transaction_data_3")
add_block_to_chain(blockchain, reorg_block) # This will initiate a reorgThe code snippet captures the essence of how blockchain reorgs are managed, underscoring that it's the hashes, not the block numbers, that form the blockchain's backbone.
What's also vital to understand is that each node (a participant maintaining a copy of the ledger) can experience its own reorgs. Since nodes operate independently and might receive updates at different times, transient inconsistencies can lead to unique reorgs in individual nodes. This variability is why relying on external APIs or third-party services to inform you when a reorg has happened can be misleading. The data source they collected might differ from the API that you're looking at, causing inaccuracies.
For users indexing blockchain data, this complexity underscores the necessity of always validating the information themselves. Self-validation involves focusing on the current and previous hashes, as emphasized in the pseudo-code provided. This process helps navigate through the inherent complexities of reorgs and ensures that you are working with the most accurate and up-to-date version of the blockchain. Relying on your own validation, rather than third-party notifications, is key to upholding the integrity and reliability of any applications or analyses built upon blockchain data.
Blockchain reorgs may appear complex and daunting, but focusing on the current hash and the previous hash simplifies the concept.
The next time you hear about block numbers, remember, it's the hashes that form the real backbone of the blockchain. Understanding these elements demystifies the technology and equips you to interact with it more confidently and knowledgeably.
Happy hashing!
Founded in 2017, Quicknode deploys institutional-grade blockchain infrastructure for developers and enterprises. With 99.99% uptime and support for 80+ chains, teams build and scale onchain applications without compromise.
The latest engineering insights, product updates, and web3 news delivered straight to your inbox.