# What are we building when we build blockchains?

Blockchains are tamper-proof stores of data that are replicated across distributed nodes, with no centralized entity controlling how the data can be mutated or accessed. That is, it is a permission-less and decentralized system. &#x20;

If a similar store of data is built in a centralized fashion, an architecture involving clients and servers can be used, where a centralized server (or sets of servers) controls who can access and update the data. The clients can then make requests to the centralized server, and if the request is valid, the centralized server performs the necessary operations on the data.&#x20;

That is, the centralized server coordinates access and updates data.

<figure><img src="/files/V7YDLliFiOoCaRg2KAqY" alt=""><figcaption><p>Centralized vs Decentralized</p></figcaption></figure>

But in the blockchain system, there are no centralized entities that control these kinds of operations on stored data. How then can important operations like updating the data be performed in such a way that all replicated copies of the data get updated? How can we also ensure that all copies of the data, replicated across these decentralized networks are kept consistent?

Well, since with blockchains, we do not have centralized entities that coordinate operations, what we have instead are protocols. The idea is that we define precise sets of rules or protocols and if every participating node in the decentralized system follows these rules, then the whole system can be coordinated, kept up to date and in synchronization. This is why the concepts of protocols are very important when it comes to blockchain systems. In fact, that is why the task of blockchain development is usually referred to as protocol development.

The protocol being built as part of Blockchain protocol development must, adhere to some very special properties. One of such, is security.&#x20;

In a centralized system, the centralized server that coordinates access to the data is mostly responsible for the security and making sure that malicious operations are not performed. We have established that with decentralized systems like blockchain, we do not have centralized entities but instead we have protocols. This means that such protocols will need to be designed with the expectations that it would be operating in a malicious environment and hence the protocol needs to have checks and balances that ensures it does not get compromised.&#x20;

This means the protocol should still be able to protect itself in situations where the protocol is not being honestly followed as specified by participants of the decentralized network. This deviation from the protocols can be due to technical faults i.e. other nodes not working properly, or it might be due to bad actors, who would want to perform malicious actions.&#x20;

Technically speaking, these kinds of faults are called byzantine faults. And protocols that are resistant to them are referred to as Byzantine fault tolerance (BFT).

In summary, when designing blockchain systems we define protocols that all participating nodes should implement and follow. As long as the protocol is being followed, the network should be able to function properly in the absence of a central entity to oversee everything. Also, these protocols need to be Byzantine fault tolerant.&#x20;

Having established this fact about protocols, let us now look at one of the core operations that any data store should support; which is updates. How is this done in the blockchain system? What kind of protocols help with this?  This is what we look at next..

{% hint style="info" %}
&#x20;**Additional Resources**

* Foundations Of Distributed Consensus and Blockchains\
  <https://www.distributedconsensus.net/>
* PBFT and Blockchains \
  <https://www.youtube.com/watch?v=S2Hqd7v6Xn4>
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://geekabyte.gitbook.io/blockchain-protocol-development-guide/what-are-we-building-when-we-build-blockchains.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
