Currently I am designing the P2P overlay. It’s a very challenging task, because Coincer’s requirements aren’t trivial and might easily go against each other.

So far I have laid down the following points that an overlay should satisfy:

Efficient routing

An important part of Coincer’s protocol is direct communication between trading parties, therefore it’s very beneficial to be able to send messages between any two peers without any overwhelming overhead. This requirement also leads to a structured P2P topology.

Hidden peers

When two parties trade, it is desirable that none of them knows which node (e.g., identified by its IP address) they trade with, because then they cannot directly attack each other, they can only send each other messages over the P2P network.

NAT traversal

Even users behind a NAT or an overly restrictive firewall should be able to participate in the network (i.e., join it and communicate with other peers).

Redundancy

The worst possible thing would be to introduce a SPOF into a P2P network. Therefore, redundancy is very important. If one peer disappears, it shouldn’t affect routing/message delivery or cause a partition of the network.

What are the main problems? How a node should join the network when it’s not clear where he gets addresses of other peers from (or transitively where the source gets them)? And how to provide efficient routing when their physical identity (IP address) is supposed to be concealed?

Anonymous P2P networks are still quite a novel concept that isn’t deeply studied yet. Therefore, there aren’t works I can rely on, but I have to do the research myself instead.