Exonum takes its name from the word "Exonumia". Exonumia are items representing value that are traditionally used to engage in a diverse marketplace.
We chose to name our platform Exonum because you can use it to represent, store, exchange and secure anything of value — any digital asset.
Exonum has been optimized for Linux, MacOS and Windows machines.
Exonum is published under an Apache 2.0 license. You are free to create almost anything you want with Exonum — just make sure to credit The Bitfury Group/Exonum.
Please send all support requests to Gitter or Stackoverflow. We are here to help, and we want to share anything we learn with the entire developer community. If you have non-technical question, you can fill in the contact form to connect with Exonum representative.
Yes! Exonum was designed to handle smart contracts. Just like other smart contract platforms, Exonum-based smart contracts represent business logic that can capably add to a blockchain immediately. Exonum-based smart contracts also have the highest performance in terms of transaction processing, able to handle up to 5,000 transactions per second with an unprecedented 0.5 seconds of clearing time and up to 15,000 transactions per second in custom situations. Exonum supports Rust and Java programming languages for writing smart contracts.
Contracts written in Rust are embedded directly into the code of blockchain nodes. This design guarantees memory safety and ensures smart contracts are optimized for speed. Contracts written in Java could be added at any time after starting of the blockchain. However, your system administrators must review all smart contracts written in Java before they are publicly deployed for security reasons.
In case the genesis block is absent, the blockchain gets configuration from the config file. If the genesis block has already been formed, then the blockchain reads configuration from said genesis block.
In principle there is a possibility to realize several units based on Exonum simultaneously due to availability of services (analogous to smart contracts). However, for this purpose currently the developers will have to exclusively realize all high-level interactions between such services.
Exonum team welcomes contribution from the community. Please review the contribution guide that we have created for such a purpose.
Please visit the documentation to study our roadmap.
Exonum applies SHA-256 cryptographic hashes and Ed25519 digital signatures over the binary serialization of the transactions. Exonum uses libsodium library to calculate hashes on full nodes and sha.js to do the same on light clients. Messages between the nodes are encrypted with the help of Noise Protocol.
Before creating an anchoring transaction, the validators come to an agreement as to which anchoring transaction has been the latest in the anchoring chain. Such transaction is called the Latest Expected Correct Transaction (LECT). Every validator publishes the results of his choice to the Exonum blockchain. As soon as 2/3+1 LECT results coincide, the validators proceed to creating a new proposal for the anchoring transaction. After at least 2/3+1 validators agree upon the new anchoring proposal, they start building a new anchoring transaction and signing its inputs. When a new anchoring transaction is created and signed by at least 2/3+1 validators, it spends the change output (the output with the remaining balance for making a new Bitcoin transaction) of the LECT so that no other anchoring transaction with the same input could be created.
A new transaction gets into the so-called pool of unconfirmed transactions (memory pool). A round leader node suggests a block (Proposal) and broadcasts it to all the nodes in the network. Validators vote for the proposal by broadcasting messages of the Prevote type. A Prevote message means that the validator has studied all the transactions inside the proposal and that the proposal does not contain transactions unknown to the validator.
Once the validator has received Prevote messages from more than 2/3 of all the validators in the network, it executes the transactions specified in the proposal and broadcasts a message of the Precommit type to all other validators. Precommit messages contain the result of executing proposed transactions in the form of the hash of the new network state (state hash). Said message confirms that its sender is ready to commit the new block to the blockchain but needs to obtain the consent of the majority of other validators in the network. Finally, the new block is committed to the blockchain if the validator receives more than 2/3 Precommit messages which contain the same state hash.
The speed of transactions processing mainly depends on the launched Exonum services rather than on the network hardware. It is not difficult to achieve capacity of 5000 tps. For example, at the time of benchmarking the cryptocurrency service, it required the hardware with the following characteristics:
A suitable cloud analogue for such hardware may be Amazon server EC2 t2.small.
Meanwhile, in view of the fact, that since the benchmarking Exonum has undergone considerable reworking, new benchmarks are expected in the near future.
Exonum provides an anchoring service which makes it impossible to revise the transaction history. The essence of the service is that a hash of the entire blockchain state is periodically included ("anchored") to the public source (Bitcoin Blockchain). Enclosure of a new transaction into the Bitcoin Blockchain requires payment of a fee. Said fee is paid in bitcoins.
Currently integration of the Exonum-based ICO into the stock exchange is not provided. At the same time, principally, such opportunity exists and may be realized by developers.
Please review the section for Partners on our website and fill in the contact form for further discussion.
We designed Exonum to be as flexible as possible. You can design your Exonum Blockchain to have a token or coin, or you can create a permissioned blockchain without one. Just in case, we have included a tutorial on how to create your own Exonum Blockchain cryptocurrency.
Our team is building a horizontal solution that could be used by technical specialists to elaborate individual specialized software. At the same time we're exploring use cases for Exonum platform to accumulate the common parts that should be incorporated into Core.
Georgia
The National Agency of Public Registry in the Republic of Georgia has an Exonum blockchain into their land titling registry in test mode. Blockchain implementation will significantly reduce the service delivery time and operational costs, as well as provide real-time audit capabilities.
Ukraine’s governmental System of Electronic Trading in Seized Property (SETAM) is being shifted to Exonum to apply blockchain. The blockchain system will store records of seized property, a registry of auction participants and a log of auctions. The implementation will enhance citizens’ trust in the system as well as provide extra security.
Kazakhstan
Bitfury has provided a blockchain support to the Information System of the Preliminary Qualification Management in Kazakhstan based on Exonum. The blockchain application registers all key events on consideration and introduction of contractors into the list of qualified potential contractors (documents issuance, audit, etc.). The application can also control the proper execution of the approval proceedings and regulations.
Aricent
A pilot project was implemented at Aricent to improve the efficiency of their software development process (DevOps). According to the company’s internal research, the introduction of an Exonum blockchain has led to a considerable acceleration of the product development cycle (by about 34%).
Insilico
The Bitfury Group concluded an agreement with Insilico Medicine, Inc. on developing novel solutions for healthcare applications using blockchain technology. The project is aimed at developing blockchain and AI solutions that would collect, share, manage, track and validate healthcare data.
Exonum uses specific data structures (Merkle and Merkle Patricia trees) to enforce client-side auditability (please note our light client). We also offer an anchoring service which periodically stores a snapshot of the Exonum network to the Bitcoin blockchain. This prevents node maintainers’ collusion with incentive to rewrite historical data. Finally, we have our own built-in BFT consensus algorithm and use Rust as a less error-prone programming language.
As a private blockchain, Exonum offers a considerably higher speed of operation compared to the public ones. At the same time Exonum private blockchains offer virtually the same level of security as public blockchains due to the anchoring feature.
Exonum’s BFT consensus algorithm is determined mathematically which means it does not require economic reward for proper functioning. As a result, Exonum does not require mining and does not depend on the exchange rate of any of the cryptocurrencies. This all makes the cost of operation of an Exonum blockchain predictable at any time.
Besides, the Exonum framework is flexible and adjustable to its users’ needs. For instance, the system allows adjusting several consensus related parameters, e.g., timeouts.