Nodes and Clients (JSON RPC)
The blockchain is a distributed network of computers and these computers are known as nodes. A node is in charge of verifying transactions to update the state of the blockchain. To become a node, you need to run some software programs, known as clients, that allow you to connect to the blockchain network.
Keep in mind that when we say the blockchain is distributed, that means each of these nodes maintains the same copy of the blockchain by sending and receiving data in real-time.
JSON RPC
JSON RPC (JSON Remote Procedure Call) plays an important role in the communication between nodes and clients in blockchains like Ethereum. JSON RPC as the name implies uses JSON(Javascript Object Notation) for data transfer and communication within the network.
JSON is a human-readable and machine-friendly way to represent data in key-value pairs, while an RPC acts like a remote function call, allowing a client to invoke a method that is on another machine (in this case, a node) locally. This enables clients to interact with the Ethereum network and access its functionalities.
The part where I said locally above is from the client’s perspective, it feels like the method is executed locally because:
They call a method as if it were local.
They receive a response as if the method ran locally.
What are clients?
A client is a software application that implements the blockchain’s protocol specification. They verify that the data that the node wants to send to the blockchain is not against the protocol rules, this helps in keeping the network secure. In the case of Ethereum, a node has to run mainly two clients: a consensus client and an execution client.
Execution Client: This is also known as the Execution Layer. It listens for new transactions that are sent to the network. It processes these transactions in the EVM(Ethereum Virtual Machine) and holds the latest state of the blockchain. The latest state may contain things like account balances and smart contract codes.
Consensus Client: Consensus is an Agreement reached by all participating nodes on the validity and current state of the blockchain. This means that everyone in the network needs to be on the same page about which transactions are legitimate and what the latest block on the chain is. It relies on the execution client to provide validated data about transactions and state changes. It is also in charge of updating the chain with the finalized proposed new block.
Validator Client(Optional): This is an additional software that can be added to the consensus client, it allows a node to actively participate in Proof-of-Stake (PoS) by staking ETH. By participating in consensus validators earn rewards.
Note: The validator client cannot stand on its own. It is an add-on to the consensus client.
More on Clients — Diversity
The above clients we spoke about exist in different programming languages and are developed by different teams. The fact that there are different implementations makes the blockchain stronger as it does not rely on a single codebase thereby eliminating a potential single point of failure.
Having a variety of languages also invites a broader developer community as developers would come in with more client implementation in their preferred language.
One thing I love about these implementations is that they follow a single specification. A specification acts as a detailed blueprint that defines how the client should operate and interact with the blockchain.
If you would like to read about the types of specifications we have in Ethereum, see the below links:
EIPs in different network upgrades
Ethereum clients and their programming languages:
Geth (Go): This is the original and most popular Ethereum client, written in Go. It handles transaction execution, smart contract management, and node synchronization.
Nethermind (C#, .NET): It is a high-performance client known for its energy efficiency and scalability, written in C# and targeting the .NET framework.
Besu (Java): An enterprise-grade client with extensive monitoring and privacy features, written in Java and popular for permissioned networks. Permissioned blockchains are blockchain networks that require access to be a part of.
Erigon (Go/Multi): A lightweight and fast client optimized for resource-constrained environments, written in Go with multilingual support.
OpenEthereum (Rust): A newer client aiming for efficiency and security, written in Rust and known for its active development.
Lighthouse (Typescript): A popular client written in Typescript and widely used for solo stakers and developers.
Teku (Rust): Another popular option known for its high performance and stability, written in Rust and used by major staking services.
Prysm (Go): An established client backed by ConsenSys, written in Go, and suitable for both small and large validators.
Nodes
No doubt I may have chipped in some things about nodes in the above sections but now we are going to go in depth.
Different types of nodes consume data differently. For that reason, clients may choose to run either of these nodes: Full, Archive, or Light. There are also options for different sync strategies which enable faster synchronization time. Synchronization refers to the process of downloading and verifying the latest state of the blockchain.
Types of Nodes
Full Nodes store the entire blockchain including all blocks and transactions. Full nodes only keep a copy of the most recent 128 blocks, which means that they delete older data to create disk space but the deleted data can be recovered when needed.
Archive Nodes are full nodes that verify every block from the Genesis block but the only difference is that they never delete any of their downloaded data. It’s also important to note that because they do not delete any of their data, they are very expensive to run as they contain terabytes and terabytes of data. They are mostly used for services like wallet vendors, block explorers, and chain analysts.
Light Node: Unlike full nodes that store the entire blockchain, light nodes are designed to be light. Imagine them as summarizers, only grabbing the key points (block headers). Any information that the light node needs, it requests it from the full node. They allow users to participate in the blockchain without the need for powerful hardware. Light nodes make the blockchain accessible to small devices like your smartphone. It’s important to note that light nodes do not participate in consensus, which means they cannot be miners or validators.
Benefits of Running a Node
Running a node offers numerous advantages, benefiting both the individual operator and the blockchain network as a whole. Below are some key benefits:
Enhanced Security and Network Participation
- By running a validator node and staking a minimum amount of cryptocurrency, such as 32 ETH for Ethereum, you actively contribute to the security and decentralized consensus of the blockchain. In return, you earn rewards for your participation, thereby gaining a tangible stake in the network’s operation and success.
Network Health and Sustainability
- Regardless of direct monetary rewards, operating a node allows you to contribute to the overall health and sustainability of the blockchain network. Your node helps to validate and relay transactions, strengthening the network’s resilience and decentralization.
Developer Access and Innovation
- Running a node provides developers with direct access to the blockchain, enabling them to interact with the network for testing, debugging, and building decentralized applications (dApps). This hands-on involvement fosters innovation and the creation of diverse applications that enrich the blockchain ecosystem.
Data Accessibility and Research Opportunities
- Operating an Archive node grants access to data from the Genesis block, offering a comprehensive historical record of the blockchain’s transactions and state changes. This wealth of data opens the door for in-depth analysis, research, and the development of advanced tools and insights that contribute to the broader understanding and advancement of blockchain technology.
Community Engagement and Empowerment
- By running a node, individuals actively participate in the governance and evolution of the blockchain network. This participation fosters a sense of community engagement and empowerment, as node operators contribute to the network’s decision-making processes and overall resilience.
Requirements for Running a Node
Running a node for a blockchain network, such as Bitcoin, Ethereum, Solana, etc, requires a certain level of technical understanding of blockchain concepts and software configuration. Each blockchain has its own specific requirements and hardware specifications. Depending on the type of node, there might be additional costs such as hardware upgrades, electricity bills for running the node, and potential staking requirements for validators.
Here are some examples of specific blockchain requirements:
Running a Bitcoin Full Node
To run a Bitcoin full node, you’ll need the following minimum requirements:
Desktop or laptop hardware running recent versions of Windows, Mac OS X, or Linux.
At least 7 gigabytes of free disk space, accessible at a minimum read/write speed of 100 MB/s.
2 gigabytes of memory (RAM).
A broadband Internet connection with upload speeds of at least 400 kilobits (50 kilobytes) per second.
It’s important to ensure your hardware and network meet these requirements to support the Bitcoin network effectively. For more detailed information, you can refer to this documentation.
Bitcoin Core Full Node Requirements — Learn More
Running an Ethereum Node using GETH
The hardware requirements for running an Ethereum Geth node depend on the node configuration and may change over time due to network upgrades.
Processors
It’s preferable to use a quad-core (or dual-core hyperthreaded) CPU, as Geth is compatible with a wide range of architectures, and at least 16GB of RAM to support efficient operation.
Disk space
For a full node running Geth and a consensus client, a 2TB SSD is suggested. The storage needs for snap-synced full nodes grow by about 14GB per week, and archive nodes require even more space.
Fast read and write operations are essential for Geth nodes, making the use of HDDs and cheaper SSDs less suitable for syncing the blockchain.
Bandwidth
A stable and reliable internet connection is crucial, especially for running a validator to avoid missed rewards or penalties. It’s recommended to have a minimum download speed of 25Mbps to run a node, considering the substantial data uploads and downloads involved.
For more detailed information, you can refer to the official Geth documentation.
Running a Solana Validator Node
Note that these are just recommendations, you are expected to do your performance testing to be sure it works well according to your needs.
Hardware
CPU: A recommended configuration of 12 cores / 24 threads or more, with a base clock speed of 2.8GHz or faster, and support for SHA extensions, AVX2 instruction, and AVX512f.
RAM: A minimum of 256GB is advised, with ECC memory and a motherboard with a 512GB capacity recommended.
Disk: PCIe Gen3 x4 NVME SSD for accounts (500GB or larger) and ledger (1TB or larger).
RPC Node
CPU: A configuration of 16 cores / 32 threads is recommended.
RAM: 512 GB or more is suggested.
Disk: Consider a larger ledger disk if an extended transaction history is required and avoid storing accounts and ledger on the same disk.
Software
- Solana is built and run on Ubuntu 20.04, with prebuilt binaries available for Linux x86_64 on CPUs supporting AVX2.
Networking
- Internet service should be at least 1GBit/s symmetric, with 10GBit/s being the preferred option.
For a more comprehensive understanding of Solana’s validator requirements and additional insights, you can refer to the Solana Validator Requirements website.
Learn More — Solana Validator Requirements.
It’s important to carefully review the specific requirements for each blockchain and ensure that your hardware and network capabilities align with the demands of running a node for the chosen blockchain.
By understanding and meeting these requirements, individuals and organizations can contribute to the resilience and decentralization of blockchain networks while potentially participating in network consensus and validation processes.
Running a node may sound complicated but it is just like having a personal window into the network. Just imagine keeping a special software program open on your computer that’s constantly connected to the internet. This program, called a node, downloads and stores information about the blockchain, keeping you updated on all the transactions and activities happening. Easy as that!
Conclusion
With all that I have said, I believe you now know the difference between a client and a node. A client is simply software that allows users to run a node and participate in the blockchain, while a node is a computer that uses the client(software) to download a copy of the entire blockchain and participates in maintaining the network’s security and consensus.
Subscribe to my newsletter
Read articles from Victoria Adedayo directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Victoria Adedayo
Victoria Adedayo
A Frontend Software Developer who is passionate about building user-friendly applications on the web.