coin-address-validators 0.0.7 → 0.0.8

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
  SHA1:
3
- metadata.gz: 1f486fb3131fa155643d7b9bf39c6ce2db470857
4
- data.tar.gz: e24a7af91463bcd2db77b8bec484914f5a0bc4a3
3
+ metadata.gz: f73bbd3f62b249dcc89e715efec732e1b363d7b2
4
+ data.tar.gz: f961e2560f281098dbd7d73ac8ef3c86a662de64
5
5
  SHA512:
6
- metadata.gz: 594680e8d565e45bc28c0d01cf1bc91f238bb2ed39c06bb8d80b92b25c7ab0dda65fda056c26b4dc5373df1d354dfcde10d142be2d8f069119abc794bbf9e685
7
- data.tar.gz: 6109a8e65ac11ab77514367076121c82b9da8f0ee6af50a7ef28e546ebee526c95e4015154f5d7a564f9f51d3504684650e1a6d5c734c6090936ecfd80a87c2b
6
+ metadata.gz: 553b95c7458d4fc5b6dea49e05a2ba1ea86bae35651da9c8bb781765e87c50d4b582dd598d1d18a9536f535b6c452d2316bea2ca59fc5f6e910139642d81c0ad
7
+ data.tar.gz: cf7161cc2931f83e6039eec2fb25074e4e8a819d15da12217c41872b34a0a6446b7101f8ca08ecaeb72cbddecef971415fb21e752dc55c7a620748008fbd1c98
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coin-address-validators (0.0.7)
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.19)
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.0)
22
- eth (0.4.10)
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.11.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 (12.3.2)
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.6)
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.2
65
+ 1.17.3
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "bitcoin-ruby"
22
22
  spec.add_dependency "base_x"
23
+ spec.add_dependency "base58"
23
24
  spec.add_dependency "cashaddress"
24
25
  spec.add_dependency "eth"
25
26
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  class CoinAddressValidators
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  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.7
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: 2019-06-12 00:00:00.000000000 Z
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