Picos and Pods
dApps using Solid Pods and Picos
Goal: The goal of this project is to combine picos and Solid pods to build a Pico Data Store (PDS) that supports creating decentralized applications or dApps. dApps give people control over their apps and the data in them.
This project will make it possible for a developer to instantiate picos that have an associated Solid pod and then use the pod from within KRL programs to store data. Using the pico API, Javascript-based applications can be created that have no identity, hosting, or data storage infrastructure.
User Stories
Primary persona is developer (dev)
Secondary personas are system administrator (SA) and project sponsor (PS)
Priority definitions
P0: Must have for launch
P1: Nice to have for launch
P2: Post launch
# | As a | I want to | So that I | Acceptance criteria | Priority |
---|---|---|---|---|---|
1 | dev | create a pico with an associated pod | provide backend logic and storage for a dApp |
| P0 |
2 | dev | delete pico and associated pod with one action | can easily clean up when the pico is no longer needed. |
| P0 |
3 | dev | have full access to pod functionality within KRL | so that I can programmatically control the pod |
| P0 |
4 | dev | use a Javascript library for writing dApps against picos with pods | easily write JS-based dApps that use picos and pods |
| P0 |
5 | dev | have docs for Wrangler pod-related events and queries and the JS library | write dApps without digging into the code to figure out how it works. |
| P0 |
6 | dev | control access to the data in the pod progrmmatically | so my dApps can protect my user’s data |
|
|
7 | dev | I want to store pictures, icons, and other large artifacts in the pod and use them from the pico | so that dApps can do things like manage pictures, audio, and movies. |
| P0 |
8 | SA | easily start up a pico engine and an associated pod server with a nginx proxy in front | easily run a backend server to support dApps |
| P0 |
9 | SA | run this all on AWS Fargate | so that I can easily standup a dApp backend without administering a server |
| P1 |
10 | PS | have a set of tests available that provide good coverage for the integration of the pico engine and pod server | so that I can have confidence in merging this into the Github repo |
| P0 |
High-Level Design:
Pod server will run alongside pico-engine. They are hosted in Docker and engine operations are coordinated using Docker Compose.
Each pico will have a separate pod with the pod ID being unique identifier that the pico controls.
The Wrangler
wrangler:new_child_request
event is modified to include attributes for adding a pod when the child is created.Any specialized rules or functions necessary to configure and use the pod are available in a Wrangler extension for programmers to use.
Plan of Attack:
Learn picos (lessons)
Learn Pods
Solid Pod Server, with appropriate config options in a Docker file and Docker compose file for running alongside pico engine (in a container), behind Nginx (in a container), with letsencrypt cert.
Create standalone Wrangler Javascript library for dApps.
Pico lifecycle events are completed supported (e.g., deleting a pico deletes the associated POD).
Functions and rules support pod access control.
All events and queries are properly documented.
Several cookbook examples are provided.
At least one Javascript, unhosted application demonstrates the concept
Demonstration:
To demonstrate the idea, we should be able to write a dApp (i.e., just Javascript hosted anywhere) that references the picos and their associated pods for backend server and data storage.
Solid References
The following videos provide useful introductions to Solid and pods
Other material:
Copyright Picolabs | Licensed under Creative Commons.