please check https://github.com/philipplgh/repootation to see text with emojis.
Facebook "like buttons" can be found everywhere on the Internet. Without StackOverflow upvotes it could be possible that a lot of software (maybe even Ethereum) would not (yet) exist. GitHub stars are one of the most important factors to assess the quality and popularity of a software.
While these reputation concepts are extremely powerful and make it very easy to capture reactions and a rating of content they also have major restrictions:
- they only represent one domain specific attribute - no simple format to express them
- they are centrally managed and stored on company servers (reputation can go "out of business", be target of DoS attacks)
- they are hard to process by other software such as package managers (only download audited modules, display modules with >100 likes)
What it does
Repootation (repootation) is a react component for fast and efficient rating, that can be embedded anywhere on the Internet and allows to capture reactions and ratings to content in a decentralized and verifiable way.
Repootation uses triples of the form
<content hash><relationship><signature> that are stored on orbitdb through 3Box.
With these statements we can construct an entity relationship graph and verify all edges between nodes.
How I built it
React component with one property for a content string.
It uses 3Box (orbitdb, IPFS) for storage.
ethereumjs-utils for ecRecover to get public addresses from signatures.
It uses a flattened graph datastructure with triples of the form
Challenges I ran into
Some of the problems Repootation was facing belong arguably to the hardest CS problems. And unfortunately of Repootation does not solve all of them.
- Multiple votes by one account are not allowed (check)
- One identity = one account (anti sybil attacks) (cross) - not (yet)
- central server that validates identity
- chain of trust
- proof of work
- Non repudiation: bad actors cannot revert or obscure their actions (check)
- Decentralized storage (check)
- Portable and expressive data format (check)
- Verifiable relationship statements (check)
Accomplishments that I'm proud of
- it works
- it is extremely versatile
- real-time updates (multi user)
- it can be used for important use cases (smart contract audit indicators and ratings)
What I learned
Reputation systems are hard.
What's next for Repootation
- npm module
- remix plugin