A multiplayer virtual world that exists on the Ethereum blockchain.
I have long been inspired by the “metaverse” as described in Snow Crash by Neal Stephenson. In some of my previous experiments I had built grid based worlds where you could own a parcel of land and put your own content there.
The problem with those experiments, was all the land ownership records were hosted on my own server - and that meant no-one really owned their land - I was building a walled garden, and that’s not how I imagined the metaverse.
Ethereum is interesting because it lets you run programs on the blockchain, in the form of solidity contracts. After looking over pixelmap.io, I realised that you could use Ethereum to record who owned what parcel, and also to record what content went on each parcel.
By storing this data in Ethereum, it meant that the world was truly decentralised, it wasn’t relying on any one server to record who owned what, those ownership records were all on the Ethereum block chain.
Polygons and the Blockchain
The next problem was how to host the content that was on those scenes. A single small parcel can be 100's or 1000's of kilobytes in size, and you can’t store that much data on the Ethereum blockchain, so I needed a decentralised way of storing parcel data, including the .obj files, .jpg textures, sounds and scripts.
IPFS — The Interplanetary File System
IPFS is an awesome project to build a permanent web. An analysis of the million pixel homepage showed that 22% of the links were dead. Geocities, the home of thousands of wonderful and weird amateur web pages, was shut down when Yahoo didn’t want to pay to host it any more. IPFS solves this by making webpages permanent, and decentralised.
If I was going to built a permanent metaverse for people to visit and explore, I needed a permanent way of hosting the content, and IPFS was it.
You can upload a parcel to the IPFS network and it will be hosted by all the nodes running IPFS, there is no longer just one server hosting your content, it is there forever, referenced by a hash like this:
So now we have two of the necessary components for a decentralized virtual world, land ownership in Ethereum, and content hosted on IPFS.
Web Real-Time Communication
The final component of the puzzle was presence, seeing and hearing other people that are in the virtual world.
With my previous work, I had made a node.js server that connected all the players together using websockets. However, if I did this for Fontus, it would mean running hundreds of servers so that players could see a shared world together. I wanted to avoid this, and instead turned to WebRTC, so players could connect directly to each others computer and share their positional information.
Using WebRTC, and a lightweight signalling server, your browser connects directly to other players, and shares chat messages and positional information. Because this is a high bandwidth, direct connection, in the future you will be able to voice chat and share content with each other.
Parcels in Fontus are created using A-Minus markup, an HTML-like language that is a subset of A-Frame. Currently the easiest way to create parcels is to generate your 3d models in a tool like Sketchup or Blender, and then use a text editor to compose your scene and position the models as you want them.
In the future, I want to create an exporter for Blender so that you can upload directly to IPFS and instantly update your parcels in the world.
A-minus markup is similar to A-Frame, and if you pick and choose which elements you use, you should be able to create Fontus parcels using A-Frame tools. For example you could use the inspector to editor your parcel. Because we have integrated physics and multiuser, we decided to implement our own engine instead of using aframe core.
- Phase 1 — Test and review solidity contract for land ownership and deploy the contract for global use. Allow anyone to purchase land on the grid and put up their content. Document process for publishing content to your parcel.
- Phase 2 — Improve usability and inter player interaction, add voice chat, hand controls, improve Vive and Rift support.
- Phase 3 — Add mobile support (GearVR and Daydream). Improve tools for adding content to the grid, a plug in for blender that upload directly to the IPFS network.
- Phase 4 — Improve user interaction with skeletal animation, avatar accessories and inverse kinematics. Add animation and scripting to the a-minus engine.
Parcel sales will start with the end of phase 1. You will be able to use the website (with the metamask plugin) to purchase parcels, and the parcel will be transferred to you directly via the blockchain.
The world is limited to a maximum of 1,048,576 parcels, distributed in a 1024x1024 grid. Parcel sales will start at the origin (0,0) and move outward.
New users will be dropped near the origin, and over time we will develop transportation infrastructure to distribute people through the world to interesting neighbourhoods.