coin-address-validators 0.0.7 → 0.0.8
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/Gemfile.lock +11 -9
- data/coin-address-validators.gemspec +1 -0
- data/lib/coin-address-validators.rb +43 -0
- data/lib/coin-address-validators/version.rb +1 -1
- data/spec/lib/coin-address-validators_spec.rb +8 -1
- metadata +17 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f73bbd3f62b249dcc89e715efec732e1b363d7b2
|
|
4
|
+
data.tar.gz: f961e2560f281098dbd7d73ac8ef3c86a662de64
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 553b95c7458d4fc5b6dea49e05a2ba1ea86bae35651da9c8bb781765e87c50d4b582dd598d1d18a9536f535b6c452d2316bea2ca59fc5f6e910139642d81c0ad
|
|
7
|
+
data.tar.gz: cf7161cc2931f83e6039eec2fb25074e4e8a819d15da12217c41872b34a0a6446b7101f8ca08ecaeb72cbddecef971415fb21e752dc55c7a620748008fbd1c98
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
coin-address-validators (0.0.
|
|
4
|
+
coin-address-validators (0.0.8)
|
|
5
|
+
base58
|
|
5
6
|
base_x
|
|
6
7
|
bitcoin-ruby
|
|
7
8
|
cashaddress
|
|
@@ -10,29 +11,30 @@ PATH
|
|
|
10
11
|
GEM
|
|
11
12
|
remote: https://rubygems.org/
|
|
12
13
|
specs:
|
|
14
|
+
base58 (0.2.3)
|
|
13
15
|
base_x (0.8.1)
|
|
14
|
-
bitcoin-ruby (0.0.
|
|
16
|
+
bitcoin-ruby (0.0.20)
|
|
15
17
|
eventmachine
|
|
16
18
|
ffi
|
|
17
19
|
scrypt
|
|
18
20
|
byebug (9.0.6)
|
|
19
21
|
cashaddress (0.1.0)
|
|
20
22
|
diff-lcs (1.3)
|
|
21
|
-
digest-sha3 (1.1.
|
|
22
|
-
eth (0.4.
|
|
23
|
-
digest-sha3 (~> 1.1)
|
|
23
|
+
digest-sha3-patched (1.1.1)
|
|
24
|
+
eth (0.4.12)
|
|
25
|
+
digest-sha3-patched (~> 1.1)
|
|
24
26
|
ffi (~> 1.0)
|
|
25
27
|
money-tree (~> 0.10.0)
|
|
26
28
|
rlp (~> 0.7.3)
|
|
27
29
|
scrypt (~> 3.0.6)
|
|
28
30
|
eventmachine (1.2.7)
|
|
29
|
-
ffi (1.
|
|
31
|
+
ffi (1.13.1)
|
|
30
32
|
ffi-compiler (1.0.1)
|
|
31
33
|
ffi (>= 1.0.0)
|
|
32
34
|
rake
|
|
33
35
|
money-tree (0.10.0)
|
|
34
36
|
ffi
|
|
35
|
-
rake (
|
|
37
|
+
rake (13.0.1)
|
|
36
38
|
rlp (0.7.3)
|
|
37
39
|
rspec (3.7.0)
|
|
38
40
|
rspec-core (~> 3.7.0)
|
|
@@ -47,7 +49,7 @@ GEM
|
|
|
47
49
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
48
50
|
rspec-support (~> 3.7.0)
|
|
49
51
|
rspec-support (3.7.1)
|
|
50
|
-
scrypt (3.0.
|
|
52
|
+
scrypt (3.0.7)
|
|
51
53
|
ffi-compiler (>= 1.0, < 2.0)
|
|
52
54
|
|
|
53
55
|
PLATFORMS
|
|
@@ -60,4 +62,4 @@ DEPENDENCIES
|
|
|
60
62
|
rspec
|
|
61
63
|
|
|
62
64
|
BUNDLED WITH
|
|
63
|
-
1.17.
|
|
65
|
+
1.17.3
|
|
@@ -2,6 +2,7 @@ require 'bitcoin'
|
|
|
2
2
|
require 'base_x'
|
|
3
3
|
require 'cashaddress'
|
|
4
4
|
require 'eth'
|
|
5
|
+
require 'base58'
|
|
5
6
|
|
|
6
7
|
class CoinAddressValidators
|
|
7
8
|
TOKENS = %w[ret erct]
|
|
@@ -99,4 +100,46 @@ class CoinAddressValidators
|
|
|
99
100
|
Eth::Utils.valid_address? address
|
|
100
101
|
end
|
|
101
102
|
end
|
|
103
|
+
|
|
104
|
+
class TrxValidator
|
|
105
|
+
def valid?(address)
|
|
106
|
+
return false unless address.is_a?(String)
|
|
107
|
+
return false unless address.size == 34
|
|
108
|
+
addr = BaseX::BitcoinBase58.decode(address)
|
|
109
|
+
return false unless addr.size == 25
|
|
110
|
+
return false unless addr.unpack1("H*").start_with?("41")
|
|
111
|
+
|
|
112
|
+
checksum = addr[-4..-1]
|
|
113
|
+
real_addr = addr[0..-5]
|
|
114
|
+
|
|
115
|
+
# TODO checksum properly
|
|
116
|
+
# hash0 = sha256(real_addr)
|
|
117
|
+
# hash1 = sha256(hash0)
|
|
118
|
+
# checksum1 = hash1[0..3]
|
|
119
|
+
# return (checksum[0] == checksum1[0] && checksum[1] == checksum1[1] && checksum[2] ==
|
|
120
|
+
# checksum1[2] && checksum[3] == checksum1[3])
|
|
121
|
+
|
|
122
|
+
return address == to_base58_address(real_addr.unpack1("H*"))
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def to_base58_address(hex)
|
|
126
|
+
return "" unless hex
|
|
127
|
+
|
|
128
|
+
sha256ed = sha256(sha256(hex))
|
|
129
|
+
bytes = hex_str_to_bytes(hex) + hex_str_to_bytes(sha256ed).first(4)
|
|
130
|
+
Base58.encode(bytes_to_str(bytes).to_i(16), :bitcoin)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def hex_str_to_bytes(hex_str)
|
|
134
|
+
hex_str.scan(/../).map(&:hex)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def bytes_to_str(bytes)
|
|
138
|
+
bytes.pack("c*").unpack1("H*")
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def sha256(hex_str)
|
|
142
|
+
Digest::SHA2.new(256).hexdigest([hex_str].pack("H*"))
|
|
143
|
+
end
|
|
144
|
+
end
|
|
102
145
|
end
|
|
@@ -33,6 +33,13 @@ RSpec.describe CoinAddressValidators do
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
context "trx" do
|
|
37
|
+
it "returns correctly" do
|
|
38
|
+
expect(CoinAddressValidators["trx"].valid?("TVn8zgT7QsNdGtPnhk9PFPGevbCsH2EUds")).to be_truthy
|
|
39
|
+
expect(CoinAddressValidators["trx"].valid?("tVn8zgT7QsNdGtPnhk9PFPGevbCsH2EUds")).to be_falsey
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
36
43
|
context "ret token" do
|
|
37
44
|
it "returns correctly" do
|
|
38
45
|
expect(CoinAddressValidators["ret"].valid?("0xff0a8531f38e5f143a0444d066fad0a0f0833853")).to be_truthy
|
|
@@ -74,7 +81,7 @@ RSpec.describe CoinAddressValidators do
|
|
|
74
81
|
|
|
75
82
|
describe "#parse_cash_addr" do
|
|
76
83
|
|
|
77
|
-
%w[btc eth ltc xrp erct usdt].each do |coin|
|
|
84
|
+
%w[btc eth trx ltc xrp erct usdt].each do |coin|
|
|
78
85
|
context "#{coin}Validator" do
|
|
79
86
|
it "raise error" do
|
|
80
87
|
expect do
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coin-address-validators
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Phuong Nguyen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-09-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bitcoin-ruby
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: base58
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: cashaddress
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -144,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
144
158
|
version: '0'
|
|
145
159
|
requirements: []
|
|
146
160
|
rubyforge_project:
|
|
147
|
-
rubygems_version: 2.6.14
|
|
161
|
+
rubygems_version: 2.6.14.3
|
|
148
162
|
signing_key:
|
|
149
163
|
specification_version: 4
|
|
150
164
|
summary: Validators for btc, bch, ltc, eth, xrp addresses
|