We were challenged with how could we get more innovators on our platform? How could we get developers involved with working in parallel with major enterprise organizations? Many blockchain protocols use nascent languages so how could we adapt out platform to be useful to developers and traditional languages?
With rapid development changing the blockchain space on a month to month basis we took a stand early that our platform needs to be architected in an agnostic way as it relates to the underlying blockchain protocols or connected data services to our platform. Think of the early days of high definition DVDs, you had HD-DVD and Bluray, similar formats looking to solve similar problems. Blockchain is no different with multiple protocols gaining traction but no standards yet to be defined for mass adoption. We created GemOS as an abstracted developer API which provided REST endpoints for developers to create distributed applications. It was our focus to provide development teams a low risk, robust and scalable infrastructure to build fast to market applications with multiple deployment options. Taking what we learned from multiple enterprise engagements we created a consumable GemOS product to provide three core areas of value: Define, Register, and Listen to blockchain resources.
The following slides provide a summary of the features provided in GemOS and the high level value of the platform and product offering.
At the highest level, GemOS allows developers to create applications for the creation and management of blockchain resources. Applications are responsible for the signing of transactions and are defined as groups of configured resource types. Collaboration can be achieved by application owners granting access to other users.
To provide a standard playbook and language, the first solution of GemOS is the ability define core business objects via linked data in the JSON-LD format. Here we provide the ability to deploy to a network the definition of say a Patient, a Claim, and a Payment so that all parties creating applications around those resource types can be interoperable. After a user defines their resource type they can add attributes to those resources which define the characteristics and behaviors of those resources.
The Anatomy of a resource is made up of the following components:
- Source Library - Grouping of other resource types to make up a collection
- Behaviors - Attributes tied to management of resources and map to deployed smart contracts on the network. With multiple behaviors tied to resources this mapping powers the asynchronous processing of network level events to manage resources on the network.
- Associations - Links to other resources as defined in a resource's JSON definition
- Body - Representation of the resource JSON-LD body and field level parameters
Based on the configuration of resources to applications, GemOS automatically generates abstracted REST APIs for the management of resources associated to that application. This significantly reduces the risk of interacting with a blockchain network as developers do not need to worry about the underlying protocols and coding in nascent languages. Instead they are able to build using simple to use and common endpoints which do the heavy lifting for them.
Resources registered to the network are stored in a blockchain aware connected data store (think a blockchain aware AWS bucket) that is tied to GemOS. They are visible in individual GemOS applications based on the permissions granted to users on the network and controled by the owner of those resources. Here we are effectively able to show the following:
- The current state of a resource and it's version history.
- Who has permissions to view, access, or administer the resource
- The association graph of resources tied to the resource as defined by the resource. This creates a graph model on top of the immutability and security of the blockchain network.
- A chronological history of all resource events and corresponding blockchain transactions.
Similar to the pub-sub model where publishers do not program the messages to be sent directly to specific receivers but instead categorize published messages into classes, GemOS provided the ability for users to create listener services to generate notifications for any CRUD operation performed on resources on the network. Resource updates are propagated across the network notifying all permissioned parties of the underlying data changes.
To allow for easy integration into a developers workflow, GemOS provides code client generation in over 30 languages including java, csharp, php, swift, etc. By allowing users to create a code client with a valid API they can easily add the API to their CLI for integration into their distributed applications.
Being a developer platform, GemOS functions as a product to create developer tools, the power of GemOS is in the configuration of REST API endpoints that make the creation of distributed applications easier, quicker, require less risk and capital investment, and open to developers who work in standard and wide adopted languages.
The series of walkthrough videos is from a developers perspective walking through the GemOS Alpha release and the process of configuring resources and applications to build simple distributed applications.