adequate_crypto_address 0.1.4 → 0.1.7

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: 66e0b65abfe56eac0be65f3edf9659e2e01cff5bd0316dd351e0e67147ae7869
4
- data.tar.gz: 6d5a85caa8ed1a1370ef7247d320e9e74ec08a1f2719b2ec712c99f8e5b4e078
3
+ metadata.gz: 317e610de2701baca977b7cb48ea5fa4b76d97935df0f932a2d3c1bdba4d3910
4
+ data.tar.gz: 8f8c8f1fa6eaa3bdb4df6e4dca49dd83f0bb1c6a6096cefcdb16bc8c10c91f3c
5
5
  SHA512:
6
- metadata.gz: b2bab1c6a29e339533aca606a1b16164367886b31b7ef42f3624760e4098c1c49b8fc7867edbc840b7bbce70995769c9c0dc7b743e419e0a273f23053c74f1dd
7
- data.tar.gz: 964a58d65459a09d9d73881f823dbf3d6c820972b2ce944f1610f9799d3a89839f0115735eabf427e232a46f9ef62ef58ba77c9b4f8ea83e61023ad49b5fbb23
6
+ metadata.gz: 971aa5e40bdda01d44da458389afb144df70b4109ed199e5b7f81e254a603fcbe09c10dc48636b5d458c921c05297838e4aeb8bd994f6d3bb61d883bb7862f22
7
+ data.tar.gz: e280c85592e69cb724cef1fa4c5ca4ebfe409771cade548169355ad6ef45b100406e2fe7f62ab967f844483b326f75cb4be5bec356826513dd325db789e2295b
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
data/Makefile ADDED
@@ -0,0 +1,6 @@
1
+
2
+ build:
3
+ gem build adequate_crypto_address.gemspec
4
+
5
+ push:
6
+ gem push adequate_crypto_address-0.1.7.gem
data/README.md CHANGED
@@ -48,6 +48,8 @@ gem install adequate_crypto_address
48
48
  * Zcash/ZEC, `'zcash'` or `'ZEC'` types: `:prod :test`
49
49
  * Ethereum/ETH, `'ethereum'` or `'ETH'`
50
50
  * Ripple/XRP, `'ripple'` or `'XRP'`
51
+ * Toncoin, `'TON'`
52
+ * Monero/XRM, `'monero'`
51
53
 
52
54
  ## Usage
53
55
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'adequate_crypto_address/version'
@@ -6,7 +8,6 @@ Gem::Specification.new do |spec|
6
8
  spec.name = 'adequate_crypto_address'
7
9
  spec.version = AdequateCryptoAddress::VERSION
8
10
  spec.authors = ['vtm']
9
- spec.email = ['vtmilyakov@yandex.ru']
10
11
 
11
12
  spec.summary = 'A Ruby Library for dealing with validation cryptocurrency adresses.'
12
13
  spec.description = 'A Ruby Library for dealing with validation cryptocurrency adresses.'
@@ -16,9 +17,8 @@ Gem::Specification.new do |spec|
16
17
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
18
  spec.require_paths = ['lib']
18
19
 
19
- spec.add_dependency 'base58', '~> 0.2.3'
20
- spec.add_dependency 'digest-sha3', '~> 1.1.0'
21
- spec.add_development_dependency 'bundler', '~> 1.16'
22
- spec.add_development_dependency 'rake', '~> 10.0'
23
- spec.add_development_dependency 'rspec', '~> 3.0'
20
+ spec.add_dependency 'base58', '~> 0.2'
21
+ spec.add_dependency 'keccak', '~> 1.3'
22
+ spec.add_development_dependency 'rake', '~> 13.0'
23
+ spec.add_development_dependency 'rspec', '~> 3.10'
24
24
  end
data/bin/console CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- $:.unshift( File.expand_path("../../lib", __FILE__) )
4
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
4
5
  require 'adequate_crypto_address'
5
6
 
6
7
  ACA = AdequateCryptoAddress
@@ -8,4 +9,3 @@ include AdequateCryptoAddress
8
9
 
9
10
  require 'pry'
10
11
  Pry.start
11
-
@@ -30,8 +30,8 @@ module AdequateCryptoAddress
30
30
  def address_type
31
31
  @decoded = begin
32
32
  decode_base58
33
- rescue StandardError
34
- nil
33
+ rescue StandardError
34
+ nil
35
35
  end
36
36
  if decoded && decoded.bytesize == self.class::EXPECTED_LENGTH && valid_address_checksum?
37
37
  self.class::ADDRESS_TYPES.each do |net_type, net_prefixes|
@@ -37,8 +37,8 @@ module AdequateCryptoAddress
37
37
 
38
38
  base58_decoded = begin
39
39
  decode_base58(address)
40
- rescue StandardError
41
- nil
40
+ rescue StandardError
41
+ nil
42
42
  end
43
43
  if base58_decoded && base58_decoded.bytesize == 50 && valid_base58_address_checksum?(base58_decoded)
44
44
  case base58_decoded[0...2]
@@ -46,6 +46,10 @@ module AdequateCryptoAddress
46
46
  return :hash160
47
47
  when '05'
48
48
  return :p2sh
49
+ when '6f'
50
+ return :hash160test
51
+ when 'c4'
52
+ return :p2shtest
49
53
  end
50
54
  end
51
55
 
@@ -76,7 +76,7 @@ module AdequateCryptoAddress
76
76
  end
77
77
 
78
78
  def keccak256(x)
79
- Digest::SHA3.new(256).digest(x)
79
+ Digest::Keccak.new(256).digest(x)
80
80
  end
81
81
  end
82
82
  Ethereum = Eth
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AdequateCryptoAddress
4
+ class Monero
5
+ attr_reader :address, :type
6
+
7
+ def initialize(address)
8
+ @address = address
9
+ @type = address_type
10
+ end
11
+
12
+ def valid?(type = nil)
13
+ if type
14
+ address_type == type.to_sym
15
+ else
16
+ !address_type.nil?
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def address_type
23
+ return nil unless [95, 106].include?(address.size)
24
+
25
+ return :monero if pattern_valid?
26
+ end
27
+
28
+ def pattern_valid?
29
+ address.size == 95 ?
30
+ address.match(/^4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}$/) :
31
+ address.match(/^4[1-9A-HJ-NP-Za-km-z]{105}(?:[1-9A-HJ-NP-Za-km-z]{30})?$/)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AdequateCryptoAddress
4
+ class Ton
5
+ attr_reader :address, :type
6
+
7
+ def initialize(address)
8
+ @address = address
9
+ @type = address_type
10
+ end
11
+
12
+ def valid?(type = nil)
13
+ if type
14
+ address_type == type.to_sym
15
+ else
16
+ !address_type.nil?
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def address_type
23
+ return :TON if address.size == 48 && pattern_valid?
24
+ end
25
+
26
+ def pattern_valid?
27
+ address.match(/([0-9a-zA-Z]|-|_){48}/)
28
+ end
29
+ end
30
+ end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdequateCryptoAddress
2
4
  module Utils
3
5
  module Bch
4
- CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'.freeze
6
+ CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
5
7
 
6
8
  module_function
7
9
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdequateCryptoAddress
2
4
  # Ruby reference implementation: https://github.com/sipa/bech32/tree/master/ref/c
3
5
  module Utils
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdequateCryptoAddress
2
- VERSION = '0.1.4'.freeze
4
+ VERSION = '0.1.7'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'adequate_crypto_address/utils/bech32'
2
4
  require 'adequate_crypto_address/utils/bch'
3
5
 
@@ -9,6 +11,8 @@ require 'adequate_crypto_address/xrp'
9
11
  require 'adequate_crypto_address/dash'
10
12
  require 'adequate_crypto_address/zec'
11
13
  require 'adequate_crypto_address/ltc'
14
+ require 'adequate_crypto_address/ton'
15
+ require 'adequate_crypto_address/monero'
12
16
 
13
17
  module AdequateCryptoAddress
14
18
  class UnknownCurrency < StandardError; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe(AdequateCryptoAddress::Bch) do
2
4
  let(:legacy_p2sh) { '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' }
3
5
  let(:legacy_p2pkh) { '155fzsEBHy9Ri2bMQ8uuuR3tv1YzcDywd4' }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe(AdequateCryptoAddress) do
2
4
  describe '.valid?' do
3
5
  context 'Bitcoin' do
@@ -7,11 +9,19 @@ RSpec.describe(AdequateCryptoAddress) do
7
9
  expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'Bitcoin')
8
10
  expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc')
9
11
  expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc', :hash160)
12
+
13
+ # testnet
14
+ expect(described_class).to be_valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'bitcoin', 'hash160test')
15
+ expect(described_class).to be_valid('mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB', :btc)
10
16
  end
11
17
 
12
18
  it 'validates p2sh addresses' do
13
19
  expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'BTC')
14
20
  expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin', 'p2sh')
21
+
22
+ # testnet
23
+ expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'btc')
24
+ expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'bitcoin', 'p2shtest')
15
25
  end
16
26
 
17
27
  it 'validates segwit addresses' do
@@ -168,6 +178,27 @@ RSpec.describe(AdequateCryptoAddress) do
168
178
  expect(described_class).not_to be_valid('t2YNzUUx8mWBCRYPRezvA363EYXyEpHokyi', :zcash, :test)
169
179
  end
170
180
  end
181
+
182
+ context 'Toncoin' do
183
+ it 'validates addresses' do
184
+ expect(described_class).to be_valid('UQCScs4HjjwnlIFKIq_juiuLLLnjJKTjQyfcADjYNvdYwn-l', :TON)
185
+ end
186
+
187
+ it 'validates wrong addresses' do
188
+ expect(described_class).not_to be_valid('wrongFKIq_juiuLLLnjJKTjQyfcAD', :TON)
189
+ end
190
+ end
191
+
192
+ context 'Monero' do
193
+ it 'validates addresses' do
194
+ expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :monero)
195
+ expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :monero)
196
+ end
197
+
198
+ it 'validates wrong addresses' do
199
+ expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :monero)
200
+ end
201
+ end
171
202
  end
172
203
 
173
204
  describe '.address' do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'coveralls'
2
4
  Coveralls.wear!
3
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adequate_crypto_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - vtm
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
11
+ date: 2022-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base58
@@ -16,73 +16,58 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.3
19
+ version: '0.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.3
26
+ version: '0.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: digest-sha3
28
+ name: keccak
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: '1.3'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.0
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.16'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.16'
40
+ version: '1.3'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '10.0'
47
+ version: '13.0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '10.0'
54
+ version: '13.0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '3.0'
61
+ version: '3.10'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '3.0'
68
+ version: '3.10'
83
69
  description: A Ruby Library for dealing with validation cryptocurrency adresses.
84
70
  email:
85
- - vtmilyakov@yandex.ru
86
71
  executables: []
87
72
  extensions: []
88
73
  extra_rdoc_files: []
@@ -94,6 +79,7 @@ files:
94
79
  - ".travis.yml"
95
80
  - Gemfile
96
81
  - LICENSE.txt
82
+ - Makefile
97
83
  - README.md
98
84
  - Rakefile
99
85
  - adequate_crypto_address.gemspec
@@ -105,6 +91,8 @@ files:
105
91
  - lib/adequate_crypto_address/dash.rb
106
92
  - lib/adequate_crypto_address/eth.rb
107
93
  - lib/adequate_crypto_address/ltc.rb
94
+ - lib/adequate_crypto_address/monero.rb
95
+ - lib/adequate_crypto_address/ton.rb
108
96
  - lib/adequate_crypto_address/utils/bch.rb
109
97
  - lib/adequate_crypto_address/utils/bech32.rb
110
98
  - lib/adequate_crypto_address/version.rb
@@ -117,7 +105,7 @@ homepage: https://github.com/vtm9/adequate_crypto_address
117
105
  licenses:
118
106
  - MIT
119
107
  metadata: {}
120
- post_install_message:
108
+ post_install_message:
121
109
  rdoc_options: []
122
110
  require_paths:
123
111
  - lib
@@ -132,8 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
120
  - !ruby/object:Gem::Version
133
121
  version: '0'
134
122
  requirements: []
135
- rubygems_version: 3.0.1
136
- signing_key:
123
+ rubygems_version: 3.2.22
124
+ signing_key:
137
125
  specification_version: 4
138
126
  summary: A Ruby Library for dealing with validation cryptocurrency adresses.
139
127
  test_files: []