lighstorm 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +2 -2
- data/adapters/connections/channel_node.rb +1 -0
- data/adapters/edges/payment/purpose.rb +3 -3
- data/adapters/edges/payment.rb +1 -3
- data/adapters/invoice.rb +0 -2
- data/adapters/wallet.rb +42 -0
- data/components/cache.rb +1 -1
- data/components/lnd.rb +24 -8
- data/controllers/action.rb +5 -0
- data/controllers/activity/all.rb +85 -20
- data/controllers/activity.rb +15 -6
- data/controllers/channel/actions/apply_gossip.rb +3 -4
- data/controllers/channel/actions/update_fee.rb +11 -7
- data/controllers/channel/all.rb +11 -7
- data/controllers/channel/find_by_id.rb +11 -11
- data/controllers/channel/mine.rb +10 -10
- data/controllers/channel.rb +25 -11
- data/controllers/concerns/impersonatable.rb +33 -0
- data/controllers/connection.rb +33 -0
- data/controllers/forward/all.rb +16 -12
- data/controllers/forward/group_by_channel.rb +2 -2
- data/controllers/forward.rb +19 -13
- data/controllers/invoice/actions/create.rb +21 -13
- data/controllers/invoice/actions/pay.rb +13 -12
- data/controllers/invoice/actions/pay_through_route.rb +2 -2
- data/controllers/invoice/all.rb +7 -7
- data/controllers/invoice/decode.rb +6 -6
- data/controllers/invoice/find_by_code.rb +7 -7
- data/controllers/invoice/find_by_secret_hash.rb +10 -6
- data/controllers/invoice.rb +46 -39
- data/controllers/node/actions/apply_gossip.rb +1 -1
- data/controllers/node/actions/pay.rb +13 -12
- data/controllers/node/all.rb +11 -7
- data/controllers/node/find_by_public_key.rb +11 -7
- data/controllers/node/myself.rb +6 -6
- data/controllers/node.rb +17 -11
- data/controllers/payment/actions/pay.rb +23 -19
- data/controllers/payment/all.rb +7 -4
- data/controllers/payment.rb +20 -14
- data/controllers/secret/valid_proof.rb +5 -5
- data/controllers/transaction/all.rb +6 -5
- data/controllers/transaction.rb +14 -6
- data/controllers/wallet/balance.rb +34 -0
- data/controllers/wallet.rb +19 -0
- data/docs/README.md +70 -7
- data/docs/_coverpage.md +1 -1
- data/docs/index.html +1 -1
- data/lighstorm.gemspec +1 -1
- data/models/activity.rb +3 -2
- data/models/connections/channel_node/fee.rb +5 -2
- data/models/connections/channel_node/policy.rb +3 -2
- data/models/connections/channel_node.rb +14 -4
- data/models/connections/forward_channel.rb +3 -2
- data/models/edges/channel/hop.rb +1 -1
- data/models/edges/channel.rb +5 -7
- data/models/edges/forward.rb +4 -3
- data/models/edges/groups/channel_forwards.rb +3 -2
- data/models/edges/payment.rb +4 -3
- data/models/errors.rb +16 -24
- data/models/invoice.rb +10 -4
- data/models/nodes/node.rb +10 -4
- data/models/secret.rb +10 -4
- data/models/wallet.rb +40 -0
- data/ports/dsl/lighstorm.rb +6 -2
- data/ports/grpc.rb +30 -2
- data/static/cache.rb +2 -0
- data/static/spec.rb +1 -1
- metadata +10 -5
- data/deleted.sh +0 -1
data/docs/README.md
CHANGED
@@ -27,7 +27,7 @@ Lighstorm::Channel.mine.first.myself.node.alias
|
|
27
27
|
Add to your `Gemfile`:
|
28
28
|
|
29
29
|
```ruby
|
30
|
-
gem 'lighstorm', '~> 0.0.
|
30
|
+
gem 'lighstorm', '~> 0.0.14'
|
31
31
|
```
|
32
32
|
|
33
33
|
Run `bundle install`.
|
@@ -36,7 +36,7 @@ Run `bundle install`.
|
|
36
36
|
```ruby
|
37
37
|
require 'lighstorm'
|
38
38
|
|
39
|
-
puts Lighstorm.version # => 0.0.
|
39
|
+
puts Lighstorm.version # => 0.0.14
|
40
40
|
|
41
41
|
Lighstorm::Invoice.create(
|
42
42
|
description: 'Coffee', amount: { millisatoshis: 1000 }, payable: 'once'
|
@@ -193,6 +193,46 @@ Lighstorm.connect!(
|
|
193
193
|
)
|
194
194
|
```
|
195
195
|
|
196
|
+
## Multiclient
|
197
|
+
|
198
|
+
Multiclient allows you to establish connections with multiple nodes and effortlessly switch between them.
|
199
|
+
|
200
|
+
```ruby
|
201
|
+
require 'lighstorm'
|
202
|
+
|
203
|
+
Lighstorm::Connection.connect!(
|
204
|
+
address: '127.0.0.1:10009',
|
205
|
+
certificate_path: '/lnd/tls.cert',
|
206
|
+
macaroon_path: '/lnd/data/chain/bitcoin/mainnet/admin.macaroon'
|
207
|
+
)
|
208
|
+
|
209
|
+
Lighstorm::Connection.add!(
|
210
|
+
'alice',
|
211
|
+
'lndconnect://127.0.0.2:10009?cert=MIICJz...JBEERQ&macaroon=AgEDbG...45ukJ4'
|
212
|
+
)
|
213
|
+
|
214
|
+
Lighstorm::Connection.add!(
|
215
|
+
'bob',
|
216
|
+
address: '127.0.0.3:10009',
|
217
|
+
certificate: 'LS0tLS1CRU...UtLS0tLQo=',
|
218
|
+
macaroon: 'AgEDbG5kAv...inv45ukJ4='
|
219
|
+
)
|
220
|
+
|
221
|
+
Lighstorm::Connection.default[:address] # => '127.0.0.1:10009'
|
222
|
+
Lighstorm::Connection.for('alice')[:address] # => '127.0.0.2:10009'
|
223
|
+
Lighstorm::Connection.for('bob')[:address] # => '127.0.0.3:10009'
|
224
|
+
|
225
|
+
Lighstorm::Node.myself.alias # => 'icebaker/old-stone'
|
226
|
+
Lighstorm::Node.as('alice').myself.alias # => alice
|
227
|
+
Lighstorm::Node.as('bob').myself.alias # => bob
|
228
|
+
|
229
|
+
Lighstorm::Connection.all # => ['alice', 'bob']
|
230
|
+
|
231
|
+
Lighstorm::Connection.remove!('bob')
|
232
|
+
|
233
|
+
Lighstorm::Connection.all # => ['alice']
|
234
|
+
```
|
235
|
+
|
196
236
|
## Docker and Remote Access
|
197
237
|
|
198
238
|
To connect to an LND node through a Docker container or remote host, you may need to adjust your certificate settings. Follow these steps:
|
@@ -257,6 +297,8 @@ channel.partner.policy.fee.rate.parts_per_million
|
|
257
297
|
channel.myself.accounting.balance.millisatoshis
|
258
298
|
channel.myself.node.alias
|
259
299
|
channel.myself.policy.fee.rate.parts_per_million
|
300
|
+
|
301
|
+
channel.myself.initiator?
|
260
302
|
```
|
261
303
|
|
262
304
|
[![This is an image representing Channel as a graph.](https://raw.githubusercontent.com/icebaker/assets/main/lighstorm/graph-channel.png)](https://raw.githubusercontent.com/icebaker/assets/main/lighstorm/graph-channel.png)
|
@@ -520,6 +562,7 @@ channel.partner.policy.htlc.blocks.delta.minimum
|
|
520
562
|
channel.myself
|
521
563
|
channel.myself.state
|
522
564
|
channel.myself.active?
|
565
|
+
channel.myself.initiator?
|
523
566
|
|
524
567
|
channel.myself.node.public_key
|
525
568
|
channel.myself.node.alias
|
@@ -914,6 +957,21 @@ Lighstorm::Payment.all(
|
|
914
957
|
)
|
915
958
|
```
|
916
959
|
|
960
|
+
## Wallet
|
961
|
+
|
962
|
+
```ruby
|
963
|
+
balance = Lighstorm::Wallet.balance
|
964
|
+
|
965
|
+
balance.at
|
966
|
+
|
967
|
+
balance.lightning.millisatoshis
|
968
|
+
balance.bitcoin.millisatoshis
|
969
|
+
|
970
|
+
balance.total.millisatoshis
|
971
|
+
|
972
|
+
balance.to_h
|
973
|
+
```
|
974
|
+
|
917
975
|
## Forward
|
918
976
|
|
919
977
|
[![This is an image representing Forward as a graph.](https://raw.githubusercontent.com/icebaker/assets/main/lighstorm/graph-forward.png)](https://raw.githubusercontent.com/icebaker/assets/main/lighstorm/graph-forward.png)
|
@@ -1127,19 +1185,24 @@ LighstormError
|
|
1127
1185
|
|
1128
1186
|
ArgumentError
|
1129
1187
|
IncoherentGossipError
|
1188
|
+
InvoiceMayHaveMultiplePaymentsError
|
1189
|
+
MissingComponentsError
|
1130
1190
|
MissingCredentialsError
|
1131
1191
|
MissingGossipHandlerError
|
1132
1192
|
MissingPartsPerMillionError
|
1193
|
+
MissingTTLError
|
1133
1194
|
NegativeNotAllowedError
|
1134
1195
|
NotYourChannelError
|
1135
1196
|
NotYourNodeError
|
1136
1197
|
OperationNotAllowedError
|
1137
1198
|
TooManyArgumentsError
|
1138
|
-
UnexpectedNumberOfHTLCsError
|
1139
1199
|
UnknownChannelError
|
1140
|
-
UpdateChannelPolicyError
|
1141
1200
|
|
1201
|
+
RequestError
|
1202
|
+
|
1203
|
+
NoInvoiceFoundError
|
1142
1204
|
PaymentError
|
1205
|
+
UpdateChannelPolicyError
|
1143
1206
|
|
1144
1207
|
AlreadyPaidError
|
1145
1208
|
AmountForNonZeroError
|
@@ -1158,7 +1221,7 @@ gem 'lighstorm', path: '/home/user/lighstorm'
|
|
1158
1221
|
# demo.rb
|
1159
1222
|
require 'lighstorm'
|
1160
1223
|
|
1161
|
-
puts Lighstorm.version # => 0.0.
|
1224
|
+
puts Lighstorm.version # => 0.0.14
|
1162
1225
|
```
|
1163
1226
|
|
1164
1227
|
```sh
|
@@ -1395,13 +1458,13 @@ gem build lighstorm.gemspec
|
|
1395
1458
|
|
1396
1459
|
gem signin
|
1397
1460
|
|
1398
|
-
gem push lighstorm-0.0.
|
1461
|
+
gem push lighstorm-0.0.14.gem
|
1399
1462
|
```
|
1400
1463
|
|
1401
1464
|
_________________
|
1402
1465
|
|
1403
1466
|
<center>
|
1404
|
-
lighstorm 0.0.
|
1467
|
+
lighstorm 0.0.14
|
1405
1468
|
|
|
1406
1469
|
<a href="https://github.com/icebaker/lighstorm" rel="noopener noreferrer" target="_blank">GitHub</a>
|
1407
1470
|
|
|
data/docs/_coverpage.md
CHANGED
data/docs/index.html
CHANGED
data/lighstorm.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.require_paths = ['ports/dsl']
|
33
33
|
|
34
34
|
spec.add_dependency 'dotenv', '~> 2.8', '>= 2.8.1'
|
35
|
-
spec.add_dependency 'lnd-client', '~> 0.0.
|
35
|
+
spec.add_dependency 'lnd-client', '~> 0.0.7'
|
36
36
|
spec.add_dependency 'zache', '~> 0.12.0'
|
37
37
|
|
38
38
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
data/models/activity.rb
CHANGED
@@ -24,7 +24,7 @@ module Lighstorm
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def invoice
|
27
|
-
@invoice ||= @data[:data][:invoice].nil? ? nil : Invoice.new(@data[:data][:invoice])
|
27
|
+
@invoice ||= @data[:data][:invoice].nil? ? nil : Invoice.new(@data[:data][:invoice], nil)
|
28
28
|
end
|
29
29
|
|
30
30
|
def transaction
|
@@ -36,8 +36,9 @@ module Lighstorm
|
|
36
36
|
_key: _key,
|
37
37
|
at: at,
|
38
38
|
direction: direction,
|
39
|
-
|
39
|
+
layer: layer,
|
40
40
|
how: how,
|
41
|
+
amount: amount.to_h,
|
41
42
|
message: message
|
42
43
|
}
|
43
44
|
|
@@ -6,7 +6,6 @@ require_relative '../../satoshis'
|
|
6
6
|
require_relative '../../rate'
|
7
7
|
require_relative '../../concerns/protectable'
|
8
8
|
|
9
|
-
require_relative '../../../components/lnd'
|
10
9
|
require_relative '../../../controllers/channel/actions/update_fee'
|
11
10
|
|
12
11
|
module Lighstorm
|
@@ -14,8 +13,9 @@ module Lighstorm
|
|
14
13
|
class Fee
|
15
14
|
include Protectable
|
16
15
|
|
17
|
-
def initialize(policy, data)
|
16
|
+
def initialize(policy, components, data)
|
18
17
|
@policy = policy
|
18
|
+
@components = components
|
19
19
|
@data = data
|
20
20
|
end
|
21
21
|
|
@@ -47,7 +47,10 @@ module Lighstorm
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def update(params, preview: false, &vcr)
|
50
|
+
raise MissingComponentsError if @components.nil?
|
51
|
+
|
50
52
|
Controllers::Channel::UpdateFee.perform(
|
53
|
+
@components,
|
51
54
|
@policy, @policy.transaction, params,
|
52
55
|
preview: preview, &vcr
|
53
56
|
)
|
@@ -8,13 +8,14 @@ module Lighstorm
|
|
8
8
|
class Policy
|
9
9
|
attr_reader :transaction
|
10
10
|
|
11
|
-
def initialize(data, transaction)
|
11
|
+
def initialize(data, components, transaction)
|
12
12
|
@data = data
|
13
|
+
@components = components
|
13
14
|
@transaction = transaction
|
14
15
|
end
|
15
16
|
|
16
17
|
def fee
|
17
|
-
@fee ||= Fee.new(self, @data ? @data[:fee] : {})
|
18
|
+
@fee ||= Fee.new(self, @components, @data ? @data[:fee] : {})
|
18
19
|
end
|
19
20
|
|
20
21
|
def htlc
|
@@ -13,9 +13,11 @@ module Lighstorm
|
|
13
13
|
|
14
14
|
attr_reader :state
|
15
15
|
|
16
|
-
def initialize(data, is_mine, transaction)
|
16
|
+
def initialize(data, components, is_mine, transaction)
|
17
17
|
@data = data
|
18
|
+
@components = components
|
18
19
|
@state = data[:state]
|
20
|
+
@initiator = data[:initiator]
|
19
21
|
@is_mine = is_mine
|
20
22
|
@transaction = transaction
|
21
23
|
end
|
@@ -24,12 +26,16 @@ module Lighstorm
|
|
24
26
|
state == 'active'
|
25
27
|
end
|
26
28
|
|
29
|
+
def initiator?
|
30
|
+
@initiator
|
31
|
+
end
|
32
|
+
|
27
33
|
def node
|
28
|
-
@node ||= Node.new(@data[:node])
|
34
|
+
@node ||= Node.new(@data[:node], @components)
|
29
35
|
end
|
30
36
|
|
31
37
|
def policy
|
32
|
-
@policy ||= Policy.new(@data[:policy], @transaction)
|
38
|
+
@policy ||= Policy.new(@data[:policy], @components, @transaction)
|
33
39
|
end
|
34
40
|
|
35
41
|
def accounting
|
@@ -39,7 +45,11 @@ module Lighstorm
|
|
39
45
|
end
|
40
46
|
|
41
47
|
def to_h
|
42
|
-
restult = {
|
48
|
+
restult = {
|
49
|
+
state: state,
|
50
|
+
initiator: @initiator,
|
51
|
+
node: node.to_h
|
52
|
+
}
|
43
53
|
|
44
54
|
restult[:accounting] = accounting.to_h if @is_mine
|
45
55
|
restult[:policy] = policy.to_h if @data[:policy]
|
@@ -5,8 +5,9 @@ require_relative '../edges/channel'
|
|
5
5
|
module Lighstorm
|
6
6
|
module Models
|
7
7
|
class ForwardChannel
|
8
|
-
def initialize(data)
|
8
|
+
def initialize(data, components)
|
9
9
|
@data = data
|
10
|
+
@components = components
|
10
11
|
end
|
11
12
|
|
12
13
|
def amount
|
@@ -14,7 +15,7 @@ module Lighstorm
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def channel
|
17
|
-
@channel ||= Channel.new(@data[:channel])
|
18
|
+
@channel ||= Channel.new(@data[:channel], @components)
|
18
19
|
end
|
19
20
|
|
20
21
|
def to_h
|
data/models/edges/channel/hop.rb
CHANGED
data/models/edges/channel.rb
CHANGED
@@ -5,9 +5,6 @@ require 'time'
|
|
5
5
|
require_relative '../../ports/grpc'
|
6
6
|
require_relative '../../adapters/edges/channel'
|
7
7
|
|
8
|
-
require_relative '../../components/lnd'
|
9
|
-
require_relative '../../components/cache'
|
10
|
-
|
11
8
|
require_relative '../nodes/node'
|
12
9
|
require_relative './channel/accounting'
|
13
10
|
|
@@ -22,8 +19,9 @@ module Lighstorm
|
|
22
19
|
class Channel
|
23
20
|
attr_reader :data, :_key, :id
|
24
21
|
|
25
|
-
def initialize(data)
|
22
|
+
def initialize(data, components)
|
26
23
|
@data = data
|
24
|
+
@components = components
|
27
25
|
|
28
26
|
@_key = data[:_key]
|
29
27
|
@id = data[:id]
|
@@ -78,7 +76,7 @@ module Lighstorm
|
|
78
76
|
def partners
|
79
77
|
@partners ||= if @data[:partners]
|
80
78
|
@data[:partners].map do |data|
|
81
|
-
ChannelNode.new(data, known? ? mine? : nil, transaction)
|
79
|
+
ChannelNode.new(data, @components, known? ? mine? : nil, transaction)
|
82
80
|
end
|
83
81
|
else
|
84
82
|
[]
|
@@ -170,9 +168,9 @@ module Lighstorm
|
|
170
168
|
raise ArgumentError, 'missing gossip: or dump:' if gossip.nil? && dump.nil?
|
171
169
|
|
172
170
|
if !gossip.nil?
|
173
|
-
new(Adapter::Channel.subscribe_channel_graph(gossip))
|
171
|
+
new(Adapter::Channel.subscribe_channel_graph(gossip), nil)
|
174
172
|
elsif !dump.nil?
|
175
|
-
new(dump)
|
173
|
+
new(dump, nil)
|
176
174
|
end
|
177
175
|
end
|
178
176
|
|
data/models/edges/forward.rb
CHANGED
@@ -12,8 +12,9 @@ module Lighstorm
|
|
12
12
|
class Forward
|
13
13
|
attr_reader :_key, :at
|
14
14
|
|
15
|
-
def initialize(data)
|
15
|
+
def initialize(data, components)
|
16
16
|
@data = data
|
17
|
+
@components = components
|
17
18
|
|
18
19
|
@_key = data[:_key]
|
19
20
|
@at = data[:at]
|
@@ -24,11 +25,11 @@ module Lighstorm
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def in
|
27
|
-
@in ||= ForwardChannel.new(@data[:in])
|
28
|
+
@in ||= ForwardChannel.new(@data[:in], @components)
|
28
29
|
end
|
29
30
|
|
30
31
|
def out
|
31
|
-
@out ||= ForwardChannel.new(@data[:out])
|
32
|
+
@out ||= ForwardChannel.new(@data[:out], @components)
|
32
33
|
end
|
33
34
|
|
34
35
|
def to_h
|
@@ -8,8 +8,9 @@ module Lighstorm
|
|
8
8
|
class ChannelForwardsGroup
|
9
9
|
attr_reader :_key, :last_at
|
10
10
|
|
11
|
-
def initialize(data)
|
11
|
+
def initialize(data, components)
|
12
12
|
@data = data
|
13
|
+
@components = components
|
13
14
|
|
14
15
|
@_key = data[:_key]
|
15
16
|
@last_at = data[:last_at]
|
@@ -20,7 +21,7 @@ module Lighstorm
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def channel
|
23
|
-
@channel ||= Channel.new(@data[:channel])
|
24
|
+
@channel ||= Channel.new(@data[:channel], @components)
|
24
25
|
end
|
25
26
|
|
26
27
|
def to_h
|
data/models/edges/payment.rb
CHANGED
@@ -14,8 +14,9 @@ module Lighstorm
|
|
14
14
|
class Payment
|
15
15
|
attr_reader :_key, :at, :state, :secret, :purpose, :through, :message
|
16
16
|
|
17
|
-
def initialize(data)
|
17
|
+
def initialize(data, components)
|
18
18
|
@data = data
|
19
|
+
@components = components
|
19
20
|
|
20
21
|
@_key = data[:_key]
|
21
22
|
@at = data[:at]
|
@@ -30,7 +31,7 @@ module Lighstorm
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def invoice
|
33
|
-
@invoice ||= !spontaneous? && @data[:invoice] ? Invoice.new(@data[:invoice]) : nil
|
34
|
+
@invoice ||= !spontaneous? && @data[:invoice] ? Invoice.new(@data[:invoice], @components) : nil
|
34
35
|
end
|
35
36
|
|
36
37
|
def amount
|
@@ -42,7 +43,7 @@ module Lighstorm
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def secret
|
45
|
-
@secret ||= @data[:secret] ? Secret.new(@data[:secret]) : nil
|
46
|
+
@secret ||= @data[:secret] ? Secret.new(@data[:secret], @components) : nil
|
46
47
|
end
|
47
48
|
|
48
49
|
def hops
|
data/models/errors.rb
CHANGED
@@ -3,23 +3,18 @@
|
|
3
3
|
module Lighstorm
|
4
4
|
module Errors
|
5
5
|
class LighstormError < StandardError
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(message = nil, grpc: nil)
|
6
|
+
def initialize(message = nil)
|
9
7
|
super(message)
|
10
|
-
@grpc = grpc
|
11
8
|
end
|
12
9
|
|
13
10
|
def to_h
|
14
|
-
|
15
|
-
output[:grpc] = grpc.message unless grpc.nil?
|
16
|
-
|
17
|
-
output
|
11
|
+
{ class: self.class, message: message }
|
18
12
|
end
|
19
13
|
end
|
20
14
|
|
21
15
|
class ToDoError < LighstormError; end
|
22
16
|
|
17
|
+
class MissingComponentsError < LighstormError; end
|
23
18
|
class ArgumentError < LighstormError; end
|
24
19
|
class TooManyArgumentsError < LighstormError; end
|
25
20
|
class IncoherentGossipError < LighstormError; end
|
@@ -31,45 +26,42 @@ module Lighstorm
|
|
31
26
|
class NotYourChannelError < LighstormError; end
|
32
27
|
class NotYourNodeError < LighstormError; end
|
33
28
|
class OperationNotAllowedError < LighstormError; end
|
34
|
-
class UnexpectedNumberOfHTLCsError < LighstormError; end
|
35
29
|
class UnknownChannelError < LighstormError; end
|
36
|
-
class NoInvoiceFoundError < LighstormError; end
|
37
30
|
|
38
31
|
class InvoiceMayHaveMultiplePaymentsError < LighstormError; end
|
39
32
|
|
40
|
-
class
|
41
|
-
attr_reader :response, :result, :grpc
|
33
|
+
class RequestError < LighstormError
|
34
|
+
attr_reader :request, :response, :result, :grpc
|
42
35
|
|
43
|
-
def initialize(message, response: nil, result: nil, grpc: nil)
|
36
|
+
def initialize(message, request: nil, response: nil, result: nil, grpc: nil)
|
44
37
|
super(message)
|
38
|
+
@request = request
|
45
39
|
@response = response
|
46
40
|
@result = result
|
47
41
|
@grpc = grpc
|
48
42
|
end
|
49
43
|
|
50
44
|
def to_h
|
51
|
-
output = { message: message }
|
45
|
+
output = { class: self.class, message: message }
|
52
46
|
|
47
|
+
output[:request] = request unless request.nil?
|
53
48
|
output[:response] = response unless response.nil?
|
54
49
|
output[:result] = result.to_h unless result.nil?
|
55
|
-
output[:grpc] = grpc.message unless grpc.nil?
|
50
|
+
output[:grpc] = { class: grpc.class, message: grpc.message } unless grpc.nil?
|
56
51
|
|
57
52
|
output
|
58
53
|
end
|
59
54
|
end
|
60
55
|
|
56
|
+
class UpdateChannelPolicyError < RequestError; end
|
57
|
+
|
58
|
+
class NoInvoiceFoundError < RequestError; end
|
59
|
+
|
60
|
+
class PaymentError < RequestError; end
|
61
|
+
|
61
62
|
class NoRouteFoundError < PaymentError; end
|
62
63
|
class AlreadyPaidError < PaymentError; end
|
63
64
|
class AmountForNonZeroError < PaymentError; end
|
64
65
|
class MissingMillisatoshisError < PaymentError; end
|
65
|
-
|
66
|
-
class UpdateChannelPolicyError < LighstormError
|
67
|
-
attr_reader :response
|
68
|
-
|
69
|
-
def initialize(message, response)
|
70
|
-
super(message)
|
71
|
-
@response = response
|
72
|
-
end
|
73
|
-
end
|
74
66
|
end
|
75
67
|
end
|
data/models/invoice.rb
CHANGED
@@ -12,8 +12,9 @@ module Lighstorm
|
|
12
12
|
class Invoice
|
13
13
|
attr_reader :_key, :created_at, :expires_at, :settled_at, :state, :payable, :code
|
14
14
|
|
15
|
-
def initialize(data)
|
15
|
+
def initialize(data, components)
|
16
16
|
@data = data
|
17
|
+
@components = components
|
17
18
|
|
18
19
|
@_key = data[:_key]
|
19
20
|
@created_at = data[:created_at]
|
@@ -35,7 +36,7 @@ module Lighstorm
|
|
35
36
|
end
|
36
37
|
|
37
38
|
def payments
|
38
|
-
@payments ||= @data[:payments]&.map { |data| Payment.new(data) }
|
39
|
+
@payments ||= @data[:payments]&.map { |data| Payment.new(data, @components) }
|
39
40
|
end
|
40
41
|
|
41
42
|
def amount
|
@@ -47,7 +48,7 @@ module Lighstorm
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def secret
|
50
|
-
@secret ||= Secret.new(@data[:secret])
|
51
|
+
@secret ||= Secret.new(@data[:secret], @components)
|
51
52
|
end
|
52
53
|
|
53
54
|
def description
|
@@ -89,10 +90,15 @@ module Lighstorm
|
|
89
90
|
times_out_in: { seconds: 5 },
|
90
91
|
preview: false
|
91
92
|
)
|
93
|
+
raise MissingComponentsError if @components.nil?
|
94
|
+
|
92
95
|
if route
|
93
|
-
Controllers::Invoice::PayThroughRoute.perform(
|
96
|
+
Controllers::Invoice::PayThroughRoute.perform(
|
97
|
+
@components, self, route: route, preview: preview
|
98
|
+
)
|
94
99
|
else
|
95
100
|
Controllers::Invoice::Pay.perform(
|
101
|
+
@components,
|
96
102
|
code: code,
|
97
103
|
amount: amount,
|
98
104
|
fee: fee,
|
data/models/nodes/node.rb
CHANGED
@@ -16,8 +16,9 @@ module Lighstorm
|
|
16
16
|
|
17
17
|
attr_reader :data, :_key, :alias, :public_key, :color
|
18
18
|
|
19
|
-
def initialize(data)
|
19
|
+
def initialize(data, components)
|
20
20
|
@data = data
|
21
|
+
@components = components
|
21
22
|
|
22
23
|
@_key = @data[:_key]
|
23
24
|
@alias = @data[:alias]
|
@@ -36,7 +37,9 @@ module Lighstorm
|
|
36
37
|
def channels
|
37
38
|
raise Errors::NotYourNodeError unless myself?
|
38
39
|
|
39
|
-
|
40
|
+
raise MissingComponentsError if @components.nil?
|
41
|
+
|
42
|
+
Controllers::Channel.mine(@components)
|
40
43
|
end
|
41
44
|
|
42
45
|
def to_h
|
@@ -87,9 +90,9 @@ module Lighstorm
|
|
87
90
|
raise ArgumentError, 'missing gossip: or dump:' if gossip.nil? && dump.nil?
|
88
91
|
|
89
92
|
if !gossip.nil?
|
90
|
-
new(Adapter::Node.subscribe_channel_graph(gossip))
|
93
|
+
new(Adapter::Node.subscribe_channel_graph(gossip), nil)
|
91
94
|
elsif !dump.nil?
|
92
|
-
new(dump)
|
95
|
+
new(dump, nil)
|
93
96
|
end
|
94
97
|
end
|
95
98
|
|
@@ -121,7 +124,10 @@ module Lighstorm
|
|
121
124
|
times_out_in: { seconds: 5 }, through: 'amp',
|
122
125
|
preview: false
|
123
126
|
)
|
127
|
+
raise MissingComponentsError if @components.nil?
|
128
|
+
|
124
129
|
Controllers::Node::Pay.perform(
|
130
|
+
@components,
|
125
131
|
public_key: public_key,
|
126
132
|
amount: amount,
|
127
133
|
fee: fee,
|
data/models/secret.rb
CHANGED
@@ -15,14 +15,15 @@ module Lighstorm
|
|
15
15
|
data
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.create(&vcr)
|
18
|
+
def self.create(components = nil, &vcr)
|
19
19
|
data = vcr.nil? ? generate : vcr.call(-> { generate })
|
20
20
|
|
21
|
-
Secret.new(data)
|
21
|
+
Secret.new(data, components)
|
22
22
|
end
|
23
23
|
|
24
|
-
def initialize(data)
|
24
|
+
def initialize(data, components)
|
25
25
|
@data = data
|
26
|
+
@components = components
|
26
27
|
|
27
28
|
@preimage = data[:preimage]
|
28
29
|
@hash = data[:hash]
|
@@ -33,9 +34,14 @@ module Lighstorm
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def valid_proof?(candidate_preimage, &vcr)
|
37
|
+
raise MissingComponentsError if @components.nil?
|
38
|
+
|
36
39
|
return true if candidate_preimage == preimage
|
37
40
|
|
38
|
-
Controllers::Secret::ValidProof.data(
|
41
|
+
Controllers::Secret::ValidProof.data(
|
42
|
+
@components,
|
43
|
+
@hash, candidate_preimage, &vcr
|
44
|
+
)
|
39
45
|
end
|
40
46
|
|
41
47
|
def to_h
|