adequate_crypto_address 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10e7258877cecbf393bb9c822529224e788a8a2e1c7e1ea0afac613d91d9f105
4
- data.tar.gz: a8ca65293e94f0d3d8f66b7083ed6ea41f3cc44160d5a816d5ca7c83ae73a689
3
+ metadata.gz: 6fee1d177fb87fdb5e97bb27ac01606349f567b99bd1d7f1a2553c8d6a17e1de
4
+ data.tar.gz: 7968e28889bc532c2705322a5d15ddeaf386c82f13fc41114bca6df0d375c49f
5
5
  SHA512:
6
- metadata.gz: 6cab54b49e7dc468a9b33c5efb12dd33861ed5be4c1d991c7b560e83c52dbec1b4898ca5b544c925d28a1774c425b67573e6056ffbb086ab0dd39da120769685
7
- data.tar.gz: 3f701615de8ea0e510796125ad180d37d36712d3ac829846736d723d71943b043bc83bd1d3e834408deb83ab15034225d5aee3855b20ee36fd14c22afedc5058
6
+ metadata.gz: 62df3006c3a130904b82d42cad6b94259fc6461dbdcbae0f0e0227716fccf0200aa6d6b698c7ae76ffde13fc85b23df993f20ddd2444f8a6e12648320c051f2f
7
+ data.tar.gz: bd5e6981b62cd15be7ccac5c9604865fa272d9bec754f2ba8ef4ed0dff9b6c3d4f6d1c31648b14c4cb7b64e244869a3b8808c6bf851b72a84c2cc2362ccd20bf
data/Makefile CHANGED
@@ -3,4 +3,4 @@ build:
3
3
  gem build adequate_crypto_address.gemspec
4
4
 
5
5
  push:
6
- gem push adequate_crypto_address-0.1.10.gem
6
+ gem push adequate_crypto_address-0.1.11.gem
@@ -9,11 +9,12 @@ Gem::Specification.new do |spec|
9
9
  spec.version = AdequateCryptoAddress::VERSION
10
10
  spec.authors = ['vtm']
11
11
 
12
- spec.summary = 'A Ruby Library for dealing with validation cryptocurrency adresses.'
13
- spec.description = 'A Ruby Library for dealing with validation cryptocurrency adresses.'
12
+ spec.summary = 'Ruby helpers for validating cryptocurrency addresses.'
13
+ spec.description = 'Provides Ruby helpers to validate cryptocurrency addresses across common chains.'
14
14
  spec.homepage = 'https://github.com/vtm9/adequate_crypto_address'
15
15
 
16
16
  spec.license = 'MIT'
17
+ spec.required_ruby_version = '>= 3.0'
17
18
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
19
  spec.require_paths = ['lib']
19
20
 
@@ -3,6 +3,55 @@
3
3
  module AdequateCryptoAddress
4
4
  class Ltc < Altcoin
5
5
  ADDRESS_TYPES = { prod: %w[30 05 32], test: %w[6f c4 3a] }.freeze
6
+
7
+ private
8
+
9
+ def address_type
10
+ segwit_decoded = begin
11
+ decode_segwit_address
12
+ rescue StandardError
13
+ nil
14
+ end
15
+
16
+ if segwit_decoded
17
+ witness_version, witness_program_hex, hrp = segwit_decoded
18
+ witness_program = [witness_program_hex].pack('H*')
19
+
20
+ if witness_version == 0
21
+ return :prod if hrp == 'ltc' && [20, 32].include?(witness_program.bytesize)
22
+ return :test if hrp == 'tltc' && [20, 32].include?(witness_program.bytesize)
23
+ end
24
+
25
+ if witness_version == 1 && witness_program.bytesize == 32
26
+ return :prod if hrp == 'ltc'
27
+ return :test if hrp == 'tltc'
28
+ end
29
+ end
30
+
31
+ super
32
+ end
33
+
34
+ def decode_segwit_address
35
+ actual_hrp, data = Utils::Bech32.decode(address)
36
+
37
+ return nil if actual_hrp.nil?
38
+
39
+ length = data.size
40
+ return nil if length == 0 || length > 65
41
+ return nil unless %w[ltc tltc].include?(actual_hrp)
42
+ return nil if data[0] > 16
43
+
44
+ program = Utils::Bech32.convert_bits(data[1..-1], from_bits: 5, to_bits: 8, pad: false)
45
+ return nil if program.nil?
46
+
47
+ length = program.size
48
+ return nil if length < 2 || length > 40
49
+ return nil if data[0] == 0 && length != 20 && length != 32
50
+ return nil if data[0] == 1 && length != 32
51
+
52
+ program_hex = program.pack('C*').unpack('H*').first
53
+ [data[0], program_hex, actual_hrp]
54
+ end
6
55
  end
7
56
  Litecoin = Ltc
8
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AdequateCryptoAddress
4
- VERSION = '0.1.10'
4
+ VERSION = '0.1.11'
5
5
  end
@@ -176,6 +176,8 @@ RSpec.describe(AdequateCryptoAddress) do
176
176
  expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'LTC', :test)
177
177
  expect(described_class).to be_valid('QW2SvwjaJU8LD6GSmtm1PHnBG2xPuxwZFy', 'LTC', :test)
178
178
  expect(described_class).to be_valid('QjpzxpbLp5pCGsCczMbfh1uhC3P89QZavY', 'LTC', :test)
179
+ expect(described_class).to be_valid('tltc1pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC', :test)
180
+ expect(described_class).to be_valid('tltc1pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC')
179
181
  end
180
182
 
181
183
  it 'validates wrong addresses' do
@@ -183,6 +185,8 @@ RSpec.describe(AdequateCryptoAddress) do
183
185
  expect(described_class).not_to be_valid('t1Y9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zcash)
184
186
  expect(described_class).not_to be_valid('t3Yz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', :ZEC)
185
187
  expect(described_class).not_to be_valid('t2YNzUUx8mWBCRYPRezvA363EYXyEpHokyi', :zcash, :test)
188
+ expect(described_class).not_to be_valid('tltc1pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC', :prod)
189
+ expect(described_class).not_to be_valid('tltc1Pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC')
186
190
  end
187
191
  end
188
192
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adequate_crypto_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - vtm
@@ -65,7 +65,8 @@ dependencies:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '3.13'
68
- description: A Ruby Library for dealing with validation cryptocurrency adresses.
68
+ description: Provides Ruby helpers to validate cryptocurrency addresses across common
69
+ chains.
69
70
  executables: []
70
71
  extensions: []
71
72
  extra_rdoc_files: []
@@ -110,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
111
  requirements:
111
112
  - - ">="
112
113
  - !ruby/object:Gem::Version
113
- version: '0'
114
+ version: '3.0'
114
115
  required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  requirements:
116
117
  - - ">="
@@ -119,5 +120,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  requirements: []
120
121
  rubygems_version: 3.6.9
121
122
  specification_version: 4
122
- summary: A Ruby Library for dealing with validation cryptocurrency adresses.
123
+ summary: Ruby helpers for validating cryptocurrency addresses.
123
124
  test_files: []