Note for IPFS implementation.
Repo represents all persistent data of a given ipfs node. https://github.com/ipfs/kubo/blob/master/repo/repo.go#L21
https://github.com/ipfs/kubo/blob/master/docs/add-code-flow.md
https://github.com/ipfs/go-ds-s3
https://github.com/ipfs/kubo#map-of-implemented-subsystems
https://github.com/ipfs/awesome-ipfs#articles
You can find a lot of stuff on DHTs(how do we find content & peers in the network?) https://medium.com/textileio
https://decentralized.blog/understanding-the-ipfs-white-paper-part-1.html
Understanding the IPFS White Paper part 1
https://github.com/ipfs/go-unixfs/blob/master/importer/importer.go
https://blog.cryptostars.is/libp2p-the-network-engine-behind-ethereum-polkadot-and-ipfs-bc2686affa6d https://docs.libp2p.io/concepts/appendix/glossary/#swarm
The peer id is a cryptographic hash of a peer’s public key.
Peer routing in libp2p uses a distributed hash table to iteratively route requests closer to the desired peer id using Kahdemlia algorithm.
That can be achieved by content routing interface with same implementation of Kahdemlia algorithm.