lighstorm 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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