Send & Receive on Lightning
Learn how to send and receive Lightning Network payments with your Spark wallet
Understanding Lightning Invoices
The Spark Service Provider enables trustless Lightning interoperability. To send and receive Lightning payments, you can generate and pay Lightning invoices. A Lightning invoice (also called a payment request) is a specially formatted string that contains all the information needed to make a Lightning Network payment:
- Amount: How many satoshis to send (can be omitted for zero-amount invoices)
- Destination: The recipient’s node public key
- Payment Hash: A unique identifier for the payment
- Description: Optional memo describing the payment
- Expiry: How long the invoice is valid for (default 24 hours)
Lightning invoices start with “ln” followed by the network identifier (bc for mainnet) and typically look like this:
lnbc1...
Mainnet invoice Example:
lnbc2500n1pj0ytfcpp5qqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqdx40shp5jqp3qymd6qgpy99ppk0jqjzylqg5t7fhqhpl6s4kxmqgmrn59w5k0z0cqqqqqqzqqqqq9qsqqqqqq9qqqqqqgq9qsqxl9l55y5cwa9s2h8nvdh4h7h43tcwjdcysf7v0fprz5uh6vshs4n0tvhgzz2xgcqpg8yqv7
Receiving Lightning Payments
To receive a payment, generate a lightning invoice then share it with the sender.
Get payment status
To check the status of a Lightning payment, you can use the getLightningReceiveRequest
Sending Lightning Payments
To send a payment, you’ll need a Lightning invoice from the recipient and the maximum amount of fees to pay. We recommend setting the maximum routing fee to whichever is greater 5 sats or 17 bps * transaction amount.
Checking Balance
You can use getBalance()
to check a Wallet balance after sending or receiving payments.
The getBalance()
method returns a Promise resolving to an object containing:
balance
: Abigint
representing the total amount in satoshistokenBalances
: A Map of token balances, where each entry contains:balance
: Abigint
representing the token amount
Additionally, you can listen for balance update events.
Best Practices
- Always verify invoice amounts before paying
- In order to analyze invoice data, you can use the bolt11 library
- Keep track of invoice ids to match balance changes to created invoices
- Set appropriate expiry times for invoices if necesary
- Monitor payment status for confirmation
Next Steps
Now that you can send and receive Lightning payments, you might want to:
Need Help?
- Check our FAQ
- Review the API Reference
- Follow our Testing Guide
- Check our Code Samples