class AdequateCryptoAddress::Bch
Constants
- DEFAULT_PREFIX
- TYPE_MAP
Attributes
digest[R]
payload[R]
prefix[R]
raw_address[R]
type[R]
Public Class Methods
new(address)
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 31 def initialize(address) @raw_address = address normalize end
Public Instance Methods
address_type(address_code, address_type)
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 44 def address_type(address_code, address_type) TYPE_MAP[address_code].each do |mapping| return mapping if mapping.include?(address_type) end raise(AdequateCryptoAddress::InvalidAddress, 'Could not determine address type') end
cash_address()
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 59 def cash_address type_int = address_type(:cash, type)[1] p = [type_int] + payload p = convertbits(p, 8, 5) checksum = calculate_cash_checksum(p) "#{prefix}:#{b32encode(p + checksum)}" end
Also aliased as: address
legacy_address()
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 52 def legacy_address type_int = address_type(:legacy, type)[1] input = code_list_to_string([type_int] + payload + Array(digest)) input += Digest::SHA256.digest(Digest::SHA256.digest(input))[0..3] unless digest Base58.binary_to_base58(input, :bitcoin) end
valid?(validated_type = nil)
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 36 def valid?(validated_type = nil) if validated_type type == validated_type.to_sym else !type.nil? end end
Private Instance Methods
from_cash_string()
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 81 def from_cash_string if (raw_address.upcase != raw_address) && (raw_address.downcase != raw_address) raise(InvalidCashAddress, 'Cash address contains uppercase and lowercase characters') end @raw_address = raw_address.downcase @raw_address = "#{DEFAULT_PREFIX}:#{raw_address}" if !raw_address.include?(':') @prefix, base32string = raw_address.split(':') decoded = b32decode(base32string) raise(InvalidCashAddress, 'Bad cash address checksum') if !verify_cash_checksum(decoded) converted = convertbits(decoded, 5, 8) @type = address_type(:cash, converted[0].to_i)[0] @payload = converted[1..-7] @type = :p2shtest if prefix == 'bchtest' && type == :p2sh @type = :p2pkhtest if prefix == 'bchtest' && type == :p2pkh end
from_legacy_string()
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 102 def from_legacy_string decoded = nil begin decoded = Base58.base58_to_binary(raw_address, :bitcoin).bytes rescue StandardError raise(InvalidLegacyAddress, 'Could not decode legacy address') end @type = address_type(:legacy, decoded[0].to_i)[0] @payload = decoded[1..-5] @digest = decoded[-4..-1] @prefix = DEFAULT_PREFIX @type = :p2shtest if prefix == 'bchtest' && type == :p2sh @type = :p2pkhtest if prefix == 'bchtest' && type == :p2pkh @prefix = 'bchtest' if [:p2shtest, :p2pkhtest].include?(type) end
normalize()
click to toggle source
# File lib/adequate_crypto_address/bch.rb, line 71 def normalize begin from_cash_string rescue InvalidCashAddress from_legacy_string end rescue AdequateCryptoAddress::InvalidAddress nil end