lighstorm 0.0.2 → 0.0.4
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/.env.example +5 -0
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.rubocop.yml +10 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +32 -8
- data/README.md +30 -341
- data/adapters/connections/channel_node/fee.rb +26 -0
- data/adapters/connections/channel_node.rb +52 -0
- data/adapters/connections/payment_channel.rb +28 -0
- data/adapters/edges/channel.rb +80 -0
- data/adapters/edges/forward.rb +41 -0
- data/adapters/edges/payment/purpose.rb +34 -0
- data/adapters/edges/payment.rb +53 -0
- data/adapters/invoice.rb +50 -0
- data/adapters/nodes/node.rb +77 -0
- data/adapters/payment_request.rb +77 -0
- data/components/cache.rb +3 -2
- data/components/lnd.rb +5 -1
- data/controllers/channel/actions/update_fee.rb +76 -0
- data/controllers/channel/all.rb +79 -0
- data/controllers/channel/find_by_id.rb +153 -0
- data/controllers/channel/mine.rb +114 -0
- data/controllers/channel.rb +23 -0
- data/controllers/forward/all.rb +244 -0
- data/controllers/forward/group_by_channel.rb +89 -0
- data/controllers/forward.rb +28 -0
- data/controllers/invoice/actions/create.rb +36 -0
- data/controllers/invoice/actions/pay.rb +28 -0
- data/controllers/invoice/actions/pay_through_route.rb +71 -0
- data/controllers/invoice/all.rb +70 -0
- data/controllers/invoice/find_by_secret_hash.rb +42 -0
- data/controllers/invoice.rb +36 -0
- data/controllers/node/all.rb +63 -0
- data/controllers/node/find_by_public_key.rb +49 -0
- data/controllers/node/myself.rb +34 -0
- data/controllers/node.rb +23 -0
- data/controllers/payment/all.rb +352 -0
- data/controllers/payment.rb +21 -0
- data/docs/.nojekyll +0 -0
- data/docs/README.md +655 -0
- data/docs/_coverpage.md +12 -0
- data/docs/index.html +26 -0
- data/docs/vendor/docsify/docsify@4.js +1 -0
- data/docs/vendor/docsify-themeable/theme-simple-dark.css +3 -0
- data/docs/vendor/docsify-themeable/theme-simple-dark.css.map +1 -0
- data/docs/vendor/prismjs/prism-bash.min.js +1 -0
- data/docs/vendor/prismjs/prism-ruby.min.js +1 -0
- data/docs/vendor/prismjs/prism-tomorrow.min.css +1 -0
- data/lighstorm.gemspec +4 -2
- data/models/connections/channel_node/accounting.rb +3 -12
- data/models/connections/channel_node/fee.rb +44 -56
- data/models/connections/channel_node/htlc.rb +52 -0
- data/models/connections/channel_node/policy.rb +11 -12
- data/models/connections/channel_node.rb +20 -19
- data/models/connections/forward_channel.rb +8 -43
- data/models/connections/payment_channel.rb +18 -39
- data/models/edges/channel/accounting.rb +42 -18
- data/models/edges/channel/hop.rb +65 -0
- data/models/edges/channel.rb +98 -120
- data/models/edges/forward.rb +9 -118
- data/models/edges/groups/{analysis.rb → channel_forwards/analysis.rb} +9 -9
- data/models/edges/groups/channel_forwards.rb +10 -40
- data/models/edges/payment.rb +29 -214
- data/models/errors.rb +29 -0
- data/models/invoice.rb +49 -0
- data/models/nodes/node/lightning.rb +5 -16
- data/models/nodes/node/platform.rb +7 -13
- data/models/nodes/node.rb +19 -56
- data/models/payment_request.rb +69 -0
- data/models/rate.rb +11 -1
- data/models/satoshis.rb +5 -6
- data/ports/dsl/lighstorm/errors.rb +5 -0
- data/ports/dsl/lighstorm.rb +12 -8
- data/ports/grpc.rb +62 -0
- data/static/cache.rb +12 -0
- data/static/spec.rb +3 -1
- metadata +58 -8
- data/models/connections/channel_node/constraints.rb +0 -24
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'digest'
|
4
|
+
require_relative 'satoshis'
|
5
|
+
|
6
|
+
module Lighstorm
|
7
|
+
module Models
|
8
|
+
class PaymentRequest
|
9
|
+
attr_reader :_key, :code, :address
|
10
|
+
|
11
|
+
def initialize(data)
|
12
|
+
@data = data
|
13
|
+
|
14
|
+
@_key = Digest::SHA256.hexdigest(data[:code])
|
15
|
+
@code = data[:code]
|
16
|
+
|
17
|
+
@address = data[:address]
|
18
|
+
end
|
19
|
+
|
20
|
+
def amount
|
21
|
+
@amount ||= Satoshis.new(milisatoshis: @data[:amount][:milisatoshis])
|
22
|
+
end
|
23
|
+
|
24
|
+
def description
|
25
|
+
@description ||= Struct.new(:data) do
|
26
|
+
def memo
|
27
|
+
data[:memo]
|
28
|
+
end
|
29
|
+
|
30
|
+
def hash
|
31
|
+
data[:hash]
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_h
|
35
|
+
{ memo: memo, hash: hash }
|
36
|
+
end
|
37
|
+
end.new(@data[:description])
|
38
|
+
end
|
39
|
+
|
40
|
+
def secret
|
41
|
+
@secret ||= Struct.new(:data) do
|
42
|
+
def preimage
|
43
|
+
data[:preimage]
|
44
|
+
end
|
45
|
+
|
46
|
+
def hash
|
47
|
+
data[:hash]
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_h
|
51
|
+
# Don't expose 'secret' by default: Security
|
52
|
+
{ hash: hash }
|
53
|
+
end
|
54
|
+
end.new(@data[:secret])
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_h
|
58
|
+
# Don't expose 'address' by default: Privacy
|
59
|
+
{
|
60
|
+
_key: _key,
|
61
|
+
code: code,
|
62
|
+
amount: amount.to_h,
|
63
|
+
description: description.to_h,
|
64
|
+
secret: secret.to_h
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/models/rate.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../ports/dsl/lighstorm/errors'
|
4
|
+
|
3
5
|
module Lighstorm
|
4
6
|
module Models
|
5
7
|
class Rate
|
@@ -7,12 +9,20 @@ module Lighstorm
|
|
7
9
|
|
8
10
|
# https://en.wikipedia.org/wiki/Parts-per_notation
|
9
11
|
def initialize(parts_per_million: nil)
|
10
|
-
raise 'missing parts_per_million' if parts_per_million.nil?
|
12
|
+
raise MissingPartsPerMillionError, 'missing parts_per_million' if parts_per_million.nil?
|
11
13
|
|
12
14
|
# TODO
|
13
15
|
@parts_per_million = parts_per_million
|
14
16
|
end
|
15
17
|
|
18
|
+
def ppm
|
19
|
+
@parts_per_million
|
20
|
+
end
|
21
|
+
|
22
|
+
def percentage
|
23
|
+
@percentage ||= @parts_per_million.to_f / 10_000
|
24
|
+
end
|
25
|
+
|
16
26
|
def to_h
|
17
27
|
{
|
18
28
|
parts_per_million: @parts_per_million
|
data/models/satoshis.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../ports/dsl/lighstorm/errors'
|
4
|
+
|
3
5
|
module Lighstorm
|
4
6
|
module Models
|
5
7
|
class Satoshis
|
6
8
|
def initialize(milisatoshis: nil)
|
7
|
-
raise 'missing milisatoshis' if milisatoshis.nil?
|
9
|
+
raise MissingMilisatoshisError, 'missing milisatoshis' if milisatoshis.nil?
|
8
10
|
|
9
11
|
@amount_in_milisatoshis = milisatoshis
|
10
12
|
end
|
@@ -15,8 +17,7 @@ module Lighstorm
|
|
15
17
|
if reference_milisatoshis.zero?
|
16
18
|
0
|
17
19
|
else
|
18
|
-
@amount_in_milisatoshis.to_f /
|
19
|
-
reference_milisatoshis
|
20
|
+
@amount_in_milisatoshis.to_f / reference_milisatoshis
|
20
21
|
end
|
21
22
|
) * 1_000_000.0
|
22
23
|
)
|
@@ -27,7 +28,7 @@ module Lighstorm
|
|
27
28
|
end
|
28
29
|
|
29
30
|
def satoshis
|
30
|
-
|
31
|
+
@amount_in_milisatoshis.to_f / 1000.0
|
31
32
|
end
|
32
33
|
|
33
34
|
def bitcoins
|
@@ -49,8 +50,6 @@ module Lighstorm
|
|
49
50
|
def to_h
|
50
51
|
{
|
51
52
|
milisatoshis: milisatoshis
|
52
|
-
# satoshis: satoshis,
|
53
|
-
# bitcoins: bitcoins
|
54
53
|
}
|
55
54
|
end
|
56
55
|
end
|
data/ports/dsl/lighstorm.rb
CHANGED
@@ -4,17 +4,21 @@ require 'dotenv/load'
|
|
4
4
|
|
5
5
|
require_relative '../../static/spec'
|
6
6
|
|
7
|
-
require_relative '../../models/
|
7
|
+
require_relative '../../models/satoshis'
|
8
8
|
|
9
|
-
require_relative '../../
|
10
|
-
require_relative '../../
|
11
|
-
require_relative '../../
|
9
|
+
require_relative '../../controllers/node'
|
10
|
+
require_relative '../../controllers/channel'
|
11
|
+
require_relative '../../controllers/payment'
|
12
|
+
require_relative '../../controllers/forward'
|
13
|
+
require_relative '../../controllers/invoice'
|
12
14
|
|
13
15
|
module Lighstorm
|
14
|
-
Node =
|
15
|
-
Channel =
|
16
|
-
|
17
|
-
|
16
|
+
Node = Controllers::Node
|
17
|
+
Channel = Controllers::Channel
|
18
|
+
Payment = Controllers::Payment
|
19
|
+
Forward = Controllers::Forward
|
20
|
+
Invoice = Controllers::Invoice
|
21
|
+
|
18
22
|
Satoshis = Models::Satoshis
|
19
23
|
|
20
24
|
def self.config!(config)
|
data/ports/grpc.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../components/cache'
|
4
|
+
require_relative '../components/lnd'
|
5
|
+
|
6
|
+
module Lighstorm
|
7
|
+
module Ports
|
8
|
+
class GRPC
|
9
|
+
def initialize(service, service_key)
|
10
|
+
@service = service
|
11
|
+
@service_key = service_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def call!(call_key, *args, &block)
|
15
|
+
key = "#{@service_key}.#{call_key}"
|
16
|
+
|
17
|
+
if block.nil?
|
18
|
+
response = Cache.for(key, params: args&.first) do
|
19
|
+
LND.instance.middleware(key) do
|
20
|
+
@service.send(call_key, *args, &block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
else
|
24
|
+
LND.instance.middleware(key) do
|
25
|
+
@service.send(call_key, *args, &block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing(method_name, *args, &block)
|
31
|
+
call_key = method_name.to_sym
|
32
|
+
|
33
|
+
raise ArgumentError, "Method `#{method_name}` doesn't exist." unless @service.respond_to?(call_key)
|
34
|
+
|
35
|
+
call!(call_key, *args, &block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def respond_to_missing?(method_name, include_private = false)
|
39
|
+
call_key = method_name.to_sym
|
40
|
+
|
41
|
+
@service.respond_to?(call_key) || super
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.method_missing(method_name, *_args)
|
45
|
+
service_key = method_name.to_sym
|
46
|
+
|
47
|
+
unless LND.instance.client.respond_to?(service_key)
|
48
|
+
raise ArgumentError,
|
49
|
+
"Method `#{method_name}` doesn't exist."
|
50
|
+
end
|
51
|
+
|
52
|
+
new(LND.instance.client.send(service_key), service_key)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.respond_to_missing?(method_name, include_private = false)
|
56
|
+
service_key = method_name.to_sym
|
57
|
+
|
58
|
+
LND.instance.client.respond_to?(service_key) || super
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/static/cache.rb
CHANGED
@@ -9,6 +9,18 @@ module Lighstorm
|
|
9
9
|
base_fee_msat fee_per_mil
|
10
10
|
]
|
11
11
|
},
|
12
|
+
decode_pay_req: {
|
13
|
+
ttl: 5 * 60
|
14
|
+
},
|
15
|
+
describe_graph: {
|
16
|
+
ttl: 0
|
17
|
+
},
|
18
|
+
lookup_invoice: {
|
19
|
+
ttl: 1
|
20
|
+
},
|
21
|
+
list_invoices: {
|
22
|
+
ttl: 1
|
23
|
+
},
|
12
24
|
forwarding_history: {
|
13
25
|
ttl: 1,
|
14
26
|
properties: %i[
|
data/static/spec.rb
CHANGED
@@ -4,11 +4,13 @@ module Lighstorm
|
|
4
4
|
module Static
|
5
5
|
SPEC = {
|
6
6
|
name: 'lighstorm',
|
7
|
-
version: '0.0.
|
7
|
+
version: '0.0.4',
|
8
8
|
author: 'icebaker',
|
9
9
|
summary: 'API for interacting with a Lightning Node.',
|
10
10
|
description: 'Lighstorm is an opinionated abstraction layer on top of the lnd-client for interacting with a Lightning Node.',
|
11
11
|
github: 'https://github.com/icebaker/lighstorm',
|
12
|
+
documentation: 'https://icebaker.github.io/lighstorm',
|
13
|
+
issues: 'https://github.com/icebaker/lighstorm/issues',
|
12
14
|
license: 'MIT'
|
13
15
|
}.freeze
|
14
16
|
end
|
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.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- icebaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|
@@ -36,14 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.0.
|
39
|
+
version: 0.0.5
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.0.
|
46
|
+
version: 0.0.5
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: zache
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -65,43 +65,93 @@ executables: []
|
|
65
65
|
extensions: []
|
66
66
|
extra_rdoc_files: []
|
67
67
|
files:
|
68
|
+
- ".env.example"
|
68
69
|
- ".gitignore"
|
70
|
+
- ".rspec"
|
69
71
|
- ".rubocop.yml"
|
70
72
|
- Gemfile
|
71
73
|
- Gemfile.lock
|
72
74
|
- LICENSE
|
73
75
|
- README.md
|
76
|
+
- adapters/connections/channel_node.rb
|
77
|
+
- adapters/connections/channel_node/fee.rb
|
78
|
+
- adapters/connections/payment_channel.rb
|
79
|
+
- adapters/edges/channel.rb
|
80
|
+
- adapters/edges/forward.rb
|
81
|
+
- adapters/edges/payment.rb
|
82
|
+
- adapters/edges/payment/purpose.rb
|
83
|
+
- adapters/invoice.rb
|
84
|
+
- adapters/nodes/node.rb
|
85
|
+
- adapters/payment_request.rb
|
74
86
|
- components/cache.rb
|
75
87
|
- components/lnd.rb
|
88
|
+
- controllers/channel.rb
|
89
|
+
- controllers/channel/actions/update_fee.rb
|
90
|
+
- controllers/channel/all.rb
|
91
|
+
- controllers/channel/find_by_id.rb
|
92
|
+
- controllers/channel/mine.rb
|
93
|
+
- controllers/forward.rb
|
94
|
+
- controllers/forward/all.rb
|
95
|
+
- controllers/forward/group_by_channel.rb
|
96
|
+
- controllers/invoice.rb
|
97
|
+
- controllers/invoice/actions/create.rb
|
98
|
+
- controllers/invoice/actions/pay.rb
|
99
|
+
- controllers/invoice/actions/pay_through_route.rb
|
100
|
+
- controllers/invoice/all.rb
|
101
|
+
- controllers/invoice/find_by_secret_hash.rb
|
102
|
+
- controllers/node.rb
|
103
|
+
- controllers/node/all.rb
|
104
|
+
- controllers/node/find_by_public_key.rb
|
105
|
+
- controllers/node/myself.rb
|
106
|
+
- controllers/payment.rb
|
107
|
+
- controllers/payment/all.rb
|
108
|
+
- docs/.nojekyll
|
109
|
+
- docs/README.md
|
110
|
+
- docs/_coverpage.md
|
111
|
+
- docs/index.html
|
112
|
+
- docs/vendor/docsify-themeable/theme-simple-dark.css
|
113
|
+
- docs/vendor/docsify-themeable/theme-simple-dark.css.map
|
114
|
+
- docs/vendor/docsify/docsify@4.js
|
115
|
+
- docs/vendor/prismjs/prism-bash.min.js
|
116
|
+
- docs/vendor/prismjs/prism-ruby.min.js
|
117
|
+
- docs/vendor/prismjs/prism-tomorrow.min.css
|
76
118
|
- lighstorm.gemspec
|
77
119
|
- models/connections/channel_node.rb
|
78
120
|
- models/connections/channel_node/accounting.rb
|
79
|
-
- models/connections/channel_node/constraints.rb
|
80
121
|
- models/connections/channel_node/fee.rb
|
122
|
+
- models/connections/channel_node/htlc.rb
|
81
123
|
- models/connections/channel_node/policy.rb
|
82
124
|
- models/connections/forward_channel.rb
|
83
125
|
- models/connections/payment_channel.rb
|
84
126
|
- models/edges/channel.rb
|
85
127
|
- models/edges/channel/accounting.rb
|
128
|
+
- models/edges/channel/hop.rb
|
86
129
|
- models/edges/forward.rb
|
87
|
-
- models/edges/groups/analysis.rb
|
88
130
|
- models/edges/groups/channel_forwards.rb
|
131
|
+
- models/edges/groups/channel_forwards/analysis.rb
|
89
132
|
- models/edges/payment.rb
|
133
|
+
- models/errors.rb
|
134
|
+
- models/invoice.rb
|
90
135
|
- models/nodes/node.rb
|
91
136
|
- models/nodes/node/lightning.rb
|
92
137
|
- models/nodes/node/platform.rb
|
138
|
+
- models/payment_request.rb
|
93
139
|
- models/rate.rb
|
94
140
|
- models/satoshis.rb
|
95
141
|
- ports/dsl/lighstorm.rb
|
142
|
+
- ports/dsl/lighstorm/errors.rb
|
143
|
+
- ports/grpc.rb
|
96
144
|
- static/cache.rb
|
97
145
|
- static/spec.rb
|
98
|
-
homepage: https://github.
|
146
|
+
homepage: https://icebaker.github.io/lighstorm
|
99
147
|
licenses:
|
100
148
|
- MIT
|
101
149
|
metadata:
|
102
150
|
allowed_push_host: https://rubygems.org
|
103
|
-
homepage_uri: https://github.
|
151
|
+
homepage_uri: https://icebaker.github.io/lighstorm
|
104
152
|
source_code_uri: https://github.com/icebaker/lighstorm
|
153
|
+
documentation_uri: https://icebaker.github.io/lighstorm
|
154
|
+
bug_tracker_uri: https://github.com/icebaker/lighstorm/issues
|
105
155
|
rubygems_mfa_required: 'true'
|
106
156
|
post_install_message:
|
107
157
|
rdoc_options: []
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Lighstorm
|
4
|
-
module Models
|
5
|
-
class Constraints
|
6
|
-
def initialize(channel, node)
|
7
|
-
@channel = channel
|
8
|
-
@node = node
|
9
|
-
end
|
10
|
-
|
11
|
-
def data
|
12
|
-
@data ||= if @node.myself?
|
13
|
-
@channel.data[:list_channels][:channels].first.local_constraints
|
14
|
-
else
|
15
|
-
@channel.data[:list_channels][:channels].first.remote_constraints
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_h
|
20
|
-
data.to_h
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|