The Solid decentralization effort decouples data from services, so that users are in full control over their personal data.
Since services can not primarily depend on data collection as a primary business model anymore, alternative forms of monetization,
such as micropayments via Web Monetization are essential for incentivizing application development.
The goals of our project involve enabling the monetization of Solid application, allowing Solid identities to be linked to Web Monetization wallets, and incorporating payment processing into Solid’s authentication.
In this first report, we share our current progress on this project.
Learn more about our project here: https://github.com/KNowledgeOnWebScale/solid-web-monetization
Our first focus on the project was having a (web) application to assign payment pointers to a Solid WebID. This is a requirement to get started on the rest of the project. It also gave us a chance to dig in to Solid development and the use of different libraries. That web application is now ready, and allows us to log in to a Solid identity provider of your choice and then add one or more payment pointers to that WebID.
One of our three original objectives was to be able to configure a link between a user's Solid identity and his/her wallet. With the before mentioned application that allows adding payment pointers, we feel that this objective is near to completion. Of course some minor tweaks might be done in the future, but the bulk of that work is done. There is also an auto deployment available of that application via our CI/CD pipeline, which is hosted at https://knowledgeonwebscale.github.io/solid-web-monetization/.
Originally we were planning on using the @inrupt/solid-ui-react library to leverage most of the work, but we have since moved from React to Angular and used the lower level @inrupt/solid-client-authn-browser library to leverage the solid auth work. We chose N3 for parsing and writing the RDF data in the Solid WebID.
A second objective involves tying into the Solid authentication library to trigger a check for payment pointers in the user's Solid Identity. This objective has not been started yet. We are however researching the different libraries that can be used to carry out the actual payments. This involves using the Interledger's STREAM protocol and finding supported libraries. This last task has proven to be difficult, as all browser JS/TS plugin libraries that are responsible for settling payments on different networks (eg. paypal, ripple), are still in development. We are currently exploring our options here, since so far we were not able to compile them for a browser environment (instead of a node environment). Once we get some prototype payment transactions going, we can move on to this second objective of integrating into the Solid authentication hook.
The third objective was creating a prototype monetized Solid application. This is an objective that will be saved for last, since it is easiest when all links of the full chain have been researched and implemented.
Milestone 1: Application to configure a Web Monetization wallet into a Solid identity
Task 1.1. Extension of WebID ontology to include link to Web Monetization Wallet
We are of the opinion that Payment Pointers should have an extra indirection so that more properties can be attached to a single payment pointer. This would allow a user to (in the future):
- Mark a payment pointer with a purpose/tag (eg. work, personal)
- Mark a payment pointer as default (if there are multiples)
- Use different types of Payment Pointers (right now we are working with an
- Easily add any more propeties in the future if deemed necessary.
Our solution initially required RDF BlankNodes to implement this. However blank nodes are still problematic when parsing and wrinting RDF, so we've opted to skolemize the blank nodes.
Task 1.2. Application to configure a Web Monetization wallet into a Solid identity
This started out as a React-Typescript project, because we wanted to reuse the @inrupt/solid-ui-react library. This library leans on top of the @inrupt/solid-client-authn-browser library. Since however the newest features of that underlaying library weren't available yet and we needed more fine grained control, the
@inrupt/solid-ui-reactlibrary was dropped. Because the team is very familiar with angular applications, we then quickly rewrote the application as an angular application using that lower-level
When the user logs in, he/she can choose between 3 identity providers: inrupt.net, solidcomminity.net and a custom identity provider (url). The latter one can (among others) be used to refer to the Community Solid Server (CSS).
Milestone 2: Extension of the Solid authentication library with Web Monetization support
Task 2.1. Analysis of Solid/WebID authentication protocol
Theoretical work on this task has started. Most work so far has gone into researching the OAuth extensions that Solid/WebID would require on top of the standard OIDC/OAuth 2.0 workflow since we are familiar with that flow. More specifically this meant reading up on Proof of Posession Tokens (PoP), Provider Selection, WebID URI derivation, Provider Confirmation.
More work needs to be done here to thoroughly grasp the workflow, before integrating it into the Solid authentication hooks.
Task 2.2. Analysis of Web Monetization protocol
This task is ongoing. It involves reading the Web Monetization Specification and theorizing about web monetization use cases and how to practically surface some decisions to the user (eg. picking a payment pointer, setting a payment limit, etc).
Task 2.3. Theoretical integration of WebID and Web Monetization protocols
[Status: Not started]
All following tasks and milestones have not been started yet
We are collaborating with other initiatives that combine Web Monetization with Solid on https://github.com/solid/webmonetization.
The next milestone is of course Milestone 2. Once we have a deep enough insight into the protocols and specifications we can start the theoretical integration of the WebID and Web Monetization protocols (Task 2.3) and follow it up with the implementation. This would then immediatly get us started on Milestone 3 and its tasks.
We welcome any help and insights regarding any browser-ready JS libraries that can be used to carry out actual payments.
Learn more about our progress here: https://github.com/KNowledgeOnWebScale/solid-web-monetization/projects/1