wallet_validator 0.3.0 → 0.4.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/Gemfile +1 -2
- data/Gemfile.lock +8 -1
- data/lib/wallet_validator/ada.rb +9 -2
- data/lib/wallet_validator/bch.rb +11 -7
- data/lib/wallet_validator/bnb.rb +1 -3
- data/lib/wallet_validator/btc.rb +1 -1
- data/lib/wallet_validator/crypto/bech32.rb +1 -4
- data/lib/wallet_validator/version.rb +1 -1
- data/lib/wallet_validator.rb +0 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 430bb1c8e7832cf491c7642d2b96b87633e495b52507d95224460ddbf0bb84c2
|
4
|
+
data.tar.gz: 7dc17614a55cb15e5474213f4e44dfae29f7ad379796d267967f42d1d84f08ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 696552c3e4a11edce426cf87d8f30edb7be113377a5ae626687b88e054cc0213081aee06291af1c53e59e458a45408e3a4e44f85fa8cd463f8e59ca1d84652b1
|
7
|
+
data.tar.gz: 0dfc1143a027549803106e5afe24488154d0e1d31d023352521db32ce2fb86ef364f78dfe638fa2f8041ffd7d96bcd6a18ca0e611b86490453de83b7b722a5e1
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
wallet_validator (0.
|
4
|
+
wallet_validator (0.3.3)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
base58 (0.2.3)
|
10
|
+
cbor (0.5.9.6)
|
9
11
|
coderay (1.1.3)
|
10
12
|
diff-lcs (1.4.4)
|
13
|
+
digest-crc (0.6.4)
|
14
|
+
rake (>= 12.0.0, < 14.0.0)
|
11
15
|
digest-sha3 (1.1.0)
|
12
16
|
method_source (1.0.0)
|
13
17
|
pry (0.14.1)
|
@@ -32,6 +36,9 @@ PLATFORMS
|
|
32
36
|
ruby
|
33
37
|
|
34
38
|
DEPENDENCIES
|
39
|
+
base58
|
40
|
+
cbor
|
41
|
+
digest-crc
|
35
42
|
digest-sha3
|
36
43
|
pry
|
37
44
|
rake (~> 12.0)
|
data/lib/wallet_validator/ada.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module WalletValidator
|
3
2
|
class Ada < Btc
|
4
3
|
CURRENCY_ATTR = {
|
@@ -17,11 +16,19 @@ module WalletValidator
|
|
17
16
|
}.freeze
|
18
17
|
|
19
18
|
def valid?
|
20
|
-
|
19
|
+
valid_address_v1? || valid_address_shelley?
|
21
20
|
end
|
22
21
|
|
23
22
|
private
|
24
23
|
|
24
|
+
def valid_address_v1?
|
25
|
+
address.start_with?("DdzFFzCqrhs")
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid_address_shelley?
|
29
|
+
Crypto::Bech32.valid?(address, attribute["bech32"]["hrp"], attribute["bech32"]["separator"])
|
30
|
+
end
|
31
|
+
|
25
32
|
def attribute
|
26
33
|
is_testnet && CURRENCY_ATTR["testnet"] ? CURRENCY_ATTR["testnet"] : CURRENCY_ATTR["main"]
|
27
34
|
end
|
data/lib/wallet_validator/bch.rb
CHANGED
@@ -12,16 +12,20 @@ module WalletValidator
|
|
12
12
|
def valid?
|
13
13
|
match = address.match(/^(.+):(.+)$/)
|
14
14
|
|
15
|
-
|
15
|
+
if match
|
16
|
+
return false unless match[1] == is_testnet ? "bchtest" : "bitcoincash"
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
prefix = is_testnet ? [2, 3, 8, 20, 5, 19, 20, 0] : [2, 9, 20, 3, 15, 9, 14, 3, 1, 19, 8, 0]
|
19
|
+
raw_payload = match[2].split("").map { |m| Crypto::Bech32::CHARSET.index(m) }
|
20
|
+
return false if bch_polymod(prefix + raw_payload) != 0 # raise "Address checksum invalid: #{cashaddress}"
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
payload = bch_convert_bits(raw_payload[0..-9], 5, 8, false)
|
23
|
+
return false if payload.empty? # raise "Converted payload was empty"
|
23
24
|
|
24
|
-
|
25
|
+
return true
|
26
|
+
else
|
27
|
+
Btc.new(@address, @is_testnet).valid?
|
28
|
+
end
|
25
29
|
end
|
26
30
|
|
27
31
|
private
|
data/lib/wallet_validator/bnb.rb
CHANGED
@@ -8,20 +8,18 @@ module WalletValidator
|
|
8
8
|
"bech32" => {
|
9
9
|
"hrp" => "bnb", # hrp
|
10
10
|
"separator" => "1", # separator
|
11
|
-
"length_check" => [38] # length check
|
12
11
|
},
|
13
12
|
},
|
14
13
|
"testnet" => {
|
15
14
|
"bech32" => {
|
16
15
|
"hrp" => "tbnb", # hrp
|
17
16
|
"separator" => "1", # separator
|
18
|
-
"length_check" => [38] # length check
|
19
17
|
}
|
20
18
|
}
|
21
19
|
}.freeze
|
22
20
|
|
23
21
|
def valid?
|
24
|
-
Crypto::Bech32.valid?(address, attribute["bech32"]["hrp"], attribute["bech32"]["separator"]
|
22
|
+
Crypto::Bech32.valid?(address, attribute["bech32"]["hrp"], attribute["bech32"]["separator"])
|
25
23
|
end
|
26
24
|
|
27
25
|
private
|
data/lib/wallet_validator/btc.rb
CHANGED
@@ -37,7 +37,7 @@ module WalletValidator
|
|
37
37
|
|
38
38
|
if filter_def
|
39
39
|
# false時繼續往下
|
40
|
-
return true if Crypto::Bech32.valid?(address, filter_def["hrp"], filter_def["separator"]
|
40
|
+
return true if Crypto::Bech32.valid?(address, filter_def["hrp"], filter_def["separator"])
|
41
41
|
end
|
42
42
|
|
43
43
|
filter = attribute["filter"]
|
@@ -1,16 +1,13 @@
|
|
1
1
|
module Crypto
|
2
2
|
module Bech32
|
3
|
-
LENGTH_CHECK_SET = [39, 59, 98].freeze
|
4
3
|
CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l".split(//)
|
5
4
|
GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3].freeze
|
6
5
|
|
7
|
-
def self.valid?(address, hrp, separator
|
8
|
-
length_set ||= LENGTH_CHECK_SET # 歸正
|
6
|
+
def self.valid?(address, hrp, separator)
|
9
7
|
address = address.downcase.strip
|
10
8
|
|
11
9
|
match = address.match(/^#{hrp}#{separator}([\da-z]+)$/)
|
12
10
|
return false if !match
|
13
|
-
return false if !length_set.include?(match[1].length)
|
14
11
|
|
15
12
|
pos = address.rindex(separator)
|
16
13
|
return false if pos.nil? || pos < 1 || pos + 7 > address.length || address.length > 108
|
data/lib/wallet_validator.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wallet_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nic
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Write a longer description or delete this line.
|
14
14
|
email:
|