adequate_crypto_address 0.1.10 → 0.2.0
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 +4 -4
- data/CHANGELOG.md +70 -0
- data/README.md +143 -29
- data/bin/console +0 -1
- data/lib/adequate_crypto_address/ada.rb +127 -0
- data/lib/adequate_crypto_address/altcoin.rb +30 -14
- data/lib/adequate_crypto_address/bch.rb +84 -30
- data/lib/adequate_crypto_address/btc.rb +86 -59
- data/lib/adequate_crypto_address/doge.rb +12 -0
- data/lib/adequate_crypto_address/eth.rb +8 -7
- data/lib/adequate_crypto_address/ltc.rb +57 -0
- data/lib/adequate_crypto_address/sol.rb +36 -0
- data/lib/adequate_crypto_address/ton.rb +54 -4
- data/lib/adequate_crypto_address/utils/bch.rb +8 -28
- data/lib/adequate_crypto_address/utils/bech32.rb +136 -107
- data/lib/adequate_crypto_address/utils/monero_base58.rb +60 -0
- data/lib/adequate_crypto_address/utils/xlm.rb +25 -0
- data/lib/adequate_crypto_address/version.rb +1 -1
- data/lib/adequate_crypto_address/xlm.rb +75 -0
- data/lib/adequate_crypto_address/xmr.rb +63 -15
- data/lib/adequate_crypto_address.rb +27 -4
- metadata +15 -46
- data/.coveralls.yml +0 -2
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.rubocop.yml +0 -36
- data/.travis.yml +0 -13
- data/Gemfile +0 -12
- data/Makefile +0 -6
- data/Rakefile +0 -8
- data/adequate_crypto_address.gemspec +0 -24
- data/spec/adequate_crypto_address/bch_spec.rb +0 -77
- data/spec/adequate_crypto_address_spec.rb +0 -231
- data/spec/spec_helper.rb +0 -17
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.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- vtm
|
|
@@ -37,72 +37,41 @@ dependencies:
|
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
39
|
version: '1.3'
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - "~>"
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: '13.2'
|
|
47
|
-
type: :development
|
|
48
|
-
prerelease: false
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - "~>"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '13.2'
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
name: rspec
|
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - "~>"
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: '3.13'
|
|
61
|
-
type: :development
|
|
62
|
-
prerelease: false
|
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - "~>"
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '3.13'
|
|
68
|
-
description: A Ruby Library for dealing with validation cryptocurrency adresses.
|
|
40
|
+
description: Provides Ruby helpers to validate cryptocurrency addresses across common
|
|
41
|
+
chains.
|
|
69
42
|
executables: []
|
|
70
43
|
extensions: []
|
|
71
44
|
extra_rdoc_files: []
|
|
72
45
|
files:
|
|
73
|
-
-
|
|
74
|
-
- ".gitignore"
|
|
75
|
-
- ".rspec"
|
|
76
|
-
- ".rubocop.yml"
|
|
77
|
-
- ".travis.yml"
|
|
78
|
-
- Gemfile
|
|
46
|
+
- CHANGELOG.md
|
|
79
47
|
- LICENSE.txt
|
|
80
|
-
- Makefile
|
|
81
48
|
- README.md
|
|
82
|
-
- Rakefile
|
|
83
|
-
- adequate_crypto_address.gemspec
|
|
84
49
|
- bin/console
|
|
85
50
|
- lib/adequate_crypto_address.rb
|
|
51
|
+
- lib/adequate_crypto_address/ada.rb
|
|
86
52
|
- lib/adequate_crypto_address/altcoin.rb
|
|
87
53
|
- lib/adequate_crypto_address/bch.rb
|
|
88
54
|
- lib/adequate_crypto_address/btc.rb
|
|
89
55
|
- lib/adequate_crypto_address/dash.rb
|
|
56
|
+
- lib/adequate_crypto_address/doge.rb
|
|
90
57
|
- lib/adequate_crypto_address/eth.rb
|
|
91
58
|
- lib/adequate_crypto_address/ltc.rb
|
|
59
|
+
- lib/adequate_crypto_address/sol.rb
|
|
92
60
|
- lib/adequate_crypto_address/ton.rb
|
|
93
61
|
- lib/adequate_crypto_address/utils/bch.rb
|
|
94
62
|
- lib/adequate_crypto_address/utils/bech32.rb
|
|
63
|
+
- lib/adequate_crypto_address/utils/monero_base58.rb
|
|
64
|
+
- lib/adequate_crypto_address/utils/xlm.rb
|
|
95
65
|
- lib/adequate_crypto_address/version.rb
|
|
66
|
+
- lib/adequate_crypto_address/xlm.rb
|
|
96
67
|
- lib/adequate_crypto_address/xmr.rb
|
|
97
68
|
- lib/adequate_crypto_address/xrp.rb
|
|
98
69
|
- lib/adequate_crypto_address/zec.rb
|
|
99
|
-
- spec/adequate_crypto_address/bch_spec.rb
|
|
100
|
-
- spec/adequate_crypto_address_spec.rb
|
|
101
|
-
- spec/spec_helper.rb
|
|
102
70
|
homepage: https://github.com/vtm9/adequate_crypto_address
|
|
103
71
|
licenses:
|
|
104
72
|
- MIT
|
|
105
|
-
metadata:
|
|
73
|
+
metadata:
|
|
74
|
+
rubygems_mfa_required: 'true'
|
|
106
75
|
rdoc_options: []
|
|
107
76
|
require_paths:
|
|
108
77
|
- lib
|
|
@@ -110,14 +79,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
110
79
|
requirements:
|
|
111
80
|
- - ">="
|
|
112
81
|
- !ruby/object:Gem::Version
|
|
113
|
-
version: '0'
|
|
82
|
+
version: '3.0'
|
|
114
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
84
|
requirements:
|
|
116
85
|
- - ">="
|
|
117
86
|
- !ruby/object:Gem::Version
|
|
118
87
|
version: '0'
|
|
119
88
|
requirements: []
|
|
120
|
-
rubygems_version:
|
|
89
|
+
rubygems_version: 4.0.16
|
|
121
90
|
specification_version: 4
|
|
122
|
-
summary:
|
|
91
|
+
summary: Ruby helpers for validating cryptocurrency addresses.
|
|
123
92
|
test_files: []
|
data/.coveralls.yml
DELETED
data/.gitignore
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require: rubocop-rspec
|
|
2
|
-
|
|
3
|
-
AllCops:
|
|
4
|
-
DisplayCopNames: true
|
|
5
|
-
|
|
6
|
-
Naming/AccessorMethodName:
|
|
7
|
-
Description: Check the naming of accessor methods for get_/set_.
|
|
8
|
-
Enabled: false
|
|
9
|
-
|
|
10
|
-
Style/DocumentationMethod:
|
|
11
|
-
RequireForNonPublicMethods: false
|
|
12
|
-
|
|
13
|
-
Documentation:
|
|
14
|
-
Enabled: false
|
|
15
|
-
|
|
16
|
-
Style/ClassAndModuleChildren:
|
|
17
|
-
Enabled: false
|
|
18
|
-
|
|
19
|
-
Style/NegatedIf:
|
|
20
|
-
Enabled: false
|
|
21
|
-
|
|
22
|
-
Metrics/LineLength:
|
|
23
|
-
Max: 120
|
|
24
|
-
|
|
25
|
-
Metrics/MethodLength:
|
|
26
|
-
Max: 30
|
|
27
|
-
|
|
28
|
-
Style/SymbolArray:
|
|
29
|
-
Enabled: true
|
|
30
|
-
EnforcedStyle: brackets
|
|
31
|
-
|
|
32
|
-
Style/StringLiterals:
|
|
33
|
-
EnforcedStyle: single_quotes
|
|
34
|
-
SupportedStyles:
|
|
35
|
-
- single_quotes
|
|
36
|
-
|
data/.travis.yml
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
language: ruby
|
|
3
|
-
sudo: false
|
|
4
|
-
cache: bundler
|
|
5
|
-
rvm:
|
|
6
|
-
- 2.5.1
|
|
7
|
-
before_install: gem install bundler -v 1.16.3
|
|
8
|
-
script: bundle exec rspec spec
|
|
9
|
-
notifications:
|
|
10
|
-
email:
|
|
11
|
-
- vtmilyakov@yandex.ru
|
|
12
|
-
after_success:
|
|
13
|
-
- CI=true TRAVIS=true coveralls --verbose
|
data/Gemfile
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
source 'https://rubygems.org'
|
|
4
|
-
|
|
5
|
-
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
6
|
-
|
|
7
|
-
gem 'coveralls', '>= 0.8.23', require: false
|
|
8
|
-
gem 'pry', require: false
|
|
9
|
-
|
|
10
|
-
gem 'rubocop-rspec'
|
|
11
|
-
# Specify your gem's dependencies in adequate_crypto_address.gemspec
|
|
12
|
-
gemspec
|
data/Makefile
DELETED
data/Rakefile
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
lib = File.expand_path('lib', __dir__)
|
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require 'adequate_crypto_address/version'
|
|
6
|
-
|
|
7
|
-
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name = 'adequate_crypto_address'
|
|
9
|
-
spec.version = AdequateCryptoAddress::VERSION
|
|
10
|
-
spec.authors = ['vtm']
|
|
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.'
|
|
14
|
-
spec.homepage = 'https://github.com/vtm9/adequate_crypto_address'
|
|
15
|
-
|
|
16
|
-
spec.license = 'MIT'
|
|
17
|
-
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
18
|
-
spec.require_paths = ['lib']
|
|
19
|
-
|
|
20
|
-
spec.add_dependency 'base58', '~> 0.2'
|
|
21
|
-
spec.add_dependency 'keccak', '~> 1.3'
|
|
22
|
-
spec.add_development_dependency 'rake', '~> 13.2'
|
|
23
|
-
spec.add_development_dependency 'rspec', '~> 3.13'
|
|
24
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
RSpec.describe(AdequateCryptoAddress::Bch) do
|
|
4
|
-
let(:legacy_p2sh) { '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' }
|
|
5
|
-
let(:legacy_p2pkh) { '155fzsEBHy9Ri2bMQ8uuuR3tv1YzcDywd4' }
|
|
6
|
-
let(:cashaddr_p2sh) { 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' }
|
|
7
|
-
let(:cashaddr_p2pkh) { 'bitcoincash:qqkv9wr69ry2p9l53lxp635va4h86wv435995w8p2h' }
|
|
8
|
-
let(:cashaddr_p2pkh_testnet) { 'bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf' }
|
|
9
|
-
let(:legacy_p2pkh_testnet) { 'mmRH4e9WW4ekZUP5HvBScfUyaSUjfQRyvD' }
|
|
10
|
-
let(:cashaddr_p2sh_testnet) { 'bchtest:pp8f7ww2g6y07ypp9r4yendrgyznysc9kqxh6acwu3' }
|
|
11
|
-
let(:legacy_p2sh_testnet) { '2MzQwSSnBHWHqSAqtTVQ6v47XtaisrJa1Vc' }
|
|
12
|
-
let(:mixed_case_cashadddr) { 'bitcoincash:qqkv9wr69ry2p9l53lxP635va4h86wv435995w8p2H' }
|
|
13
|
-
|
|
14
|
-
describe '#legacy_address' do
|
|
15
|
-
it 'converts legacy testnet p2pkh' do
|
|
16
|
-
expect(described_class.new(legacy_p2pkh_testnet).legacy_address).to eq(legacy_p2pkh_testnet)
|
|
17
|
-
expect(described_class.new(cashaddr_p2pkh_testnet).legacy_address).to eq(legacy_p2pkh_testnet)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it 'converts legacy testnet p2sh' do
|
|
21
|
-
expect(described_class.new(legacy_p2sh_testnet).legacy_address).to eq(legacy_p2sh_testnet)
|
|
22
|
-
expect(described_class.new(cashaddr_p2sh_testnet).legacy_address).to eq(legacy_p2sh_testnet)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it 'converts to legacy p2sh' do
|
|
26
|
-
expect(described_class.new(legacy_p2sh).legacy_address).to eq(legacy_p2sh)
|
|
27
|
-
expect(described_class.new(cashaddr_p2sh).legacy_address).to eq(legacy_p2sh)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it 'converts to legacy p2pkh' do
|
|
31
|
-
expect(described_class.new(legacy_p2pkh).legacy_address).to eq(legacy_p2pkh)
|
|
32
|
-
expect(described_class.new(cashaddr_p2pkh).legacy_address).to eq(legacy_p2pkh)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
context 'uppercase cashaddr address' do
|
|
36
|
-
it 'converts to legacy p2sh' do
|
|
37
|
-
expect(described_class.new(cashaddr_p2sh.upcase).legacy_address).to eq(legacy_p2sh)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'converts to legacy p2pkh' do
|
|
41
|
-
expect(described_class.new(cashaddr_p2pkh.upcase).legacy_address).to eq(legacy_p2pkh)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
context '#cash_address' do
|
|
47
|
-
it 'converts cash testnet p2pkh' do
|
|
48
|
-
expect(described_class.new(legacy_p2pkh_testnet).cash_address).to eq(cashaddr_p2pkh_testnet)
|
|
49
|
-
expect(described_class.new(cashaddr_p2pkh_testnet).cash_address).to eq(cashaddr_p2pkh_testnet)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it 'converts cash testnet p2sh' do
|
|
53
|
-
expect(described_class.new(legacy_p2sh_testnet).cash_address).to eq(cashaddr_p2sh_testnet)
|
|
54
|
-
expect(described_class.new(cashaddr_p2sh_testnet).cash_address).to eq(cashaddr_p2sh_testnet)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it 'converts to cash p2sh' do
|
|
58
|
-
expect(described_class.new(legacy_p2sh).cash_address).to eq(cashaddr_p2sh)
|
|
59
|
-
expect(described_class.new(cashaddr_p2sh).cash_address).to eq(cashaddr_p2sh)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it 'converts to cash p2pkh' do
|
|
63
|
-
expect(described_class.new(legacy_p2pkh).cash_address).to eq(cashaddr_p2pkh)
|
|
64
|
-
expect(described_class.new(cashaddr_p2pkh).cash_address).to eq(cashaddr_p2pkh)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
context 'uppercase cashaddr address' do
|
|
68
|
-
it 'converts to cash p2sh' do
|
|
69
|
-
expect(described_class.new(cashaddr_p2sh.upcase).cash_address).to eq(cashaddr_p2sh)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it 'converts to cash p2pkh' do
|
|
73
|
-
expect(described_class.new(cashaddr_p2pkh.upcase).cash_address).to eq(cashaddr_p2pkh)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
RSpec.describe(AdequateCryptoAddress) do
|
|
4
|
-
describe '.valid?' do
|
|
5
|
-
context 'Bitcoin' do
|
|
6
|
-
it 'validates hash160 addresses' do
|
|
7
|
-
expect(described_class).to be_valid('12KYrjTdVGjFMtaxERSk3gphreJ5US8aUP', 'bitcoin')
|
|
8
|
-
expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'BTC')
|
|
9
|
-
expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'Bitcoin')
|
|
10
|
-
expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc')
|
|
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)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it 'validates p2sh addresses' do
|
|
19
|
-
expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'BTC')
|
|
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')
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'validates segwit addresses' do
|
|
28
|
-
expect(described_class).to be_valid('BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4', 'BTC')
|
|
29
|
-
expect(described_class).to be_valid('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'bitcoin')
|
|
30
|
-
expect(described_class).to be_valid('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'bitcoin', :segwit_v0_keyhash)
|
|
31
|
-
expect(described_class).to be_valid('bc1qc7slrfxkknqcq2jevvvkdgvrt8080852dfjewde450xdlk4ugp7szw5tk9', 'BTC')
|
|
32
|
-
expect(described_class).to be_valid('bc1qc7slrfxkknqcq2jevvvkdgvrt8080852dfjewde450xdlk4ugp7szw5tk9', 'bitcoin', :segwit_v0_scripthash)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it 'validates taproot addresses' do
|
|
36
|
-
expect(described_class).to be_valid('bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr', 'bitcoin')
|
|
37
|
-
expect(described_class).to be_valid('bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr', 'BTC', :taproot)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'validates wrong addresses' do
|
|
41
|
-
expect(described_class).not_to be_valid('asdf', :bitcoin)
|
|
42
|
-
expect(described_class).not_to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin', :segwit_v0_keyhash)
|
|
43
|
-
expect(described_class).not_to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin', 'asdf')
|
|
44
|
-
expect(described_class).not_to be_valid('tc1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty', :bitcoin)
|
|
45
|
-
expect(described_class).not_to be_valid('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5', 'bitcoin')
|
|
46
|
-
expect(described_class).not_to be_valid('BC13W508D6QEJXTDG4Y5R3ZARVARY0C5XW7KN40WF2', 'bitcoin')
|
|
47
|
-
expect(described_class).not_to be_valid('bc1rw5uspcuh', 'bitcoin')
|
|
48
|
-
expect(described_class).not_to be_valid('bc10w508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kw5rljs90', 'bitcoin')
|
|
49
|
-
expect(described_class).not_to be_valid('BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P', 'bitcoin')
|
|
50
|
-
expect(described_class).not_to be_valid('tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7', 'BTC')
|
|
51
|
-
expect(described_class).not_to be_valid('bc1zw508d6qejxtdg4y5r3zarvaryvqyzf3du', 'bitcoin')
|
|
52
|
-
expect(described_class).not_to be_valid('tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3pjxtptv', 'Bitcoin')
|
|
53
|
-
expect(described_class).not_to be_valid('bc1gmk9yu', 'bitcoin')
|
|
54
|
-
expect(described_class).not_to be_valid('bc1p5d7rjq7g6rdk2yhzks9smlqfpuecypus6uf4e9qrsssrwc09', 'bitcoin') # invalid checksum
|
|
55
|
-
expect(described_class).not_to be_valid('bc1p5d7rjq7g6rdk2yhzks9smlqfpuecypus6uf4e9qrsssrwc0', 'bitcoin') # too short
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
context 'Bitcoincash' do
|
|
60
|
-
it 'validates legacy addresses' do
|
|
61
|
-
expect(described_class).to be_valid('3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC', :bch, :p2sh)
|
|
62
|
-
expect(described_class).to be_valid('155fzsEBHy9Ri2bMQ8uuuR3tv1YzcDywd4', 'bitcoincash', :p2pkh)
|
|
63
|
-
expect(described_class).to be_valid('2MzQwSSnBHWHqSAqtTVQ6v47XtaisrJa1Vc', 'BCH', :p2shtest)
|
|
64
|
-
expect(described_class).to be_valid('mmRH4e9WW4ekZUP5HvBScfUyaSUjfQRyvD', :BCH, :p2pkhtest)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it 'validates cash addresses' do
|
|
68
|
-
expect(described_class).to be_valid('bitcoincash:qqkv9wr69ry2p9l53lxp635va4h86wv435995w8p2h', :bch, :p2pkh)
|
|
69
|
-
expect(described_class).to be_valid('bitcoincash:pqdg9uq52wzhf228hweext9j2jdjgdpj9qt7xxfngd', :bitcoincash, :p2sh)
|
|
70
|
-
expect(described_class).to be_valid('bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf', :Bitcoincash, :p2pkhtest)
|
|
71
|
-
expect(described_class).to be_valid('bchtest:pp8f7ww2g6y07ypp9r4yendrgyznysc9kqxh6acwu3', :BCH, :p2shtest)
|
|
72
|
-
expect(described_class).to be_valid('bitcoincash:qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk', :bitcoincash)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it 'validates cash addresses without prefix addresses' do
|
|
76
|
-
expect(described_class).to be_valid('qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk', :bitcoincash)
|
|
77
|
-
expect(described_class).to be_valid('pqdg9uq52wzhf228hweext9j2jdjgdpj9qt7xxfngd', :bitcoincash, :p2sh)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it 'validates wrong addresses' do
|
|
81
|
-
expect(described_class).not_to be_valid('bitcoincash:qqkv9wr69ry2p9l53lxP635va4h86wv435995w8p2H', :bch)
|
|
82
|
-
expect(described_class).not_to be_valid('wrong', :bch)
|
|
83
|
-
expect(described_class).not_to be_valid('bitcoincash:wrong', :bch)
|
|
84
|
-
expect(described_class).not_to be_valid('bitcoincash:123', :bch)
|
|
85
|
-
|
|
86
|
-
expect(described_class).not_to be_valid('bitcoincash:qqkv9wr69ry2p9l53lxp635va4h86wv435995w8p2h', :bch, :p2pkhtest)
|
|
87
|
-
expect(described_class).not_to be_valid('bitcoincash:pqdg9uq52wzhf228hweext9j2jdjgdpj9qt7xxfngd', :bitcoincash, :p2pkhtest)
|
|
88
|
-
expect(described_class).not_to be_valid('bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf', :Bitcoincash, :p2sh)
|
|
89
|
-
expect(described_class).not_to be_valid('bchtest:pp8f7ww2g6y07ypp9r4yendrgyznysc9kqxh6acwu3', :BCH, :p2sh)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
context 'Ethereum' do
|
|
94
|
-
it 'validates addresses' do
|
|
95
|
-
expect(described_class).to be_valid('0xE37c0D48d68da5c5b14E5c1a9f1CFE802776D9FF', 'ethereum')
|
|
96
|
-
expect(described_class).to be_valid('0xa00354276d2fC74ee91e37D085d35748613f4748', :ethereum)
|
|
97
|
-
expect(described_class).to be_valid('0xAff4d6793F584a473348EbA058deb8caad77a288', :ETH)
|
|
98
|
-
expect(described_class).to be_valid('0xc6d9d2cd449a754c494264e1809c50e34d64562b', 'ETH')
|
|
99
|
-
expect(described_class).to be_valid('0x52908400098527886E0F7030069857D2E4169EE7', 'ETH')
|
|
100
|
-
expect(described_class).to be_valid('0x8617E340B3D01FA5F11F306F4090FD50E238070D', 'ETH')
|
|
101
|
-
expect(described_class).to be_valid('0xde709f2102306220921060314715629080e2fb77', 'ETH')
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it 'validates without prefixes addresses' do
|
|
105
|
-
expect(described_class).to be_valid('27b1fdb04752bbc536007a920d24acb045561c26', 'ETH')
|
|
106
|
-
expect(described_class).to be_valid('5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed', 'ETH')
|
|
107
|
-
expect(described_class).to be_valid('fB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', 'ETH')
|
|
108
|
-
expect(described_class).to be_valid('dbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB', 'ETH')
|
|
109
|
-
expect(described_class).to be_valid('D1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'ETH')
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it 'validates wrong addresses' do
|
|
113
|
-
expect(described_class).not_to be_valid('wrong', :ETH)
|
|
114
|
-
expect(described_class).not_to be_valid('0xD1110A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'ETH')
|
|
115
|
-
expect(described_class).not_to be_valid('a10354276d2fC74ee91e37D085d35748613f4748', :ethereum)
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
context 'Ripple' do
|
|
120
|
-
it 'validates addresses' do
|
|
121
|
-
expect(described_class).to be_valid('rPMLwSwyyULN2acf5JKB1nj8F8Eu8pVMV8', :ripple)
|
|
122
|
-
expect(described_class).to be_valid('rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', :ripple)
|
|
123
|
-
expect(described_class).to be_valid('rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', 'RIPPLE')
|
|
124
|
-
expect(described_class).to be_valid('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV', 'XRP')
|
|
125
|
-
expect(described_class).to be_valid('rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh', :XRP)
|
|
126
|
-
expect(described_class).to be_valid('rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN', 'XRP')
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it 'validates wrong addresses' do
|
|
130
|
-
expect(described_class).not_to be_valid('wrong', :xrp)
|
|
131
|
-
expect(described_class).not_to be_valid('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaoc1', :xrp)
|
|
132
|
-
expect(described_class).not_to be_valid('r1kmLJN5D28dHuH8vZNUZpMC43pEHpaocV', 'ripple')
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
context 'Dash' do
|
|
137
|
-
it 'validates addresses' do
|
|
138
|
-
expect(described_class).to be_valid('Xx4dYKgz3Zcv6kheaqog3fynaKWjbahb6b', :dash)
|
|
139
|
-
expect(described_class).to be_valid('XcY4WJ6Z2Q8w7vcYER1JypC8s2oa3SQ1b1', 'DASH')
|
|
140
|
-
expect(described_class).to be_valid('XqMkVUZnqe3w4xvgdZRtZoe7gMitDudGs4', 'DASH', :prod)
|
|
141
|
-
expect(described_class).to be_valid('yPv7h2i8v3dJjfSH4L3x91JSJszjdbsJJA', :DASH, 'test')
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it 'validates wrong addresses' do
|
|
145
|
-
expect(described_class).not_to be_valid('wrong', :dash)
|
|
146
|
-
expect(described_class).not_to be_valid('yPv7h2i8v3dJ1fSH4L3x91JSJszjdbsJJA', :dash)
|
|
147
|
-
expect(described_class).not_to be_valid('XqMkVUZnqe3w4xvgdZRtZoe7gMitDudGs4', 'dash', :test)
|
|
148
|
-
expect(described_class).not_to be_valid('yPv7h2i8v3dJjfSH4L3x91JSJszjdbsJJA', :DASH, :prod)
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
context 'Zcash' do
|
|
153
|
-
it 'validates addresses' do
|
|
154
|
-
expect(described_class).to be_valid('t1U9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zec)
|
|
155
|
-
expect(described_class).to be_valid('t3Vz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', 'zcash', :prod)
|
|
156
|
-
expect(described_class).to be_valid('t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi', 'ZEC', :test)
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it 'validates wrong addresses' do
|
|
160
|
-
expect(described_class).not_to be_valid('wrong', :zec)
|
|
161
|
-
expect(described_class).not_to be_valid('t1Y9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zcash)
|
|
162
|
-
expect(described_class).not_to be_valid('t3Yz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', :ZEC)
|
|
163
|
-
expect(described_class).not_to be_valid('t2YNzUUx8mWBCRYPRezvA363EYXyEpHokyi', :zcash, :test)
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
context 'Litecoin' do
|
|
168
|
-
it 'validates addresses' do
|
|
169
|
-
expect(described_class).to be_valid('LVg2kJoFNg45Nbpy53h7Fe1wKyeXVRhMH9', :ltc)
|
|
170
|
-
expect(described_class).to be_valid('LVg2kJoFNg45Nbpy53h7Fe1wKyeXVRhMH9', 'ltc', :prod)
|
|
171
|
-
expect(described_class).to be_valid('LTpYZG19YmfvY2bBDYtCKpunVRw7nVgRHW', 'LTC')
|
|
172
|
-
expect(described_class).to be_valid('Lb6wDP2kHGyWC7vrZuZAgV7V4ECyDdH7a6', 'Litecoin')
|
|
173
|
-
expect(described_class).to be_valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'Litecoin', :test)
|
|
174
|
-
|
|
175
|
-
expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'LTC')
|
|
176
|
-
expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'LTC', :test)
|
|
177
|
-
expect(described_class).to be_valid('QW2SvwjaJU8LD6GSmtm1PHnBG2xPuxwZFy', 'LTC', :test)
|
|
178
|
-
expect(described_class).to be_valid('QjpzxpbLp5pCGsCczMbfh1uhC3P89QZavY', 'LTC', :test)
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it 'validates wrong addresses' do
|
|
182
|
-
expect(described_class).not_to be_valid('wrong', :zec)
|
|
183
|
-
expect(described_class).not_to be_valid('t1Y9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zcash)
|
|
184
|
-
expect(described_class).not_to be_valid('t3Yz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', :ZEC)
|
|
185
|
-
expect(described_class).not_to be_valid('t2YNzUUx8mWBCRYPRezvA363EYXyEpHokyi', :zcash, :test)
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
context 'Toncoin' do
|
|
190
|
-
it 'validates addresses' do
|
|
191
|
-
expect(described_class).to be_valid('UQCScs4HjjwnlIFKIq_juiuLLLnjJKTjQyfcADjYNvdYwn-l', :TON)
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
it 'validates wrong addresses' do
|
|
195
|
-
expect(described_class).not_to be_valid('wrongFKIq_juiuLLLnjJKTjQyfcAD', :TON)
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
context 'Monero' do
|
|
200
|
-
it 'validates addresses' do
|
|
201
|
-
expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :XMR)
|
|
202
|
-
expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :monero)
|
|
203
|
-
expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :Xmr)
|
|
204
|
-
expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :xmr)
|
|
205
|
-
expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :monero)
|
|
206
|
-
expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :Xmr)
|
|
207
|
-
expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :Xmr)
|
|
208
|
-
expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :xmr)
|
|
209
|
-
expect(described_class).to be_valid('8BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :xmr)
|
|
210
|
-
expect(described_class).to be_valid('8TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :monero)
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it 'validates wrong addresses' do
|
|
214
|
-
expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :monero)
|
|
215
|
-
expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :Xmr)
|
|
216
|
-
expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :XMR)
|
|
217
|
-
expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :xmr)
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
describe '.address' do
|
|
223
|
-
it 'returns insance' do
|
|
224
|
-
expect(described_class.address('D1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'eth')).to be_kind_of(AdequateCryptoAddress::Eth)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
it 'raises UnknownCurrency with unknown currency' do
|
|
228
|
-
expect { described_class.address('addr', 'asdf') }.to raise_error(AdequateCryptoAddress::UnknownCurrency, /asdf/)
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
end
|
data/spec/spec_helper.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'coveralls'
|
|
4
|
-
Coveralls.wear!
|
|
5
|
-
|
|
6
|
-
$LOAD_PATH.unshift File.dirname(__FILE__)
|
|
7
|
-
require 'rspec'
|
|
8
|
-
require 'adequate_crypto_address'
|
|
9
|
-
|
|
10
|
-
RSpec.configure do |config|
|
|
11
|
-
# Enable flags like --only-failures and --next-failure
|
|
12
|
-
config.example_status_persistence_file_path = '.rspec_status'
|
|
13
|
-
|
|
14
|
-
config.order = :random
|
|
15
|
-
config.filter_run :focus
|
|
16
|
-
config.run_all_when_everything_filtered = true
|
|
17
|
-
end
|