Module P2p_taps

TAPS: Trust-Aware Peer Sampling

This is an OCaml implementation of a Trust-Aware Peer Sampling protocol based on the TAPS2 protocol described in the thesis Harnessing the power of implicit and explicit socialnetworks through decentralization.

Protocol

The protocol is based on a gossip exchange, similar to random peer sampling protocols such as CYCLON, but biases node selection based on local trust information.

This implementation differs from TAPS2 in two key ways:

  1. trust values are asymmetric, thus no agreement necessary between nodes about symmetric trust values
  2. nodes only use local information to establish trust values, without relying on multi-hop trust paths. They store trust information about direct friends, and discover friends-of-friends via a private set intersection protocol; future work remains to research asynchronous trust that considers multi-hop trust as well.

Each node maintains two views:

  1. an EXPLICIT view of nodes with associated local asymmetric trust values,
  2. a dynamic TAPS view that view exchanges can modify

The view exchange mechanism this module implements is identical to the one from TAPS2, with the following properties:

  1. Biased view selection: prefer more trusted entries when merging received views
  2. Continuous bootsrapping: continuously exchange information between both views of both types of nodes, thus TAPS-TAPS, TAPS-EXPL, EXPL-TAPS, EXPL-EXPL exchanges all happen in a randomized manner
module Default_config : S.CONFIG

Default TAC protocol configuration parameters

module Make : functor (Node_id : P2p.S.NODE_ID) -> functor (Node : P2p.S.NODE with type nid := Node_id.t) -> functor (View : P2p.S.VIEW with type nid := Node_id.t and type node := Node.t) -> functor (Config : S.CONFIG) -> P2p.S.GOSSIP with type node := Node.t and type view := View.t

Functor building an implementation of TAPS given a Node_id, Node, and gossip View.

module S : sig ... end