Method: Bitcoin::Message::NetworkAddr#addr_string

Defined in:
lib/bitcoin/message/network_addr.rb

#addr_stringObject

Show addr string. e.g 127.0.0.1



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/bitcoin/message/network_addr.rb', line 69

def addr_string
  case net
  when NETWORK_ID[:ipv4]
    addr.native
  when NETWORK_ID[:ipv6]
    if addr.to_s.start_with?(INTERNAL_IN_IPV6_PREFIX)
      Base32.encode(addr.hton[6..-1]).downcase.delete('=') + ".internal"
    else
      addr.to_s
    end
  when NETWORK_ID[:tor_v2]
    Base32.encode(addr.htb).downcase + ".onion"
  when NETWORK_ID[:tor_v3]
    # TORv3 onion_address = base32(PUBKEY | CHECKSUM | VERSION) + ".onion"
    pubkey = addr.htb
    checksum = OpenSSL::Digest.new('SHA3-256').digest('.onion checksum' + pubkey + "\x03")
    Base32.encode(pubkey + checksum[0...2] + "\x03").downcase + ".onion"
  when NETWORK_ID[:i2p]
    Base32.encode(addr.htb).downcase.delete('=') + ".b32.i2p"
  when NETWORK_ID[:cjdns]
    addr.to_s
  end
end