class AdequateCryptoAddress::Altcoin

simple class for common altcoin addresses like legacy btc, ripple, dash, zec, etc.

Constants

ADDRESS_TYPES
ALPHABET_TYPE
EXPECTED_LENGTH

Attributes

address[R]
decoded[R]
raw_address[R]
type[R]

Public Class Methods

new(address) click to toggle source
# File lib/adequate_crypto_address/altcoin.rb, line 13
def initialize(address)
  @address = address
  @type = address_type
end

Public Instance Methods

valid?(validated_type = nil) click to toggle source
# File lib/adequate_crypto_address/altcoin.rb, line 18
def valid?(validated_type = nil)
  if validated_type
    type == validated_type.to_sym
  else
    !type.nil?
  end
end

Private Instance Methods

address_type() click to toggle source
# File lib/adequate_crypto_address/altcoin.rb, line 30
def address_type
  @decoded = begin
          decode_base58
             rescue StandardError
               nil
        end
  if decoded && decoded.bytesize == self.class::EXPECTED_LENGTH && valid_address_checksum?
    self.class::ADDRESS_TYPES.each do |net_type, net_prefixes|
      net_prefixes.each do |net_prefix|
        return net_type if decoded.start_with?(net_prefix)
      end
    end
  end
  nil
end
checksum(bytes) click to toggle source
# File lib/adequate_crypto_address/altcoin.rb, line 56
def checksum(bytes)
  Digest::SHA256.hexdigest(Digest::SHA256.digest([bytes].pack('H*')))[0...8]
end
decode_base58() click to toggle source
# File lib/adequate_crypto_address/altcoin.rb, line 46
def decode_base58
  Base58.base58_to_binary(address, self.class::ALPHABET_TYPE).each_byte.map { |b| b.to_s(16).rjust(2, '0') }.join
end
valid_address_checksum?() click to toggle source
# File lib/adequate_crypto_address/altcoin.rb, line 50
def valid_address_checksum?
  return false unless decoded

  checksum(decoded[0...-8]) == decoded[-8..-1]
end