# Trust Graph Bonus

*Authors: BlockScience and SDF, July 2023*

## Summary

The Trust Graph Bonus is a module developed for NQD that increases voting power for community members that are trusted and central on the ecosystem network. The module allows users to assign trust to other users. As opposed to the Reputation Module, which assigns additional Voting Power based on the individual collection of verified badges, the Trust Graph Bonus allows users to actively form a network of trust within their community.&#x20;

The relationships within the Trust Graph Bonus module are distinct from those within the Quorum Delegation, but might show high correlations. While it might be assumed that a user trusts someone who they delegate to, this assumption does not always hold true in practice. Trust is expected to be assigned more liberally - a user can assign trust for any reasons, as there is no direct effect on their own choices and voting power. Similarly, a user can assign trust to a high number of other users, while Delegation is limited.&#x20;

The rationale for this design is to enable active contribution to Voting Power determination by the community. The formation of a trust network can further reveal interesting dynamics emanating from the community. The module was highly inspired by prior work from Source.Cred and Block.Science. &#x20;

Further reading on some of the underlying choices can be found here: <https://medium.com/sourcecred/exploring-subjectivity-in-algorithms-5d8bf1c91714>

### Use Cases

* Permanent Trust: Communities thrive on localized interactions and social association. Enabling a community to actively set trust relationships, determining additional voting power for community decisions, can increase representation of users. Over time, such a mechanism could be iterated on to represent a proxy for real relationships and social interactions.&#x20;
* Temporary Trust: Communities sometimes face temporary decisions where expertise is not always globally attributable or explicit. The Trust Graph Bonus could enable a temporary formation of trust based on a specific decision, allowing the community to collectively attribute the expertise based on local relationships and association. In such a scenario, a separate and temporary instance of the Trust Graph Bonus could help form a more representative view on relevant expertise and experience.&#x20;

## User Journey

1. User A decides to assign trust to another User B.
2. User A assigns trust via the UI.
3. The assigned trust is taken as input to the Trust Graph Bonus.
4. When voting, User B's Voting Power is adapted due to User A's trust assignment.&#x20;

## Module-specific Adjustments

#### Parametric Adjustments

* alpha: (Initially at 0.0)&#x20;

What is alpha: The uniform seed vector drives some base level of credit into every node and the mixing process allows it to diffuse throughout the network; the coefficient *alpha* can interpreted as the rate at which this credit is injected: larger *alpha* will drive the solution closer and closure to uniform PageRank and smaller *alpha* will allow the credit to diffuse much further resulting in more accumulation in pockets and thus a much wider spread between the largest and smallest values.

* Self-loop weight: (Initially at 1.0)
* Upstream weight:  (Initially at 0.0)&#x20;

#### Logical Adjustments

* Allow for bi-directional trust flows: \
  While currently only the receiver of a trust assignment receives a bonus, actively assigning trust could also be seen as a value-add to the network.
* Allow for trust to flow further over individual users: \
  When User A trusts User B, the trust currently stops there and does not flow further to Users C, D, and E who are trusted by User B. However, one could argue that it is relevant whether a highly trusted User or a barely trusted User actively assigns trust.&#x20;
* Allow for trust to decay/accumulate over time/rounds

#### Functional Adjustments

* Allow for capping the individual Users anyone can trust
* Allow for a functional requirement to be passed (such as a time limit) before a new User can trust someone
* Allow for a functional requirement to be passed (such as a time limit) before a new User can be trusted
* Adjust incentives to trust someone / become trusted
