Points are super popular right now in Web3. I’ve been thinking about ways to use Ceramic as storage infrastructure for “offchain but verifiable” points systems. They would have the benefit of being decentralized/verifiable AND low cost/scalable – filling the sweet spot between blockchains/onchain and offchain.
The idea you outlined there makes a lot of sense to me. We directly implemented something very similar for our Contribute leaderboard. Would be really nice to have it nicely packaged in a library to use out of the box.
Recapping the implementation linked above, I think something like this could be built by designing an SDK similar to Segment where the developer imports the SDK to their project, then adds an event tag throughout their codebase. When these tags are triggered, an event is created on Ceramic. While this event could be created client-side by the user, I think it makes more sense for all events to be authored by a server’s key, and just associated to the user’s accounts via a relation. Now for the spam protection part… I think on the indexer side (e.g. ComposeDB) the indexer could filter it’s index of all points with parameters such as Gitcoin Passport score, onchain history, etc. This points dataset could be indexed, consumed, and queried using ComposeDB and these points can be computed on to calculate things like reputation scores or other.
That leaderboard looks nice. And totally agree about it being nice to be put the functionality together in a simple package for devs. Currently hoping someone likes this idea and is inspired to BUIDL. I’m willing to put together a bounty to kickstart things.
Points is one of the core abstraction. Another one is Events. :
- Event to ++ Points: UserAction
- Event to – Points: Redemptions or Rewards?
- A basic, easy to integrate Event tracking sdk: pkit.track()
- A way to publish Event → Points as Rules (verifiable comupte in future?)
- Explorer Integration for full transparency
- Definitely need a huge focus on Anti-sybil. Bots/Farmers will go Hammmmm on this
- Built on top this basic Points Infra could be another Quest or Bounty Layer for onchain or offchain activity tracking and attestation
- A extension of the points system could even offer ways to bridge them onchain since everything is verifiable
- Spendable Points could even be bootstrapped into its very own payment system built on top a set of Account Abstraction, transaction relay etc. (inspired by one of the best live points on Farcaster (Warps))
I will come up with a full proposal/RFC really soon
For us, the next step simply extend the profile sdk workd we did previous @storybook/cli - Storybook
Maybe this could be achieved using OrbisDB plugins?
Let’s try to flesh out the model for events because I think that’s going to be the core consideration… how do different apps add data specific to themselves and what each of their events means?
Haven’t digged into Orbit yet. The idea is the transformation should be verifiable and repeatable by re-run the data log. For this I think the best DX is to be as similar to subgraph as possible becasue this is
probably already familiar for web3 devs: Creating a Subgraph | Docs | The Graph
On high level:
Rule: Pure function Code for event validation and calculating points
Ceramic is perfectly designed to achieve it and we should push this narrative as an ecosystem! We need a specific framework to facilitate developers’ or large organizations’ workflow on Ceramic, a dedicated SDK/Interface could be extremely valuable here. Storing a simple JSON document with a dedicated schema is “easier” on Ceramic than generating a verifiable proof or computing a score.
From OrbisDB perspective, we would like to facilitate verifiable credentials storage and usage: 1. We are pushing experts in this field to build a new OrbisDB plugin to facilitate VC creation (no-code configuration of credentials metadata, proofs) + a simple SDK function to make it happen easily 2. We are enabling immediate usage such as credential-gating.
@msena @mzk @0xEE3CA4dd4CeB341691 and everyone, are we able to follow up on a specific call regarding points - I don’t want to miss this use case and we already have some potential candidates/org willing to use it.
If we could have a simple SDK to generate event logs on all actions + a standard event log schema, it could be a great step forward.
Then, we could leverage those points in various ways - A dashboard on S3.xyz or even a OrbisDB plugin to “compute” your score!
Happy to organize it!
Definitely, let’s set something up ASAP @Charleslev! Want to send an invite? This is prio for me. I know @YFolla and Oamo are interested in collaborating as well. cc @0xEE3CA4dd4CeB341691 @dazuck @Corrado @Justina @rohhan @mzk
Happy to sync specifically on this topic @Charleslev and figure out the best implementation possible You know were fans of OrbisDB plugins!
Thanks, @YFolla I’m sure you have a strong vision on this topic as you achieved it at scale for Oamo. I’m excited that you are part of this conversation!
First meeting for the working group is scheduled for Monday 2pm EST. Thanks for scheduling @Charleslev
Love this use case for Ceramic as a Universal Points Platform!
Points is one of the core abstraction. Another one is Events.
Agree that it’s probably preferable to abstract out Events from Points. Instead of turning actions directly into Points that are immediately stored in Ceramic, there’s a potentially bigger opportunity to first store the Events, and let applications run custom compute (i.e., a custom mapping of Events : Points) on top to generate points for their custom use cases.
That being said, there is also the alternative of a “standard” universal Points mapping recommended in the Ceramic ecosystem, which may enable community to form a stronger bond over things like a more unified global leaderboard.
For those following along, below are the notes created by the working group during the initial kickoff call and follow on work. Doc is super rough and we’re sort of just thinking out loud here. Reply to be added to the next working group meeting, and/or let us know your thoughts below!