Skip to content

weex/wispwot

Repository files navigation

wispwot - generic implementation of the spam- and disruption defense of the WoT in Freenet 
==========================================================================================

This implements the defense from the Freenet project against
disruption of communication. It is created to experiment with ways to
improve the scaling and performance.

For details on the goals,
see https://github.com/freenet/plugin-WebOfTrust/raw/master/developer-documentation/core-developers-manual/OadSFfF-version1.2-non-print-edition.pdf
and see https://www.draketo.de/english/freenet/deterministic-load-decentralized-spam-filter

It operates on a minimal representation of trust between identities:
One file that maps index-values to arbitrary identifiers
    (index,identifier)
and for each index a directory/file entry named after the index
(first two numbers for the directory, rest for the file) that
maps index values of trustees to a trust value between -100 and 100
    (trustee-index,trust)

The core of the implementation is in wispwot/wispwot.w

Currently the maxiumum number of tracked IDs is hard-limited to 65536 
to allow tracking IDs as 16bit unsigned integers (for efficiency). 
More IDs can exist in the network, but such a high count is irrelevant 
for individual interactions. To lift this restriction, string-replace 
u16vector by u32vector in wispwot/wispwot.w.

Longterm-plan: Expose a REST-service with the following actions:
- PUT an ID with trust values (trustee-ID,trust).
- GET an ID to receive its score.
- GET a list of IDs to check for update of trust and/or content.
- PUT new trust values directly (truster-ID,trustee-ID,trust) for fine-grained trust-control.
- POST a list of IDs you requested without seeing a change.

PUT of changed IDs and POST of lists of unchanged IDs drive the state
of the WoT.

See NEWS for user-visible changes.
See ChangeLog or the history for detailed changes.

## Usage

Get the trusted identities with their scores as seen from a given start identity:

$ wispwot <startfile>
<ID>,<score>
<ID>,<score>
…

As a simple example here in the repository:

$ ./run-wispwot trust/00/00
, => ONE,100

(more to come, see above for the plan)

## Install

$ ./bootstrap.sh && make install

To install only for the current user, use

$ ./bootstrap.sh --prefix=$HOME/.local && make install

Also see

$ make help

For details on installing a release, see INSTALL

## Contributors

See AUTHORS

Licensed under GPLv3 or later.

(this is the default of conf. To use a different license, replace
COPYING and the header in the main code file)

## Release Process

* Check/Update NEWS
* Increase version in configure.ac (see semver.org)
* Commit, merge to stable and tag (see branching[1])
$ ./bootstrap.sh && make distcheck

[1]: See do a release in
     http://www.draketo.de/branching-strategy#action-maintainer

------

Built on Setting up a GNU Guile project with Autotools by Erik Edrosa:
https://erikedrosa.com/2017/10/29/guile-projects-with-autotools.html