This encoding is taken from Bitcoin. If you’ve ever seen a Bitcoin
address, you’ve seen base_58 encoding in action. The goal behind
it is to provide data compression without compromising its human
readability. Base_58, for the purposes of this protocol, is
defined by the following python methods.

The last element is the ‘subnet ID’ we referred to in the previous
section. This object is used to weed out undesired connections. If
someone has the wrong protocol object, then your node will reject
them from connecting. A rough definition would be as follows:

A node ID is taken from a SHA-384 hash of three other elements.
First, your outward facing address. Second, the ID of your subnet.
Third, a ‘user salt’ generated on startup. This hash is then
converted into base_58.