adf860ea40
- Provides a toplevel documentation structure using Sphinx - Adds a `doc-html` target to the main Makefile - Converts existing documentation to RST format - Add some new documentation / tutorials - Links the developer manual and OCaml documentation - Synchronized documentation on Gitlab pages This patch is co-authored by: - Benjamin Canou <benjamin@canou.fr> - Bruno Bernardo <bernardobruno@gmail.com> - Pietro Abate <pietro.abate@inria.fr>
60 lines
2.8 KiB
ReStructuredText
60 lines
2.8 KiB
ReStructuredText
.. _the_big_picture:
|
||
|
||
Tezos Software Architecture
|
||
===========================
|
||
|
||
The diagram below shows a very coarse grained architecture of Tezos.
|
||
|Tezos architecture diagram|
|
||
|
||
The characteristic that makes Tezos unique is its self-amending
|
||
property. The part that amends itself is called the *economic protocol*
|
||
(the green eye of the octopus), sometimes abbreviated by protocol or
|
||
even proto in the source code. The rest of a Tezos node is what we call
|
||
the *shell* (the blue octopus).
|
||
|
||
The protocol is responsible for interpreting the transactions and other
|
||
administrative operations. It also has the responsibility to detect
|
||
erroneous blocks.
|
||
|
||
An important thing to notice is that the protocol always sees only one
|
||
block chain. In other words, a linear sequence of blocks since the
|
||
genesis. It does not know that it lives in an open network where nodes
|
||
can propose alternative heads.
|
||
|
||
Only the shell knows about the multiple heads. It is responsible for
|
||
choosing between the various chain proposals that come from the bakers
|
||
(the programs that cook new blocks) of the network. The shell has the
|
||
responsibility of selecting and downloading alternative chains, feed
|
||
them to the protocol, which in turn has the responsibility to check them
|
||
for errors, and give them an absolute score. The shell then simply
|
||
selects the valid head of highest absolute score. This part of the shell
|
||
is called the validator.
|
||
|
||
The rest of the shell includes the peer-to-peer layer, the disk storage
|
||
of blocks, the operations to allow the node to transmit the chain data
|
||
to new nodes and the versioned state of the ledger. Inbetween the
|
||
validator, the peer-to-peer layer and the storage sits a component
|
||
called the distributed database, that abstracts the fetching and
|
||
replication of new chain data to the validator.
|
||
|
||
Protocols are compiled using a tweaked OCaml compiler (green part on the
|
||
left of the picture) that does two things. First, it checks that the
|
||
protocol’s main module has the right type. A good analogy is to see
|
||
protocol as plug-ins, and in this case, it means that it respects the
|
||
common plugin interface. Then, it restricts the typing environment of
|
||
the protocol’s code so that it only calls authorized modules and
|
||
functions. Seeing protocols as plug-ins, it means that the code only
|
||
called primitives from the plug-in API. It is a form of statically
|
||
enforced sandboxing.
|
||
|
||
Finally, the RPC layer (in yellow on the right in the picture) is an
|
||
important part of the node. It is how the client, third party
|
||
applications and daemons can interact with the node and introspect its
|
||
state. This component uses the mainstream JSON format and HTTP protocol.
|
||
It uses in-house libraries ``ocplib-resto`` and ``ocplib-json-typed``
|
||
(via the module :ref:`Data_encoding <data_encoding>`). It
|
||
is fully inter-operable, and auto descriptive, using JSON schema.
|
||
|
||
.. |Tezos architecture diagram| image:: octopus.svg
|
||
|