adequate_crypto_address 0.1.4 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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: []