# DHT

In order to coordinate, peers form a Distributed Hash Table: a distributed "dictionary" where each peer can store and get values. To initialize the first DHT node, run

```python
from subnet import DHT, get_dht_time

dht = DHT(start=True)
# create the first DHT node that listens for incoming connections from localhost only

print("For incoming connections, use:", dht.get_visible_maddrs())
```

You can now start more peers that connect to an existing DHT node using its listen address:

```python
dht2 = DHT(initial_peers=dht.get_visible_maddrs(), start=True)
```

Note that `initial_peers` contains the address of the first DHT node. This implies that the new node will share the key-value data with the first node, **as well as any other nodes connected to it.** When the two nodes are connected, subsequent peers can use any one of them (or both) as `initial_peers` to connect to the shared "dictionary".
