Languages and frameworks
Python - this programming language is used to write automated tests, for mining pool development, to quickly create various utilities.
Symfony 3 – ultra-modern and one of the world's most popular MVC framework. This enterprise-level platform provides a high level of quality, reliability and speed. Most of the projects that we have done in the past three years were written in Symfony. During this time we have developed an extensive library of plugins (bundles) of our own code, this provides us with the opportunity to deploy new projects on pre-prepared modules within several hours.
Ruby on Rails 5 – a framework for developing Web applications by means of Ruby programming language. We apply it in non-standard projects, when we need to get the desired result quickly. The advanced mechanisms of automatic testing let our customers to be sure of the final results.
We use the JSON-RPC API to interact with Bitcoin and its forks. We know how to create complex transactions, we can protect the project funds by means of multisignature and cold wallet. We also have the experience of integration with well-known blockchain service providers.
The original Bitcoin Core client was written in C/C ++, Qt and continues to develop. Many blockchain forks, including those that we have developed, inherit these technologies. We are developing new Proof of Work algorithms, that applied in mining, in C++, using CUDA and OpenCL computational libraries.
We develop smart contracts for Ethereum and RSK networks using Solidity and Vyper.
We know the tools Web3.js and MetaMask very well, that allows us to develop interactive web applications.
MySQL is our primary choice when it comes to development of projects of average complexity. Whenever we are required to work with transactions, financial logic, statistics and cartography, we use PostgreSQL. Whenever we need massive reads from database and a few writes we use MongoDB. Redis – a simple and effective solution for data caching. In technologically complex projects we use a mix of different databases, leveraging the strengths of each.
In technologically complex projects we use a mix of different databases, leveraging the strengths of each.
We also have the experience of migrating a project to Microsoft SQL Server.
Tools: MySQL (MariaDB, Percona), PostgreSQL, MongoDB, Redis
JS-frameworks and libraries
Recently development of front-end components has changed, and now there are many new tools for code optimization, speed and effective development. For most of our projects we use Require.js, WebPack and Handlebars.js.
ReactJS, Angular, Backbone.js – modern tools for developing user interfaces, that we use as a base for development of single-page applications.
The project (the most important parts or the whole code) is covered by unit-tests and functional tests for the frontend. We use a Continuous Integration approach, where tests are run automatically each time the code is updated in repository, and developer sees if his changes affects the other parts of the code.
Behavior driven development (BDD) most often we use in Agile projects, where written tests allow you to control the integrity of the project and to conduct quick changes without losing quality.
Tools: GitLab CI, phpUnit, Rspec, Selenium, Behat, Mink, Capybara, Truffle, Remix
When you need a large amount of filtering or searching by morphology, the standard database search is inefficient. Search engines Sphinx Search and Elastic Search create index, therefore search and filtering performed quickly and without overloading server resources.
NodeJS is a tool that we often use to write scripts inside projects.
Truffle - this framework we use to create most of the smart contracts.
Amazon Web Services (AWS) - to create a flexible infrastructure for the high load projects.
Cloudflare - we use to ensure the smooth operation of web-applications of our customers.
Blackfire – using Blackfire we measure performance of written components and applications. Tracking metrics throughout the development gives us confidence that we have written optimal and quality code.
Varnish – an http caching server for faster page loading. In some cases, it may give an increase of 20-50 times and save the server from crashes under load.
NGINX – web server, de facto standard in working with large projects.
Newrelic – a set of tools for measuring work speed and errors. Newrelic allows us to check performance and find bottlenecks in the architecture of the project. We perform load testing and make sure that the project functions under the load required by the customer.
Sentry – error logging. Allows us to locate and log errors automatically. By installing this tool on each project after its implementation and launch, we can monitor and then eliminate bugs after release.
RabbitMQ – the message manager allows us to balance the load in complex projects, simplifies the scaling and makes the code easy to understand.