Hosting anonymous nodes
=======================

_To connect to Tor, we use [Arti](https://gitlab.torproject.org/tpo/core/arti). 
This is an experimental project with incomplete security features. See Arti's 
[roadmap](https://gitlab.torproject.org/tpo/core/arti#roadmap) for more 
information._

Using Tor, we can host anonymous nodes as Tor hidden services. To do
this, we need to set up our Tor daemon and create a hidden service.
The following instructions should work on any Linux system.

## 1. **Install Tor**

Tor can usually be installed with your package manager. For example
on an `apt` based system we can run:

```
# apt install tor
```

This will install it. Now in `/etc/tor/torrc` we can set up the hidden
service. For hosting an anonymous `ircd` node, set up the following
lines in the file:

```
HiddenServiceDir /var/lib/tor/darkfi_ircd
HiddenServicePort 25551 127.0.0.1:25551
```

Then restart Tor:

```
# /etc/init.d/tor restart
```

You can grab the hostname of your hidden service from the directory:

```
# cat /var/lib/tor/darkfi_ircd/hostname
```

For example purposes, let's assume it's
`jamie3vkiwibfiwucd6vxijskbhpjdyajmzeor4mc4i7yopvpo4p7cyd.onion`.

## 2. **Setup `ircd`**

After compiling `ircd`, run it once to spawn the config file. Then
edit it to contain the following:

```toml
inbound = ["tcp://127.0.0.1:25551"]
external_addr = ["tor://jamie3vkiwibfiwucd6vxijskbhpjdyajmzeor4mc4i7yopvpo4p7cyd.onion:25551"]
```

Now when you start `ircd`, the hidden service will be announced as
a peer and people will be able to connect to it when they discover
you as a peer.

These instructions are also applicable to other nodes in the DarkFi
ecosystem, e.g. `darkfid`.
