Go to file
bumi f8355cf89e
Update README.md
2019-06-02 09:57:36 +00:00
bin hello world 2018-10-27 12:59:35 +02:00
lib Use lnrpc gem as dependency 2019-06-02 11:33:08 +02:00
spec hello world 2018-10-27 12:59:35 +02:00
.gitignore hello world 2018-10-27 12:59:35 +02:00
.rspec hello world 2018-10-27 12:59:35 +02:00
.travis.yml hello world 2018-10-27 12:59:35 +02:00
Gemfile hello world 2018-10-27 12:59:35 +02:00
LICENSE.txt hello world 2018-10-27 12:59:35 +02:00
README.md Update README.md 2019-06-02 09:57:36 +00:00
Rakefile hello world 2018-10-27 12:59:35 +02:00
example.rb Add support to path macaraoon hex directly 2018-11-21 21:11:17 +01:00
faraday_ln_paywall.gemspec Use lnrpc gem as dependency 2019-06-02 11:33:08 +02:00

README.md

Faraday middleware to send lightning payments

This is a Faraday middleware that handles payment requests by the server and sends Bitcoin lightning payments.

How does it work?

This Faraday middleware checks if the server responds with a 402 Payment Required HTTP status code and a lightning invoice (BOLT11). If so it pays the invoice through the connected lnd node and performs a second request with the proof of payment.

How does the server side look like?

Have a look at the rack middleware rack-lightning for ruby or at @philippgille's middleware for Go.

Requirements

The middleware uses the gRPC service provided by the Lightning Network Daemon(lnd). A running node with funded channels is required. Details about lnd can be found on their github page

Installation

Add this line to your application's Gemfile:

gem 'faraday_ln_paywall'

Usage

Simply use the FaradayLnPaywall::Middleware in your Faraday connection:

conn = Faraday.new(:url => 'https://api.lightning.ws') do |faraday|
  faraday.use FaradayLnPaywall::Middleware, { max_amount: 100 }
  faraday.adapter  Faraday.default_adapter
end
puts conn.get("/translate?text=Danke&to=en").body

Configuration

The middleware accepts the following configuration options:

  • max_amount: the maximum amount of an invoice that will automatically be paid. Raises a FaradayLnPaywall::PaymentError if the server request a higher amount
  • address: the address of the lnd gRPC service( default: localhost:10009)
  • credentials_path: path to the tls.cert (default: ~/.lnd/tls.cert)
  • macaroon_path: path to the macaroon path (default: ~/.lnd/data/chain/bitcoin/testnet/admin.macaroon)
  • credentials: instead of configuring a credentials_path you can pass the content of the tls.cert directly
  • macaroon: instead of configuring a macaroon_path you can pass the hex content of the macaroon directly you can get the macaroon content like this:
    xxd -p -c2000 admin.macaroon or:
    ::File.read(::File.expand_path("/path/to/admin.macaroon")).each_byte.map { |b| b.to_s(16).rjust(2,'0') }.join
    

What is the Lightning Network?

The Lightning Network allows to send real near-instant microtransactions with extremely low fees. It is a second layer on top of the Bitcoin network (and other crypto currencies). Thanks to this properties it can be used to monetize APIs.

Contributing

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

ToDo

  • tests!!

License

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