Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/conduition/lnaddrd
A self-hosted server to provide yourself with a Lightning Address.
https://github.com/conduition/lnaddrd
bitcoin lightning-address lightning-network lnd lnurl
Last synced: 5 days ago
JSON representation
A self-hosted server to provide yourself with a Lightning Address.
- Host: GitHub
- URL: https://github.com/conduition/lnaddrd
- Owner: conduition
- License: unlicense
- Created: 2024-04-20T22:38:00.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-05-13T21:42:29.000Z (7 months ago)
- Last Synced: 2024-11-22T11:07:27.249Z (about 1 month ago)
- Topics: bitcoin, lightning-address, lightning-network, lnd, lnurl
- Language: Go
- Homepage:
- Size: 17.6 KB
- Stars: 5
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# lnaddrd
A self-hosted server to provide yourself with [a Lightning Address](https://lightningaddress.com/), by generating invoices from a remote [LND](https://github.com/lightningnetwork/lnd) instance. No third parties, at all. Just you, your machines, and your money.
## Install
First, install the [Golang compiler](https://go.dev).
```sh
curl -o - -sL https://go.dev/dl/go1.22.2.linux-amd64.tar.gz | tar xz -C /tmp
sudo cp -r /tmp/go /usr/local
echo 'export PATH="$PATH:/usr/local/go/bin"' >> ~/.bashrc
export PATH="$PATH:/usr/local/go/bin"
go version # to confirm install success
```Now you can install `lnaddrd` from source:
```sh
go install github.com/conduition/lnaddrd@latest
```## Usage
`lnaddrd` is quite dumb. It operates with no backend database or state beyond LND itself. It is a simple webserver intended solely to furnish LNURL clients with BOLT11 invoices.
To configure `lnaddrd`, create a YAML file:
```yaml
# This configures how the webserver will bind and expose its HTTP stack.
# By default it serves unencrypted HTTP. Specify a TLS cert+key to serve
# clients over HTTPS instead.
webserver:
bind_address: 127.0.0.1:3441 # required
# tls_cert_file: /path/to/server.tls.cert # optional
# tls_key_file: /path/to/server.tls.key # optionallnurl:
# This must be the base URL of your server.
url_authority: https://conduition.io # required# Both of these will be included in the pay request metadata array.
# The icon_file can be either a PNG or a JPEG file.
short_description: "Donation to conduition" # optional
icon_file: /path/to/icon.png # required# Determines the range of acceptable payment amounts.
max_pay_request_sats: 5_000_000 # required
min_pay_request_sats: 100 # required# Determines the expiry time of BOLT11 invoices we create.
# Defaults to whatever the remote LND instance uses by default.
invoice_expiry: "1h" # optional
# invoice_expiry: "20m"
# invoice_expiry: "100s"# Accept lightning address requests for the following usernames.
lightning_address_usernames: # optional
- conduition# Configure a connection to LND's REST API.
#
# You can find invoices.macaroon in: ~/.lnd/data/chain/bitcoin/mainnet/invoices.macaroon
# You can find LND's TLS certificate in: ~/.lnd/tls.cert
#
# Note that your LND certificate MUST have the 'host' field listed as a SAN.
# (hint: use the 'tlsextradomain' option in lnd.conf)
#
# To reach an LND instance running with no-rest-tls,
# set unsafe_allow_plaintext=true and omit the tls_cert_file parameter.
lnd:
host: conduition.io:8080 # required
macaroon_file: /path/to/invoices.macaroon # required
tls_cert_file: /path/to/lnd.tls.cert # required unless unsafe_allow_plaintext=true
unsafe_allow_plaintext: false # optional
```Launch `lnaddrd` by pointing it at the config file.
```console
$ lnaddrd /path/to/lnaddrd.yaml
2024/04/21 02:17:00.560533 starting server on 127.0.0.1:3441
```Lightning Address HTTP requests will come in at `/.well-known/lnurlp/:username`. The server will only serve responses for usernames which are explicitly listed in the config file.
The client will be given a callback URL pointing to `/pay/callback/:username`. A request to `/pay/callback/:username?amount=` will cause `lnaddrd` to fetch an invoice from the remote LND instance, which is handed over to the client according to standard LNURL protocols.
That's it.