Remix IDE has a new fully decentralized tool for teaching solidity and for teaching Remix itself — its called Remix Workshops and it’s a plugin.

The icon for Remix Workshop

With it, tutorials load inside of Remix. Anyone can write a workshop and everyone can try out the workshops that have been created.

Creating an app that utilizes decentralized storage required us to develop a strategy to leverage the existing decentralized storage tools to fit the requirements of the app.

But first, here’s a quick description of what is in Remix Workshop.

Think of it as Codecademy for Solidity directly inside Remix IDE.

A workshop is a tutorial that is divided into a number of steps. Each step can contain:

a markdown file, to explain what needs to be done

file, to explain what needs to be done a solidity file (for solidity tutorials), with the default state of the step

file (for solidity tutorials), with the default state of the step a test file (for solidity tutorials), to test the content provided by the tutor

A tutor — that is to say a workshop’s author — writes a tutorial and makes it accessible. A student — chooses a tutorial from the list of tutorials and works on one over several sessions — so their progress needs to be saved.

Storing content and state in a decentralize app.

Here is a list of the information that we need to store:

A list of tutors

A list of their tutorials

The contents of the tutorial — the .md and .sol files

— the .md and .sol files The metadata of a tutorial — the title and description of the workshop and the location of the .md and .sol files

— the title and description of the workshop and the location of the .md and .sol files The state of a students work on a tutorial

For a centralized storage solution, organizing a relational database would be straight forward.

For a decentralized solution, we needed to decide where the data would be stored and how to assemble a workshop’s pieces into a functioning whole.

Of course we needed IPFS and/or Swarm, but we are also using a smart contract and a tool called 3Box. 3Box is a layer on top of IPFS, that creates a public and private space for an address.

Our assembled solution looks like this:

The list of the tutors: stored in a smart-contract on an Ethereum network (Görli for now)

The list of workshops: stored in a private 3box space

The metadata of a tutorial: stored in a public 3box space

The content of the tutorial: stored on Swarm, IPFS or Github

A student’s progress on a tutorial: stored in a private 3box space

Using this architecture

When a tutor creates a tutorial, the metadata of the tutorial is saved in the tutor’s 3box profile and the tutor uploads the workshop files to swarm or IPFS or github (obviously github is ubiquitous and that’s not decentralized — but I digress).

When a student goes to the workshops plugin to see all the tutorials, Remix first retrieves a list of all the tutors’ addresses from our smart contract. Then Remix goes to 3Box to the public “space” of each tutor and gets the metadata of each tutorial. With the metadata of all the tutorials, Remix can assemble the master list of tutorials.

A student can retrieve their work (the state) on a specific workshop by signing-in to 3box (through Remix) which gives the app access to their 3box private space and which will then load that workshop with the given state.

Here’s a diagram of the of the plugin’s architecture:

Here’s the smart contract on Goerli:

https://goerli.etherscan.io/address/0xc5296CEf8a3ca94e8DAd5C3fC9605b5Ac6fCD297#code

Using Remix Workshops

We will soon be posting an article explaining step by step how to use Remix Workshops.

Creating a workshop

Similarly, for you tutors out there, we will soon be writing a post about how to create a workshop and how to get it to appear in the Remix Workshop plugin.

Stay tuned!