Blue Coati is a prediction market based curation system inspired by Vitalik Butterin post where curators are betting on whether a particular content will be judged inappropriate by "moderators"
The main difference from Vitalik's solution is that we use a unique algorithm to allow bets to remain off-chain, providing a much better user experience where the only friction is an initial deposit.
Application, (like the demo of a decentralised web forum, we implemented), define the rules to abide and for each post posted the content writer first bet that its content will be approved, risking thus a part of the initial deposit they set to participate.
Curators can then bet whether the post should be removed or not. They do by simply signing an off-chain message. Their deposit need to be sufficient to cover all recent bets they have posted,so they can be punished if their prediction is wrong.
As bets get counted, posts with negative bet in total get filtered out. Simple readers are thus protected by curators from seeing inappropriate content or spam.
Using such system, moderators are for most time not needed. The simple fact that if they can act and that invalid bettors are slashed prevent bad behaviour to happen
When they act and submit a judgement on-chain, the bets can then be submitted on-chain for bettor to get punished or rewarded depending of the outcome.
With off-chain betting, Blue Coati provide a really efficient and elegant solution to avoid inappropriate content to appear on a decentralised web forum or discussion platform. It requires minium requirement for curator to participate while remaining a loss for spammer.
While we did not have time to implement it, we also plan to require moderator to put a stake and hook our system with a court system like Kleros so that in case of a mis-judgement, content creator or curators can appeal. This render the system censor-ship resistant too.
This is a big advantage over traditional web2 platform that while being able to moderate inappropriate content can also censor.
It is worth noting that our application is fully decentralised with all content stored on ipfs via 3box/orbitdb and that no server need to be involved.
The application is composed of 3 components:
webapp built using svelte + 3box/orbitdb : it stores all post and bet on ipfs. The users are thus in control of the data. The filterring of post based on bets is entirely done by the application to remain fully decentralised.
contracts are built using solidity and buidler: it is composed of
a Deposit contract that lock ETH for a time period so recent bets can be punished
and a Judgement Contract that store the outcome of moderator decision and allow bettors to claim their reward / punish invalid one. See code source.
subgraph. We use thegraph.com to help the frontend gather information about the deposit and judgement decision. This is useful to speed up the frontend, but not necessary.
As mentioned, our frontend is in charge of counting the bet, so no server need to be involved and we use a tree data structure to store and count bets across the different user (orbidb)
The tree data structure is at the core of our unique algorithm for off-chain betting.
Indeed, with off-chain betting, since there is no store of bet (the blockchain), we needed to find a way to ensure that
a bet remains available for other to punish (this is relatively easy as without making it public, the bet cannot be considered for filtering, thus losing its purpose.
a bet cannot be added after the fact so it is submitted on-chain but never public before hand: For that we requires bet to be counter-signed to be used as reward.
bets are incentivised to counter sign other, else bettor would always counter sign the same bet to avoid other being rewarded. For that we use a specific weighting mechanism to make it necessary for bettor to bet on existing bet (this is obviously done behind the scene by our app)
We basically decrease the weight of bet reusing same counter bets
Link to more info : https://www.notion.so/Blue-Coati-6ad110fa597b475aa77f4d88f2e30040