The idea is to make a network where nodes can add values to the DHT (and not store them locally, a value should be stored in the closest node to its key) and others who have the keys (which for me are sha2-256 multihash) can retrieve these values.
So to get these nodes to be in the same network without having to hardcode the addresses etc. I found the pubsub pattern (the code im using is the pubsub example in the ipfs-camp-2019) that can give me this, and i found a DHT already defined there for routing.
This example uses Provide() to tell nodes that it has a certain CID and peers :
Create a CID of the value i want to store
Find the closest Peer to this CID by dht.GetClosestPeers()
I take this peer and make a connection to it and send it the CID and the value (using the chat example)
Each node has a local storage (i use a map for this) to store these values, so when it receives it, it adds to its local storage
After adding the key:value to the storage, it executes dht.Provide()to announce that it has that entry
Every node who wants this value and has the key, it executes dht.FindProviders()to find a peer having that, and it establishes a connection with it to retrieve the value from its local storage.
The idea is to make a network where nodes can add values to the DHT (and not store them locally, a value should be stored in the closest node to its key) and others who have the keys (which for me are
sha2-256 multihash
) can retrieve these values.So to get these nodes to be in the same network without having to hardcode the addresses etc. I found the pubsub pattern (the code im using is the
pubsub
example in theipfs-camp-2019
) that can give me this, and i found a DHT already defined there for routing.This example uses
Provide()
to tell nodes that it has a certainCID
and peers :CID
of the value i want to storeCID
bydht.GetClosestPeers()
CID
and the value (using thechat
example)key:value
to the storage, it executesdht.Provide()
to announce that it has that entrydht.FindProviders()
to find a peer having that, and it establishes a connection with it to retrieve the value from its local storage.