lighstorm 0.0.6 → 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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +5 -5
  4. data/README.md +17 -55
  5. data/adapters/connections/channel_node/fee.rb +1 -1
  6. data/adapters/connections/channel_node/policy.rb +6 -6
  7. data/adapters/connections/channel_node.rb +1 -1
  8. data/adapters/connections/payment_channel.rb +2 -2
  9. data/adapters/edges/channel.rb +7 -7
  10. data/adapters/edges/forward.rb +3 -3
  11. data/adapters/edges/payment.rb +1 -1
  12. data/adapters/invoice.rb +35 -0
  13. data/adapters/payment_request.rb +14 -3
  14. data/components/cache.rb +8 -5
  15. data/controllers/action.rb +24 -0
  16. data/controllers/channel/actions/apply_gossip.rb +18 -18
  17. data/controllers/channel/actions/update_fee.rb +33 -22
  18. data/controllers/forward/group_by_channel.rb +3 -3
  19. data/controllers/invoice/actions/create.rb +39 -12
  20. data/controllers/invoice/actions/pay_through_route.rb +1 -1
  21. data/controllers/invoice/decode.rb +44 -0
  22. data/controllers/invoice.rb +8 -3
  23. data/docs/README.md +392 -145
  24. data/docs/_coverpage.md +6 -1
  25. data/docs/index.html +1 -1
  26. data/models/connections/channel_node/accounting.rb +1 -1
  27. data/models/connections/channel_node/fee.rb +5 -4
  28. data/models/connections/channel_node/htlc.rb +4 -4
  29. data/models/connections/forward_channel.rb +1 -1
  30. data/models/connections/payment_channel.rb +4 -4
  31. data/models/edges/channel/accounting.rb +5 -5
  32. data/models/edges/forward.rb +3 -3
  33. data/models/edges/groups/channel_forwards/analysis.rb +8 -8
  34. data/models/edges/payment.rb +3 -3
  35. data/models/errors.rb +1 -1
  36. data/models/payment_request.rb +2 -2
  37. data/models/satoshis.rb +12 -12
  38. data/static/cache.rb +2 -0
  39. data/static/spec.rb +1 -1
  40. metadata +4 -2
@@ -3,33 +3,60 @@
3
3
  require_relative '../../../ports/grpc'
4
4
  require_relative '../../../models/errors'
5
5
  require_relative '../../invoice'
6
+ require_relative '../../action'
6
7
 
7
8
  module Lighstorm
8
9
  module Controllers
9
10
  module Invoice
10
11
  module Create
11
- def self.perform(description: nil, milisatoshis: nil, preview: false, fake: nil)
12
- grpc_request = {
12
+ def self.call(grpc_request)
13
+ Lighstorm::Ports::GRPC.send(grpc_request[:service]).send(
14
+ grpc_request[:method], grpc_request[:params]
15
+ ).to_h
16
+ end
17
+
18
+ def self.prepare(description: nil, millisatoshis: nil)
19
+ {
13
20
  service: :lightning,
14
21
  method: :add_invoice,
15
22
  params: {
16
23
  memo: description,
17
- value_msat: milisatoshis
24
+ value_msat: millisatoshis
18
25
  }
19
26
  }
27
+ end
28
+
29
+ def self.dispatch(grpc_request, &vcr)
30
+ vcr.nil? ? call(grpc_request) : vcr.call(-> { call(grpc_request) }, :dispatch)
31
+ end
32
+
33
+ def self.adapt(response)
34
+ Lighstorm::Adapter::Invoice.add_invoice(response)
35
+ end
36
+
37
+ def self.fetch(adapted, &vcr)
38
+ FindBySecretHash.data(adapted[:request][:secret][:hash], &vcr)
39
+ end
40
+
41
+ def self.model(data)
42
+ FindBySecretHash.model(data)
43
+ end
44
+
45
+ def self.perform(description: nil, millisatoshis: nil, preview: false, &vcr)
46
+ grpc_request = prepare(
47
+ description: description, millisatoshis: millisatoshis
48
+ )
20
49
 
21
50
  return grpc_request if preview
22
51
 
23
- # expiry: Default is 86400 (24 hours).
24
- response = if fake.nil?
25
- LND.instance.middleware("lightning.#{grpc_request[:method]}") do
26
- LND.instance.client.lightning.send(grpc_request[:method], grpc_request[:params])
27
- end.to_h
28
- else
29
- fake
30
- end
52
+ response = dispatch(grpc_request, &vcr)
53
+
54
+ adapted = adapt(response)
55
+
56
+ data = fetch(adapted, &vcr)
57
+ model = self.model(data)
31
58
 
32
- Invoice.find_by_secret_hash(response[:r_hash].unpack1('H*'))
59
+ Action::Output.new({ response: response, result: model })
33
60
  end
34
61
  end
35
62
  end
@@ -36,7 +36,7 @@ module Lighstorm
36
36
  begin
37
37
  route = LND.instance.middleware('router.build_route') do
38
38
  LND.instance.client.router.build_route(
39
- amt_msat: amount.milisatoshis,
39
+ amt_msat: amount.millisatoshis,
40
40
  outgoing_chan_id: channels.first.id.to_i,
41
41
  hop_pubkeys: hops_public_keys.map { |hpk| [hpk].pack('H*') },
42
42
  payment_addr: [address].pack('H*')
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../ports/grpc'
4
+ require_relative '../../adapters/invoice'
5
+ require_relative '../../models/invoice'
6
+
7
+ module Lighstorm
8
+ module Controllers
9
+ module Invoice
10
+ module Decode
11
+ def self.fetch(request_code)
12
+ {
13
+ _request_code: request_code,
14
+ decode_pay_req: Ports::GRPC.lightning.decode_pay_req(pay_req: request_code).to_h
15
+ }
16
+ end
17
+
18
+ def self.adapt(raw)
19
+ {
20
+ decode_pay_req: Lighstorm::Adapter::Invoice.decode_pay_req(
21
+ raw[:decode_pay_req], raw[:_request_code]
22
+ )
23
+ }
24
+ end
25
+
26
+ def self.transform(adapted)
27
+ adapted[:decode_pay_req]
28
+ end
29
+
30
+ def self.data(request_code, &vcr)
31
+ raw = vcr.nil? ? fetch(request_code) : vcr.call(-> { fetch(request_code) })
32
+
33
+ adapted = adapt(raw)
34
+
35
+ transform(adapted)
36
+ end
37
+
38
+ def self.model(data)
39
+ Lighstorm::Models::Invoice.new(data)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './invoice/all'
4
+ require_relative './invoice/decode'
4
5
  require_relative './invoice/find_by_secret_hash'
5
6
  require_relative './invoice/actions/create'
6
7
 
@@ -23,12 +24,16 @@ module Lighstorm
23
24
  FindBySecretHash.model(FindBySecretHash.data(secret_hash))
24
25
  end
25
26
 
26
- def self.create(description: nil, milisatoshis: nil, preview: false, fake: nil)
27
+ def self.decode(request_code, &vcr)
28
+ Decode.model(Decode.data(request_code, &vcr))
29
+ end
30
+
31
+ def self.create(description: nil, millisatoshis: nil, preview: false, &vcr)
27
32
  Create.perform(
28
33
  description: description,
29
- milisatoshis: milisatoshis,
34
+ millisatoshis: millisatoshis,
30
35
  preview: preview,
31
- fake: fake
36
+ &vcr
32
37
  )
33
38
  end
34
39
  end