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