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 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