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

#

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

  • creating a pico creates an associated pod with a unique ID

P0

2

dev

delete pico and associated pod with one action

can easily clean up when the pico is no longer needed.

  • deleting a pico deletes the associated pod and all its data

P0

3

dev

have full access to pod functionality within KRL

so that I can programmatically control the pod

  • Core pod API calls are mapped to Wrangler events and queries

  • Pod functionality is surfaced in a natural way for pico uses

P0

4

dev

use a Javascript library for writing dApps against picos with pods

easily write JS-based dApps that use picos and pods

  • demo application shows the usage of the library in a dApp running in a browser

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.

  • all related events are documented with expected state changes and any follow-on events

  • all related queries and their expected return values are documented

  • all JS functions in library are documented

P0

6

dev

control access to the data in the pod progrmmatically

so my dApps can protect my user’s data

  • events for access control

  • queries for access control

 

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.

  • postlude command stores large file types

  • expressions can access artifacts in the pod

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

  • All associated docker and docker compose files are available

  • Commands to standup a new instance of the dApp back end are properly documented

P0

9

SA

run this all on AWS Fargate

so that I can easily standup a dApp backend without administering a server

  • configuration for Fargate is done and documented

  • A dApp backend can be started with console clicks

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

  • tests for lifecycle operations

  • tests for access control operations

P0

High-Level Design:

  1. Pod server will run alongside pico-engine. They are hosted in Docker and engine operations are coordinated using Docker Compose.

  1. Each pico will have a separate pod with the pod ID being unique identifier that the pico controls.

  2. The Wrangler wrangler:new_child_request event is modified to include attributes for adding a pod when the child is created.

  3. 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:

  1. Learn picos (lessons)

  2. Learn Pods

  3. 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.

  4. Create standalone Wrangler Javascript library for dApps.

  5. Pico lifecycle events are completed supported (e.g., deleting a pico deletes the associated POD).

  6. Functions and rules support pod access control.

  7. All events and queries are properly documented.

  8. Several cookbook examples are provided.

    1. 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.