Today's world is mad about blockchain, seeing its features as a remedy to many existing operational and security problems. Its ability to create decentralized distributed systems with open design and impressive privacy, as well as the high edge of interoperability and endless opportunities for open development have made it a desirable tech solution for existing and new high-tech businesses.
While there are several existing blockchain platforms offering their infrastructure (e.g., Hyperledger Fabric, Quorum, Corda, etc.), the software engineer's task is to match the project's requirements with the blockchain's features and seek an ideal fit.
My name is Vyacheslav, and I work as a Blockchain Solution Architect at 4ire Labs. I was the leading tech expert in this project due to my blockchain integration experience. Here I share my experience and takeaways on an exciting blockchain project we have recently completed. The project details are NDA-compliant, so I will leave out all names and specific features to focus primarily on our experience of Corda blockchain integration.
The article will examine the project's initial requirements, the process of choosing a blockchain platform to use, a detailed review of Corda and its toolkit, as well as the Proof of Concept development process. We end up with some key ideas on why Corda is a good idea for those seeking efficient, flexible blockchain solutions. I do hope that this experience will be used for my colleagues who also included Corda on their blockchain list and compare it with other available options on the market.
How it started
The client came with the following requirements for the software project:
- The primary purpose of blockchain use was to monitor and identify the execution of a chain of actions by several participants in specifically identified processes for further data analysis and audit.
- The system presupposes having distinct protocols in which the participants should act in a timely and concerted manner in line with predetermined scripts, one by one, by verifying the correctness of the previous participant's actions.
- Each step of the process should be recorded into a private blockchain in real-time, with its nodes storing sensitive data simultaneously in several partnering organizations.
- Data with which the system will work is sensitive client information, so the standard of privacy and data security should be high.
- In the future, the number of organizations included in the blockchain should be able to grow exponentially, and such scaling should not be a challenge.
- The system should enable the categorization of node access to specific data. For example, some nodes should be responsible only for high-quality participant verification; others should control one group of processes, and others check the controllers.
- The client voiced a preference for using Java as the system's maintenance stack as they had in-house Java experts servicing the company's other products.
- The blockchain platform of choice for this project should presuppose the Proof of Concept development, which the client understood as developing web application software connected with the chosen blockchain performing the blockchain-confirmed participant authentication, guiding users throughout the entire process script, records every step in the sequence, and prevents user deviation from the tech process log on several distributed blockchain units.
Choosing the right blockchain for the project
After clarifying the project's details, I started industry research to evaluate the existing blockchain solutions meeting these requirements. All blockchains boast of the solution's flexibility and agility, its open design functionality, the high degree of privacy, and impressive interoperability. Thus, our set of options included Quorum, Hyperledger Fabric, and Corda upon negotiation with the client. The comparison was made on three parameters of importance to the client:
- Data privacy
- Ease of programming
The audit was made with proper regard to project specifics, the client's preferences, and our expertise at the moment of project execution.
In the end, we chose Corda, which was an exciting challenge for our team. Our team had a rich experience completing projects on Hyperledger Fabric, while Corda was a completely new platform for us. The client and I realized that mastering a new technology would take extra time, even for experienced full-stack blockchain engineers. Still, using Corda seemed more beneficial on some critical project dimensions. So, we have decided to take extra effort to study a new technology for providing the client with a competitive advantage with the help of ideally fitting technology use. Our team also expected to derive a strategic benefit in the form of a unique Corda implementation experience.
What is Corda?
Corda is R3's next-gen, open-source blockchain platform explicitly designed with highly regulated institutions in mind. This solution can deliver scalable and secure data transactions among participants while at the same time sustaining a top level of privacy and protection. These features make Corda ideal for the implementation in the financial services, governmental, healthcare, insurance industries, and far beyond.
R3, a U.S.-based company specializing in blockchain solutions, built this platform in 2016. The Corda infrastructure works by recording, managing, and synchronizing contracts with bank-grade security and outstanding transparency guaranteed with Consensus Time Stamping. The Hashgraph technology implemented in Corda enables up to 200,000 transactions per second and guarantees hassle-free scalability of this platform's application. Besides, Corda has designed unique consensus mechanisms for Corda – Gossip about Gossip and Virtual Voting – which enable effective distributed consensus.
CorDapps, which are apps built on Corda, possess a unique ability to integrate with most business systems, including relational databases and the Java Virtual Machine. R3 has simplified developer work by offering a set of handy CorDapp templates on its official website that coders can customize with Java and Kotlin programming languages.
Proof of Concept Development
The client allowed using any development technology we deemed necessary for the web application, so I chose Python Django as the one in which I had more practical expertise. This allowed me to develop a UI quickly and without extra effort by using the advanced user authentication mechanism built into Django and supplementing the Corda blockchain authentication mechanism. I completed this task with the help of the specific Accounts library that emerged in the latest Corda releases.
I took advantage of R3 contract samples using the Accounts library (supplychain and tictacthor) when developing the CorDapps project. The observable states-trade reporting sample from the Features section also proved used in PoC development. I discovered that transaction broadcast on Corda (sending transactions to an auditor node to check users' interactions) requires additional, though not extensive, effort.
Like many other blockchain solutions, Corda is also a machine of states. Each state carries the information about some object and factually represents an object in object-oriented programming (Java or Kotlin class). Each state can change data about the object it describes as a result of a valid transaction. The transaction's validity is determined upon smart contract execution, holding data about the object's previous state, the new expected state, and about conditions under which the object's state is altered.
The procedure of forming a transaction, signing it by users and notary nodes, and checking the contract terms' compliance is called Flow. After such a valid transaction occurs, the previous state is regarded as "consumed," while the new state becomes actual and reflects the next step required from the "production process" participants. New and consumed states are stored in nodes' Vaults and can be reviewed with specially developed Flows or by inspecting the database in which the Vault is located. Vaults are implemented on H2 by default, but their implementation on SQL, Oracle, PostgreSQL is also possible. Once all stages of the process are complete, the latest state also becomes consumed, giving the participants the ability to initiate the "production process" from the very beginning.
Thus, to develop CorDapp, you need to describe the required states, contracts, and flows in Java or Kotlin. These three components are included as separate branches in the Corda framework template with a convenient, structured code.
Besides the branches mentioned above, in some sample, we had an in-built mechanism of API implementation using Spring Server, which I used with pleasure, using one of the API samples from R3 and developing an API that communicates directly with flows with the help of RPC queries. This API's procedures are initiated with POST requests from a web application running on Django.
Why choose Corda?
Here are my key takeaways from working with Corda and my experience as a Blockchain Solutions Architect with this product. Corda's use revealed the following advantages.
Mastering the new Corda blockchain technology was not challenging, with well-systematized documentation from R3, coupled with handy illustrations and informative videos. Samples with expert commentary for various business cases (financial relationships in blockchain, supply-chain tasks, game coding examples, etc.) are perfect templates for customized coding.
Corda implementation is manageable even for non-specialists in Java or Kotlin. My C++ expertise and a moderate level of Java coding skill were enough to code CorDapps. A much more valuable prerequisite for successful Corda implementation is your previous blockchain development experience.
A New Edge of Data Privacy
It was reassuring for me to discover that Corda doesn't store transaction data on the network's nodes. All nodes are verified, which removes the need for consensus, ensuring trust even in the zero-trust environment. However, this feature makes Corda non-applicable in projects where trust has to be built in a verified yet continually changing set of users. Corda suits projects where all users know each other and are confident about the level of trust they can give in particular aspects. This is achievable for partnering businesses, different departments of large corporations, and interbank operations.
Knowing your system's participants and having clear scripts of their interactions allows them to make decisions about what data should circulate the system and what nodes it will be stored. Other system users may have no idea what data was sent from one node to another and immutably stored on both, as well as on the third code serving as their auditor in the future.
The solution is ideal for projects having critical limitations for data distribution as Corda removes the need to set up a bulky consensus procedure, speeding up the transaction processing speed. No need for nodes to store heaps of redundant data solves many issues with blockchain project scaling without data storage compromises. It's noteworthy that Corda policies allow storing documents' hash data and the complete documents and even media content in any file formats. The latter feature predetermined Corda's use for our project, by the way.
Live Distributed Applications
Corda partners developed a set of live distributed applications to enable PoC implementation on Corda. They are specifically meant to make the work of financial technology applications on Corda better and securer.
Corda has gone the extra mile to break with the blockchain tradition of isolation and non-interoperability. The latter was meant to enhance data security; yet, R3 has found a solution to this issue, enabling Corda to operate with one or more apps and networks simultaneously. This is what distinguishes Corda from popular blockchain platforms like Hyperledger Fabric or Ethereum.
My acquaintance with Corda was valuable and exciting, and I can honestly recommend the newly discovered technology to all clients seeking enterprise solutions with robust blockchain developer support and new standards of data distribution privacy. I have often seen the latter requirement as a limitation for specific blockchain platforms' use, but it works differently with Corda. The data is stored only where it should and is not stored on unrelated nodes.
Corda is also an ideal fit for projects requiring immutable data storage for further interdepartmental audits within one company or among business partners, requiring the logging of a strictly predetermined process of user interaction. Besides, as a specialist with IoT implementation experience, I can sincerely recommend using Corda for immutable data storage from sensors in systems where the historical sensor data is fundamental and cannot be lost or altered after its recording. So, I am happy to acknowledge that 4ire Labs has added Corda to the broad spectrum of blockchain options available for our clients.
Key challenges that I had to overcome in the development process were installing and fine-tuning the completed CorDapp in the test network and the node storage inspection tool Corda Node Explorer. R3 offers several options for the launch of the Corda network on different web nodes. All of them are quite convenient, but each requires additional time and effort. So, for the future Corda projects, I would recommend having several nodes on one powerful server for testing, launching CorDapp to separate servers only after the system is ready.
To do Corda justice, I want to note that I studied it exclusively from the viewpoint of its suitability for a specific task. Thus, I did not focus too much on the infrastructural specifics of R3 as a reliable business pursuing long-term, sustainable Corda project development through developer, business, and startup support and training. Yet, I was pleasantly surprised by the Corda support center's timeliness and efficiency, daily tips on Corda optimization, and even getting a stimulating grant from R3 for my client's startup project. Obviously, this is not a Corda-specific feature, but I experienced such a systemic and qualified approach only here.