lighstorm 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +7 -7
  4. data/adapters/bitcoin/address.rb +19 -0
  5. data/adapters/bitcoin/transaction.rb +34 -0
  6. data/adapters/lightning/connections/channel_node/fee.rb +28 -0
  7. data/adapters/lightning/connections/channel_node/policy.rb +63 -0
  8. data/adapters/lightning/connections/channel_node.rb +77 -0
  9. data/adapters/lightning/connections/payment_channel.rb +30 -0
  10. data/adapters/lightning/edges/channel.rb +98 -0
  11. data/adapters/lightning/edges/forward.rb +42 -0
  12. data/adapters/lightning/edges/payment/purpose.rb +45 -0
  13. data/adapters/lightning/edges/payment.rb +89 -0
  14. data/adapters/lightning/invoice.rb +186 -0
  15. data/adapters/lightning/nodes/node.rb +113 -0
  16. data/controllers/action.rb +1 -1
  17. data/controllers/bitcoin/address/actions/create.rb +91 -0
  18. data/controllers/bitcoin/address/actions/pay.rb +119 -0
  19. data/controllers/bitcoin/address.rb +24 -0
  20. data/controllers/bitcoin/transaction/all.rb +65 -0
  21. data/controllers/bitcoin/transaction.rb +25 -0
  22. data/controllers/concerns/impersonatable.rb +5 -3
  23. data/controllers/connection.rb +1 -1
  24. data/controllers/lightning/channel/actions/apply_gossip.rb +201 -0
  25. data/controllers/lightning/channel/actions/update_fee.rb +94 -0
  26. data/controllers/lightning/channel/all.rb +85 -0
  27. data/controllers/lightning/channel/find_by_id.rb +155 -0
  28. data/controllers/lightning/channel/mine.rb +116 -0
  29. data/controllers/lightning/channel.rb +43 -0
  30. data/controllers/lightning/forward/all.rb +250 -0
  31. data/controllers/lightning/forward/group_by_channel.rb +91 -0
  32. data/controllers/lightning/forward.rb +36 -0
  33. data/controllers/lightning/invoice/actions/create.rb +90 -0
  34. data/controllers/lightning/invoice/actions/pay.rb +97 -0
  35. data/controllers/lightning/invoice/actions/pay_through_route.rb +73 -0
  36. data/controllers/lightning/invoice/all.rb +82 -0
  37. data/controllers/lightning/invoice/decode.rb +50 -0
  38. data/controllers/lightning/invoice/find_by_code.rb +76 -0
  39. data/controllers/lightning/invoice/find_by_secret_hash.rb +56 -0
  40. data/controllers/lightning/invoice.rb +64 -0
  41. data/controllers/lightning/node/actions/apply_gossip.rb +114 -0
  42. data/controllers/lightning/node/actions/pay.rb +117 -0
  43. data/controllers/lightning/node/all.rb +69 -0
  44. data/controllers/lightning/node/find_by_public_key.rb +55 -0
  45. data/controllers/lightning/node/myself.rb +36 -0
  46. data/controllers/lightning/node.rb +35 -0
  47. data/controllers/lightning/payment/actions/pay.rb +110 -0
  48. data/controllers/lightning/payment/all.rb +439 -0
  49. data/controllers/lightning/payment.rb +37 -0
  50. data/controllers/lightning/secret/valid_proof.rb +60 -0
  51. data/controllers/lightning/secret.rb +16 -0
  52. data/controllers/wallet/activity/all.rb +196 -0
  53. data/controllers/wallet/activity.rb +28 -0
  54. data/controllers/wallet/balance.rb +3 -3
  55. data/controllers/wallet.rb +1 -1
  56. data/docs/README.md +229 -148
  57. data/docs/_coverpage.md +1 -1
  58. data/docs/index.html +1 -1
  59. data/models/bitcoin/address.rb +49 -0
  60. data/models/bitcoin/transaction.rb +41 -0
  61. data/models/concerns/protectable.rb +1 -1
  62. data/models/errors.rb +7 -8
  63. data/models/lightning/connections/channel_node/accounting.rb +27 -0
  64. data/models/lightning/connections/channel_node/fee.rb +82 -0
  65. data/models/lightning/connections/channel_node/htlc/blocks/delta.rb +41 -0
  66. data/models/lightning/connections/channel_node/htlc.rb +88 -0
  67. data/models/lightning/connections/channel_node/policy.rb +41 -0
  68. data/models/lightning/connections/channel_node.rb +86 -0
  69. data/models/lightning/connections/forward_channel.rb +31 -0
  70. data/models/lightning/connections/payment_channel.rb +58 -0
  71. data/models/lightning/edges/channel/accounting.rb +87 -0
  72. data/models/lightning/edges/channel/hop.rb +67 -0
  73. data/models/lightning/edges/channel.rb +197 -0
  74. data/models/lightning/edges/forward.rb +51 -0
  75. data/models/lightning/edges/groups/channel_forwards/analysis.rb +71 -0
  76. data/models/lightning/edges/groups/channel_forwards.rb +39 -0
  77. data/models/lightning/edges/payment.rb +104 -0
  78. data/models/lightning/invoice.rb +115 -0
  79. data/models/lightning/nodes/node/lightning.rb +33 -0
  80. data/models/lightning/nodes/node/platform.rb +50 -0
  81. data/models/lightning/nodes/node.rb +145 -0
  82. data/models/lightning/rate.rb +37 -0
  83. data/models/lightning/secret.rb +57 -0
  84. data/models/satoshis.rb +1 -1
  85. data/models/wallet/activity.rb +54 -0
  86. data/models/wallet/balance.rb +42 -0
  87. data/ports/dsl/lighstorm.rb +29 -16
  88. data/static/cache.rb +2 -0
  89. data/static/spec.rb +1 -1
  90. metadata +74 -68
  91. data/adapters/connections/channel_node/fee.rb +0 -26
  92. data/adapters/connections/channel_node/policy.rb +0 -61
  93. data/adapters/connections/channel_node.rb +0 -75
  94. data/adapters/connections/payment_channel.rb +0 -28
  95. data/adapters/edges/channel.rb +0 -96
  96. data/adapters/edges/forward.rb +0 -40
  97. data/adapters/edges/payment/purpose.rb +0 -43
  98. data/adapters/edges/payment.rb +0 -87
  99. data/adapters/invoice.rb +0 -184
  100. data/adapters/nodes/node.rb +0 -111
  101. data/adapters/transaction.rb +0 -23
  102. data/controllers/activity/all.rb +0 -194
  103. data/controllers/activity.rb +0 -26
  104. data/controllers/channel/actions/apply_gossip.rb +0 -193
  105. data/controllers/channel/actions/update_fee.rb +0 -91
  106. data/controllers/channel/all.rb +0 -83
  107. data/controllers/channel/find_by_id.rb +0 -153
  108. data/controllers/channel/mine.rb +0 -114
  109. data/controllers/channel.rb +0 -41
  110. data/controllers/forward/all.rb +0 -248
  111. data/controllers/forward/group_by_channel.rb +0 -89
  112. data/controllers/forward.rb +0 -34
  113. data/controllers/invoice/actions/create.rb +0 -88
  114. data/controllers/invoice/actions/pay.rb +0 -95
  115. data/controllers/invoice/actions/pay_through_route.rb +0 -71
  116. data/controllers/invoice/all.rb +0 -80
  117. data/controllers/invoice/decode.rb +0 -44
  118. data/controllers/invoice/find_by_code.rb +0 -70
  119. data/controllers/invoice/find_by_secret_hash.rb +0 -54
  120. data/controllers/invoice.rb +0 -62
  121. data/controllers/node/actions/apply_gossip.rb +0 -112
  122. data/controllers/node/actions/pay.rb +0 -115
  123. data/controllers/node/all.rb +0 -67
  124. data/controllers/node/find_by_public_key.rb +0 -53
  125. data/controllers/node/myself.rb +0 -34
  126. data/controllers/node.rb +0 -33
  127. data/controllers/payment/actions/pay.rb +0 -108
  128. data/controllers/payment/all.rb +0 -437
  129. data/controllers/payment.rb +0 -35
  130. data/controllers/secret/valid_proof.rb +0 -58
  131. data/controllers/transaction/all.rb +0 -61
  132. data/controllers/transaction.rb +0 -25
  133. data/models/activity.rb +0 -52
  134. data/models/connections/channel_node/accounting.rb +0 -25
  135. data/models/connections/channel_node/fee.rb +0 -80
  136. data/models/connections/channel_node/htlc/blocks/delta.rb +0 -39
  137. data/models/connections/channel_node/htlc.rb +0 -86
  138. data/models/connections/channel_node/policy.rb +0 -39
  139. data/models/connections/channel_node.rb +0 -84
  140. data/models/connections/forward_channel.rb +0 -29
  141. data/models/connections/payment_channel.rb +0 -56
  142. data/models/edges/channel/accounting.rb +0 -85
  143. data/models/edges/channel/hop.rb +0 -65
  144. data/models/edges/channel.rb +0 -195
  145. data/models/edges/forward.rb +0 -49
  146. data/models/edges/groups/channel_forwards/analysis.rb +0 -69
  147. data/models/edges/groups/channel_forwards.rb +0 -37
  148. data/models/edges/payment.rb +0 -102
  149. data/models/invoice.rb +0 -113
  150. data/models/nodes/node/lightning.rb +0 -31
  151. data/models/nodes/node/platform.rb +0 -48
  152. data/models/nodes/node.rb +0 -143
  153. data/models/rate.rb +0 -35
  154. data/models/secret.rb +0 -55
  155. data/models/transaction.rb +0 -39
  156. data/models/wallet.rb +0 -40
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lighstorm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - icebaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-26 00:00:00.000000000 Z
11
+ date: 2023-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -75,55 +75,60 @@ files:
75
75
  - LICENSE
76
76
  - README.md
77
77
  - Rakefile
78
- - adapters/connections/channel_node.rb
79
- - adapters/connections/channel_node/fee.rb
80
- - adapters/connections/channel_node/policy.rb
81
- - adapters/connections/payment_channel.rb
82
- - adapters/edges/channel.rb
83
- - adapters/edges/forward.rb
84
- - adapters/edges/payment.rb
85
- - adapters/edges/payment/purpose.rb
86
- - adapters/invoice.rb
87
- - adapters/nodes/node.rb
88
- - adapters/transaction.rb
78
+ - adapters/bitcoin/address.rb
79
+ - adapters/bitcoin/transaction.rb
80
+ - adapters/lightning/connections/channel_node.rb
81
+ - adapters/lightning/connections/channel_node/fee.rb
82
+ - adapters/lightning/connections/channel_node/policy.rb
83
+ - adapters/lightning/connections/payment_channel.rb
84
+ - adapters/lightning/edges/channel.rb
85
+ - adapters/lightning/edges/forward.rb
86
+ - adapters/lightning/edges/payment.rb
87
+ - adapters/lightning/edges/payment/purpose.rb
88
+ - adapters/lightning/invoice.rb
89
+ - adapters/lightning/nodes/node.rb
89
90
  - adapters/wallet.rb
90
91
  - components/cache.rb
91
92
  - components/lnd.rb
92
93
  - controllers/action.rb
93
- - controllers/activity.rb
94
- - controllers/activity/all.rb
95
- - controllers/channel.rb
96
- - controllers/channel/actions/apply_gossip.rb
97
- - controllers/channel/actions/update_fee.rb
98
- - controllers/channel/all.rb
99
- - controllers/channel/find_by_id.rb
100
- - controllers/channel/mine.rb
94
+ - controllers/bitcoin/address.rb
95
+ - controllers/bitcoin/address/actions/create.rb
96
+ - controllers/bitcoin/address/actions/pay.rb
97
+ - controllers/bitcoin/transaction.rb
98
+ - controllers/bitcoin/transaction/all.rb
101
99
  - controllers/concerns/impersonatable.rb
102
100
  - controllers/connection.rb
103
- - controllers/forward.rb
104
- - controllers/forward/all.rb
105
- - controllers/forward/group_by_channel.rb
106
- - controllers/invoice.rb
107
- - controllers/invoice/actions/create.rb
108
- - controllers/invoice/actions/pay.rb
109
- - controllers/invoice/actions/pay_through_route.rb
110
- - controllers/invoice/all.rb
111
- - controllers/invoice/decode.rb
112
- - controllers/invoice/find_by_code.rb
113
- - controllers/invoice/find_by_secret_hash.rb
114
- - controllers/node.rb
115
- - controllers/node/actions/apply_gossip.rb
116
- - controllers/node/actions/pay.rb
117
- - controllers/node/all.rb
118
- - controllers/node/find_by_public_key.rb
119
- - controllers/node/myself.rb
120
- - controllers/payment.rb
121
- - controllers/payment/actions/pay.rb
122
- - controllers/payment/all.rb
123
- - controllers/secret/valid_proof.rb
124
- - controllers/transaction.rb
125
- - controllers/transaction/all.rb
101
+ - controllers/lightning/channel.rb
102
+ - controllers/lightning/channel/actions/apply_gossip.rb
103
+ - controllers/lightning/channel/actions/update_fee.rb
104
+ - controllers/lightning/channel/all.rb
105
+ - controllers/lightning/channel/find_by_id.rb
106
+ - controllers/lightning/channel/mine.rb
107
+ - controllers/lightning/forward.rb
108
+ - controllers/lightning/forward/all.rb
109
+ - controllers/lightning/forward/group_by_channel.rb
110
+ - controllers/lightning/invoice.rb
111
+ - controllers/lightning/invoice/actions/create.rb
112
+ - controllers/lightning/invoice/actions/pay.rb
113
+ - controllers/lightning/invoice/actions/pay_through_route.rb
114
+ - controllers/lightning/invoice/all.rb
115
+ - controllers/lightning/invoice/decode.rb
116
+ - controllers/lightning/invoice/find_by_code.rb
117
+ - controllers/lightning/invoice/find_by_secret_hash.rb
118
+ - controllers/lightning/node.rb
119
+ - controllers/lightning/node/actions/apply_gossip.rb
120
+ - controllers/lightning/node/actions/pay.rb
121
+ - controllers/lightning/node/all.rb
122
+ - controllers/lightning/node/find_by_public_key.rb
123
+ - controllers/lightning/node/myself.rb
124
+ - controllers/lightning/payment.rb
125
+ - controllers/lightning/payment/actions/pay.rb
126
+ - controllers/lightning/payment/all.rb
127
+ - controllers/lightning/secret.rb
128
+ - controllers/lightning/secret/valid_proof.rb
126
129
  - controllers/wallet.rb
130
+ - controllers/wallet/activity.rb
131
+ - controllers/wallet/activity/all.rb
127
132
  - controllers/wallet/balance.rb
128
133
  - docs/.nojekyll
129
134
  - docs/README.md
@@ -137,33 +142,34 @@ files:
137
142
  - docs/vendor/prismjs/prism-tomorrow.min.css
138
143
  - helpers/time_expression.rb
139
144
  - lighstorm.gemspec
140
- - models/activity.rb
145
+ - models/bitcoin/address.rb
146
+ - models/bitcoin/transaction.rb
141
147
  - models/concerns/protectable.rb
142
- - models/connections/channel_node.rb
143
- - models/connections/channel_node/accounting.rb
144
- - models/connections/channel_node/fee.rb
145
- - models/connections/channel_node/htlc.rb
146
- - models/connections/channel_node/htlc/blocks/delta.rb
147
- - models/connections/channel_node/policy.rb
148
- - models/connections/forward_channel.rb
149
- - models/connections/payment_channel.rb
150
- - models/edges/channel.rb
151
- - models/edges/channel/accounting.rb
152
- - models/edges/channel/hop.rb
153
- - models/edges/forward.rb
154
- - models/edges/groups/channel_forwards.rb
155
- - models/edges/groups/channel_forwards/analysis.rb
156
- - models/edges/payment.rb
157
148
  - models/errors.rb
158
- - models/invoice.rb
159
- - models/nodes/node.rb
160
- - models/nodes/node/lightning.rb
161
- - models/nodes/node/platform.rb
162
- - models/rate.rb
149
+ - models/lightning/connections/channel_node.rb
150
+ - models/lightning/connections/channel_node/accounting.rb
151
+ - models/lightning/connections/channel_node/fee.rb
152
+ - models/lightning/connections/channel_node/htlc.rb
153
+ - models/lightning/connections/channel_node/htlc/blocks/delta.rb
154
+ - models/lightning/connections/channel_node/policy.rb
155
+ - models/lightning/connections/forward_channel.rb
156
+ - models/lightning/connections/payment_channel.rb
157
+ - models/lightning/edges/channel.rb
158
+ - models/lightning/edges/channel/accounting.rb
159
+ - models/lightning/edges/channel/hop.rb
160
+ - models/lightning/edges/forward.rb
161
+ - models/lightning/edges/groups/channel_forwards.rb
162
+ - models/lightning/edges/groups/channel_forwards/analysis.rb
163
+ - models/lightning/edges/payment.rb
164
+ - models/lightning/invoice.rb
165
+ - models/lightning/nodes/node.rb
166
+ - models/lightning/nodes/node/lightning.rb
167
+ - models/lightning/nodes/node/platform.rb
168
+ - models/lightning/rate.rb
169
+ - models/lightning/secret.rb
163
170
  - models/satoshis.rb
164
- - models/secret.rb
165
- - models/transaction.rb
166
- - models/wallet.rb
171
+ - models/wallet/activity.rb
172
+ - models/wallet/balance.rb
167
173
  - ports/dsl/lighstorm.rb
168
174
  - ports/dsl/lighstorm/errors.rb
169
175
  - ports/grpc.rb
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lighstorm
4
- module Adapter
5
- class Fee
6
- def self.fee_report(grpc)
7
- {
8
- _source: :fee_report,
9
- id: grpc[:chan_id].to_s,
10
- partner: {
11
- policy: {
12
- fee: {
13
- base: {
14
- millisatoshis: grpc[:base_fee_msat]
15
- },
16
- rate: {
17
- parts_per_million: grpc[:fee_per_mil]
18
- }
19
- }
20
- }
21
- }
22
- }
23
- end
24
- end
25
- end
26
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lighstorm
4
- module Adapter
5
- class Policy
6
- def self.get_chan_info(grpc)
7
- {
8
- fee: {
9
- base: { millisatoshis: grpc[:fee_base_msat] },
10
- rate: { parts_per_million: grpc[:fee_rate_milli_msat] }
11
- },
12
- htlc: {
13
- minimum: { millisatoshis: grpc[:min_htlc] },
14
- maximum: { millisatoshis: grpc[:max_htlc_msat] },
15
- # https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#cltv_expiry_delta-selection
16
- blocks: {
17
- delta: {
18
- minimum: grpc[:time_lock_delta] # aka cltv_expiry_delta
19
- }
20
- }
21
- }
22
- }
23
- end
24
-
25
- def self.subscribe_channel_graph(json)
26
- result = {
27
- _source: :subscribe_channel_graph,
28
- fee: {
29
- base: { millisatoshis: json['routingPolicy']['feeBaseMsat'].to_i },
30
- rate: { parts_per_million: json['routingPolicy']['feeRateMilliMsat'].to_i }
31
- },
32
- htlc: {
33
- minimum: { millisatoshis: json['routingPolicy']['minHtlc'].to_i },
34
- maximum: { millisatoshis: json['routingPolicy']['maxHtlcMsat'].to_i },
35
- # https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#cltv_expiry_delta-selection
36
- blocks: {
37
- delta: {
38
- minimum: json['routingPolicy']['timeLockDelta'].to_i # aka cltv_expiry_delta
39
- }
40
- }
41
- }
42
- }
43
-
44
- policy = json['routingPolicy']
45
-
46
- result[:fee].delete(:base) unless policy.key?('feeBaseMsat') && !policy['feeBaseMsat'].nil?
47
- result[:fee].delete(:rate) unless policy.key?('feeRateMilliMsat') && !policy['feeRateMilliMsat'].nil?
48
- result.delete(:fee) if result[:fee].empty?
49
-
50
- result[:htlc].delete(:minimum) unless policy.key?('minHtlc') && !policy['minHtlc'].nil?
51
- result[:htlc].delete(:maximum) unless policy.key?('maxHtlcMsat') && !policy['maxHtlcMsat'].nil?
52
- result[:htlc].delete(:blocks) unless policy.key?('timeLockDelta') && !policy['timeLockDelta'].nil?
53
- result.delete(:htlc) if result[:htlc].empty?
54
-
55
- return nil unless result.key?(:fee) || result.key?(:htlc)
56
-
57
- result
58
- end
59
- end
60
- end
61
- end
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../nodes/node'
4
- require_relative 'channel_node/policy'
5
-
6
- module Lighstorm
7
- module Adapter
8
- class ChannelNode
9
- def self.list_channels(grpc, key)
10
- data = {
11
- _source: :list_channels,
12
- state: grpc[:active] ? 'active' : 'inactive',
13
- initiator: grpc[:initiator] && key == :local,
14
- accounting: { balance: { millisatoshis: grpc[:"#{key}_balance"] * 1000 } },
15
- node: Node.list_channels(grpc, key)
16
- }
17
-
18
- data.delete(:node) if data[:node].nil?
19
-
20
- data
21
- end
22
-
23
- def self.get_chan_info(grpc, index)
24
- data = {
25
- _source: :get_chan_info,
26
- node: Node.get_chan_info(grpc, index)
27
- }
28
-
29
- if grpc[:"node#{index}_policy"]
30
- data[:state] = grpc[:"node#{index}_policy"][:disabled] ? 'inactive' : 'active'
31
- data[:policy] = Policy.get_chan_info(grpc[:"node#{index}_policy"])
32
- end
33
-
34
- data.delete(:node) if data[:node].nil?
35
-
36
- data
37
- end
38
-
39
- def self.describe_graph(grpc, index)
40
- data = {
41
- _source: :describe_graph,
42
- node: Node.describe_graph_from_channel(grpc, index)
43
- }
44
-
45
- # TODO: No examples to validate the correctness of this scenario.
46
- if grpc[:"node#{index}_policy"]
47
- data[:state] = grpc[:"node#{index}_policy"][:disabled] ? 'inactive' : 'active'
48
- data[:policy] = Policy.get_chan_info(grpc[:"node#{index}_policy"])
49
- end
50
-
51
- data.delete(:node) if data[:node].nil?
52
-
53
- data
54
- end
55
-
56
- def self.subscribe_channel_graph(json)
57
- data = {
58
- _source: :subscribe_channel_graph,
59
- node: {
60
- public_key: json['advertisingNode']
61
- },
62
- policy: Policy.subscribe_channel_graph(json)
63
- }
64
-
65
- unless json['routingPolicy']['disabled'].nil?
66
- data[:state] = json['routingPolicy']['disabled'] ? 'inactive' : 'active'
67
- end
68
-
69
- data.delete(:policy) if data[:policy].nil?
70
-
71
- data
72
- end
73
- end
74
- end
75
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'digest'
4
-
5
- module Lighstorm
6
- module Adapter
7
- class PaymentChannel
8
- def self.list_payments(grpc, index)
9
- {
10
- _source: :list_payments,
11
- hop: index + 1,
12
- amount: { millisatoshis: grpc[:amt_to_forward_msat] },
13
- fee: { millisatoshis: grpc[:fee_msat] },
14
- channel: {
15
- _key: Digest::SHA256.hexdigest(grpc[:chan_id].to_s),
16
- id: grpc[:chan_id].to_s,
17
- partners: [
18
- node: {
19
- _key: Digest::SHA256.hexdigest(grpc[:pub_key].to_s),
20
- public_key: grpc[:pub_key]
21
- }
22
- ]
23
- }
24
- }
25
- end
26
- end
27
- end
28
- end
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'digest'
4
-
5
- require_relative '../connections/channel_node'
6
-
7
- module Lighstorm
8
- module Adapter
9
- class Channel
10
- def self._key(id, state)
11
- Digest::SHA256.hexdigest(
12
- [id, state].join('/')
13
- )
14
- end
15
-
16
- def self.list_channels(grpc, at)
17
- {
18
- _source: :list_channels,
19
- _key: _key(grpc[:chan_id], grpc[:active] ? 'active' : 'inactive'),
20
- # Standard JSON don't support BigInt, so, a String is safer.
21
- id: grpc[:chan_id].to_s,
22
- transaction: {
23
- funding: {
24
- id: grpc[:channel_point].split(':').first,
25
- index: grpc[:channel_point].split(':').last.to_i
26
- }
27
- },
28
- opened_at: at - grpc[:lifetime],
29
- up_at: at - grpc[:uptime],
30
- state: grpc[:active] ? 'active' : 'inactive',
31
- exposure: grpc[:private] ? 'private' : 'public',
32
- accounting: {
33
- capacity: { millisatoshis: grpc[:capacity] * 1000 },
34
- sent: { millisatoshis: grpc[:total_satoshis_sent] * 1000 },
35
- received: { millisatoshis: grpc[:total_satoshis_received] * 1000 },
36
- unsettled: { millisatoshis: grpc[:unsettled_balance] * 1000 }
37
- },
38
- partners: [
39
- ChannelNode.list_channels(grpc, :local),
40
- ChannelNode.list_channels(grpc, :remote)
41
- ]
42
- }
43
- end
44
-
45
- def self.get_chan_info(grpc)
46
- {
47
- _source: :get_chan_info,
48
- _key: _key(grpc[:channel_id], nil),
49
- # Standard JSON don't support BigInt, so, a String is safer.
50
- id: grpc[:channel_id].to_s,
51
- accounting: {
52
- capacity: { millisatoshis: grpc[:capacity] * 1000 }
53
- },
54
- partners: [
55
- ChannelNode.get_chan_info(grpc, 1),
56
- ChannelNode.get_chan_info(grpc, 2)
57
- ]
58
- }
59
- end
60
-
61
- def self.describe_graph(grpc)
62
- {
63
- _source: :describe_graph,
64
- _key: _key(grpc[:channel_id], nil),
65
- # Standard JSON don't support BigInt, so, a String is safer.
66
- id: grpc[:channel_id].to_s,
67
- exposure: 'public',
68
- accounting: {
69
- capacity: { millisatoshis: grpc[:capacity] * 1000 }
70
- },
71
- partners: [
72
- ChannelNode.describe_graph(grpc, 1),
73
- ChannelNode.describe_graph(grpc, 2)
74
- ]
75
- }
76
- end
77
-
78
- def self.subscribe_channel_graph(json)
79
- {
80
- _source: :subscribe_channel_graph,
81
- _key: _key(json['chanId'], nil),
82
- id: json['chanId'],
83
- accounting: {
84
- capacity: { millisatoshis: json['capacity'].to_i * 1000 }
85
- },
86
- partners: [
87
- ChannelNode.subscribe_channel_graph(json),
88
- { node: {
89
- public_key: json['connectingNode']
90
- } }
91
- ]
92
- }
93
- end
94
- end
95
- end
96
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'digest'
4
-
5
- module Lighstorm
6
- module Adapter
7
- class Forward
8
- def self.forwarding_history(grpc)
9
- {
10
- _source: :forwarding_history,
11
- _key: _key(grpc),
12
- at: Time.at(grpc[:timestamp_ns] / 1e+9),
13
- fee: { millisatoshis: grpc[:fee_msat] },
14
- in: {
15
- amount: { millisatoshis: grpc[:amt_in_msat] },
16
- channel: {
17
- id: grpc[:chan_id_in].to_s
18
- }
19
- },
20
- out: {
21
- amount: { millisatoshis: grpc[:amt_out_msat] },
22
- channel: {
23
- id: grpc[:chan_id_out].to_s
24
- }
25
- }
26
- }
27
- end
28
-
29
- def self._key(grpc)
30
- Digest::SHA256.hexdigest(
31
- [
32
- grpc[:timestamp_ns],
33
- grpc[:chan_id_in], grpc[:chan_id_out],
34
- grpc[:amt_in_msat], grpc[:fee_msat]
35
- ].join('/')
36
- )
37
- end
38
- end
39
- end
40
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lighstorm
4
- module Adapter
5
- class Purpose
6
- def self.send_payment_v2(grpc, node_get_info)
7
- return 'unknown' if grpc[:payment_route][:hops].empty?
8
-
9
- return 'self-payment' if self_payment?(grpc[:payment_route][:hops])
10
- return 'peer-to-peer' if peer_to_peer?(grpc[:payment_route][:hops])
11
- return 'rebalance' if rebalance?(grpc[:payment_route][:hops], node_get_info)
12
-
13
- 'payment'
14
- end
15
-
16
- def self.list_payments(grpc, node_get_info)
17
- return 'unknown' if grpc[:htlcs].empty?
18
-
19
- return 'self-payment' if self_payment?(grpc[:htlcs].last[:route][:hops])
20
- return 'peer-to-peer' if peer_to_peer?(grpc[:htlcs].last[:route][:hops])
21
- return 'rebalance' if rebalance?(grpc[:htlcs].last[:route][:hops], node_get_info)
22
-
23
- 'payment'
24
- end
25
-
26
- def self.self_payment?(hops)
27
- hops.size == 2 && hops[0][:chan_id] == hops[1][:chan_id]
28
- end
29
-
30
- def self.peer_to_peer?(hops)
31
- hops.size == 1
32
- end
33
-
34
- def self.rebalance?(hops, node_get_info)
35
- return false if hops.size <= 2
36
-
37
- destination_public_key = hops.last[:pub_key]
38
-
39
- node_get_info[:identity_pubkey] == destination_public_key
40
- end
41
- end
42
- end
43
- end
@@ -1,87 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'digest'
4
-
5
- require_relative '../connections/payment_channel'
6
- require_relative 'payment/purpose'
7
-
8
- require_relative '../invoice'
9
-
10
- require_relative '../../ports/dsl/lighstorm/errors'
11
-
12
- module Lighstorm
13
- module Adapter
14
- class Payment
15
- def self._key(grpc)
16
- Digest::SHA256.hexdigest(
17
- [
18
- grpc[:payment_request],
19
- grpc[:creation_time_ns],
20
- grpc[:resolve_time_ns],
21
- grpc[:status]
22
- ].join('/')
23
- )
24
- end
25
-
26
- def self.send_payment_v2(grpc, node_myself, invoice_decode)
27
- adapted = list_payments(grpc, node_myself, invoice_decode)
28
- adapted[:_source] = :send_payment_v2
29
- adapted
30
- end
31
-
32
- def self.list_payments(grpc, node_myself, invoice_decode = nil)
33
- data = {
34
- _source: :list_payments,
35
- _key: _key(grpc),
36
- at: Time.at(grpc[:creation_time_ns] / 1e+9),
37
- state: grpc[:status].to_s.downcase,
38
- fee: { millisatoshis: grpc[:fee_msat] },
39
- amount: { millisatoshis: grpc[:value_msat] },
40
- purpose: Purpose.list_payments(grpc, node_myself),
41
- invoice: Invoice.list_payments(grpc, invoice_decode)
42
- }
43
-
44
- data[:secret] = data[:invoice][:secret]
45
-
46
- htlc = grpc[:htlcs].last
47
-
48
- return data if htlc.nil?
49
-
50
- data[:hops] = htlc[:route][:hops].map.with_index do |raw_hop, i|
51
- hop = PaymentChannel.list_payments(raw_hop, i)
52
- hop[:channel][:target] = { public_key: raw_hop[:pub_key] }
53
- hop
54
- end
55
-
56
- data[:invoice][:settled_at] = Time.at(htlc[:resolve_time_ns] / 1e+9) if htlc[:resolve_time_ns]
57
-
58
- last_hop = htlc[:route][:hops].last
59
-
60
- return data if last_hop.nil?
61
-
62
- # https://github.com/satoshisstream/satoshis.stream/blob/main/TLV_registry.md
63
- if last_hop[:custom_records][34_349_334]
64
- data[:message] = last_hop[:custom_records][34_349_334].dup
65
-
66
- unless data[:message].force_encoding('UTF-8').valid_encoding?
67
- data[:message] = data[:message].unpack1('H*')
68
-
69
- data[:message] = data[:message].scrub('?') unless data[:message].force_encoding('UTF-8').valid_encoding?
70
- end
71
- end
72
-
73
- if data[:invoice] && data[:invoice][:code] && !data[:invoice][:code].nil? && !data[:invoice][:code].empty?
74
- data[:through] = if data[:invoice][:payable] == 'indefinitely'
75
- 'amp'
76
- else
77
- 'non-amp'
78
- end
79
- else
80
- data[:through] = last_hop[:mpp_record] ? 'amp' : 'keysend'
81
- end
82
-
83
- data
84
- end
85
- end
86
- end
87
- end