/Fides

Decentralized public trust tracker and governmentless arbitrated contract resolvement application.

Primary LanguageTypeScript

Fides: Distributed Trust-Tracking

A Credit Score for Trust

This is a reproduction of the information from the homepage:

Algorithmic Justice

Your trust score is generated by Fides based on a complex system of ratings aggregated over the entire list of structured interactions ("contracts") that you've had with other Fides users. It weights each user's rating of you based on that user's amount of experience with you (adjusted by a carefully-calibrated Gaussian distribution) and on the rating user's own trust score — that way, nefarious actors won't be able to ruin your reputation.

Global Ratings For Everyone

Fides takes a holistic approach to your, and other people's, trust-scores: the score isn't limited to one particular service or job, like a credit score, Ebay score, or Yelp score — instead, it is intelligently based on any interaction that you have mutually agreed to with someone else, and promised to complete. As part of attempting to be a more general framework for trust, we also offer arbitrated "contracts" allowing a third part to judge both other parties.

Lightening-Fast Performance

Everything on Fides is updated as soon as new information hits our servers, meaning that all the information you are looking at is garunteed to be as up-to-date as possible at all times. No set refresh times, and no need to hit that refresh button yourself! Meanwhile, our entire system is structured for maximum reliable performance, so when you need it, Fides is always read to go!

Distributed Rating

We do not have one central authority choosing who gets to be marked as trustworthy and who does not — instead, all of your peers will rate you using an easy to use and proportionate rating system based on how wellthey were satisfied with their "contract" with you. Make your peers happy, and more people will be willing to trust you, because your score will be higher!

But How Exactly Does it Work?

The entire algorithm is built around two main equations: first, the equation that adjusts individual ratings based on interaction experience level (i.e. how much experience the rater has had with the person they're rating) and two, the summary equation, which collates all of the ratings that someone has received and combines them into a trust score based on the average adjusted rating they've received per interaction. Note that each rating has already been weighted using the rater's trust score, using this equation: (rating) \times (experience).

Here are the two equations:

  1. Adjustment Equation: (rating) \times    \max{(0.001, 60 \times (\frac{1}{6.5 \times \sqrt{2 \times \pi}})} \times e^{-0.5 \times (\frac{(interactions) - 10}{6.5})^{2}})
  2. Collation Equation: \text{Let S =} \sum_{n=0}^{(ratings)}{r_n} \text{ and P = } \mid \lceil \log{\max{(0.001, S \div n)}} \rceil \mid \text{ in } \frac{\lfloor S * 10^{P} + 1 \rfloor}{10^{P}}

Adjustment Equation

The basic idea of this equation is to place the number of interactions the rater has had with the ratee on a Guassian curve --- this is important because if someone has had way more than a normal amount of interactions with someone we can safely assume that they're too invested in the interaction to accurately rate, but if they have had too few interactions it's not obvious that they know enough about he other person to rate correctly. So, we need the weight of their rating to increase for awhile as they get more experience, and then decrease. I chose a Guassian distribution because that's how we generate normal curves, and normal curves tend to describe the normal distribution of something; this means that the highest point on the curve is what's within the norm and so should have the highest weight. Right now the d and u constants, as well as the various coefficients, are somewhat arbitrarily drawn: designed to lend a reasonable amount of weight to each rating in the early days of the network; once we get out of the infancy phase and have enough data to really do some investigation, I'll definitely transition to less arbitrary numbers.

Collation Equation

This takes the average of all the doubly-weighted scores and clips the number of decimals to just before the first zero (meaning that since we're doing floating point arithmetic we don't get inordinately long decimals).

Available Scripts (If You're Using a Local Version)

In the project directory, you can run:

npm start

Runs the app in the development mode.
Open http://localhost:3000 to view it in the browser.

The page will reload if you make edits.
You will also see any lint errors in the console.

npm test

Launches the test runner in the interactive watch mode.
See the section about running tests for more information.

npm run build

Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.
Your app is ready to be deployed!

See the section about deployment for more information.

npm run eject

Note: this is a one-way operation. Once you eject, you can’t go back!

If you aren’t satisfied with the build tool and configuration choices, you can eject at any time. This command will remove the single build dependency from your project.

Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except eject will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.

You don’t have to ever use eject. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.