In this article we describe the Cosmos Cyber Reality platform from a technical perspective. We will explain how we are going to realize a true distributed and decentralized system (read about the differences between distributed and decentralized here). The user interface will be available for everyone in the browser, but behind that there are networks and different techniques to provide the data and the security for the platform. By combining available technologies we will achieve true distribution of tasks throughout the whole system.
As long as the system is under development, details in the design of the system may be changed due to performance issues or new available solutions to existing problems. Some problems will only become visible when running in a production environment, but will require redesigning parts of the system. The high level design will remain the same, while implementation can be altered to the best possible solution.
Three layered system
The platform can be divided into three layers:
- the client layer
- the blockchain layer
- the server layer
The client layer
The client layer is the part of the system that runs in the user’s web browser. It renders the user interface with 3D models using web standards and makes it available in all modern browsers that support WebVR. This can be on a PC/Mac, tablet, mobile phone or VR headset. With a VR headset or a mobile phone in a VR goggle you can experience the metaverse in virtual reality. On a monitor or without the use of a VR goggle, the interface will be rendered in a three dimensional display.
The software runs completely in the client browser. This means that, once the software is loaded in the browser, there is no dependency of a single web server. The blockchain network and torrent mesh will provide the data needed in the user environment.
The client interface will be provided from the web portal on cosmoscr.io, but you can also download it from the repository and open it from the local drive. This makes it independent from a single server or website. However, the client will still need an internet connection because all the models and other data are only available online. An example for this can be seen in the MyEtherWallet software. The interface is provided on the website https://www.myetherwallet.com/, but you can also download the code from the github repository and start it without using the website, or host it on your own website. It uses data from the Ethereum blockchain to show in the browser.
The blockchain layer
The blockchain layer fulfills multiple use cases in the platform. It will be the ledger for the payment system in the platform, but it also keeps ownership data for the land parcels and other assets in the system. Using smart contracts some logic or automated tasks, like entrance payment or payed model usage, can be programmed in this layer.
The blockchain provides an open and trustful decentralized data structure for the state of the platform. This can be utilized in multiple ways.
First of all it stores the distribution of the $CYBR tokens to the wallets used in the system. It then validates all transactions of this ERC20 standard fungible token when payments are made anywhere on the platform. This provides a uniform way to make payments in the Cosmos. Whether it is to pay for land, models or other ownable assets, pay for entrance to planets with unique experiences or to buy real goods in a shop, it can all be done with the same digital currency.
Second use is the management of unique assets in the platform using a ERC721 or equivalent non-fungible token (NFT). This token can hold unique assets that can be owned and traded in the platform. It will be used for land parcels (see the article about Cosmos virtual land) and for models. The land tokens will be stored with the location on the mainland and are owned by a wallet holder. This wallet holder can then add 3D models on that land, so a unique visible building will appear on the mainland. For all the models on the land parcel a token will be stored in the blockchain containing the link to the data that is needed to render the objects. This link will be a magnet link to a resource stored in the torrent network provided by the server layer of the platform. In some cases, where the data is using a payment model, it will also store the smart contract address to unlock the data.
Third use is related to the smart contracts. Smart contracts are coded programs that can be executed on the blockchain. This can automate tasks or execute checks on demand to verify access or usage of models in applications. Some standard contracts will be made available on the platform but users can also create their own contracts containing the logic of their specific needs.
The server layer
The server layer is the last separated part of software that is used in the platform. It will provide a distributed data backbone for the system. It will also be used to perform interaction tasks for the clients and can be used in the governance system for the platform.
The private servers will primarily be used to store and distribute data for the network. This is an important task because there will not be a central system to store all the data for the platform. A centralized solution must be prevented for multiple reasons, the most important are:
- No single authority controlling the data
- Storage of large amounts of data is expensive
- Risk of failure of the whole system
- Prevention of unauthorized modification of data
To provide and distribute the data, servers will use a BitTorrent network. Using the BitTorrent protocol the servers will create a mesh network where the data is never all in one location but distributed in parts over multiple machines and it will create redundancy of the data. The client can download the required data from multiple nodes at the same time. This will increase the performance for accessing the data but also provides a system that is not dependent on a single server. When more people participate with private servers, the system will become more stable.
Besides the data distribution task of the private servers they will be used to increase the performance of the whole system. This is done by providing some data structures that are stored in the blockchain directly to the clients and validating transactions on that data, acting as a light node in the Ethereum network. It will be like a caching system for the database in the blockchain that can be accessed quickly and reliable. It will only be used for data that is not changing to often like the land grid. The server will update the data when changes take place in the blockchain data, but can deliver it to multiple clients afterwards.
Then there is the interaction between clients. To prevent direct access from client to client, which is an unwanted situation because hackers can target clients, the servers will act as middleman. Communication will be end to end encrypted, but will always be directed through one or more server nodes. This way, clients can not get a hold of each other’s IP address.
Now why would anyone run a private server?
We rely on the use of private servers to create a true distributed system. By participating you help keeping the system distributed and reliable. But there is also some personal gain.
When you start your server and link your public wallet address, the server will collect your properties and secures the data for you. This way it will guarantee the availability of the data on the network when your server is online. The torrent system of the server will eventually flush data when its storage limit is reached and new data is requested. By connecting your wallet this will not happen for the data you own. You can run multiple servers holding your data to create redundancy in a private setup.
The costs for running a private server are limited. The only requirements to run a server will be an internet connection and some data storage available. In case you run a planet that can make you money (because of entrance fees or payments in a shop or casino) it will be profitable to run your own server to ensure the availability of your application data. When hosting large applications that can make big amounts of money, you will make sure your servers are securing their own redundancy.
How do you run a server?
The server software will be provided as a Docker image. This is a ready to run virtual microservice system that can run on any machine and on any operating system supported by Docker. For more information about Docker please visit https://www.docker.com.
To run a Docker you can use cloud systems that support Docker containers or you can run it on your own system, even your PC. Just install Docker and use the start command for the Cosmos private server image. It will run in the background, performing the tasks it was programmed to do.
Open source software
To keep the platform open, transparent and available for improvement, all software that is used for the platform will be open sourced and publicly available for everyone. This includes the client software running in the browser, the server software running in Docker containers and the smart contracts for the blockchain platform.
The repository will be maintained by the Cosmos CR team but everyone can help building the system and making it better. Guidelines for software development and testing will be presented in the repositories.
We encourage people to create open source software on the platform. However we will not demand it for applications created for the platform. We think that usage and creativity must be rewarded, so all applications and models are allowed to be published in the Cosmos Cyber Reality metaverse. Everyone who wants to build and profit must be able to do so!
The foundation will also reward developers and designers for their contributions to the platform. General purpose tasks can be assigned to the community in exchange for $CYBR tokens. It can be seen as contracted work in favor of the foundation and the whole community.