lnd-client 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +15 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +62 -0
- data/LICENSE +21 -0
- data/README.md +107 -0
- data/Rakefile +10 -0
- data/components/grpc/autopilotrpc/autopilot_pb.rb +48 -0
- data/components/grpc/autopilotrpc/autopilot_services_pb.rb +40 -0
- data/components/grpc/chainrpc/chainkit_pb.rb +36 -0
- data/components/grpc/chainrpc/chainkit_services_pb.rb +34 -0
- data/components/grpc/chainrpc/chainnotifier_pb.rb +69 -0
- data/components/grpc/chainrpc/chainnotifier_services_pb.rb +53 -0
- data/components/grpc/devrpc/dev_pb.rb +17 -0
- data/components/grpc/devrpc/dev_services_pb.rb +25 -0
- data/components/grpc/invoicesrpc/invoices_pb.rb +66 -0
- data/components/grpc/invoicesrpc/invoices_services_pb.rb +45 -0
- data/components/grpc/lightning_pb.rb +1621 -0
- data/components/grpc/lightning_services_pb.rb +441 -0
- data/components/grpc/lnclipb/lncli_pb.rb +19 -0
- data/components/grpc/neutrinorpc/neutrino_pb.rb +106 -0
- data/components/grpc/neutrinorpc/neutrino_services_pb.rb +51 -0
- data/components/grpc/peersrpc/peers_pb.rb +48 -0
- data/components/grpc/peersrpc/peers_services_pb.rb +27 -0
- data/components/grpc/routerrpc/router_pb.rb +299 -0
- data/components/grpc/routerrpc/router_services_pb.rb +115 -0
- data/components/grpc/signrpc/signer_pb.rb +172 -0
- data/components/grpc/signrpc/signer_services_pb.rb +134 -0
- data/components/grpc/stateservice_pb.rb +35 -0
- data/components/grpc/stateservice_services_pb.rb +46 -0
- data/components/grpc/verrpc/verrpc_pb.rb +27 -0
- data/components/grpc/verrpc/verrpc_services_pb.rb +27 -0
- data/components/grpc/walletrpc/walletkit_pb.rb +328 -0
- data/components/grpc/walletrpc/walletkit_services_pb.rb +230 -0
- data/components/grpc/walletunlocker_pb.rb +75 -0
- data/components/grpc/walletunlocker_services_pb.rb +72 -0
- data/components/grpc/watchtowerrpc/watchtower_pb.rb +21 -0
- data/components/grpc/watchtowerrpc/watchtower_services_pb.rb +28 -0
- data/components/grpc/wtclientrpc/wtclient_pb.rb +83 -0
- data/components/grpc/wtclientrpc/wtclient_services_pb.rb +43 -0
- data/components/grpc.rb +9 -0
- data/controllers/client.rb +31 -0
- data/controllers/config.rb +35 -0
- data/controllers/documentation.rb +45 -0
- data/controllers/grpc_generator.rb +80 -0
- data/controllers/service.rb +35 -0
- data/lnd-client.gemspec +35 -0
- data/logic/string.rb +11 -0
- data/ports/dsl/lnd-client.rb +14 -0
- data/static/spec.rb +13 -0
- metadata +110 -0
@@ -0,0 +1,230 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# Source: walletrpc/walletkit.proto for package 'walletrpc'
|
3
|
+
|
4
|
+
require 'grpc'
|
5
|
+
require_relative 'walletrpc/walletkit_pb'
|
6
|
+
|
7
|
+
module Walletrpc
|
8
|
+
module WalletKit
|
9
|
+
# WalletKit is a service that gives access to the core functionalities of the
|
10
|
+
# daemon's wallet.
|
11
|
+
class Service
|
12
|
+
|
13
|
+
include ::GRPC::GenericService
|
14
|
+
|
15
|
+
self.marshal_class_method = :encode
|
16
|
+
self.unmarshal_class_method = :decode
|
17
|
+
self.service_name = 'walletrpc.WalletKit'
|
18
|
+
|
19
|
+
#
|
20
|
+
# ListUnspent returns a list of all utxos spendable by the wallet with a
|
21
|
+
# number of confirmations between the specified minimum and maximum. By
|
22
|
+
# default, all utxos are listed. To list only the unconfirmed utxos, set
|
23
|
+
# the unconfirmed_only to true.
|
24
|
+
rpc :ListUnspent, ::Walletrpc::ListUnspentRequest, ::Walletrpc::ListUnspentResponse
|
25
|
+
#
|
26
|
+
# LeaseOutput locks an output to the given ID, preventing it from being
|
27
|
+
# available for any future coin selection attempts. The absolute time of the
|
28
|
+
# lock's expiration is returned. The expiration of the lock can be extended by
|
29
|
+
# successive invocations of this RPC. Outputs can be unlocked before their
|
30
|
+
# expiration through `ReleaseOutput`.
|
31
|
+
rpc :LeaseOutput, ::Walletrpc::LeaseOutputRequest, ::Walletrpc::LeaseOutputResponse
|
32
|
+
#
|
33
|
+
# ReleaseOutput unlocks an output, allowing it to be available for coin
|
34
|
+
# selection if it remains unspent. The ID should match the one used to
|
35
|
+
# originally lock the output.
|
36
|
+
rpc :ReleaseOutput, ::Walletrpc::ReleaseOutputRequest, ::Walletrpc::ReleaseOutputResponse
|
37
|
+
#
|
38
|
+
# ListLeases lists all currently locked utxos.
|
39
|
+
rpc :ListLeases, ::Walletrpc::ListLeasesRequest, ::Walletrpc::ListLeasesResponse
|
40
|
+
#
|
41
|
+
# DeriveNextKey attempts to derive the *next* key within the key family
|
42
|
+
# (account in BIP43) specified. This method should return the next external
|
43
|
+
# child within this branch.
|
44
|
+
rpc :DeriveNextKey, ::Walletrpc::KeyReq, ::Signrpc::KeyDescriptor
|
45
|
+
#
|
46
|
+
# DeriveKey attempts to derive an arbitrary key specified by the passed
|
47
|
+
# KeyLocator.
|
48
|
+
rpc :DeriveKey, ::Signrpc::KeyLocator, ::Signrpc::KeyDescriptor
|
49
|
+
#
|
50
|
+
# NextAddr returns the next unused address within the wallet.
|
51
|
+
rpc :NextAddr, ::Walletrpc::AddrRequest, ::Walletrpc::AddrResponse
|
52
|
+
#
|
53
|
+
# ListAccounts retrieves all accounts belonging to the wallet by default. A
|
54
|
+
# name and key scope filter can be provided to filter through all of the
|
55
|
+
# wallet accounts and return only those matching.
|
56
|
+
rpc :ListAccounts, ::Walletrpc::ListAccountsRequest, ::Walletrpc::ListAccountsResponse
|
57
|
+
#
|
58
|
+
# RequiredReserve returns the minimum amount of satoshis that should be kept
|
59
|
+
# in the wallet in order to fee bump anchor channels if necessary. The value
|
60
|
+
# scales with the number of public anchor channels but is capped at a maximum.
|
61
|
+
rpc :RequiredReserve, ::Walletrpc::RequiredReserveRequest, ::Walletrpc::RequiredReserveResponse
|
62
|
+
#
|
63
|
+
# ListAddresses retrieves all the addresses along with their balance. An
|
64
|
+
# account name filter can be provided to filter through all of the
|
65
|
+
# wallet accounts and return the addresses of only those matching.
|
66
|
+
rpc :ListAddresses, ::Walletrpc::ListAddressesRequest, ::Walletrpc::ListAddressesResponse
|
67
|
+
#
|
68
|
+
# ImportAccount imports an account backed by an account extended public key.
|
69
|
+
# The master key fingerprint denotes the fingerprint of the root key
|
70
|
+
# corresponding to the account public key (also known as the key with
|
71
|
+
# derivation path m/). This may be required by some hardware wallets for
|
72
|
+
# proper identification and signing.
|
73
|
+
#
|
74
|
+
# The address type can usually be inferred from the key's version, but may be
|
75
|
+
# required for certain keys to map them into the proper scope.
|
76
|
+
#
|
77
|
+
# For BIP-0044 keys, an address type must be specified as we intend to not
|
78
|
+
# support importing BIP-0044 keys into the wallet using the legacy
|
79
|
+
# pay-to-pubkey-hash (P2PKH) scheme. A nested witness address type will force
|
80
|
+
# the standard BIP-0049 derivation scheme, while a witness address type will
|
81
|
+
# force the standard BIP-0084 derivation scheme.
|
82
|
+
#
|
83
|
+
# For BIP-0049 keys, an address type must also be specified to make a
|
84
|
+
# distinction between the standard BIP-0049 address schema (nested witness
|
85
|
+
# pubkeys everywhere) and our own BIP-0049Plus address schema (nested pubkeys
|
86
|
+
# externally, witness pubkeys internally).
|
87
|
+
#
|
88
|
+
# NOTE: Events (deposits/spends) for keys derived from an account will only be
|
89
|
+
# detected by lnd if they happen after the import. Rescans to detect past
|
90
|
+
# events will be supported later on.
|
91
|
+
rpc :ImportAccount, ::Walletrpc::ImportAccountRequest, ::Walletrpc::ImportAccountResponse
|
92
|
+
#
|
93
|
+
# ImportPublicKey imports a public key as watch-only into the wallet. The
|
94
|
+
# public key is converted into a simple address of the given type and that
|
95
|
+
# address script is watched on chain. For Taproot keys, this will only watch
|
96
|
+
# the BIP-0086 style output script. Use ImportTapscript for more advanced key
|
97
|
+
# spend or script spend outputs.
|
98
|
+
#
|
99
|
+
# NOTE: Events (deposits/spends) for a key will only be detected by lnd if
|
100
|
+
# they happen after the import. Rescans to detect past events will be
|
101
|
+
# supported later on.
|
102
|
+
rpc :ImportPublicKey, ::Walletrpc::ImportPublicKeyRequest, ::Walletrpc::ImportPublicKeyResponse
|
103
|
+
#
|
104
|
+
# ImportTapscript imports a Taproot script and internal key and adds the
|
105
|
+
# resulting Taproot output key as a watch-only output script into the wallet.
|
106
|
+
# For BIP-0086 style Taproot keys (no root hash commitment and no script spend
|
107
|
+
# path) use ImportPublicKey.
|
108
|
+
#
|
109
|
+
# NOTE: Events (deposits/spends) for a key will only be detected by lnd if
|
110
|
+
# they happen after the import. Rescans to detect past events will be
|
111
|
+
# supported later on.
|
112
|
+
#
|
113
|
+
# NOTE: Taproot keys imported through this RPC currently _cannot_ be used for
|
114
|
+
# funding PSBTs. Only tracking the balance and UTXOs is currently supported.
|
115
|
+
rpc :ImportTapscript, ::Walletrpc::ImportTapscriptRequest, ::Walletrpc::ImportTapscriptResponse
|
116
|
+
#
|
117
|
+
# PublishTransaction attempts to publish the passed transaction to the
|
118
|
+
# network. Once this returns without an error, the wallet will continually
|
119
|
+
# attempt to re-broadcast the transaction on start up, until it enters the
|
120
|
+
# chain.
|
121
|
+
rpc :PublishTransaction, ::Walletrpc::Transaction, ::Walletrpc::PublishResponse
|
122
|
+
#
|
123
|
+
# SendOutputs is similar to the existing sendmany call in Bitcoind, and
|
124
|
+
# allows the caller to create a transaction that sends to several outputs at
|
125
|
+
# once. This is ideal when wanting to batch create a set of transactions.
|
126
|
+
rpc :SendOutputs, ::Walletrpc::SendOutputsRequest, ::Walletrpc::SendOutputsResponse
|
127
|
+
#
|
128
|
+
# EstimateFee attempts to query the internal fee estimator of the wallet to
|
129
|
+
# determine the fee (in sat/kw) to attach to a transaction in order to
|
130
|
+
# achieve the confirmation target.
|
131
|
+
rpc :EstimateFee, ::Walletrpc::EstimateFeeRequest, ::Walletrpc::EstimateFeeResponse
|
132
|
+
#
|
133
|
+
# PendingSweeps returns lists of on-chain outputs that lnd is currently
|
134
|
+
# attempting to sweep within its central batching engine. Outputs with similar
|
135
|
+
# fee rates are batched together in order to sweep them within a single
|
136
|
+
# transaction.
|
137
|
+
#
|
138
|
+
# NOTE: Some of the fields within PendingSweepsRequest are not guaranteed to
|
139
|
+
# remain supported. This is an advanced API that depends on the internals of
|
140
|
+
# the UtxoSweeper, so things may change.
|
141
|
+
rpc :PendingSweeps, ::Walletrpc::PendingSweepsRequest, ::Walletrpc::PendingSweepsResponse
|
142
|
+
#
|
143
|
+
# BumpFee bumps the fee of an arbitrary input within a transaction. This RPC
|
144
|
+
# takes a different approach than bitcoind's bumpfee command. lnd has a
|
145
|
+
# central batching engine in which inputs with similar fee rates are batched
|
146
|
+
# together to save on transaction fees. Due to this, we cannot rely on
|
147
|
+
# bumping the fee on a specific transaction, since transactions can change at
|
148
|
+
# any point with the addition of new inputs. The list of inputs that
|
149
|
+
# currently exist within lnd's central batching engine can be retrieved
|
150
|
+
# through the PendingSweeps RPC.
|
151
|
+
#
|
152
|
+
# When bumping the fee of an input that currently exists within lnd's central
|
153
|
+
# batching engine, a higher fee transaction will be created that replaces the
|
154
|
+
# lower fee transaction through the Replace-By-Fee (RBF) policy. If it
|
155
|
+
#
|
156
|
+
# This RPC also serves useful when wanting to perform a Child-Pays-For-Parent
|
157
|
+
# (CPFP), where the child transaction pays for its parent's fee. This can be
|
158
|
+
# done by specifying an outpoint within the low fee transaction that is under
|
159
|
+
# the control of the wallet.
|
160
|
+
#
|
161
|
+
# The fee preference can be expressed either as a specific fee rate or a delta
|
162
|
+
# of blocks in which the output should be swept on-chain within. If a fee
|
163
|
+
# preference is not explicitly specified, then an error is returned.
|
164
|
+
#
|
165
|
+
# Note that this RPC currently doesn't perform any validation checks on the
|
166
|
+
# fee preference being provided. For now, the responsibility of ensuring that
|
167
|
+
# the new fee preference is sufficient is delegated to the user.
|
168
|
+
rpc :BumpFee, ::Walletrpc::BumpFeeRequest, ::Walletrpc::BumpFeeResponse
|
169
|
+
#
|
170
|
+
# ListSweeps returns a list of the sweep transactions our node has produced.
|
171
|
+
# Note that these sweeps may not be confirmed yet, as we record sweeps on
|
172
|
+
# broadcast, not confirmation.
|
173
|
+
rpc :ListSweeps, ::Walletrpc::ListSweepsRequest, ::Walletrpc::ListSweepsResponse
|
174
|
+
#
|
175
|
+
# LabelTransaction adds a label to a transaction. If the transaction already
|
176
|
+
# has a label the call will fail unless the overwrite bool is set. This will
|
177
|
+
# overwrite the exiting transaction label. Labels must not be empty, and
|
178
|
+
# cannot exceed 500 characters.
|
179
|
+
rpc :LabelTransaction, ::Walletrpc::LabelTransactionRequest, ::Walletrpc::LabelTransactionResponse
|
180
|
+
#
|
181
|
+
# FundPsbt creates a fully populated PSBT that contains enough inputs to fund
|
182
|
+
# the outputs specified in the template. There are two ways of specifying a
|
183
|
+
# template: Either by passing in a PSBT with at least one output declared or
|
184
|
+
# by passing in a raw TxTemplate message.
|
185
|
+
#
|
186
|
+
# If there are no inputs specified in the template, coin selection is
|
187
|
+
# performed automatically. If the template does contain any inputs, it is
|
188
|
+
# assumed that full coin selection happened externally and no additional
|
189
|
+
# inputs are added. If the specified inputs aren't enough to fund the outputs
|
190
|
+
# with the given fee rate, an error is returned.
|
191
|
+
#
|
192
|
+
# After either selecting or verifying the inputs, all input UTXOs are locked
|
193
|
+
# with an internal app ID.
|
194
|
+
#
|
195
|
+
# NOTE: If this method returns without an error, it is the caller's
|
196
|
+
# responsibility to either spend the locked UTXOs (by finalizing and then
|
197
|
+
# publishing the transaction) or to unlock/release the locked UTXOs in case of
|
198
|
+
# an error on the caller's side.
|
199
|
+
rpc :FundPsbt, ::Walletrpc::FundPsbtRequest, ::Walletrpc::FundPsbtResponse
|
200
|
+
#
|
201
|
+
# SignPsbt expects a partial transaction with all inputs and outputs fully
|
202
|
+
# declared and tries to sign all unsigned inputs that have all required fields
|
203
|
+
# (UTXO information, BIP32 derivation information, witness or sig scripts)
|
204
|
+
# set.
|
205
|
+
# If no error is returned, the PSBT is ready to be given to the next signer or
|
206
|
+
# to be finalized if lnd was the last signer.
|
207
|
+
#
|
208
|
+
# NOTE: This RPC only signs inputs (and only those it can sign), it does not
|
209
|
+
# perform any other tasks (such as coin selection, UTXO locking or
|
210
|
+
# input/output/fee value validation, PSBT finalization). Any input that is
|
211
|
+
# incomplete will be skipped.
|
212
|
+
rpc :SignPsbt, ::Walletrpc::SignPsbtRequest, ::Walletrpc::SignPsbtResponse
|
213
|
+
#
|
214
|
+
# FinalizePsbt expects a partial transaction with all inputs and outputs fully
|
215
|
+
# declared and tries to sign all inputs that belong to the wallet. Lnd must be
|
216
|
+
# the last signer of the transaction. That means, if there are any unsigned
|
217
|
+
# non-witness inputs or inputs without UTXO information attached or inputs
|
218
|
+
# without witness data that do not belong to lnd's wallet, this method will
|
219
|
+
# fail. If no error is returned, the PSBT is ready to be extracted and the
|
220
|
+
# final TX within to be broadcast.
|
221
|
+
#
|
222
|
+
# NOTE: This method does NOT publish the transaction once finalized. It is the
|
223
|
+
# caller's responsibility to either publish the transaction on success or
|
224
|
+
# unlock/release any locked UTXOs in case of an error in this method.
|
225
|
+
rpc :FinalizePsbt, ::Walletrpc::FinalizePsbtRequest, ::Walletrpc::FinalizePsbtResponse
|
226
|
+
end
|
227
|
+
|
228
|
+
Stub = Service.rpc_stub_class
|
229
|
+
end
|
230
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: walletunlocker.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
require_relative 'lightning_pb'
|
7
|
+
|
8
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
9
|
+
add_file("walletunlocker.proto", :syntax => :proto3) do
|
10
|
+
add_message "lnrpc.GenSeedRequest" do
|
11
|
+
optional :aezeed_passphrase, :bytes, 1
|
12
|
+
optional :seed_entropy, :bytes, 2
|
13
|
+
end
|
14
|
+
add_message "lnrpc.GenSeedResponse" do
|
15
|
+
repeated :cipher_seed_mnemonic, :string, 1
|
16
|
+
optional :enciphered_seed, :bytes, 2
|
17
|
+
end
|
18
|
+
add_message "lnrpc.InitWalletRequest" do
|
19
|
+
optional :wallet_password, :bytes, 1
|
20
|
+
repeated :cipher_seed_mnemonic, :string, 2
|
21
|
+
optional :aezeed_passphrase, :bytes, 3
|
22
|
+
optional :recovery_window, :int32, 4
|
23
|
+
optional :channel_backups, :message, 5, "lnrpc.ChanBackupSnapshot"
|
24
|
+
optional :stateless_init, :bool, 6
|
25
|
+
optional :extended_master_key, :string, 7
|
26
|
+
optional :extended_master_key_birthday_timestamp, :uint64, 8
|
27
|
+
optional :watch_only, :message, 9, "lnrpc.WatchOnly"
|
28
|
+
optional :macaroon_root_key, :bytes, 10
|
29
|
+
end
|
30
|
+
add_message "lnrpc.InitWalletResponse" do
|
31
|
+
optional :admin_macaroon, :bytes, 1
|
32
|
+
end
|
33
|
+
add_message "lnrpc.WatchOnly" do
|
34
|
+
optional :master_key_birthday_timestamp, :uint64, 1
|
35
|
+
optional :master_key_fingerprint, :bytes, 2
|
36
|
+
repeated :accounts, :message, 3, "lnrpc.WatchOnlyAccount"
|
37
|
+
end
|
38
|
+
add_message "lnrpc.WatchOnlyAccount" do
|
39
|
+
optional :purpose, :uint32, 1
|
40
|
+
optional :coin_type, :uint32, 2
|
41
|
+
optional :account, :uint32, 3
|
42
|
+
optional :xpub, :string, 4
|
43
|
+
end
|
44
|
+
add_message "lnrpc.UnlockWalletRequest" do
|
45
|
+
optional :wallet_password, :bytes, 1
|
46
|
+
optional :recovery_window, :int32, 2
|
47
|
+
optional :channel_backups, :message, 3, "lnrpc.ChanBackupSnapshot"
|
48
|
+
optional :stateless_init, :bool, 4
|
49
|
+
end
|
50
|
+
add_message "lnrpc.UnlockWalletResponse" do
|
51
|
+
end
|
52
|
+
add_message "lnrpc.ChangePasswordRequest" do
|
53
|
+
optional :current_password, :bytes, 1
|
54
|
+
optional :new_password, :bytes, 2
|
55
|
+
optional :stateless_init, :bool, 3
|
56
|
+
optional :new_macaroon_root_key, :bool, 4
|
57
|
+
end
|
58
|
+
add_message "lnrpc.ChangePasswordResponse" do
|
59
|
+
optional :admin_macaroon, :bytes, 1
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
module Lnrpc
|
65
|
+
GenSeedRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.GenSeedRequest").msgclass
|
66
|
+
GenSeedResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.GenSeedResponse").msgclass
|
67
|
+
InitWalletRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.InitWalletRequest").msgclass
|
68
|
+
InitWalletResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.InitWalletResponse").msgclass
|
69
|
+
WatchOnly = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.WatchOnly").msgclass
|
70
|
+
WatchOnlyAccount = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.WatchOnlyAccount").msgclass
|
71
|
+
UnlockWalletRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.UnlockWalletRequest").msgclass
|
72
|
+
UnlockWalletResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.UnlockWalletResponse").msgclass
|
73
|
+
ChangePasswordRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.ChangePasswordRequest").msgclass
|
74
|
+
ChangePasswordResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("lnrpc.ChangePasswordResponse").msgclass
|
75
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# Source: walletunlocker.proto for package 'lnrpc'
|
3
|
+
|
4
|
+
require 'grpc'
|
5
|
+
require_relative 'walletunlocker_pb'
|
6
|
+
|
7
|
+
module Lnrpc
|
8
|
+
module WalletUnlocker
|
9
|
+
#
|
10
|
+
# Comments in this file will be directly parsed into the API
|
11
|
+
# Documentation as descriptions of the associated method, message, or field.
|
12
|
+
# These descriptions should go right above the definition of the object, and
|
13
|
+
# can be in either block or // comment format.
|
14
|
+
#
|
15
|
+
# An RPC method can be matched to an lncli command by placing a line in the
|
16
|
+
# beginning of the description in exactly the following format:
|
17
|
+
# lncli: `methodname`
|
18
|
+
#
|
19
|
+
# Failure to specify the exact name of the command will cause documentation
|
20
|
+
# generation to fail.
|
21
|
+
#
|
22
|
+
# More information on how exactly the gRPC documentation is generated from
|
23
|
+
# this proto file can be found here:
|
24
|
+
# https://github.com/lightninglabs/lightning-api
|
25
|
+
#
|
26
|
+
# WalletUnlocker is a service that is used to set up a wallet password for
|
27
|
+
# lnd at first startup, and unlock a previously set up wallet.
|
28
|
+
class Service
|
29
|
+
|
30
|
+
include ::GRPC::GenericService
|
31
|
+
|
32
|
+
self.marshal_class_method = :encode
|
33
|
+
self.unmarshal_class_method = :decode
|
34
|
+
self.service_name = 'lnrpc.WalletUnlocker'
|
35
|
+
|
36
|
+
#
|
37
|
+
# GenSeed is the first method that should be used to instantiate a new lnd
|
38
|
+
# instance. This method allows a caller to generate a new aezeed cipher seed
|
39
|
+
# given an optional passphrase. If provided, the passphrase will be necessary
|
40
|
+
# to decrypt the cipherseed to expose the internal wallet seed.
|
41
|
+
#
|
42
|
+
# Once the cipherseed is obtained and verified by the user, the InitWallet
|
43
|
+
# method should be used to commit the newly generated seed, and create the
|
44
|
+
# wallet.
|
45
|
+
rpc :GenSeed, ::Lnrpc::GenSeedRequest, ::Lnrpc::GenSeedResponse
|
46
|
+
#
|
47
|
+
# InitWallet is used when lnd is starting up for the first time to fully
|
48
|
+
# initialize the daemon and its internal wallet. At the very least a wallet
|
49
|
+
# password must be provided. This will be used to encrypt sensitive material
|
50
|
+
# on disk.
|
51
|
+
#
|
52
|
+
# In the case of a recovery scenario, the user can also specify their aezeed
|
53
|
+
# mnemonic and passphrase. If set, then the daemon will use this prior state
|
54
|
+
# to initialize its internal wallet.
|
55
|
+
#
|
56
|
+
# Alternatively, this can be used along with the GenSeed RPC to obtain a
|
57
|
+
# seed, then present it to the user. Once it has been verified by the user,
|
58
|
+
# the seed can be fed into this RPC in order to commit the new wallet.
|
59
|
+
rpc :InitWallet, ::Lnrpc::InitWalletRequest, ::Lnrpc::InitWalletResponse
|
60
|
+
# lncli: `unlock`
|
61
|
+
# UnlockWallet is used at startup of lnd to provide a password to unlock
|
62
|
+
# the wallet database.
|
63
|
+
rpc :UnlockWallet, ::Lnrpc::UnlockWalletRequest, ::Lnrpc::UnlockWalletResponse
|
64
|
+
# lncli: `changepassword`
|
65
|
+
# ChangePassword changes the password of the encrypted wallet. This will
|
66
|
+
# automatically unlock the wallet database if successful.
|
67
|
+
rpc :ChangePassword, ::Lnrpc::ChangePasswordRequest, ::Lnrpc::ChangePasswordResponse
|
68
|
+
end
|
69
|
+
|
70
|
+
Stub = Service.rpc_stub_class
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: watchtowerrpc/watchtower.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_file("watchtowerrpc/watchtower.proto", :syntax => :proto3) do
|
8
|
+
add_message "watchtowerrpc.GetInfoRequest" do
|
9
|
+
end
|
10
|
+
add_message "watchtowerrpc.GetInfoResponse" do
|
11
|
+
optional :pubkey, :bytes, 1
|
12
|
+
repeated :listeners, :string, 2
|
13
|
+
repeated :uris, :string, 3
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module Watchtowerrpc
|
19
|
+
GetInfoRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("watchtowerrpc.GetInfoRequest").msgclass
|
20
|
+
GetInfoResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("watchtowerrpc.GetInfoResponse").msgclass
|
21
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# Source: watchtowerrpc/watchtower.proto for package 'watchtowerrpc'
|
3
|
+
|
4
|
+
require 'grpc'
|
5
|
+
require_relative 'watchtowerrpc/watchtower_pb'
|
6
|
+
|
7
|
+
module Watchtowerrpc
|
8
|
+
module Watchtower
|
9
|
+
# Watchtower is a service that grants access to the watchtower server
|
10
|
+
# functionality of the daemon.
|
11
|
+
class Service
|
12
|
+
|
13
|
+
include ::GRPC::GenericService
|
14
|
+
|
15
|
+
self.marshal_class_method = :encode
|
16
|
+
self.unmarshal_class_method = :decode
|
17
|
+
self.service_name = 'watchtowerrpc.Watchtower'
|
18
|
+
|
19
|
+
# lncli: tower info
|
20
|
+
# GetInfo returns general information concerning the companion watchtower
|
21
|
+
# including its public key and URIs where the server is currently
|
22
|
+
# listening for clients.
|
23
|
+
rpc :GetInfo, ::Watchtowerrpc::GetInfoRequest, ::Watchtowerrpc::GetInfoResponse
|
24
|
+
end
|
25
|
+
|
26
|
+
Stub = Service.rpc_stub_class
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: wtclientrpc/wtclient.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_file("wtclientrpc/wtclient.proto", :syntax => :proto3) do
|
8
|
+
add_message "wtclientrpc.AddTowerRequest" do
|
9
|
+
optional :pubkey, :bytes, 1
|
10
|
+
optional :address, :string, 2
|
11
|
+
end
|
12
|
+
add_message "wtclientrpc.AddTowerResponse" do
|
13
|
+
end
|
14
|
+
add_message "wtclientrpc.RemoveTowerRequest" do
|
15
|
+
optional :pubkey, :bytes, 1
|
16
|
+
optional :address, :string, 2
|
17
|
+
end
|
18
|
+
add_message "wtclientrpc.RemoveTowerResponse" do
|
19
|
+
end
|
20
|
+
add_message "wtclientrpc.GetTowerInfoRequest" do
|
21
|
+
optional :pubkey, :bytes, 1
|
22
|
+
optional :include_sessions, :bool, 2
|
23
|
+
end
|
24
|
+
add_message "wtclientrpc.TowerSession" do
|
25
|
+
optional :num_backups, :uint32, 1
|
26
|
+
optional :num_pending_backups, :uint32, 2
|
27
|
+
optional :max_backups, :uint32, 3
|
28
|
+
optional :sweep_sat_per_byte, :uint32, 4
|
29
|
+
optional :sweep_sat_per_vbyte, :uint32, 5
|
30
|
+
end
|
31
|
+
add_message "wtclientrpc.Tower" do
|
32
|
+
optional :pubkey, :bytes, 1
|
33
|
+
repeated :addresses, :string, 2
|
34
|
+
optional :active_session_candidate, :bool, 3
|
35
|
+
optional :num_sessions, :uint32, 4
|
36
|
+
repeated :sessions, :message, 5, "wtclientrpc.TowerSession"
|
37
|
+
end
|
38
|
+
add_message "wtclientrpc.ListTowersRequest" do
|
39
|
+
optional :include_sessions, :bool, 1
|
40
|
+
end
|
41
|
+
add_message "wtclientrpc.ListTowersResponse" do
|
42
|
+
repeated :towers, :message, 1, "wtclientrpc.Tower"
|
43
|
+
end
|
44
|
+
add_message "wtclientrpc.StatsRequest" do
|
45
|
+
end
|
46
|
+
add_message "wtclientrpc.StatsResponse" do
|
47
|
+
optional :num_backups, :uint32, 1
|
48
|
+
optional :num_pending_backups, :uint32, 2
|
49
|
+
optional :num_failed_backups, :uint32, 3
|
50
|
+
optional :num_sessions_acquired, :uint32, 4
|
51
|
+
optional :num_sessions_exhausted, :uint32, 5
|
52
|
+
end
|
53
|
+
add_message "wtclientrpc.PolicyRequest" do
|
54
|
+
optional :policy_type, :enum, 1, "wtclientrpc.PolicyType"
|
55
|
+
end
|
56
|
+
add_message "wtclientrpc.PolicyResponse" do
|
57
|
+
optional :max_updates, :uint32, 1
|
58
|
+
optional :sweep_sat_per_byte, :uint32, 2
|
59
|
+
optional :sweep_sat_per_vbyte, :uint32, 3
|
60
|
+
end
|
61
|
+
add_enum "wtclientrpc.PolicyType" do
|
62
|
+
value :LEGACY, 0
|
63
|
+
value :ANCHOR, 1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
module Wtclientrpc
|
69
|
+
AddTowerRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.AddTowerRequest").msgclass
|
70
|
+
AddTowerResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.AddTowerResponse").msgclass
|
71
|
+
RemoveTowerRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.RemoveTowerRequest").msgclass
|
72
|
+
RemoveTowerResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.RemoveTowerResponse").msgclass
|
73
|
+
GetTowerInfoRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.GetTowerInfoRequest").msgclass
|
74
|
+
TowerSession = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.TowerSession").msgclass
|
75
|
+
Tower = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.Tower").msgclass
|
76
|
+
ListTowersRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.ListTowersRequest").msgclass
|
77
|
+
ListTowersResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.ListTowersResponse").msgclass
|
78
|
+
StatsRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.StatsRequest").msgclass
|
79
|
+
StatsResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.StatsResponse").msgclass
|
80
|
+
PolicyRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.PolicyRequest").msgclass
|
81
|
+
PolicyResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.PolicyResponse").msgclass
|
82
|
+
PolicyType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("wtclientrpc.PolicyType").enummodule
|
83
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# Source: wtclientrpc/wtclient.proto for package 'wtclientrpc'
|
3
|
+
|
4
|
+
require 'grpc'
|
5
|
+
require_relative 'wtclientrpc/wtclient_pb'
|
6
|
+
|
7
|
+
module Wtclientrpc
|
8
|
+
module WatchtowerClient
|
9
|
+
# WatchtowerClient is a service that grants access to the watchtower client
|
10
|
+
# functionality of the daemon.
|
11
|
+
class Service
|
12
|
+
|
13
|
+
include ::GRPC::GenericService
|
14
|
+
|
15
|
+
self.marshal_class_method = :encode
|
16
|
+
self.unmarshal_class_method = :decode
|
17
|
+
self.service_name = 'wtclientrpc.WatchtowerClient'
|
18
|
+
|
19
|
+
#
|
20
|
+
# AddTower adds a new watchtower reachable at the given address and
|
21
|
+
# considers it for new sessions. If the watchtower already exists, then
|
22
|
+
# any new addresses included will be considered when dialing it for
|
23
|
+
# session negotiations and backups.
|
24
|
+
rpc :AddTower, ::Wtclientrpc::AddTowerRequest, ::Wtclientrpc::AddTowerResponse
|
25
|
+
#
|
26
|
+
# RemoveTower removes a watchtower from being considered for future session
|
27
|
+
# negotiations and from being used for any subsequent backups until it's added
|
28
|
+
# again. If an address is provided, then this RPC only serves as a way of
|
29
|
+
# removing the address from the watchtower instead.
|
30
|
+
rpc :RemoveTower, ::Wtclientrpc::RemoveTowerRequest, ::Wtclientrpc::RemoveTowerResponse
|
31
|
+
# ListTowers returns the list of watchtowers registered with the client.
|
32
|
+
rpc :ListTowers, ::Wtclientrpc::ListTowersRequest, ::Wtclientrpc::ListTowersResponse
|
33
|
+
# GetTowerInfo retrieves information for a registered watchtower.
|
34
|
+
rpc :GetTowerInfo, ::Wtclientrpc::GetTowerInfoRequest, ::Wtclientrpc::Tower
|
35
|
+
# Stats returns the in-memory statistics of the client since startup.
|
36
|
+
rpc :Stats, ::Wtclientrpc::StatsRequest, ::Wtclientrpc::StatsResponse
|
37
|
+
# Policy returns the active watchtower client policy configuration.
|
38
|
+
rpc :Policy, ::Wtclientrpc::PolicyRequest, ::Wtclientrpc::PolicyResponse
|
39
|
+
end
|
40
|
+
|
41
|
+
Stub = Service.rpc_stub_class
|
42
|
+
end
|
43
|
+
end
|
data/components/grpc.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../components/grpc'
|
4
|
+
require_relative 'config'
|
5
|
+
require_relative 'service'
|
6
|
+
|
7
|
+
class ClientController
|
8
|
+
attr_reader :config, :doc
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@config = ConfigController.new(self, options)
|
12
|
+
@services = {}
|
13
|
+
|
14
|
+
doc = Struct.new(:services)
|
15
|
+
@doc = doc.new(GRPC::SERVICES.keys.map(&:to_s))
|
16
|
+
end
|
17
|
+
|
18
|
+
def respond_to_missing?(method_name, include_private = false)
|
19
|
+
service_key = method_name.to_sym
|
20
|
+
|
21
|
+
GRPC::SERVICES.include?(service_key) || super
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_missing(method_name, *_args)
|
25
|
+
service_key = method_name.to_sym
|
26
|
+
|
27
|
+
raise ArgumentError, "Method `#{method_name}` doesn't exist." unless GRPC::SERVICES.include?(service_key)
|
28
|
+
|
29
|
+
@services[service_key] ||= ServiceController.new(self, GRPC::SERVICES[service_key])
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'grpc'
|
4
|
+
|
5
|
+
class ConfigController
|
6
|
+
attr_reader :socket_address, :credentials, :certificate, :macaroon
|
7
|
+
|
8
|
+
def initialize(client, options)
|
9
|
+
@client = client
|
10
|
+
|
11
|
+
@certificate_path = options[:certificate_path]
|
12
|
+
@certificate = options[:certificate]
|
13
|
+
|
14
|
+
@macaroon_path = options[:macaroon_path]
|
15
|
+
@macaroon = options[:macaroon]
|
16
|
+
|
17
|
+
@socket_address = options[:socket_address] || '127.0.0.1:10009'
|
18
|
+
|
19
|
+
setup_certificate!
|
20
|
+
setup_macaroon!
|
21
|
+
end
|
22
|
+
|
23
|
+
def setup_certificate!
|
24
|
+
raise 'conflicting options for certificate' if @certificate && @certificate_path
|
25
|
+
|
26
|
+
@certificate = File.read(@certificate_path) if @certificate_path
|
27
|
+
@credentials = GRPC::Core::ChannelCredentials.new(@certificate)
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup_macaroon!
|
31
|
+
raise 'conflicting options for macaroon' if @macaroon && @macaroon_path
|
32
|
+
|
33
|
+
@macaroon = File.read(@macaroon_path).unpack('H*') if @macaroon_path
|
34
|
+
end
|
35
|
+
end
|