Whenever the complexity of a system increases, there will also be increased room for mistakes and errors. That means that whenever we increase sophistication, we must pay even more attention to identifying vulnerabilities.

In software development, conventional debugging techniques can only take you so far. We need to thoroughly test our software by putting it through a great deal of unique and unexpected situations, the purpose of which is to detect vulnerabilities that would be otherwise hidden from us.

One method of achieving that is a technique known as fuzzing (also referred to as fuzz testing), in which software is…


Before we begin our article on phase 3 of the TezEdge node, we have an announcement to make; our company is rebranding itself as Viable Systems. The name comes from the Viable systems model, a theoretical model for self-sustaining systems described by the British scientist Stafford Beer in his seminal book “Brain of the Firm (1972). It is, in essence, a model for a system organised in such a way as to meet the demands of surviving in the changing environment. We will describe the viable system model in an upcoming article on our soon-to-be launched blog on our website.


Introducing version 1.0 of the TezEdge node

Every kind of system benefits from increased diversity. In the case of Tezos, creating new node shells will benefit the ecosystem as a whole, increasing the stability of the network, opening the door for further innovation and allowing us to verify that the protocol is unambiguous.

We want bakers, developers and other members of the Tezos community to be able to select from a range of different node shells — each person has their own individual needs that may be best met by a particular implementation.

Since last year, we have been working on the development of the TezEdge node…


Every kind of software needs to store the data that it uses in order to operate correctly. There are two options where to store this data; either on a hard disk, or in memory. While hard disks offer much greater capacity for storing data, their drawback is slower performance as the data must be read and processed from the disk. On the other hand, memory has very limited capacities, but offers better performance as data can be quickly retrieved and used.

Therefore if we want to maximize performance, we need to store data in memory. Since memory has a very…


In a distributed network like blockchain, we want to be able to quickly verify that the data distributed from node to node remains the same. We want to avoid inconsistencies between each node’s version of the blockchain data, whether they happen accidentally or are intentionally created by adversaries.

However, a blockchain’s data tends to be relatively large in size and continuously grows as new transactions are being made. New blocks (containing new operations) are constantly being added to the head of the chain, which keeps updating the blockchain data.

Since the amount of data in the blockchain state is usually…


Any kind of service that relies on an active internet connection, whether it is a website, application or blockchain node, has to have a mechanism by which it filters incoming traffic. Adversaries may attempt to flood their target with repeated requests, aiming to overload the server and disrupt its service. A well-known form of this attack is the Distributed Denial of Service (DDoS), which is often the culprit behind the downtime of many websites and applications. Adversaries may also attempt to introduce malicious data that may interfere directly with the service.

Possible solutions include special network cards that are capable…


When networks handle financial movements or other data that affects items of value, they must have an accurate, fast and efficient system for either approving valid messages or rejecting invalid ones. Without such a system in place, the network would be unable to reliably assess data, making it unsuitable for handling such information.

  1. First and foremost, the validation system must be accurate, with no room for error as approving a malicious or erroneous message can lead to serious real-world consequences, including financial loss.
  2. Second, it must be fast. Speed is of the essence — when a network expands, the number…


In programming, it is always useful to prevent bugs that could potentially threaten your software. This is particularly important when developing software that manages resources or provides an important service.

In blockchain nodes, bugs may cause significant financial loss by denying service or exposing sensitive data. As such, safety should always be paramount in the development of a new blockchain node.

The TezEdge node (written in Rust) has to interact with the native Tezos node (written in OCaml). However, whenever two languages interact with each other, the boundaries are very often the source of bugs, vulnerabilities, and inefficiencies. …


As blockchain developers, we want to be able to test our smart contracts, apps and protocols in an environment that behaves in the same way as the network where they will be deployed eventually. However, we can’t work directly with the live network as it can have serious consequences. Should an error or bug arise, it can spread to the rest of the blockchain, affect other users and cause considerable financial losses.

For those reasons, developers want to have a safe environment in which they are free to play around without having to worry about threatening the network. In this…


For a developer who is working directly with a Tezos node, it is very useful to be able to view the traffic of data that moves through the network. Among developers, Wireshark is one of the most popular tools for the analysis of network traffic.

Wireshark is a utility that intercepts packets (messages) that arrive via the network, using dissectors to deconstruct what is within them and displaying them in its user interface (UI).

Wireshark has three basic functions:

  1. Intercepting packets moving across the network
  2. Using dissectors to analyze the intercepted packets
  3. Displaying the data in its UI

By default…

Juraj Selep

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store