Discussion in #6586.
Starting with Tor version 0.2.7.1 it is possible, through Tor’s control socket API, to create and destroy ’ephemeral’ hidden services programmatically. https://stem.torproject.org/api/control.html#stem.control.Controller.create_ephemeral_hidden_service
This means that if Tor is running (and proper authorization is available), bitcoin automatically creates a hidden service to listen on, without user manual configuration. This will positively affect the number of available .onion nodes.
- When the node is started, connect to Tor through control socket
- Send
ADD_ONION
command - First time:
- Make it create a hidden service key
- Save the key in the data directory for later usage
- Make it redirect port 8333 to the local port 8333 (or whatever port we’re listening on).
- Keep control socket connection open for as long node is running. The hidden service will (by default) automatically go away when the connection is closed.
Adds command line options:
-listenonion
Automatically create Tor hidden service (default: 1)-torcontrol=<ip>:<port>
“Tor control port to use if onion listening enabled (default:127.0.0.1:9051
)
TODO:
- SAFECOOKIE authentication support (see discussion in #6586)
- HASHEDPASSWORD authentication: manually provide Tor credentials
- Logging: most of the more specific logging should go into a debug category