lightning-invoice 0.1.1 → 0.1.2
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/lib/lightning/invoice.rb +60 -63
- data/lib/lightning/invoice/version.rb +1 -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: da417a5937a2c557525216152eaa8c781a61149e9a3570bebf025d9b39f8cc05
|
|
4
|
+
data.tar.gz: 2e06f5a1c4ce90876e538cd37d630e872c5954c7f82f6df172513b97e3fd7c66
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6bdfd0640908019f31e1ecbd1b30eea3ba26f5f93787b924a61a94671de9888ce547dd48e2e1684ffe498cea18b8be6e375eabcf0adbab667338660c455067a1
|
|
7
|
+
data.tar.gz: 9266c30da04a5dc4d9cdcf4b79cdc744e7c3c7f87497bde42287035127cf2e8407653bb3f9135849100dbad9a11171e389f1e302f354d43f1d2dce669ee8d9b9
|
data/lib/lightning/invoice.rb
CHANGED
|
@@ -15,10 +15,6 @@ module Lightning
|
|
|
15
15
|
attr_accessor :timestamp, :signature, :payment_hash, :description, :pubkey, :description_hash, :expiry, :min_final_cltv_expiry, :fallback_address, :routing_info
|
|
16
16
|
|
|
17
17
|
def initialize
|
|
18
|
-
@amount = -1
|
|
19
|
-
@timestamp = 0
|
|
20
|
-
@expiry = 3600
|
|
21
|
-
@min_final_cltv_expiry = 9
|
|
22
18
|
@routing_info = []
|
|
23
19
|
end
|
|
24
20
|
|
|
@@ -29,40 +25,40 @@ module Lightning
|
|
|
29
25
|
human << multiplier if multiplier
|
|
30
26
|
data = []
|
|
31
27
|
data += Invoice.int_to_array(timestamp)
|
|
32
|
-
if payment_hash
|
|
28
|
+
if payment_hash && !payment_hash.empty?
|
|
33
29
|
data += [1]
|
|
34
30
|
data += [1, 20]
|
|
35
31
|
data += Invoice.buffer_to_word(payment_hash.htb)
|
|
36
32
|
end
|
|
37
|
-
if description
|
|
33
|
+
if description && !description.empty?
|
|
38
34
|
data += [13]
|
|
39
35
|
description_word = Invoice.buffer_to_word(description)
|
|
40
36
|
data += Invoice.int_to_array(description_word.size)
|
|
41
37
|
data += description_word
|
|
42
38
|
end
|
|
43
|
-
if pubkey
|
|
39
|
+
if pubkey && !pubkey.empty?
|
|
44
40
|
data += [19]
|
|
45
41
|
data += [1, 21]
|
|
46
42
|
data += Invoice.buffer_to_word(pubkey.htb)
|
|
47
43
|
end
|
|
48
|
-
if description_hash
|
|
44
|
+
if description_hash && !description_hash.empty?
|
|
49
45
|
data += [23]
|
|
50
46
|
data += [1, 20]
|
|
51
47
|
data += Invoice.buffer_to_word(description_hash.htb)
|
|
52
48
|
end
|
|
53
|
-
if expiry
|
|
49
|
+
if expiry
|
|
54
50
|
data += [6]
|
|
55
51
|
expiry_word = Invoice.int_to_array(expiry)
|
|
56
52
|
data += Invoice.int_to_array(expiry_word.size)
|
|
57
53
|
data += expiry_word
|
|
58
54
|
end
|
|
59
|
-
if min_final_cltv_expiry
|
|
55
|
+
if min_final_cltv_expiry
|
|
60
56
|
data += [24]
|
|
61
57
|
min_final_cltv_expiry_word = Invoice.int_to_array(min_final_cltv_expiry)
|
|
62
58
|
data += Invoice.int_to_array(min_final_cltv_expiry_word.size)
|
|
63
59
|
data += min_final_cltv_expiry_word
|
|
64
60
|
end
|
|
65
|
-
if fallback_address
|
|
61
|
+
if fallback_address && !fallback_address.empty?
|
|
66
62
|
data += [9]
|
|
67
63
|
type = fallback_address_type(fallback_address)
|
|
68
64
|
case type
|
|
@@ -123,53 +119,58 @@ module Lightning
|
|
|
123
119
|
message.timestamp = to_int(data_part[0...7])
|
|
124
120
|
tags = data_part[7...data_part.size - 104]
|
|
125
121
|
index = 0
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
122
|
+
if tags
|
|
123
|
+
while index < tags.size
|
|
124
|
+
type = tags[index]
|
|
125
|
+
data_length = (tags[index + 1].to_i << 5) + tags[index + 2].to_i
|
|
126
|
+
data = tags[index + 3 ... index + 3 + data_length]
|
|
127
|
+
bytes = to_bytes(data)
|
|
128
|
+
index += 3 + data_length
|
|
129
|
+
case type
|
|
130
|
+
when 1
|
|
131
|
+
message.payment_hash = bytes[0...64].pack("C*").bth
|
|
132
|
+
when 13
|
|
133
|
+
message.description = bytes.pack("C*").force_encoding('utf-8')
|
|
134
|
+
when 19
|
|
135
|
+
message.pubkey = bytes[0...66].pack("C*").bth
|
|
136
|
+
when 23
|
|
137
|
+
message.description_hash = bytes[0...64].pack("C*").bth
|
|
138
|
+
when 6
|
|
139
|
+
message.expiry = to_int(data)
|
|
140
|
+
when 24
|
|
141
|
+
message.min_final_cltv_expiry = to_int(data)
|
|
142
|
+
when 9
|
|
143
|
+
address = to_bytes(data[1..-1])
|
|
144
|
+
hex = address.pack("C*").unpack("H*").first
|
|
145
|
+
case data[0]
|
|
146
|
+
when 0
|
|
147
|
+
message.fallback_address = Bitcoin::Script.to_p2wpkh(hex).addresses.first
|
|
148
|
+
when 17
|
|
149
|
+
message.fallback_address = Bitcoin.encode_base58_address(hex, Bitcoin.chain_params.address_version)
|
|
150
|
+
when 18
|
|
151
|
+
message.fallback_address = Bitcoin.encode_base58_address(hex, Bitcoin.chain_params.p2sh_version)
|
|
152
|
+
else
|
|
153
|
+
end
|
|
154
|
+
when 3
|
|
155
|
+
offset = 0
|
|
156
|
+
while offset < bytes.size
|
|
157
|
+
message.routing_info << Lightning::Invoice::RoutingInfo.new(
|
|
158
|
+
bytes[offset...offset + 33].pack("C*").bth,
|
|
159
|
+
bytes[offset + 33...offset + 41].pack("C*").bth,
|
|
160
|
+
to_int(bytes[offset + 41...offset + 45]),
|
|
161
|
+
to_int(bytes[offset + 45...offset + 49]),
|
|
162
|
+
to_int(bytes[offset + 49...offset + 51])
|
|
163
|
+
)
|
|
164
|
+
offset += 51
|
|
165
|
+
end
|
|
155
166
|
else
|
|
156
167
|
end
|
|
157
|
-
when 3
|
|
158
|
-
offset = 0
|
|
159
|
-
while offset < bytes.size
|
|
160
|
-
message.routing_info << Lightning::Invoice::RoutingInfo.new(
|
|
161
|
-
bytes[offset...offset + 33].pack("C*").bth,
|
|
162
|
-
bytes[offset + 33...offset + 41].pack("C*").bth,
|
|
163
|
-
to_int(bytes[offset + 41...offset + 45]),
|
|
164
|
-
to_int(bytes[offset + 45...offset + 49]),
|
|
165
|
-
to_int(bytes[offset + 49...offset + 51])
|
|
166
|
-
)
|
|
167
|
-
offset += 51
|
|
168
|
-
end
|
|
169
|
-
else
|
|
170
168
|
end
|
|
171
169
|
end
|
|
172
|
-
|
|
170
|
+
sig = data_part[data_part.size - 104..-1]
|
|
171
|
+
if sig
|
|
172
|
+
message.signature = word_to_buffer(sig).bth
|
|
173
|
+
end
|
|
173
174
|
message
|
|
174
175
|
end
|
|
175
176
|
|
|
@@ -177,21 +178,17 @@ module Lightning
|
|
|
177
178
|
human.scan(/^([a-zA-Z]+)(\d*)([munp]?)$/)&.first
|
|
178
179
|
end
|
|
179
180
|
|
|
180
|
-
def self.word_to_buffer(data
|
|
181
|
-
buffer = convert(data, 5, 8)
|
|
182
|
-
|
|
183
|
-
if trim && (data.size * 5 % 8 != 0)
|
|
184
|
-
buffer = buffer[0...-1]
|
|
185
|
-
end
|
|
181
|
+
def self.word_to_buffer(data)
|
|
182
|
+
buffer = convert(data, 5, 8, false)
|
|
186
183
|
return buffer.pack("C*")
|
|
187
184
|
end
|
|
188
185
|
|
|
189
186
|
def self.buffer_to_word(buffer)
|
|
190
|
-
words = convert(buffer.unpack('C*'), 8, 5)
|
|
187
|
+
words = convert(buffer.unpack('C*'), 8, 5, true)
|
|
191
188
|
return words
|
|
192
189
|
end
|
|
193
190
|
|
|
194
|
-
def self.convert(data, inbits, outbits)
|
|
191
|
+
def self.convert(data, inbits, outbits, padding)
|
|
195
192
|
value = 0
|
|
196
193
|
bits = 0
|
|
197
194
|
max = (1 << outbits) - 1
|
|
@@ -207,7 +204,7 @@ module Lightning
|
|
|
207
204
|
end
|
|
208
205
|
end
|
|
209
206
|
|
|
210
|
-
if bits > 0
|
|
207
|
+
if padding && bits > 0
|
|
211
208
|
result << ((value << (outbits - bits)) & max)
|
|
212
209
|
end
|
|
213
210
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lightning-invoice
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hajime Yamaguchi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-10-
|
|
11
|
+
date: 2018-10-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|