You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bumi 579fc423ea
Update examples.rb
1 week ago
bin hello lnd world 1 year ago
lib v0.10.0 with support for routerrpc 2 months ago
spec hello lnd world 1 year ago
.gitignore gitignore build .gem files 2 months ago
.rspec hello lnd world 1 year ago
Gemfile hello lnd world 1 year ago
Gemfile.lock v0.10.0 with support for routerrpc 2 months ago
LICENSE.txt hello lnd world 1 year ago
README.md Update README for v0.10.0 2 months ago
Rakefile hello lnd world 1 year ago
examples.rb Update examples.rb 1 week ago
lnrpc.gemspec Add funding metadata to gemspec 2 months ago

README.md

Lnrpc - ruby gRPC client for LND

Gem Version

a gRPC client for LND, the Lightning Network Daemon packed as ruby gem.

Installation

Note: there is still an GRPC/protobuf issue with Ruby 2.7. So lnrpc requires Ruby < 2.7.

Add this line to your application's Gemfile:

gem 'lnrpc', '~> 0.10.0'

lnrpc follows the lnd versioning, thus it is recommended to specify the exact version you need for your lnd node as dependency (see #Versioning).

And then execute:

$ bundle

Or install it yourself as:

$ gem install lnrpc
# or for pre releases:
$ gem install lnrcp --pre

Usage

This gem makes the gRPC client classes created from the LND service defintions available.

require "lnrpc"

# With the changes in LND v.10.0 this load the `Lnrpc` and `Routerrpc` namespace

Lnrpc::Lightning::Stub
Routerrpc:::Routerrpc::Stub
Lnrpc::GetInfoRequest
...

Learn more about gRPC on gRPC.io.

The LND API reference can be found here: https://api.lightning.community/

Example

require "lnrpc"

credentials = File.read("/path/to/tls.cert")
macaroon = File.read("/path/to/readonly.macaroon").unpack("H*")

# initialize a new client
client = Lnrpc::Lightning::Stub.new("localhost:10009", GRPC::Core::ChannelCredentials.new(self.credentials))

# perform a request
request = Lnrpc::GetInfoRequest.new
response = client.get_info(request, { metadata: { macaroon: macaroon } }) #=> Lnrpc::GetInfoResponse
puts response.alias

router = Routerprc::Router::Stub.new("localhost:10009", GRPC::Core::ChannelCredentials.new(self.credentials))
...

Client wrapper

NOTE: v10.0 has breaking changes!

An optional client wrapper (Lnrpc::Client) makes initializing the gRPC client easier and removes the need for some boilerplate code for calling RPC methods.

Example

lnd = Lnrpc::Client.new({credentials_path: '/path/to.cert.cls', macaroon_path: '/path/to/admin.macaroon'})
lnd.lightning # => Lnrpc::Lightning::Stub
lnd.router # => Lnrpc::Router::Stub

lnd.ligthning.get_info

Also have a look at examples.rb

Initializing a new client

The Lnrpc::Client constructor allows the following options:

  • credentials:
    • credentials : the credentials data as string (pass nil if a “trusted” cert (e.g. from letsencrypt is used)
    • credentials_path : the path to a credentials file (tls.cert) as string (default: "#{LND_HOME_DIR}/tls.cert" )
  • macaroon:
    • macaroon : the macaroon as hex string
    • macaroon_path : the path to the macaroon file created by lnd as string (default: "#{LND_HOME_DIR}/data/chain/bitcoin/mainnet/admin.macaroon")
  • address:
    • address : lnd address as string. format: address:port, e.g. localhost:10009 (default)

If no credentials or no macaroon is provided default files are assumed in ENV['LND_HOME'] || "~/.lnd". A macaroon is required.

require 'lnrpc'

lnd = Lnrpc::Client.new({
  credentials_path: '/path/to.cert.cls',
  macaroon_path: '/path/to/admin.macaroon',
  address: 'host:port'
})

# the actual gRPC client is available through:
lnd.lightning.grpc
lnd.router.grpc

Calling RPC methods

The client wrapper passes any supported RPC method call to the gRPC client applying the following conventions:

If the first parameter is a hash or blank the corresponding gRPC request object will be instantiated.

Example:

client.lightning.get_info
# is the same as:
client.lightning.grpc.get_info(Lnrpc::GetInfoRequest.new)

client.lightning.list_channels(inactive_only: true)
# is the same as:
request = Lnrpc::ListChannelsRequest.new(inactive_only: true)
client.lightning.grpc.list_channels(request)

client.lightning.wallet_balance.total_balance
# is the same as:
request = Lnrpc::WalletBalanceRequest.new()
client.lightning.grpc.wallet_balance(request).total_balance

Using with BTC Pay Server

If you have a running BTC Pay Server with LND support, integrating with lnrpc is easy.

  • Navigate to the domain associated with your BTC Pay Server
  • Navigate to Services on the Server Settings page
  • Click “see information” for your gRPC Server
  • The link by “More details...” will expose the address and various macaroon hex strings
  • Initialize your client with the options detailed above. BTC Pay Server utilizes LetsEncrypt for trusted TLC Certificates so set that option to nil.

Don't have a BTC Pay Server? Setting one up is easy.

Versioning

This gem follows the LND versions and will update the gRPC service definitions accordingly. e.g. gem version 0.5.2 includes the gRPC service definitions from LND v0.5.2

see rubygems for all available releases.

Update service definitions

  1. Generate prc_pb.rb and rpc_services_pb.rb

    $ grpc_tools_ruby_protoc -I/usr/local/include -I. -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --ruby_out=plugins=grpc,paths=source_relative:. --grpc_out=. rpc.proto

  2. Copy rpc.proto, rpc_pb.rb and rpc_services_pb.rb to lib

  3. Update rpc_services_pb.rb to use require_relative to load rpc_pb

  4. Generate router_pb.rb and router_services_pb.rb

    $ grpc_tools_ruby_protoc -I/usr/local/include -I. -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis -I$GOPATH/src/github.com/lightningnetwork/lnd/lnrpc --ruby_out=plugins=grpc,paths=source_relative:. --grpc_out=. router.proto

  5. Copy router.proto, router_pb.rb and router_services_pb.rb to lib

  6. Update router_services_pb.rb to use require_relative to load router_pb

Other resources

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/bumi/lnrpc.

License

The gem is available as open source under the terms of the MIT License.