Primary Maintainer: Benjamin Bollen ([email protected])
Secondary Maintainer: Peter Jankuliak ([email protected])
Routing - a specialised storage DHT
Crate | Linux | Windows | OSX | Coverage |
---|---|---|---|---|
| API Documentation | SAFENetwork System Documention | MaidSafe website | Safe Community site |
#Overview
A secured DHT, based on a kademlia-like implementation, but with some very stark differences. This is a recursive as opposed to iterative network, enabling easier NAT traversal and providing more efficient use of routers and larger networks. This also allows very fast reconfiguration of network changes, aleviating the requirement for a refresh algorithm. A recursive solution based on a network protocol layer that is 'connection oriented' also allows a close group to be aligned with security protocols.
This library makes use of Public-key cryptography to allow a mechanism to ensure nodes are well recognised and cryptographically secured. This pattern allows the creation of a DHT based PKI and this in turn allows a decentralised network to make use of groups as fixed in relation to any address. This is particularly useful in a continually fluid network as described here, creating a server-less and autonomous network.
This is a very under researched area. For a general introduction to some of the ideas behind the design related to XOR Space, watching The SAFE Network from First Principles series is recommended. The slides for XOR Distance Metric and Basic Routing lecture are also available here. The last video from the series on how the same ideas were applied to decentralised BitTorrent trackers is available here. A proper formalisation of the Routing algorithm is in progress.
###Pre-requisite: libsodium is a native dependency for sodiumxoide. Thus, install sodium by following the instructions here.
For windows, download and use the prebuilt mingw library. Extract and place the libsodium.a file in "bin\x86_64-pc-windows-gnu" for 64bit System, or "bin\i686-pc-windows-gnu" for a 32bit system.
##Todo Items
General note: please document code you touch, and introduce property-based unit tests where applicable.
- MAID-1007 limit swarm to targeted group
- MAID-1105 delay RoutingTable new ConnectRequests
- MAID-1106 examine Not For Us
- MAID-1032 correct name calculation of pure Id
- MAID-1034 ConnectResponse needs to include original signed ConnectRequest
- MAID-1043 remove old sentinel
- MAID-1059 rename types::Action -> types::MessageAction; rename RoutingNodeAction -> MethodCall
- MAID-1114 Relay module
- MAID-1060 update Interface for Vaults
- MAID-1040 enable Id, PublicId and NodeInfo with 'relocated' name
- MAID-1037 Address relocation
- MAID-1052 Message Handling
- MAID-1062 extract all_connections into a module
- MAID-1070 drop_bootstrap in coordination with CRUST
- MAID-1071 Implement relay id exchange for client node
- MAID-1066 Routing Example : update to internal event loop
- #314 simple_key_value_store input validation lacking
- #324 simple_key_value_store peer option
- #336 Routing
0.1.62
causes API inconsistency in usage of RoutingClient
- #330 Who-Are-You / I-Am message for identifying new connections
- #312 Fix never-connecting client
- #343 Filter escalating number of connect requests
- #342 Clean up overloaded debug command line printout
- #347 Relay GetDataResponses and cached GetDataResponses back to relayed node
- #354 Fix release builds
- MAID-1069 OurCloseGroup Authority
- #363 Refresh message and ad-hoc accumulator
- #373 Reduce group size for QA to 23
- MAID-1063 replace MessageTypeTag with full enum.
- MAID-1064 POC first and move UnauthorisedPut into explicit message structure.
- MAID-1065 Return Result for Put Get Post-
- MAID-1042 Sentinel Reference document
- MAID-1045 Instantiate pure Sentinel for PUT GET (POST) / from node & from group
- MAID-1048 Instantiate Key Sentinel for FindGroupResponse
- MAID-1049 Instantiate Account Sentinel for orderable Refresh / AccountTransfer messages
- MAID-1046 break down (header, body) into correct (request, claim) and dispatch
- update signature of handler functions to request and claim
- MAID-1051 update construction of message_header
- MAID-1050 block messages at filter once Sentinel has resolved