Cryptonomic is one of the prominent tech start-ups supporting development on top of the 3rd. Generation Tezos blockchain.
Tezos is a technology for deploying a blockchain capable of modifying its own set of rules with minimal disruption to the network through an on-chain governance model.
Unlike blockchains such as Bitcoin or Ethereum, in its most popular incarnation, a Tezos blockchain does not rely on mining (Proof of Work) but instead utilizes a Proof-of-Stake based consensus model.
Based on this premise, it promises a higher rate of transaction than traditional PoW chains and a model of self-governance that defines an on-chain process to update the chain protocol itself. This allows the whole system to improve with time and adapt to unforeseen circumstances, all the while being totally decentralized.
Cryptonomic is already planning to extend the platform to a more general model that will make it possible to offer the same kind of services for other blockchains.
The goal of the tool suite is to enable interaction, create contracts, monitor Tezos and use more traditional development tools such as ReST API over HTTP and JSON.
In order to do this, the core part of the analytics web APIs is supported by an indexer and querying engine, under the project name of Conseil.
This open-source system allows more traditional web-based systems to interact with the chain via ReST-APIs. Additional tooling and infrastructure are made part of the suite and build upon the interaction with Conseil, in particular, Conseil.js, a library to interact from web front ends, Arronax, a web-frontend for querying the system and Nautilus, a cloud infrastructure to provision Conseil as a hosted service.
Another goal of the project is to enable any independent developer to use the suite with no need for in-depth knowledge of the tech solution itself.
▸ The ever-growing amount of data being constantly added to the blockchain, requiring a valid solution to allow restarting of a local system from scratch that could synchronize with the current blockchain data over a reasonable amount of time
▸ A sound usage of system resources, optimized to allow deployment and execution without an unreasonably demanding system environment
▸ Providing a powerful web-ReST-API which in turn enables non-trivial analytical queries to be performed from the web, with expressivity that approaches that of a relational database engine
▸ Guarantees about stability and robustness of the system, which should display consistent information, be able to be safely restarted with no data loss and proceed with its work, and be monitored for progress and usage
Phase 1. Auditing the existing code
Scalac’s first task was to assess the quality and viability of the initial software design, based on the established expertise of Scala language, idioms, best-practices, libraries, and tools.
Based on such assessment, we employed Scala’s well-known strong points to improve the performance of the system introducing concurrency, improve the domain design based on type-safety and the expressive Scala type system, reduce possible errors by applying proven functional programming approaches and patterns.
During this phase, we also supported the client by sharing our knowledge on all Scala-related topics and supporting architectural choices using our own expertise in software systems design and development.
Phase 2. Enhancing the system
We then started to add novel features to the system, collaborating with the host development team, contributing to the indexing and the web-API and integrating both sides. The improvements included incrementally reading data from the tezos blockchain to provide rich, persistent information on each domain entity, exposing the query interaction model via ReST/JSON/HTTP, converting the format of smart contracts code to one that was more friendly to the smart contract’s development. We also provided the means to deploy the system as a docker container, capture and provide aggregated information from the ingested data, as well as provide support to the operativity of the deployed systems.
As an additional step, we developed the management application for self-provision access to Cryptonomic’s existing shared infrastructure for third-party development.
We also supported the client’s requirement to allow custom configuration of each deployment, so that each system could be tuned and configured based on context.
All of the development was driven by our constant engagement and solid interaction with the Cryptonomic team, along with additional feedback from the user-base of the system.
The system is built upon the following technologies
▸ Akka, Akka-streams, Akka-HTTP
▸ Cats, Cats-effect, fs2
▸ Postgres, accessed using Slick
Other minor libraries are used to provide JSON handling, type-safe configuration, unit-testing, regression testing and declarative endpoint definitions with documentation.
We achieved most of the original requirements and effectively enhanced the solution to quite a stable and complete solution, which is regularly improved and released.
We significantly contributed to the design of possible solutions to domain problems, some of which were not actually included because of situational factors that made them hard to be deployed ‘as is’ (e.g. elegantly handling a fork in the blockchain).
We supported the evolution of the system to withstand the significant changes which are externally introduced by the protocol upgrades of Tezos, an inherent part of this specific blockchain.
To achieve these goals, we worked daily and remotely with the customer, initially as a single embedded member (a Scalac senior developer) and successively as an integrated team of 3 consultants in addition to Cryptonomic’s own.
We coordinated using a lightweight approach of daily updates and constant interaction through a chat application and the occasional online call.
The work-flow included the critical support of a project manager from Scalac, whose role was to facilitate collaboration, keep the workflow smooth and devoid of issues and regularly check the health status of the project, both from the perspective of our team and the client.
See how our team contributed to customers’ success.