From 05dead01aeb3a586244d4d2f9f95da435732642d Mon Sep 17 00:00:00 2001 From: 8go Date: Thu, 27 Aug 2020 12:22:53 +0000 Subject: [PATCH 01/31] reformatted - reformatted for better visualization (even though just temporarily) --- channel-graph.asciidoc | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/channel-graph.asciidoc b/channel-graph.asciidoc index 7fa320b..66b79a8 100644 --- a/channel-graph.asciidoc +++ b/channel-graph.asciidoc @@ -1,21 +1,23 @@ Chapter overview: + * explains the channel graph, and how it's modified+verified Relevant questions to answer: + * Gossip announcements: - * How does a peer announce a new channel to the network? - * How do nodes verify a channel announcement? Why should they verify one in the first place? - * How does a node control _how_ a payment is routed through its channel? - * What knobs exist for a node to set in their channel updates? - * How often are channel updates sent? - * How does a node update its node in the channel graph? Do we we need to verify this? - * How quickly does an update propagate? - * What are "zombie" channels? Why do they matter? + - How does a peer announce a new channel to the network? + - How do nodes verify a channel announcement? Why should they verify one in the first place? + - How does a node control _how_ a payment is routed through its channel? + - What knobs exist for a node to set in their channel updates? + - How often are channel updates sent? + - How does a node update its node in the channel graph? Do we we need to verify this? + - How quickly does an update propagate? + - What are "zombie" channels? Why do they matter? * Channel graph syncing: - * What are the various ways a node can sync the channel graph? - * Which is the most efficient? - * What is the "gossip query" system? - * Does a node need to keep up with all gossip updates? Does this change if they're a routing node or mobile client? + - What are the various ways a node can sync the channel graph? + - Which is the most efficient? + - What is the "gossip query" system? + - Does a node need to keep up with all gossip updates? Does this change if they're a routing node or mobile client? * Protocol Extensions via Feature Bits and TLV: - * How can the channel graph be upgraded using feature bits and TLV fields? - * How does a receiver signal that they can accept MPP/AMP payments? + - How can the channel graph be upgraded using feature bits and TLV fields? + - How does a receiver signal that they can accept MPP/AMP payments? From b252a8d8ef339609cc5d09cffe1f6feeb4552254 Mon Sep 17 00:00:00 2001 From: 8go Date: Fri, 28 Aug 2020 13:26:10 +0000 Subject: [PATCH 02/31] node_operations: English touch ups - simplifications of sentences - "wasted" --> "underutilized" - "however" repetitive --> "in contrast" - commas - etc --- node_operations.asciidoc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 85e4ed9..bd128d3 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -22,23 +22,23 @@ Let's get started! === Choosing your platform -There are many ways you can run a Lightning node, from a small mini-PC hosted in your home, to a dedicated server, to a hosted server in the cloud. The method you choose will depend on the resources you have and how much money you want to spend. +There are many ways you can run a Lightning node ranging from a small mini-PC hosted in your home or a dedicated server to a hosted server in the cloud. The method you choose will depend on the resources you have and how much money you want to spend. ==== Why is reliability important for running a Lightning Node? -In Bitcoin, unless one is specifically running a mining node, hardware is not particularly important. +In Bitcoin hardware is not particularly important unless one is specifically running a mining node. The Bitcoin Core node software can be run on any machine that meets its minimum requirements and does not need to be online to receive payments; only to send them. If a Bitcoin node goes down for an extended period of time, the user can simply reboot the node and once it connects to the rest of the network, it will re-sync the blockchain. -In Lightning however, the user needs to be online both to send _and_ to receive payments. If the Lightning user is offline it cannot receive any payments from anyone and thus its open invoices cannot be fulfilled. -Furthermore, the open channels of an offline node cannot be used to route payments. Your channel partners will notice that you are offline and cannot contact you to route a payment. If you are offline too often, they may consider the Bitcoin locked up in their channels with you to be "wasted" capacity, and may close those channels. We also consider the case of a Protocol Breach i.e. your channel partner tries to cheat you by submitting an earlier commitment transaction. If you are offline and your channels aren't being monitored, then the theft could succeed and you will have no recourse once the timelock expires. +In Lightning, however, the user needs to be online both to send _and_ to receive payments. If the Lightning user is offline it cannot receive any payments from anyone and thus its open invoices cannot be fulfilled. +Furthermore, the open channels of an offline node cannot be used to route payments. Your channel partners will notice that you are offline and cannot contact you to route a payment. If you are offline too often, they may consider the Bitcoin locked up in their channels with you to be underutilized capacity, and may close those channels. We already discussed the case of a protocol attack where your channel partner tries to cheat you by submitting an earlier commitment transaction. If you are offline and your channels aren't being monitored, then the attempted theft could succeed and you will have no recourse once the timelock expires. Hence, node reliability is extremely important for a Lightning node. -There is also the issue of hardware failure and loss of data. In Bitcoin, hardware failure can be a trivial problem if the user has a backup of their mnemonic phrase or private key. The Bitcoin wallet and the bitcoin inside the wallet be easily restored from the private key on any computer or hardware wallet, and the blockchain can be re-downloaded from any peer. +There are also the issues of hardware failure and loss of data. In Bitcoin, a hardware failure can be a trivial problem if the user has a backup of their mnemonic phrase or private keys. The Bitcoin wallet and the bitcoin inside the wallet can be easily restored from the private keys on a new computer. Most information can be re-downloaded from the blockchain. -In Lightning however, the information about the user's channels, including the commitment transactions and revocation secrets, are not publicly known and are only stored on the individual user's hardware. -Thus, hardware failure in the Lightning Network can easily result in loss of funds. +In contrast, in Lightning the information about the user's channels, including the commitment transactions and revocation secrets, are not publicly known and are only stored on the individual user's hardware. +Thus, software and hardware failures in the Lightning Network can easily result in loss of funds. ==== What are the types of hardware Lightning Nodes? From 84a78792804877908a9d05ac21d3635d35736d4b Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Fri, 28 Aug 2020 09:33:35 -0400 Subject: [PATCH 03/31] node_operations: watchtowers --- node_operations.asciidoc | 83 +++++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 9 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 85e4ed9..0769c12 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -14,7 +14,7 @@ There are many reasons why you might want to set up your own Lightning node. The * For financial freedom, independence, and sovereignty. There are costs associated with running a Lightning Network node. You need a computer, a permanent Internet connection, lots of disk space, and lots of time! -Operational costs will include electricity expenses. +Operational costs will include electricity expenses. But the skills you will learn from this experience are valuable and can be applied to a variety of other tasks too. @@ -512,13 +512,13 @@ To set up static channel backups in LND, set the +backupfilepath+ parameter, eit As we've discussed previously, the Lightning Network consists of a network of _hot wallets_. The funds you store in a Lightning wallet are *online all the time*. You should not store large amounts in a Lightning wallet, as it is quite vulnerable. Large amounts should be kept in a cold wallet that is not online and transacts on-chain. -But given that warning, you may still find you have a significant amount of money in a Lightning wallet. Such is the case for example if you use a Lightning node for e-commerce operations like running a shop. If that is the case, your wallet will likely receive funds often but send funds rarely. You will therefore have two problems simultaneously: Your channels will be imbalanced inwards (more local balance than remote balance) and you will have too much money in the wallet. Fortunately, you can solve both of these problems simultaneously. +But given that warning, you may still find you have a significant amount of money in a Lightning wallet. Such is the case for example if you use a Lightning node for e-commerce operations like running a shop, while not having significant expenses you can pay on Lightning. If that is the case, your wallet will likely receive funds often but send funds rarely. You will therefore have two problems simultaneously: Your channels will be imbalanced inwards (more local balance than remote balance) and you will have too much money in the wallet. Fortunately, you can solve both of these problems simultaneously. Let's look at some of the solutions you can use to reduce the funds exposed on a hot wallet. ==== Sweeping funds -If you Lightning wallet balance becomes too large for your risk appetite, you will need to "sweep" funds out of the wallet. You can do so in three ways: on-chain, off-chain and loop-out. Let's look at each of those in the next few sections. +If you Lightning wallet balance becomes too large for your risk appetite, you will need to "sweep" funds out of the wallet. You can do so in three ways: on-chain, off-chain, and loop-out. Let's look at each of those in the next few sections. ===== On-chain sweep @@ -583,18 +583,84 @@ Swap initiated Run `loop monitor` to monitor progress. ---- +Note that your maximum fee, which represents a worst-case scenario, will depend on the confirmation target that you select. + +=== Lightning node uptime and availability + +Unlike Bitcoin, Lightning nodes need to be online almost continuously. Your node needs to be online to receive payments, open channels, close channels (cooperatively) and monitor protocol violations. Node availability is such an important requirement in the Lightning Network, that it is a metric used by various automatic channel management tools (e.g. autopilot) to decide with which nodes to open channels. You can even see "availability" as a node metric on popular node explorers such as +1ml.com+. + +Node availability is especially important because of potential protocol violations (i.e. revoked commitments). While you can afford short interruptions (hour or days), you cannot have your node offline for longer periods of time without risking loss of funds. + +Keeping a node online is not easy, as various bugs and resource limitations will occasionally cause downtime. Especially if you run a busy and popular node, you will run into limitations of memory, swap space, number of open files, disk space etc. A whole host of different problems will cause your node or your server to crash. + +==== Monitoring node availability + +Monitoring your node is an important part of keeping it running. You need to monitor not only the availability of the computer itself, but also the availability and correct operation of the Lightning node software. + +There are a number of ways to do this, but most require some customization. You can use generic infrastructure monitoring or application monitoring tools, but you have to customize them specifically to query the Lightning node API, to ensure it is running, synchronized to the blockchain and connected to channel peers. + +There is a specialized service that offers Lightning node monitoring, using a Telegram bot to notify you of any interruptions in service. This is a free service, though you can pay (over Lightning of course) to get faster alerts. Find more information at: + +https://lightning.watch + +Over time, we expect more third-party services to provide specialized Lightning node monitoring, most likely charging a micro-payment. Perhaps such services and their APIs will become standardized and be directly supported by Lightning node software. ==== Watchtowers +Watchtowers are a mechanism for outsourcing the monitoring and penalty resolution of Lightning protocol violations. -=== Running multiple Lightning Network nodes +As we mentioned in previous chapters, the Lightning protocol maintains security through a penalty mechanism. If one of your channel partners broadcasts an old commitment transaction, your node will need to exercise the revocation clause and broadcast a penalty transaction to avoid losing money. But if your node is down during the protocol violation, you might lose money. -==== Private channels -==== Topology +To solve this problem, we can use one or more _watchtowers_ to outsource the job of monitoring protocol violations and issuing penalty transactions. There are two parts to a watchtower setup: a watchtower server (or simply "watchtower") that monitors the blockchain and a watchtower client that asks the watchtower server for monitoring service. -=== Channel management +Watchtower technology, is still in the early stages of development and is not widely supported. However there are some experimental implementations that you can try, below. + +LND can run both a watchtower server and a watchtower client. You can activate the watchtower server by adding the following configuration options: + +---- +[watchtower] +watchtower.active=1 +watchtower.towerdir=/path_to_watchtower_data_directory +---- -==== Private vs public channels +You can use LND's watchtower client by activating it in the configuration and then using the command-line to connect it to a watchtower server. The configuration is: + +---- +[wtclient] +wtclient.active=1 +---- + +LND's command-line client +lncli+ shows the following options for managing the watchtower client: + +---- +$ lncli wtclient + +NAME: + lncli wtclient - Interact with the watchtower client. + +USAGE: + lncli wtclient command [command options] [arguments...] + +COMMANDS: + add Register a watchtower to use for future sessions/backups. + remove Remove a watchtower to prevent its use for future sessions/backups. + towers Display information about all registered watchtowers. + tower Display information about a specific registered watchtower. + stats Display the session stats of the watchtower client. + policy Display the active watchtower client policy configuration. + +OPTIONS: + --help, -h show help +---- + +C-lightning has the API hooks necessary for a watchtower client plugin, though no such plugin has been implemented yet. + +Finally, a popular standalone watchtower server is The Eye of Satoshi (TEOS), which can be found here: + +https://github.com/talaia-labs/python-teos + + +=== Channel management ==== Manually choosing nodes for outbound channels @@ -619,7 +685,6 @@ In the future these challenges can be partially mitigated by the implementation This could also be mitigated by autopilot, which could request and pay for inbound capacity as needed. Ultimately, however, Lightning power users will have to strategize about channel management to ensure that sufficient inbound capacity is available to meet their inbound liquidity needs. - ==== On-chain fees for channel management ==== Inactive channels and nodes From 0451450b8801d0eaca3a92f3b1d3d175c105b6b4 Mon Sep 17 00:00:00 2001 From: 8go Date: Fri, 28 Aug 2020 15:54:55 +0000 Subject: [PATCH 04/31] node_operations: English, minor tuning on VPS offering - "Specialized Hardware" --> sounds a bit misleading. The hardware is not special, it is off-the-shelf hardware configured to suit the needs of LN (not like mining hardware) - I felt the "Cloud" section was too one-sided. Just the negative points were mentioned. we should be objective and also mention the upsides. - Describe the situation fairly, let the user form an opinion - we give free advertising to the big 3 (MS, G, AWS), let's also give advertising to at least one smaller player: added DigitalOcean --- node_operations.asciidoc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index afb9c17..574ac71 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -44,15 +44,17 @@ Thus, software and hardware failures in the Lightning Network can easily result * **General Purpose Computers**: a Lightning Network node can be run on a home computer or laptop running Windows, Mac OS, or Linux. Typically this is run alongside a Bitcoin node. * **Dedicated Hardware**: a Lightning Node can also be run on dedicated hardware like a Raspberry Pi, Rock64, or mini-PC. This setup would usually run a software stack including a Bitcoin node and other applications. This setup is popular as the hardware is dedicated to running and maintaining the Lightning node only and is usually set up with an installation "helper". -* **Specialized Hardware**: a Lightning Network node can also be run on purpose-built hardware specifically designed for it. This would include "out-of-the-box" Lightning node solutions that can be purchased as a kit or turn-key system. +* **Pre-Configured Hardware**: a Lightning Network node can also be run on purpose-built hardware specifically selected and configured for it. This would include "out-of-the-box" Lightning node solutions that can be purchased as a kit or a turn-key system. ==== Running in the "cloud" -Virtual Private Server (VPS) and "cloud computing" services such as Microsoft Azure, Google Cloud, or Amazon Web Services (AWS) are quite affordable and can be set up very quickly. A Lightning node can be hosted for between $20 and $40 per month on such a service. +_Virtual Private Server_ (VPS) and "cloud computing" services such as Microsoft Azure, Google Cloud, Amazon Web Services (AWS), or DigitalOcean are quite affordable and can be set up very quickly. A Lightning node can be hosted for between $20 and $40 per month on such a service. -However, as the saying goes, "'Cloud' is just other people's computers". Using these services means running your node on other people's computers, with all the privacy and security implications that has. A Lightning node running in the "cloud", will always be less secure, less private that one running on your own computer. Additionally, these cloud computing services are very centralized. The vast majority of Bitcoin and Lightning nodes running on such services are located in a handful of data centers in Virginia, Sunnyvale, Seattle, London and Frankfurt. When the networks or data centers of these providers have service problems, it affects thousands of nodes on so-called "decentralized" networks. +However, as the saying goes, "'Cloud' is just other people's computers". Using these services means running your node on other people's computers. This brings along the corresponding advantages and disadvantages. The key advantages are convenience, efficiency, uptime, and possibly even cost. The cloud operator manages and runs the node to a high degree automatically providing you with convenience and efficiency. They provide excellent uptime and availability, often much better than what an individual can achieve at home. If you consider that just the electricity cost of running a server in many western countries is around $10 per month, then add to that the cost of network bandwidth and the hardware itself, the VPS offering becomes financially competetive. Lastly, with a VPS you need no space for a PC at home, and don't have any issues with PC noise or heat. +On the other hand there are several notable disadvantages. A Lightning node running in the "cloud" will always be less secure and less private that one running on your own computer. Additionally, these cloud computing services are very centralized. The vast majority of Bitcoin and Lightning nodes running on such services are located in a handful of data centers in Virginia, Sunnyvale, Seattle, London, and Frankfurt. When the networks or data centers of these providers have service problems, it affects thousands of nodes on so-called "decentralized" networks. -Running a Lightning node in the cloud is better than not running a node at all, and worse than running it on your own computer at home or in your office. +If you have the possibility and capacity of running a node on your own computer at home or in your office, then this might be preferable to running it +in the cloud. Nonetheless, if running your own server is not an option, by all means consider running one on a VPS. ==== Running a node at home From 2523516b020c74152385a1e445814cf44576368f Mon Sep 17 00:00:00 2001 From: 8go Date: Fri, 28 Aug 2020 16:38:16 +0000 Subject: [PATCH 05/31] node_operations: English, minor adjustments/additions - commas - simplifications - added downsides to running on laptop - Backup is so crucial, I elevated it to full **...** formatting --- node_operations.asciidoc | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index afb9c17..d574ab0 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -56,27 +56,31 @@ Running a Lightning node in the cloud is better than not running a node at all, ==== Running a node at home -If you have a reasonable capacity internet link at home, or in your office, you can certainly run a Lightning node there. Any "broadband" connection is sufficient for this purpose (running a lightweight node), and a fast connection will allow you to run a Bitcoin full node too. +If you have a reasonable capacity internet link at home or in your office, you can certainly run a Lightning node there. Any "broadband" connection is sufficient for the purpose of running a lightweight node, and a fast connection will allow you to run a Bitcoin full node too. -While you can run a Lightning node (and even a Bitcoin node) on your laptop, it will become annoying quite fast. These programs consume your computer's resources and need to run 24/7, and you will find yourself competing against the background services for your computer's attention (meaning your browser and other desktop workloads will be slowed down). +While you can run a Lightning node (and even a Bitcoin node) on your laptop, it will become annoying quite fast. These programs consume your computer's resources and need to run 24/7. Your user applications like your browser or your spreadsheet will find themselves competing against the Lightning background services for your computer's resources. In other words, your browser and other desktop workloads will be slowed down. +And when your word processing app freezes up your laptop, your Lightning node will go down as well. Furthermore, you should never turn off your laptop. +All this combined together results in a set-up that is not ideal. The same will apply to your daily-use personal desktop PC. -Instead, most users will choose to run a node on a dedicated computer. Fortunately, you don't need a "server" class computer to do this. You can run a Lightning node on a mini-PC, such as a Raspberry Pi or an Atom-based fanless PC, computers which are commonly used as a media server or home automation hub. These are relatively inexpensive, costing between $50 and $150 USD at that time of this writing. To run on a mini-PC, you will need an external USB hard drive, which again is relatively inexpensive, costing approximately $50 USD. The advantage of a dedicated mini-PC as a platform for Lightning and Bitcoin nodes is that it can run continuously, silently and unobtrusively on your home WiFi network, tucked behind your router or TV. No one will even know that this little box is actually a global banking system! +Instead, most users will choose to run a node on a dedicated computer. Fortunately, you don't need a "server" class computer to do this. You can run a Lightning node on a mini-PC, such as a Raspberry Pi or an Atom-based fanless PC. These are simple computers which are commonly used as a media server or home automation hub. They are relatively inexpensive, costing between $50 and $150 USD at that time of this writing. To run on a mini-PC, you will need an external USB hard drive, which again is relatively inexpensive, costing approximately $50 USD. The advantage of a dedicated mini-PC as a platform for Lightning and Bitcoin nodes is that it can run continuously, silently, and unobtrusively on your home WiFi network, tucked behind your router or TV. No one will even know that this little box is actually part of a global banking system! ==== What hardware is required to run a Lightning node? At a minimum, the following will be required to run a Lightning Node: -* **CPU**: sufficient processing power will be required to run a Bitcoin node, which will continuously download and validate new blocks. The user also needs to consider the Initial Block Download (IBD) when setting up a new Bitcoin node which can take anywhere from several hours to several days. A 2-core or 4-core CPU is recommended. +* **CPU**: sufficient processing power will be required to run a Bitcoin node, which will continuously download and validate new blocks. The user also needs to consider the Initial Block Download (IBD) when setting up a new Bitcoin node, which can take anywhere from several hours to several days. A 2-core or 4-core CPU is recommended. -* **RAM**: a system running both Bitcoin and Lightning nodes may work on 2GB RAM _barely_, but will perform much better with at least 4GB of RAM. The Initial Block Download will be especially challenging with less than 4GB of RAM. More than 8GB of RAM is unnecessary, because the CPU is the greater bottleneck for these types of services, due to cryptographic operations such as signature validation. +* **RAM**: a system with 2GB of RAM will _barely_ run both Bitcoin and Lightning nodes. It will perform much better with at least 4GB of RAM. The Initial Block Download will be especially challenging with less than 4GB of RAM. More than 8GB of RAM is unnecessary, because the CPU is the greater bottleneck for these types of services, due to cryptographic operations such as signature validation. -* **Storage Drive**: this can be a Hard Drive or an Solid State Drive (SSD), although an SSD will be significantly quicker for running a Bitcoin node. Most of the storage is used for the Bitcoin blockchain, which can take up more than 300GB (as of June 2020). +* **Storage Drive**: this can be a Hard Drive or an Solid State Drive (SSD). An SSD will be significantly quicker for running a Bitcoin node. Most of the storage is used for the Bitcoin blockchain, which occupies more than 340GB (as of September 2020). -* **Internet Connection**: a reliable internet connection will be required to download new Bitcoin blocks, as well as to communicate with other Lightning Peers. Estimated data use ranges from 10GB to 100GB per month, depending on configuration. +* **Internet Connection**: a reliable internet connection will be required to download new Bitcoin blocks, as well as to communicate with other Lightning peers. During operation the estimated data use ranges from 10GB to 100GB per month, depending on configuration. At startup a Bitcoin full node downloads the full blockchain, 340GB as of September 2020. -* **Power Supply**: a reliable power supply is required as Lightning nodes need to be online at all times. A power failure will cause in-progress payments to fail. For heavy duty routing nodes, a backup or uninterruptible power supply (UPS) is useful in the case of power outages. +* **Power Supply**: a reliable power supply is required as Lightning nodes need to be online at all times. A power failure will cause in-progress payments to fail. For heavy duty routing nodes, a backup or uninterruptible power supply (UPS) is useful in the case of power outages. +Ideally, you should connect your Internet router to this UPS as well. -In addition, the user will also want to consider some kind of data backup solution. This could be a cloud-based automated backup to a server or web service the user controls. Or, it could be a local hardware backup, such as a second drive. Or for best results, a combination of local and remote backup. +* **Backup**: Backup is crucial as a failure can result in loss of data and hence in loss of funds. +The user will want to consider some kind of data backup solution. This could be a cloud-based automated backup to a server or web service the user controls. Alternatively, it could be an automated local hardware backup, such as a second hard drive. For best results, both local and remote backup can be combined. ==== Switching server configuration in the cloud From 7379592b99653575f1def0ddccbfac625ad06967 Mon Sep 17 00:00:00 2001 From: 8go Date: Fri, 28 Aug 2020 17:32:16 +0000 Subject: [PATCH 06/31] reformatted + 1 bullet point (#371) - reformatted for correct visualization - added bullet point regarding chat apps using TLV --- p2p.asciidoc | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/p2p.asciidoc b/p2p.asciidoc index a8b6059..9c9911d 100644 --- a/p2p.asciidoc +++ b/p2p.asciidoc @@ -1,44 +1,48 @@ Chapter overview: + * high level description of p2p interaction for the LN Relevant questions to answer: + * Encrypted P2P Transport: - * What is the noise protocol? How does it differ from TLS? Who created it + - What is the noise protocol? How does it differ from TLS? Who created it - * and what are some of primary design principles? + - and what are some of primary design principles? - * What is an authenticated key exchange? + - What is an authenticated key exchange? - * Why does Noise offer various handshakes? What are some of unique properties certain handshakes offer? + - Why does Noise offer various handshakes? What are some of unique properties certain handshakes offer? - * What is key rotation in the context of a complete handshake? Why is it important? + - What is key rotation in the context of a complete handshake? Why is it important? - * What is "brontide"? How is it used in LN today? How can it be upgraded in the future? + - What is "brontide"? How is it used in LN today? How can it be upgraded in the future? * LN Message Format: - * What kind of framing is used in the LN message format? What's the max message size and why is it in place? + - What kind of framing is used in the LN message format? What's the max message size and why is it in place? - * What is a varint? Why is it used in the protocol? + - What is a varint? Why is it used in the protocol? - * What are the message types of some of the popular messages in the protocol? + - What are the message types of some of the popular messages in the protocol? - * How can new messages be added in the future? + - How can new messages be added in the future? * Feature bits: - * What are feature bits in the network, and how+where are they advertised? + - What are feature bits in the network, and how+where are they advertised? - * How can feature bits be used to phase in new features to the protocol? + - How can feature bits be used to phase in new features to the protocol? - * Today, what are some of the major feature bits used in the system? + - Today, what are some of the major feature bits used in the system? - * What's the difference between and end-to-end network upgrade and an internal network upgrade? How's the analogous to the evolution of routers and protocols in the existing internet? + - What's the difference between and end-to-end network upgrade and an internal network upgrade? How's the analogous to the evolution of routers and protocols in the existing internet? * TLV Message Extensions: - * What does TLV stand for? + - What does TLV stand for? - * How is this related to the existing protobuf message format? + - How is this related to the existing protobuf message format? - * Where are TLV fields used in the protocol today? + - Where are TLV fields used in the protocol today? - * How can TLV fields be used to extend the protocol, existing messages, and the onion itself? + - How can TLV fields be used to extend the protocol, existing messages, and the onion itself? + + - Sidenote that TLV can be used by upcoming Instant Messaging chat apps like `Whatsat`, `Sphinx Chat` or `Juggernaut` From 3cb6dc20411748855c6eaf66ae8ea74a07469715 Mon Sep 17 00:00:00 2001 From: 8go Date: Fri, 28 Aug 2020 17:35:23 +0000 Subject: [PATCH 07/31] node_operations: English, disks, cloud - "a lot cheaper", "a lot faster" : quite undefined, this might mean different things to different readers - I like "incantations" but it is slang. Also some foreigners might not know this word. --> then I decided to leave it in as is. Adds some special touch. - simplifications --- node_operations.asciidoc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 83d1690..1a67b99 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -88,21 +88,24 @@ The user will want to consider some kind of data backup solution. This could be When renting a cloud server, it is often cost effective to change the configuration between two phases of operation: A faster CPU and faster storage will be needed during the Initial Block Download (e.g. the first day). After the blockchain has synced, the CPU and storage speed requirements are much less, so the performance can be downgraded to a more cost-effective level. -For example, on Amazon's cloud, we would use a 8-16GB RAM, 8-core CPU (e.g. t3-large or m3.large) and faster 400GB SSD (1000+ provisioned IOPS) for the Initial Block Download (IBD), reducing its time to just 6-8 hours. Once that is complete, we would switch the server instance to a 2GB RAM, 2-core CPU (e.g. t3.small) and storage to a general purpose 1TB HDD. This will cost about the same as if you ran it on the slower server the entire time, but will get you up and running in less than a day instead of having to wait almost a week for the IBD. +For example, on Amazon's cloud, we would use a 8-16GB RAM, 8-core CPU (e.g. t3-large or m3.large) and faster 400GB SSD (1000+ provisioned IOPS) for the Initial Block Download (IBD), reducing its time to just 6-8 hours. Once that is complete, we would switch the server instance to a 2GB RAM, 2-core CPU (e.g. t3.small) and storage to a general purpose 1TB HDD. This will cost about the same as if you ran it on the slower server the entire time, but it will get you up and running in less than a day instead of having to wait almost a week for the IBD. ===== Permanent data storage (drive) If you use a mini-PC or rent a server, the storage can be the costliest part, costing as much as the computer and connectivity (data) added together. -Let's have a look at the different options available. First there are two main types of drives, Hard Disk Drives (HDDs) and Solid State Drives (SSDs). HDDs are a lot cheaper and SSDs are a lot faster, but both would do the job. +Let's have a look at the different options available. First there are two main types of drives, Hard Disk Drives (HDDs) and Solid State Drives (SSDs). HDDs are cheaper and SSDs are faster, but both do the job. -The fastest SSDs up to date use the NVMe interface, but depending on your hardware they may not be better than the cheaper version, SATA SSDs. As an example, the Raspberry Pi 4 cannot benefit from them because of the limited bandwidth of its USB port. +The fastest SSDs available today use the NVMe interface. The NVMe SSDs are faster in high end machines, but also more costly. +Traditional SATA-based SSDs are cheaper, but not as fast. SATA SSDs perform sufficiently well for your node setup. +Smaller computers might not be able to take advantage of NVMe SSDs. +For example, the Raspberry Pi 4 cannot benefit from them because of the limited bandwidth of its USB port. -To choose the size, let's look at the Bitcoin blockchain. As of July 2020 its size is approximately 330GB including the transaction index. If you want to have some margin available for the future or to install other stuff on your node, purchase at least a 512GB drive or better yet a 1TB drive. +To choose the size, let's look at the Bitcoin blockchain. As of September 2020 its size is 340GB including the transaction index. If you want to have some margin available for future growth or to install other data on your node, purchase at least a 512GB drive or better yet a 1TB drive. -=== Using an installer/helper +=== Using an installer or helper -Installing a Lightning node (or also a Bitcoin node), may be daunting if you are not familiar with a command-line environment. However, there are a number of projects that make "helpers", software that installs and configures the various components for you. You will still need to learn some command-line incantations to interact with your node, but most of the initial work is done for you. +Installing a Lightning node or a Bitcoin node may be daunting if you are not familiar with a command-line environment. Luckily, there are a number of projects that make "helpers", i.e. software that installs and configures the various components for you. You will still need to learn some command-line incantations to interact with your node, but most of the initial work is done for you. ==== RaspiBlitz From 59e630f3c2f55186c92dfe536807cd9ee7ac3692 Mon Sep 17 00:00:00 2001 From: 8go Date: Fri, 28 Aug 2020 18:05:27 +0000 Subject: [PATCH 08/31] node_operations: English, touch ups, BTCPay, Raspi - simplifications - commas - "set up" is a verb, not a noun --> "setup" - COLDCARDwallet --> They themselves on their website use predominantly "Coldcard Wallet". Their logo image does use uppercase, but they do not use uppercase in their text/manuals. - a number is not expanding, a number is growing - etc --- node_operations.asciidoc | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 83d1690..431ae4f 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -106,7 +106,7 @@ Installing a Lightning node (or also a Bitcoin node), may be daunting if you are ==== RaspiBlitz -One of the most popular and complete such "helpers", is _RaspiBlitz_, a project built by Christian Rootzoll, which is intended to be installed on a Raspberry Pi 4. RaspiBlitz comes with a recommended hardware "kit" that you can build in a matter of hours, or at most a weekend. If you attend a Lightning "hackathon" in your city, you are likely to see many people working on their RaspiBlitz set up, swapping tips and helping each other. You can find the RaspiBlitz project here: +One of the most popular and complete "helper" is _RaspiBlitz_, a project built by Christian Rootzoll. It is intended to be installed on a Raspberry Pi 4. RaspiBlitz comes with a recommended hardware "kit" that you can build in a matter of hours or at most a weekend. If you attend a Lightning "hackathon" in your city, you are likely to see many people working on their RaspiBlitz setup, swapping tips, and helping each other. You can find the RaspiBlitz project here: https://github.com/rootzoll/raspiblitz @@ -119,7 +119,7 @@ In addition to a Bitcoin and Lightning node, RaspiBlitz can install a number of * BTCPayServer (Cryptocurrency Payment Processor) * BTC-RPC-Explorer (Bitcoin Blockchain Explorer) * LNbits (Lightning wallet/accounts System) -* SpecterDesktop (Multisig Trezor, Ledger, COLDCARDwallet & Specter-DIY) +* SpecterDesktop (Multisig Trezor, Ledger, Coldcard Wallet & Specter-DIY) * LNDmanage (Advanced Channel Management CLI) * Loop (Submarine Swaps Service) * JoinMarket (CoinJoin Service) @@ -127,7 +127,7 @@ In addition to a Bitcoin and Lightning node, RaspiBlitz can install a number of ==== MyNode -MyNode is another popular open source project including a lot of Bitcoin related software. Is is easy to install: you "flash" the installer onto an SD card, and boot your mini-PC from the SD card. You do not need any screen to use myNode as the administrative tools are accessible from a browser. You can manage it from a computer or even from your smartphone. Once installed, go to http://mynode.local/ and create a lightning wallet and node in two clicks. +_MyNode_ is another popular open source "helper" project including a lot of Bitcoin related software. Is is easy to install: you "flash" the installer onto an SD card and boot your mini-PC from the SD card. You do not need any monitor to use myNode as the administrative tools are accessible remotely from a browser. If your mini-PC has no monitor, mouse, or keyboard, you can manage it from another computer or even from your smartphone. Once installed, go to http://mynode.local/ and create a Lightning wallet and node in two clicks. You can find the MyNode project here: @@ -142,26 +142,27 @@ In addition to a Bitcoin and Lightning node, MyNode can optionally install a var ==== BTCPay Server -While not initially designed as an installation "helper", the e-commerce and payment platform BTCPay Server has an incredibly easy installation system that uses docker containers and docker-compose to install a Bitcoin node, Lightning node and payment gateway, among many other services. It can be installed on a variety of hardware platforms, from a simple Raspberry Pi 4 (4GB recommended) to a mini-PC, old laptop, desktop or server. +While not initially designed as an installation "helper", the e-commerce and payment platform _BTCPay Server_ has an incredibly easy installation system that uses docker containers and +docker-compose+ to install a Bitcoin node, Lightning node, and payment gateway, among many other services. It can be installed on a variety of hardware platforms, from a simple Raspberry Pi 4 (4GB recommended) to a mini-PC, old laptop, desktop or server. -BTCPay server not only installs a full node for you, but that is a side-effect of what is a fully-featured self-hosted self-custody e-commerce platform that can be integrated with many e-commerce platforms such as Wordpress Woocommerce and others. Originally developed as a feature-for-feature replacement of the Bitpay commercial service and API, it has evolved past that to be a complete platform for BTC and Lighting services related to e-commerce. +BTCPay Server is a fully-featured self-hosted self-custody e-commerce platform that can be integrated with many e-commerce platforms such as Wordpress Woocommerce and others. The installation of the full node is only a step of the e-commerce platform installation. +While originally developed as a feature-for-feature replacement of the _Bitpay_ commercial payment service and API, it has evolved past that to be a complete platform for BTC and Lighting services related to e-commerce. For many sellers or shops it is a one-shop turn-key solution to e-commerce. More information can be found at: https://btcpayserver.org/ -In addition to a Bitcoin and Lightning node, BTCPay server can also install a variety of services including: +In addition to a Bitcoin and Lightning node, BTCPay Server can also install a variety of services, including: - c-Lightning or LND Lightning node - Litecoin support -- Monero suport +- Monero support - Spark server (c-lightning web wallet) - Charge server (c-lightning e-commerce API) - Ride The Lightning (Lightning node management web GUI) - Many BTC forks - BTCTransmuter (event-action automation service supporting currency exchange) -The number of additional services and features is expanding rapidly, so the list above is only a small subset of what is available in the BTCPay Server platform. +The number of additional services and features is growing rapidly, so the list above is only a small subset of what is available on the BTCPay Server platform. ==== Bitcoin node or lightweight Lightning From 858fb2986b49e7a56bead5bb0d8ac3e3ee5cdb6d Mon Sep 17 00:00:00 2001 From: 8go Date: Sat, 29 Aug 2020 15:42:42 +0000 Subject: [PATCH 09/31] node_operations: English. BTC node - node: repetitive - above we use _..._ for product names, etc. --> changes +...+ to _..._ - one --> once - commas: only put comma in front of _but_ whe followed by a complete sentence with noun - simplifications - etc --- node_operations.asciidoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 2975ec3..fd6f247 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -169,15 +169,15 @@ The number of additional services and features is growing rapidly, so the list a ==== Bitcoin node or lightweight Lightning -One critical choice for your node will be the choice of Bitcoin node and its configuration. Bitcoin Core, the reference implementation is the most common choice, but not the only choice available. One alternative choice is +btcd+, which is a Go-language implementation of a Bitcoin node. Btcd supports some features that are useful for running an LND Lightning node and are not available in Bitcoin Core. +One critical choice for your setup will be the choice of the Bitcoin node and its configuration. _Bitcoin Core_, the reference implementation, is the most common choice but not the only choice available. One alternative choice is _btcd_, which is a Go-language implementation of a Bitcoin node. Btcd supports some features that are useful for running an LND Lightning node and are not available in Bitcoin Core. -A second consideration is whether you will run an archival Bitcoin node with a full copy of the blockchain (some 350GB in mid-2020), or a _pruned_ blockchain that only keeps the most recent blocks. A pruned blockchain can save you some disk space, but will still need to download the full blockchain at least one (during the Initial Block Download), so it won't save you anything on network utilization. Using a pruned node to run a Lightning node is still an experimental capability and might not support all the functionality, however many people are running a node like that successfully. +A second consideration is whether you will run an _archival_ Bitcoin node with a full copy of the blockchain (some 350GB in mid-2020) or a _pruned_ blockchain that only keeps the most recent blocks. A pruned blockchain can save you some disk space but will still need to download the full blockchain at least once (during the Initial Block Download). Hence it won't save you any network traffic. Using a pruned node to run a Lightning node is still an experimental capability and might not support all the functionality. However, many people are running a node like that successfully. -Finally, you also have the option of not running a Bitcoin node at all, instead operating the LND Lightning node in "lightweight" mode, using the _neutrino_ protocol to retrieve blockchain information from public Bitcoin nodes operated by others. Running like this means that you are taking resources from the Bitcoin network without offering any back, but it is still better than not running your own Lightning node at all. +Finally, you also have the option of not running a Bitcoin node at all. Instead you can operate the LND Lightning node in "lightweight" mode, using the _neutrino_ protocol to retrieve blockchain information from public Bitcoin nodes operated by others. Running like this means that you are taking resources from the Bitcoin network without offering any in return. Instead, you are offering your resources and contributing to the Lightning Network community. For smaller Lightning nodes this will generally reduce network traffic in comparison to running a full Bitcoin node. -Keep in mind that operating a Bitcoin node allows you to support other services (other than a Lightning node). These other services may require an archival (not pruned) Bitcoin node and often can't run without a Bitcoin node. Consider what other services you may need to run now or in the future, to make an informed decision on the type of Bitcoin node you run. +Keep in mind that operating a Bitcoin node allows you to support other services, besides and on top of a Lightning node. These other services may require an archival (not pruned) Bitcoin node and often can't run without a Bitcoin node. Consider upfront what other services you may want to run now or in the future, to make an informed decision on the type of Bitcoin node you select. -The bottom line for this decision is: If you can afford a > 500GB disk, run a full archival Bitcoin node. You will be contributing resources to the Bitcoin system and helping others who cannot afford to do so. If you can't afford such a big disk, run a pruned node. If you can't afford the disk or the bandwidth for even a pruned node, run a lightweight LND node over neutrino. +The bottom line for this decision is: If you can afford a disk larger than 500GB, run a full archival Bitcoin node. You will be contributing resources to the Bitcoin system and helping others who cannot afford to do so. If you can't afford such a big disk, run a pruned node. If you can't afford the disk or the bandwidth for even a pruned node, run a lightweight LND node over neutrino. ==== Operating system choice From 4d78ce6fc74aef59dc2b52dc5ff62c8e2fbb5882 Mon Sep 17 00:00:00 2001 From: 8go Date: Sat, 29 Aug 2020 17:32:13 +0000 Subject: [PATCH 10/31] node_operations: English, OS, LN Node - open source: as adjective written with hyphen (according to Wiktionary) - you --> your - simplifications - docker --> unless it is a command, I would uppercase it (see Wikipedia) - more --> more than what? primarily --- node_operations.asciidoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 2975ec3..5560902 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -181,23 +181,23 @@ The bottom line for this decision is: If you can afford a > 500GB disk, run a fu ==== Operating system choice -The next decision is on which operating system you build your nodes. The vast majority of internet servers run on some variant of Linux. Linux is the platform of choice for the internet because it is an open source and powerful operating system. Linux, however has a steep learning curve and requires familiarity with a command-line environment. It is often intimidating for new users. +The next step is to select an operating system for your nodes. The vast majority of internet servers run on some variant of Linux. Linux is the platform of choice for the internet because it is a powerful, open-source operating system. Linux, however, has a steep learning curve and requires familiarity with a command-line environment. It is often intimidating for new users. -Ultimately, most of the services can be run on any modern POSIX operating system, which includes Mac OS, Windows and of course Linux. Your choice should be driven more by your familiarity and comfort with an operating system and you learning objectives. If you want to expand your knowledge and learn how to operate a Linux system, this is a great opportunity to do so with a specific project and a clear goal. If you just want to get a node up and running, go with what you know. +Ultimately, most of the services can be run on any modern POSIX operating system, which includes Mac OS, Windows, and of course Linux. Your choice should be driven more by your familiarity and comfort with an operating system and your learning objectives. If you want to expand your knowledge and learn how to operate a Linux system, this is a great opportunity to do so with a specific project and a clear goal. If you just want to get a node up and running, go with what you know. -Nowadays, many services are also delivered in the form of containers, usually based on the docker system. These containers can be deployed on a variety of operating systems, abstracting the underlying OS. You may need to learn some Linux CLI commands, however, as most of the containers run some variant of Linux inside. +Nowadays, many services are also delivered in the form of containers, usually based on the _Docker_ system. These containers can be deployed on a variety of operating systems, abstracting the underlying OS. You may need to learn some Linux CLI commands nonetheless, as most of the containers run some variant of Linux inside. === Choose your Lightning node implementation -As with the choice of operating system, your choice of Lightning node implementation should depend more on your familiarity with the programming language and development tools used for each project. While there are some small differences in features between the various node implementations, those are relatively minor and most implementations converge on the common standards defined by the BOLTs. +As with the choice of operating system, your choice of Lightning node implementation should depend primarily on your familiarity with the programming language and development tools used by the projects. While there are some small differences in features between the various node implementations, those are relatively minor and most implementations converge on the common standards defined by the BOLTs. -Familiarity with the programming language and build system, on the other hand, is a good basis for choosing a node. That's because installation, configuration, ongoing maintenance, and troubleshooting will all involve interacting with the various tools used by the build system, such as: +Familiarity with the programming language and build system, on the other hand, is a good basis for choosing a node. That's because installation, configuration, ongoing maintenance, and troubleshooting will all involve interacting with the various tools used by the build system. This includes: * make, autotools, and GNU utilities for c-lightning * go utilities for LND * Java/Maven for Eclair -The programming language doesn't just influence the choice of build system but also many other aspects of the program. Each programming language comes with a whole design philosophy and affects many other things, such as: +The programming language doesn't just influence the choice of build system but also many other aspects of the program. Each programming language comes with a whole design philosophy and affects many other aspects, such as: * Format and syntax of configuration files * File locations (in the filesystem) @@ -206,7 +206,7 @@ The programming language doesn't just influence the choice of build system but a * Prerequisite libraries * Remote Procedure Call interfaces -When you choose your Lightning node, you are also choosing all of the above characteristics, so your familiarity with these tools and design philosophies will make it easier to run a node. Or harder, if you land in an unfamiliar domain. +When you choose your Lightning node, you are also choosing all of the above characteristics. So your familiarity with these tools and design philosophies will make it easier to run a node. Or harder, if you land in an unfamiliar domain. On the other hand, if this is your first foray into the command-line and server/service environment, you will find yourself unfamiliar with any implementation and have the opportunity to learn something completely new. In that case you might want to decide based on a number of other factors, such as: @@ -214,7 +214,7 @@ On the other hand, if this is your first foray into the command-line and server/ * Quality of documentation * Degree of integration with other tools you want to run -As a final consideration, you may want to examine the performance and reliability of different node implementations. This is especially important if you will be using this node in a production environment (for example to run a shop), and expect heavy traffic and high reliability requirements. +As a final consideration, you may want to examine the performance and reliability of different node implementations. This is especially important if you will be using this node in a production environment and expect heavy traffic and high reliability requirements. This might be the case if you plan to run the payment system of a shop on it. === Installing a Bitcoin or Lightning node From 6bd86426e76d90ee61826c709710367463e882e1 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 00:29:19 +0200 Subject: [PATCH 11/31] Glossary - Lightning Node definition --- glossary.asciidoc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..d9bd956 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -249,8 +249,11 @@ Lightning Network, Lightning Network Protocol, Lightning Protocol:: Other components of the Lightning Network are the gossip protocol, the transport layer, and payment requests. The source code is available at https://github.com/lightningnetwork. -Lightning Network Node, Lightning Node, node:: - TBD. +Lightning Network Node, Lightning Node:: + A participant on the Lightning Network. + A Lightning user will run Lightning node software in order to interact with other Lightning nodes. + Lightning nodes have the ability to open channels with other nodes, send and receive payments, and route payments from other users. + Typically a Lightning node user will also run a Bitcoin node. lnd:: Implementation of the Lightning Network Protocol by the San Francisco based company https://lightning.engineering[Lightning Labs]. From b9d547a2aeb1e8a16eccd31489858e2a55972aa3 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 00:39:16 +0200 Subject: [PATCH 12/31] Glossary - Fees --- glossary.asciidoc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..a88aa47 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -182,10 +182,9 @@ ephemeral key:: Even if an ephemeral key leaks, only information about a single payment becomes public. fees:: - The sender of a transaction often includes a fee to the network for processing the requested transaction. - Not to be confused with a routing fee for payments on the Lightning Network. - Nodes on the Lightning Network are allowed to take a routing fee for forwarding payments. - The routing fee is the sum of a fixed _base_fee_ and a _fee_rate_ which depends on the payment amount. + In the context of Bitcoin, the sender of a transaction includes a fee paid to miners for including the transaction in a block. + In the context of the Lightning Network, nodes will charge routing fees for forwarding other users' payments. + Individual nodes can set their own fee policies which will be calculated as the sum of a fixed _base_fee_ and a _fee_rate_ which depends on the payment amount. funding transaction:: The funding transaction is used to open a payment channel. From 7dd5f534c5f09ab30ec53dd98ebe87e8f1e9c41b Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 00:52:39 +0200 Subject: [PATCH 13/31] Glossary- JIT Routing --- glossary.asciidoc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..ee25433 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -240,6 +240,12 @@ invoice:: Invoices include the payment hash, the amount, a description and the expiry time. Invoices can also include a fallback Bitcoin address to which the payment can be made in case no route can be found, as well as hints for routing a payment through a private channel. +JIT Routing:: + "Just in Time" Routing. + An alternative to source-based routing first proposed by co-author René Pickhardt. + With JIT routing, intermediary nodes along a path can pause an in-flight payment to rebalance their channels. + This might allow them to successfully forward payments that might otherwise have failed due to lack of outgoing capacity. + Lightning message:: A Lightning message is an encrypted data string that can be sent between two peers on the Lightning Network. Similar to other communication protocols Lightning messages consist of a header and a body. The header and the body have their own HMAC. This ensures that the headers of fixed length will also be encrypted and adversaries won't be able to figure out what messages are being sent by inspecting the length. From e339b3a42e271a9f3115330c884b70ab331ae3c4 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 01:05:01 +0200 Subject: [PATCH 14/31] Glossary - Atomic Multipath Payments --- glossary.asciidoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..12b99d6 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -33,6 +33,14 @@ Some additional definitions, to be cleaned up and moved into alphabetic order ar address:: A Bitcoin address looks like +1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV+. It consists of a string of letters and numbers. It's really an encoded base58check version of a public key 160-bit hash. Just as you ask others to send an email to your email address, you would ask others to send you bitcoin to one of your Bitcoin addresses. +AMP:: + Atomic Multipath Payments. + A method for payments where the sender can use more than one of their channels to forward a payment. + By default, a sender uses one channel to forward payment. + This can cause issues, for example, where a sender has an two channels with an outgoing capacity of 0.5 BTC but wishes to forward a payment of 0.8 BTC. + By default, this payment would fail without rebalancing. + With AMP, the sender can split the payment between these channels and either have the entire payment succeed or fail, with no partial payment possible. + Asymmetric Cryptographic System:: Asymmetric cryptography, or public-key cryptography, is a cryptographic system that uses pairs of keys: public keys which may be disseminated widely, and private keys which are known only to the owner. The generation of such keys depends on cryptographic algorithms based on mathematical problems to produce one-way functions. From a33562709b1da1939937d8024d39bc5918083560 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 01:46:31 +0200 Subject: [PATCH 15/31] Glossary- Zombie Channel --- glossary.asciidoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..fe9d9f9 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -474,4 +474,9 @@ upstream payment:: wallet:: Software that holds all your Bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin. +zombie channel:: + An open channel where one of the channel partners has gone permanently offline. + Zombie channels cannot be used to route payments and have only downsides to the online partner. + Zombie channels are better off closed but they are tricky to classify as the online partner can't always be sure if the offline party will stay offline. + Some contributed definitions have been sourced under a CC-BY license from the https://en.bitcoin.it/wiki/Main_Page[Bitcoin Wiki], https://en.wikipedia.org[Wikipedia], https://github.com/bitcoinbook/bitconbook[Mastering Bitcoin] or from other open source documentation sources. From 1c56039af5be519f42e46c3b9f31592b0b84e1c0 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 15:06:30 +0200 Subject: [PATCH 16/31] Presentation Layer - What information does an invoice contain? Wrote the section on what information an invoice contains, using an invoice I generated from satoshis.place I used the ION Lightning Wiki, an article by suredbits, and BOLT 11 as sources so please credit accordingly: https://wiki.ion.radar.tech/tech/lightning/invoice https://medium.com/suredbits/lightning-101-what-is-a-lightning-invoice-d527db1a77e6 https://github.com/lightningnetwork/lightning-rfc/blob/master/11-payment-encoding.md https://lndecode.com/ --- e2e-presentation-layer.asciidoc | 63 +++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/e2e-presentation-layer.asciidoc b/e2e-presentation-layer.asciidoc index c88d33f..fac381a 100644 --- a/e2e-presentation-layer.asciidoc +++ b/e2e-presentation-layer.asciidoc @@ -11,6 +11,69 @@ Relevant questions to answer: * keysend * custom data + +=== What information does an invoice contain? + +A Lightning Network invoice is a request for payment issued by the receiver and contains all the information the sender needs to successfully execute the payment. +Usually it will be in the form of a QR code or an alphanumeric string that looks something like this: + +_lnbc9150n1p05hx8upp5ug254f9nhymhu2kctm5j9qq28pvvfsqrdaj6fnxzhln023vyka6sdzz2pshjmt9de6zqen0wgsrjvf4ypcxj7r9d3ejqct5ypekzar0wd5xjuewwpkxzcm99cxqzjccqp2sp5k8nxp5jy26c00ny8asampc03z2edl3z784d80hz873g4jkkuqtvqrzjqgmkp5859l5tn0h6rlal5d44vlkl9r6hf03v6e3pnumr96rak85jqztsugqqkvcqqqqqqquyqqqqqqgq9q9qy9qsqwar8ak9hh4cu3evy6z0nzwpq7ax6mdums6utatejnzak78a9vfyq4ya9gnwsquaq5e257qc3fw2tdxqyk2k9fzgmldfd3urskyuzxmqpyy8tke_ + +Invoice encoding and decoding is defined by BOLT #11 +footnote:[BOLT11 Github: https://github.com/lightningnetwork/lightning-rfc/blob/master/11-payment-encoding.md]. +The above string is composed of two sections, split by a seperator. + +The first part, _lnbc9150n_, is the human-readable part of the invoice. +The _lnbc_ tells us that the invoice is for Lightning Network Bitcoin +(it could be for Lightning Testnet or a different cryptocurrency). +The _9150n_ tells us the invoice is for 915 satoshis (expressed here as 91500 millisatoshis). +The last _1_ character in the string indicates the end of the human-readable section. + +Everything after the _1_ is the data part and contains the following information: + +* *Destination*: the ID of the node receiving the payment +* *Timestamp*: the date and time the invoice was created, measured in seconds past since 1970 +* *Payment Hash*: the hash of the payment pre-image. Pre-images were discussed in the earlier chapter on Routing +* *Expiry Time*: the amount of time, in seconds, after which the invoice expires and can no longer be paid +* *CLTV Delta*: the delta to be used in the final HTLC in the path. Discussed in the earlier chapter on Routing. +* *Signature*: a digital signature by the invoice issuer. If anything in the invoice is changed, the signature check will fail and the invoice will no longer be valid. This prevents attackers tampering with invoices. +* (Optional) *Description*: a human-readable explanation of what the payment is for. +* (Optional) *Backup Bitcoin Address*: an on-chain payment address in case payment of the invoice fails. +* (Optional) *Routing Hints*: to assist the payer in finding a path for the payment. Discussed in the earlier chapter on Path Finding. + +An invoice also contains other useful information. +In the next section, we'll break down the above invoice and identify each individual part. + + +==== Anatomy of a Lightning Invoice + +If we enter the above invoice into a invoice decoding tool, such as https://lndecode.com/, we get the following output: + +* *Network*: bitcoin mainnet +* *Amount*: 0.00000915 BTC +* *Date*: Sun, 30 Aug 2020 12:18:04 GMT +* *Payment Hash*: e2154aa4b3b9377e2ad85ee922800a3858c4c0036f65a4ccc2bfe6f54584b775 +* *Description*: Payment for 915 pixels at satoshis.place. +* *Expiration Time*: 600 seconds +* *Min Final CLTV Expiry*: 10 +* *Payment Secret*: b1e660d24456b0f7cc87ec3bb0e1f112b2dfc45e3d5a77dc47f451595adc02d8 +* *Routing Info*: +** _Public Key_: 023760d0f42fe8b9befa1ffbfa36b567edf28f574be2cd66219f3632e87db1e920 +** _Short Channel Id_: 0970e2000b330000 +** _Fee Base Msat_: 900 +** _Fee Proportional Millimonths_: 1 +** _CLTV Expiry Delta_: 40 +* *Feature Bits*: 00101000001000000000 +* *Signature*: +** _R value_: 77467ed8b7bd71c8e584d09f313820f74dadb79b86b8beaf3298bb6f1fa56248 +** _S value_: 0a93a544dd0073a0a6554f03114b94b69804b2ac54891bfb52d8f070b138236c +** _Recovery Flag_: 1 +* *Signing Data*: 6c6e6263393135306e0be9731f810d388552a92cee4ddf8ab617ba48a0028e16313000dbd9693330aff9bd51612ddd41a212830bcb6b2b73a103337b9101c989a903834bc32b6399030ba1039b0ba37b9b434b997383630b1b2970600a58c002a806963ccc1a488ad61ef990fd87761c3e22565bf88bc7ab4efb88fe8a2b2b5b805b00314808dd8343d0bfa2e6fbe87fefe8dad59fb7ca3d5d2f8b3598867cd8cba1f6c7a48025c388002ccc000000000e100000000400a02808504000 +* *Checksum*: yy8tke + + + + === What are some unique things that can be done with LN? **Micropayments**: The current financial system in most countries is divisible to a certain extent and not lower (E.g. $1 = 100c). From 55e700ae3041e362fc5059d2f4250817e9374e1b Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 15:11:05 +0200 Subject: [PATCH 17/31] Update e2e-presentation-layer.asciidoc --- e2e-presentation-layer.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e-presentation-layer.asciidoc b/e2e-presentation-layer.asciidoc index fac381a..acbe1d8 100644 --- a/e2e-presentation-layer.asciidoc +++ b/e2e-presentation-layer.asciidoc @@ -31,10 +31,10 @@ The last _1_ character in the string indicates the end of the human-readable sec Everything after the _1_ is the data part and contains the following information: -* *Destination*: the ID of the node receiving the payment -* *Timestamp*: the date and time the invoice was created, measured in seconds past since 1970 -* *Payment Hash*: the hash of the payment pre-image. Pre-images were discussed in the earlier chapter on Routing -* *Expiry Time*: the amount of time, in seconds, after which the invoice expires and can no longer be paid +* *Destination*: the ID of the node receiving the payment. +* *Timestamp*: the date and time the invoice was created, measured in seconds past since 1970. +* *Payment Hash*: the hash of the payment pre-image. Pre-images were discussed in the earlier chapter on Routing. +* *Expiry Time*: the amount of time, in seconds, after which the invoice expires and can no longer be paid. * *CLTV Delta*: the delta to be used in the final HTLC in the path. Discussed in the earlier chapter on Routing. * *Signature*: a digital signature by the invoice issuer. If anything in the invoice is changed, the signature check will fail and the invoice will no longer be valid. This prevents attackers tampering with invoices. * (Optional) *Description*: a human-readable explanation of what the payment is for. From d1683f3620896638d220c1f20d5517e511d3b221 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Sun, 30 Aug 2020 15:12:01 +0200 Subject: [PATCH 18/31] Update e2e-presentation-layer.asciidoc --- e2e-presentation-layer.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e-presentation-layer.asciidoc b/e2e-presentation-layer.asciidoc index acbe1d8..fd047fa 100644 --- a/e2e-presentation-layer.asciidoc +++ b/e2e-presentation-layer.asciidoc @@ -37,9 +37,9 @@ Everything after the _1_ is the data part and contains the following information * *Expiry Time*: the amount of time, in seconds, after which the invoice expires and can no longer be paid. * *CLTV Delta*: the delta to be used in the final HTLC in the path. Discussed in the earlier chapter on Routing. * *Signature*: a digital signature by the invoice issuer. If anything in the invoice is changed, the signature check will fail and the invoice will no longer be valid. This prevents attackers tampering with invoices. -* (Optional) *Description*: a human-readable explanation of what the payment is for. -* (Optional) *Backup Bitcoin Address*: an on-chain payment address in case payment of the invoice fails. -* (Optional) *Routing Hints*: to assist the payer in finding a path for the payment. Discussed in the earlier chapter on Path Finding. +* _(Optional)_ *Description*: a human-readable explanation of what the payment is for. +* _(Optional)_ *Backup Bitcoin Address*: an on-chain payment address in case payment of the invoice fails. +* _(Optional)_ *Routing Hints*: to assist the payer in finding a path for the payment. Discussed in the earlier chapter on Path Finding. An invoice also contains other useful information. In the next section, we'll break down the above invoice and identify each individual part. From d8d6e96a2de1648d636c12af2ed9eb9fc80b3e11 Mon Sep 17 00:00:00 2001 From: 8go Date: Sun, 30 Aug 2020 16:27:19 +0000 Subject: [PATCH 19/31] node_operations: English touch-ups - mostly commas - a couple of types - etc. --- node_operations.asciidoc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 2975ec3..f13bc33 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -231,13 +231,13 @@ In the next few sections we will briefly describe how to install and configure a For those accustomed to running applications on their desktop or smartphone, an application always has a graphical user interface even if it may sometimes run in the background. The Bitcoin and Lightning node applications, however, are very different. These applications do not have a graphical user interface built in. Instead, they run as _headless_ background services, meaning they are always operating in the background and do not interact with the user directly. -This can create some confusion for users who are not used to running background services. How do you know if such a service is currently running? How do you start and stop it? How do you interact with it? The answers to these questions depend on the operating system you are using, but for now we will assume you are using some Linux variant and answer them in that context. +This can create some confusion for users who are not used to running background services. How do you know if such a service is currently running? How do you start and stop it? How do you interact with it? The answers to these questions depend on the operating system you are using. For now we will assume you are using some Linux variant and answer them in that context. ==== Process isolation Background services usually run under a specific user account in order to isolate them from the operating system and each other. For example, Bitcoin Core is configured to run as user +bitcoin+. You will need to use the command-line to create a user for each of the services you run. -In addition, if you have connected an external drive, you will need to tell the operating system to relocate the user's home directory to that drive. That's because a service like Bitcoin Core will create files under the user's home directory. If you are setting it up to download the full Bitcoin blockchain, these files will take up several hundred GB. Here, we assume you have connected the external drive and it is located on the +/external_drive/+ path of the operating system. +In addition, if you have connected an external drive, you will need to tell the operating system to relocate the user's home directory to that drive. That's because a service like Bitcoin Core will create files under the user's home directory. If you are setting it up to download the full Bitcoin blockchain, these files will take up several hundred Gigabytes. Here, we assume you have connected the external drive and it is located on the +/external_drive/+ path of the operating system. On most Linux systems you can create a new user with the +useradd+ command, like this: @@ -249,9 +249,9 @@ The +d+ flag assigns the user's home directory. In this case, we put it on the e ==== Node startup -For both Bitcoin and Lightning node services, "installation" also involves creating a so called _startup script_ to make sure that the node starts when the computer boots. Startup and shutdown of background services is handled by an operating system process, which in Linux is called _init_ or _systemd_. You can usually find a system startup script in the +contrib+ sub-directory of each project. For example, if you are on a modern Linux OS that uses +systemd+, you would find a script called +bitcoind.service+, that can start the Bitcoin Core node service. +For both Bitcoin and Lightning node services, "installation" also involves creating a so called _startup script_ to make sure that the node starts when the computer boots. Startup and shutdown of background services is handled by an operating system process, which in Linux is called _init_ or _systemd_. You can usually find a system startup script in the +contrib+ sub-directory of each project. For example, if you are on a modern Linux OS that uses +systemd+, you would find a script called +bitcoind.service+, that can start and stop the Bitcoin Core node service. -Here's an example (from the Bitcoin Core code repository) of what a Bitcoin node's startup script looks like: +Here's an example of what a Bitcoin node's startup script looks like, taken from the Bitcoin Core code repository: .From bitcoin/contrib/init/bitcoind.service ---- @@ -314,7 +314,7 @@ Next, enable the service: $ sudo systemctl enable bitcoind ---- -You can now start and stop the service (don't do this yet, as we haven't configured the Bitcoin node): +You can now start and stop the service. Don't start it yet, as we haven't configured the Bitcoin node. ---- $ sudo systemctl start bitcoind @@ -330,16 +330,16 @@ To configure your node, you need to create and reference a configuration file. B These configuration files are text files with each line expressing one configuration option and its value. Default values are assumed for anything not defined in the configuration file. You can see what options can be set in the configuration in two ways. First, running the node application with a +help+ argument will show the options that can be defined on the command-line. These same options can be defined in the configuration file. Second, you can usually find an example configuration file, with all the default options, in the code repository of the software. -You can see one example of a configuration file in each of the docker images we saw in <>. For example, the file +code/docker/bitcoind/bitcoind/bitcoin.conf+: +You can find one example of a configuration file in each of the docker images we used in <>. For example, the file +code/docker/bitcoind/bitcoind/bitcoin.conf+: .Configuration file for docker bitcoind (code/docker/bitcoind/bitcoind/bitcoin.conf) ---- include::code/docker/bitcoind/bitcoind/bitcoin.conf[] ---- -That particular configuration file configures Bitcoin Core for operation as a +regtest+ node and provides a weak username and password for remote access, so you shouldn't use it for your node configuration. However, it serves to illustrate the syntax of a configuration file and you can make adjustments to it in the docker container to experiment with different options. See if you can use the +bitcoind -help+ command to understand what each of the options does in the context of the docker network we build in <> +That particular configuration file configures Bitcoin Core for operation as a +regtest+ node and provides a weak username and password for remote access, so you shouldn't use it for your node configuration. However, it serves to illustrate the syntax of a configuration file and you can make adjustments to it in the docker container to experiment with different options. See if you can use the +bitcoind -help+ command to understand what each of the options does in the context of the docker network we build in <>. -Often, the defaults suffice and with a few modifications, your node software can be configured quickly. To get a Bitcoin Core node running for example, you only need four lines of configuration: +Often, the defaults suffice, and with a few modifications your node software can be configured quickly. To get a Bitcoin Core node running with minimal customization, you only need four lines of configuration: ---- server=1 @@ -359,21 +359,21 @@ bitcoin-rpcuser=USERNAME bitcoin-rpcpassword=PASSWORD ---- -In general, it is a good idea to minimize the amount of customization of these systems. The default configuration is carefully designed to support the most common deployments. If you modify a default value, it may cause problems later on, or reduce the performance of your node. So, modify only when necessary! +In general, it is a good idea to minimize the amount of customization of these systems. The default configuration is carefully designed to support the most common deployments. If you modify a default value, it may cause problems later on or reduce the performance of your node. In short, modify only when necessary! ==== Network configuration Network configuration is normally not an issue when configuring a new application. However, peer-to-peer networks like Bitcoin and the Lightning network present some unique challenges for network configuration. -In a centralized service, your computer connects to the "big servers" of some corporation, and not vice-versa. Your home Internet connection is actually configured on the assumption that you are simply a consumer of services provided by others. But in a peer-to-peer system, every peer both consumes from and provides services to other nodes. If you're running a Bitcoin or Lightning node at your home, you are providing a service to other computers on the internet. Your internet service is not configured to allow you to run servers and may need some additional configuration to work. +In a centralized service, your computer connects to the "big servers" of some corporation, and not vice-versa. Your home Internet connection is actually configured on the assumption that you are simply a consumer of services provided by others. But in a peer-to-peer system, every peer both consumes from and provides services to other nodes. If you're running a Bitcoin or Lightning node at your home, you are providing a service to other computers on the internet. Your internet service by default is not configured to allow you to run servers and may need some additional configuration to enable others to reach your node. -If you want to run a Bitcoin or Lightning node, you need to make it possible for other nodes on the internet to connect to you. That means enabling incoming TCP connections to the Bitcoin port (port 8333 by default), or Lightning port (port 9735 by default). While you can run a Bitcoin node without incoming connectivity, you can't do that with a Lightning node - it needs to be accessible from outside your network. +If you want to run a Bitcoin or Lightning node, you need to make it possible for other nodes on the internet to connect to you. That means enabling incoming TCP connections to the Bitcoin port (port 8333 by default) or Lightning port (port 9735 by default). While you can run a Bitcoin node without incoming connectivity, you can't do that with a Lightning node. A Lightning node must be accessible to others from outside your network. -By default, your home internet router does not expect incoming connections from the outside, and in fact incoming connections are blocked. Your internet router IP address is the only externally accessible IP address, and all the computers you run inside your home network use that single IP address. This is achieved by a mechanism called _Network Address Translation (NAT)_ which allows your internet router to act as an intermediary for all outbound connections. If you want to allow an inbound connection you have to set up _Port Forwarding_, which tells your internet router that incoming connections on specific ports should be forwarded to specific computers inside the network. You can do this manually by changing your internet router configuration, or through an automatic port forwarding mechanism called called Universal Plug and Play (UPNP) if your router supports it. +By default, your home internet router does not expect incoming connections from the outside, and in fact incoming connections are blocked. Your internet router IP address is the only externally accessible IP address, and all the computers you run inside your home network share that single IP address. This is achieved by a mechanism called _Network Address Translation (NAT)_ which allows your internet router to act as an intermediary for all outbound connections. If you want to allow an inbound connection you have to set up _Port Forwarding_, which tells your internet router that incoming connections on specific ports should be forwarded to specific computers inside the network. You can do this manually by changing your internet router configuration or, if your router supports it, through an automatic port forwarding mechanism called _Universal Plug and Play (UPNP)_. -An alternative mechanism to port forwarding s is to enable The Onion Router (TOR), which provides a kind of virtual private network overlay that allows incoming connections to an _onion address_. If you run TOR, you don't need to do port forwarding. +An alternative mechanism to port forwarding is to enable The Onion Router (TOR), which provides a kind of virtual private network overlay that allows incoming connections to an _onion address_. If you run TOR, you don't need to do port forwarding nor enable incoming connections to Bitcoin or Lightning ports. If you run your nodes using TOR, all traffic goes through TOR and no other ports are used. -Let's look at different ways you can make it possible for others to connect to your node. We'll look at these mechanisms in order from easiest to most difficult. +Let's look at different ways you can make it possible for others to connect to your node. We'll look at these alternatives in order, from easiest to most difficult. ===== It just works! From eef82bb6e3d4ee04728ee09e1514fe9887758a38 Mon Sep 17 00:00:00 2001 From: 8go Date: Sun, 30 Aug 2020 17:05:01 +0000 Subject: [PATCH 20/31] node_operations: English, touchups, UPNP, TOR - UPNP: the description in my opinion was incorrect, at least misleading. I rephrased to eliminate the part of the sentence that was doubtful in my opinion - it's --> its (possessive) - addition of checking TOR installation --- node_operations.asciidoc | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 2975ec3..8e5ea20 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -377,13 +377,13 @@ Let's look at different ways you can make it possible for others to connect to y ===== It just works! -There's a possibility that your internet service provider is configured to support UPNP by default and everything just works automatically. Let's try this approach first, just in case we are lucky. +There is a possibility that your internet service provider or router is configured to support UPNP by default and everything just works automatically. Let's try this approach first, just in case we are lucky. Assuming you already have a Bitcoin or Lightning node running, we will try and see if they are accessible from the outside. [NOTE] ==== -For this test to work, you have to have either a Bitcoin or Lightning node (or both) up and running on your home network. If your router supports UPNP, the node services will automatically use it to forward incoming connections to the corresponding ports on the computer running the node. +For this test to work, you have to have either a Bitcoin or Lightning node (or both) up and running on your home network. If your router supports UPNP, the incoming traffic will automatically be forwarded to the corresponding ports on the computer running the node. ==== You can use some very popular and useful websites to find out what is your external IP address and whether it allows and forwards incoming connections to a known port. Here are two that are reliable: @@ -392,7 +392,7 @@ https://canyouseeme.org/ https://www.whatismyip.com/port-scanner/ -By default, these services only allow you to check incoming connections to the IP address from which you are connecting - this prevents you from using the service to scan other people's networks and computers. You will see your router's external IP address and a field for entering a port number. If you haven't changed the default ports on your node configuration, try port 8333 (Bitcoin) and/or 9735 (Lightning). +By default, these services only allow you to check incoming connections to the IP address from which you are connecting. This is done to prevent you from using the service to scan other people's networks and computers. You will see your router's external IP address and a field for entering a port number. If you haven't changed the default ports in your node configuration, try port 8333 (Bitcoin) and/or 9735 (Lightning). [[ln_port_check]] . Checking for incoming port 9735 @@ -404,9 +404,9 @@ In <> you can see the result of checking port 9735 on a server ru Sometimes, even if your internet router supports UPNP, it may be turned off by default. In that case you need to change your internet router configuration from its web administration interface: -. Connect to your internet router's configuration website. Usually this can be done by connecting to the _gateway address_ of your home network using a web browser. You can find the gateway address by looking at the IP configuration of any computer on your home network. It is often the first address in one of the non-routable networks, like 192.168.0.1, or 10.0.0.1. +. Connect to your internet router's configuration website. Usually this can be done by connecting to the _gateway address_ of your home network using a web browser. You can find the gateway address by looking at the IP configuration of any computer on your home network. It is often the first address in one of the non-routable networks, like 192.168.0.1 or 10.0.0.1. Check all stickers on your router as well for the _gateway address_. Once found, open a browser and enter the IP address into the browser URL/Search box, e.g. "192.168.0.1" or "http://192.168.0.1". -. Find the administrator username and password for the web configuration panel of the router. This is often written on a sticker on the router itself and may be as simple as "admin" and "password". A quick web search for your ISP and router model can also help you find this information +. Find the administrator username and password for the web configuration panel of the router. This is often written on a sticker on the router itself and may be as simple as "admin" and "password". A quick web search for your ISP and router model can also help you find this information. . Find a setting for UPNP and turn it on. @@ -414,7 +414,7 @@ Restart your Bitcoin and/or Lighting node and repeat the open port test with one ===== Using TOR for incoming connections -The Onion Router (TOR) is a virtual private network with the special property that it encrypts communications between hops, such that any intermediary node cannot determine the origin or destination of a packet. Both Bitcoin and Lightning nodes support operation over TOR, which enables you to operate a node without revealing your IP address or location. An added benefit of running TOR is that because it operates as a VPN, it resolves the problem of port forwarding from your internet router. Incoming connections are received over the TOR tunnel, and your node can be found through an _onion address_ instead of an IP address. +_The Onion Router (TOR)_ is a virtual private network with the special property that it encrypts communications between hops, such that any intermediary node cannot determine the origin or destination of a packet. Both Bitcoin and Lightning nodes support operation over TOR, which enables you to operate a node without revealing your IP address or location. Hence, it provides a high level of privacy to your network traffic. An added benefit of running TOR is that because it operates as a VPN, it resolves the problem of port forwarding from your internet router. Incoming connections are received over the TOR tunnel, and your node can be found through an ad-hoc generated _onion address_ instead of an IP address. Enabling TOR requires two steps: First you must install the TOR router and proxy on your computer. Second, you must enable the use of the TOR proxy in your Bitcoin or Lightning configuration. @@ -424,7 +424,7 @@ To install TOR on a Ubuntu Linux system that uses the +apt+ package manager, run sudo apt install tor ---- -Next, we configure our Lightning node to use TOR for it's external address. Here's an example configuration if we're running LND: +Next, we configure our Lightning node to use TOR for its external connectivity. Here is an example configuration for LND: ---- [Tor] @@ -434,9 +434,17 @@ tor.streamisolation=true listen=localhost ---- -This will enable TOR (+tor.active+), establish a v3 onion service (+tor.v3=true+), use a different onion stream for each connection (+tor.streamisolation+) and restrict listening for connections to the local host only, to avoid leaking your IP address (+listen=localhost+). +This will enable TOR (+tor.active+), establish a v3 onion service (+tor.v3=true+), use a different onion stream for each connection (+tor.streamisolation+), and restrict listening for connections to the local host only, to avoid leaking your IP address (+listen=localhost+). -Due to the nature of TOR, you can't use an external service to check if your node is reachable via an onion address. You should see your TOR onion address in the logs of your Lightning node, as a long string of letters and numbers followed by the suffix +.onion+. Your node should now be reachable from the internet, with the added bonus of privacy! +You can check if TOR is correctly installed and working by running a simple one-line command. This command should work on most flavors of Linux: + +---- +curl --socks5 localhost:9050 --socks5-hostname localhost:9050 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs +---- + +If everything is working properly, the response of this command should be +"Congratulations. This browser is configured to use Tor."+. + +Due to the nature of TOR, you can't easily use an external service to check if your node is reachable via an onion address. Nonetheless, you should see your TOR onion address in the logs of your Lightning node. It is a long string of letters and numbers followed by the suffix +.onion+. Your node should now be reachable from the internet, with the added bonus of privacy! ===== Manual port forwarding From 7524d864b5c0fd480b12f96168b1977f12404564 Mon Sep 17 00:00:00 2001 From: 8go Date: Sun, 30 Aug 2020 17:22:47 +0000 Subject: [PATCH 21/31] node_operations: touch-ups Manual Port Forwarding - minor adjustments and additions --- node_operations.asciidoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 2975ec3..f214400 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -440,19 +440,19 @@ Due to the nature of TOR, you can't use an external service to check if your nod ===== Manual port forwarding -This is the most complex process and requires quite a bit of technical skill. The details depend on the type of internet router you have, your service provider settings and policies and a lot of other context. Try UPNP or TOR first, before you try this much more difficult mechanism. +This is the most complex process and requires quite a bit of technical skill. The details depend on the type of internet router you have, your service provider settings and policies, and a lot of other context. Try UPNP or TOR first, before you try this much more difficult mechanism. -But the basic steps are as follows: +The basic steps are as follows: . Find the IP address of the computer your node is on. This is usually dynamically allocated by the Dynamic Host Configuration Protocol (DHCP) and is often somewhere in the 192.168.0.X or 10.0.0.X range. . Find the Media Access Control (MAC) address of your node's network interface. This can be found in the internet settings of that computer. -. Assign a static IP address for your node so that it is always the same one. You can use the IP address it currently has. On your internet router, look for "Static Leases" under the DHCP configuraiton. Map the MAC address to the specific IP address you want. Now your node will always have that IP address allocated to it. +. Assign a static IP address for your node so that it is always the same one. You can use the IP address it currently has. On your internet router, look for "Static Leases" under the DHCP configuraiton. Map the MAC address to the IP address you selected. Now your node will always have that IP address allocated to it. Alternatively, you can look at your router's DHCP configuration and find out what its DHCP address range is. Select an unused address _outside_ of the DHCP address range. Then, on the server, configure the network to stop using DHCP and hard-code the selected non-DHCP IP address into the operating system network configuration. -. Finally, set up "Port Forwarding" on your internet router. +. Finally, set up "Port Forwarding" on your internet router to route incoming traffic on specific ports to the selected IP address of your server. -Now, repeat the port check using one of the websites from the previous sections. +Once done reconfiguring, repeat the port check using one of the websites from the previous sections. === Security of your node From c50b4ef2de92a269acabf55d844c8c92e4c6b448 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Tue, 1 Sep 2020 20:42:08 +0200 Subject: [PATCH 22/31] Update glossary.asciidoc Current definition is confusing and has references to Revocable Sequence Maturity Contracts and 483s HTCLs. Rewrote a simpler definition incorporating ideas from Chapter 3 - How LN works --- glossary.asciidoc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..79b65d0 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -118,14 +118,11 @@ cold storage:: Refers to keeping a reserve of bitcoin offline. Cold storage is achieved when Bitcoin private keys are created and stored in a secure offline environment. Cold storage is important for anyone with bitcoin holdings. Online computers are vulnerable to hackers and should not be used to store a significant amount of bitcoin. Commitment Transaction:: - Commitment Transactions encode the balance of the payment channel with the help of one output for each channel partner by spending the funding transaction. - When payments are being made or forwarded through the channel, a double-spend of the commitment transactions is made by creating a new pair of commitment transactions. - One output also holds a Revocable Sequence Maturity Contract which is made to disincentivize a channel partner to broadcast an old commitment transaction to the Bitcoin network. - This effectively invalidates old commitment transactions. - Broadcasting a commitment transaction forces an unilateral channel close. - Up to 483 Hashed Time Lock Contracts can be stored as additional outputs in the commitment transaction to allow the routing of payments. - In order to be able to ascribe blame in the case of unilateral channel closes, each channel partner has a slightly different commitment transaction. - // TODO probably don't explain the difference with the RSMC here + A commitment transaction is a Bitcoin transaction, signed by both channel partners, that encodes the latest balance of a channel. + Every time a new transaction is made or forwarded using the channel, the channel balance will update, and a new commmitment transaction will be signed by both parties. + Importantly, for a channel between Alice and Bob, both Alice and Bob keep their own version of the commitment transaction, that is also signed by the other party. + At any point, the channel can be closed by either Alice or Bob if they submit their commitment transaction to the Bitcoin blockchain. + Submitting an older (outdated) commitment transaction is considered "cheating" (i.e. protocol breach) in the Lightning network and can be penalized by the other party claiming all the funds in the channel for themselves. computationally easy:: A problem is considered to be computationally easy if there exists an algorithm that is able to compute the solution to the problem rather quickly. From a85f9c7f1bea7ea39c66d876da2dbe0d666b8811 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Tue, 1 Sep 2020 21:06:31 +0200 Subject: [PATCH 23/31] Glossary - Watchtowers Added an entry on LN watchtowers. Used the ION Wiki to check some of this info. Please credit accordingly. https://wiki.ion.radar.tech/tech/research/watchtowers --- glossary.asciidoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/glossary.asciidoc b/glossary.asciidoc index a595d5e..98ed512 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -473,5 +473,13 @@ upstream payment:: wallet:: Software that holds all your Bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin. + +watchtower:: + Watchtowers are a security service on the Lightning network that monitor channels. + In the case that one of the channel partners goes offline or loses their backup, a watchtower keep their own backups and can restore their channel information. + They also monitor the Bitcoin blockchain and can submit a penalty transaction in the case that one of the partners tries to "cheat" by broadcasting an outdated state. + Watchtowers can be run by the channel partners themselves, or as a paid service offered by a third party. + Wathctowers have no control over the funds in the channels themselves. + Some contributed definitions have been sourced under a CC-BY license from the https://en.bitcoin.it/wiki/Main_Page[Bitcoin Wiki], https://en.wikipedia.org[Wikipedia], https://github.com/bitcoinbook/bitconbook[Mastering Bitcoin] or from other open source documentation sources. From db2d24fd708a39e29d43da961f070ebeda3170f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20K?= <36115705+rene78@users.noreply.github.com> Date: Tue, 1 Sep 2020 22:38:15 +0200 Subject: [PATCH 24/31] Update 02_getting_started.asciidoc --- 02_getting_started.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index 7cdca2c..d9d32e3 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -11,7 +11,7 @@ Users have the highest degree of control by running their own Bitcoin node and L === Lightning Explorer -A Lightning network explorer is an useful tool to show the statistics of nodes, channels and network capacity. +A Lightning network explorer is a useful tool to show the statistics of nodes, channels and network capacity. The below is an inexhaustive list (in alphanumerical order): From 03b522c7f6e2e6249f7c22abda8198d178eda8e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20K?= <36115705+rene78@users.noreply.github.com> Date: Wed, 2 Sep 2020 00:13:45 +0200 Subject: [PATCH 25/31] Update 02_getting_started.asciidoc Link to eclair-channels picture fixed --- 02_getting_started.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index d9d32e3..c0f5324 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -272,7 +272,7 @@ Furthermore, Alice's channel peer can _forward_ payments via other channels furt In other words: Alice needs one or more channels that connects her to one or more other nodes on the Lightning Network. She doesn't need a channel to connect her wallet directly to Bob's Cafe in order to send Bob a payment, though she can choose to open a direct channel too. Any node in the Lightning Network can be used for Alice's first channel. The more well-connected a node is the more people Alice can reach. In this example, since we want to also demonstrate payment routing, we won't have Alice open a channel directly to Bob's wallet. Instead, we will have Alice open a channel to a well-connected node and then later use that node to forward her payment, routing it through any other nodes as necessary to reach Bob. -At first, there are no open channels, so as we see in <>, the "LIGHTNING CHANNELS" tab displays an empty list. If you notice, on the bottom right corner, there is a plus symbol (+), which is a button to open a new channel. +At first, there are no open channels, so as we see in <>, the "LIGHTNING CHANNELS" tab displays an empty list. If you notice, on the bottom right corner, there is a plus symbol (+), which is a button to open a new channel. [[eclair-channels]] .Lightning Channels Tab From 1da91f45cca20ae0fbc91dfcceda7c501099266f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Wed, 2 Sep 2020 09:31:05 -0400 Subject: [PATCH 26/31] node_operations: autopilot --- node_operations.asciidoc | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 3d7bb21..a1a2c85 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -60,7 +60,7 @@ in the cloud. Nonetheless, if running your own server is not an option, by all m If you have a reasonable capacity internet link at home or in your office, you can certainly run a Lightning node there. Any "broadband" connection is sufficient for the purpose of running a lightweight node, and a fast connection will allow you to run a Bitcoin full node too. -While you can run a Lightning node (and even a Bitcoin node) on your laptop, it will become annoying quite fast. These programs consume your computer's resources and need to run 24/7. Your user applications like your browser or your spreadsheet will find themselves competing against the Lightning background services for your computer's resources. In other words, your browser and other desktop workloads will be slowed down. +While you can run a Lightning node (and even a Bitcoin node) on your laptop, it will become annoying quite fast. These programs consume your computer's resources and need to run 24/7. Your user applications like your browser or your spreadsheet will find themselves competing against the Lightning background services for your computer's resources. In other words, your browser and other desktop workloads will be slowed down. And when your word processing app freezes up your laptop, your Lightning node will go down as well. Furthermore, you should never turn off your laptop. All this combined together results in a set-up that is not ideal. The same will apply to your daily-use personal desktop PC. @@ -78,10 +78,10 @@ At a minimum, the following will be required to run a Lightning Node: * **Internet Connection**: a reliable internet connection will be required to download new Bitcoin blocks, as well as to communicate with other Lightning peers. During operation the estimated data use ranges from 10GB to 100GB per month, depending on configuration. At startup a Bitcoin full node downloads the full blockchain, 340GB as of September 2020. -* **Power Supply**: a reliable power supply is required as Lightning nodes need to be online at all times. A power failure will cause in-progress payments to fail. For heavy duty routing nodes, a backup or uninterruptible power supply (UPS) is useful in the case of power outages. +* **Power Supply**: a reliable power supply is required as Lightning nodes need to be online at all times. A power failure will cause in-progress payments to fail. For heavy duty routing nodes, a backup or uninterruptible power supply (UPS) is useful in the case of power outages. Ideally, you should connect your Internet router to this UPS as well. -* **Backup**: Backup is crucial as a failure can result in loss of data and hence in loss of funds. +* **Backup**: Backup is crucial as a failure can result in loss of data and hence in loss of funds. The user will want to consider some kind of data backup solution. This could be a cloud-based automated backup to a server or web service the user controls. Alternatively, it could be an automated local hardware backup, such as a second hard drive. For best results, both local and remote backup can be combined. ==== Switching server configuration in the cloud @@ -96,7 +96,7 @@ If you use a mini-PC or rent a server, the storage can be the costliest part, co Let's have a look at the different options available. First there are two main types of drives, Hard Disk Drives (HDDs) and Solid State Drives (SSDs). HDDs are cheaper and SSDs are faster, but both do the job. -The fastest SSDs available today use the NVMe interface. The NVMe SSDs are faster in high end machines, but also more costly. +The fastest SSDs available today use the NVMe interface. The NVMe SSDs are faster in high end machines, but also more costly. Traditional SATA-based SSDs are cheaper, but not as fast. SATA SSDs perform sufficiently well for your node setup. Smaller computers might not be able to take advantage of NVMe SSDs. For example, the Raspberry Pi 4 cannot benefit from them because of the limited bandwidth of its USB port. @@ -173,7 +173,7 @@ One critical choice for your setup will be the choice of the Bitcoin node and it A second consideration is whether you will run an _archival_ Bitcoin node with a full copy of the blockchain (some 350GB in mid-2020) or a _pruned_ blockchain that only keeps the most recent blocks. A pruned blockchain can save you some disk space but will still need to download the full blockchain at least once (during the Initial Block Download). Hence it won't save you any network traffic. Using a pruned node to run a Lightning node is still an experimental capability and might not support all the functionality. However, many people are running a node like that successfully. -Finally, you also have the option of not running a Bitcoin node at all. Instead you can operate the LND Lightning node in "lightweight" mode, using the _neutrino_ protocol to retrieve blockchain information from public Bitcoin nodes operated by others. Running like this means that you are taking resources from the Bitcoin network without offering any in return. Instead, you are offering your resources and contributing to the Lightning Network community. For smaller Lightning nodes this will generally reduce network traffic in comparison to running a full Bitcoin node. +Finally, you also have the option of not running a Bitcoin node at all. Instead you can operate the LND Lightning node in "lightweight" mode, using the _neutrino_ protocol to retrieve blockchain information from public Bitcoin nodes operated by others. Running like this means that you are taking resources from the Bitcoin network without offering any in return. Instead, you are offering your resources and contributing to the Lightning Network community. For smaller Lightning nodes this will generally reduce network traffic in comparison to running a full Bitcoin node. Keep in mind that operating a Bitcoin node allows you to support other services, besides and on top of a Lightning node. These other services may require an archival (not pruned) Bitcoin node and often can't run without a Bitcoin node. Consider upfront what other services you may want to run now or in the future, to make an informed decision on the type of Bitcoin node you select. @@ -406,7 +406,7 @@ Sometimes, even if your internet router supports UPNP, it may be turned off by d . Connect to your internet router's configuration website. Usually this can be done by connecting to the _gateway address_ of your home network using a web browser. You can find the gateway address by looking at the IP configuration of any computer on your home network. It is often the first address in one of the non-routable networks, like 192.168.0.1 or 10.0.0.1. Check all stickers on your router as well for the _gateway address_. Once found, open a browser and enter the IP address into the browser URL/Search box, e.g. "192.168.0.1" or "http://192.168.0.1". -. Find the administrator username and password for the web configuration panel of the router. This is often written on a sticker on the router itself and may be as simple as "admin" and "password". A quick web search for your ISP and router model can also help you find this information. +. Find the administrator username and password for the web configuration panel of the router. This is often written on a sticker on the router itself and may be as simple as "admin" and "password". A quick web search for your ISP and router model can also help you find this information. . Find a setting for UPNP and turn it on. @@ -456,7 +456,7 @@ The basic steps are as follows: . Find the Media Access Control (MAC) address of your node's network interface. This can be found in the internet settings of that computer. -. Assign a static IP address for your node so that it is always the same one. You can use the IP address it currently has. On your internet router, look for "Static Leases" under the DHCP configuraiton. Map the MAC address to the IP address you selected. Now your node will always have that IP address allocated to it. Alternatively, you can look at your router's DHCP configuration and find out what its DHCP address range is. Select an unused address _outside_ of the DHCP address range. Then, on the server, configure the network to stop using DHCP and hard-code the selected non-DHCP IP address into the operating system network configuration. +. Assign a static IP address for your node so that it is always the same one. You can use the IP address it currently has. On your internet router, look for "Static Leases" under the DHCP configuraiton. Map the MAC address to the IP address you selected. Now your node will always have that IP address allocated to it. Alternatively, you can look at your router's DHCP configuration and find out what its DHCP address range is. Select an unused address _outside_ of the DHCP address range. Then, on the server, configure the network to stop using DHCP and hard-code the selected non-DHCP IP address into the operating system network configuration. . Finally, set up "Port Forwarding" on your internet router to route incoming traffic on specific ports to the selected IP address of your server. @@ -677,12 +677,32 @@ Finally, a popular standalone watchtower server is The Eye of Satoshi (TEOS), wh https://github.com/talaia-labs/python-teos - === Channel management -==== Manually choosing nodes for outbound channels +As a Lightning node operator, one of the recurring tasks you will need to perform is management of your channels. This means opening outbound channels from your node to other nodes, as well as getting other nodes to open inbound channels to your node. In the future, cooperative channel construction may be possible, so you can open symmetric channels that have funds committed on both ends. For now however, new channels only have funds on one end - on the originator's side. So to make your node _balanced_ with both inbound and outbound capacity, you need to open channels to others and entice others to open channels towards your node. + +==== Opening outbound channels + +As soon as you get your Lightning node up and running, you can fund its Bitcoin wallet and then start opening channels with those funds. + +This task can be automated, somewhat, with the use of an _autopilot_, which is software that opens channels automatically based on some heuristic rules. Autopilot software is still relatively new and it doesn't always select the best channel partners for you. It might be better, especially in the beginning, to open channels manually. + +You must choose channel partners carefully, as your node's ability to send payments depends on who your channel partners are and how well connected they are to the rest of the Lightning Network. You also want to have more than one channel - so your node isn't susceptible to single point of failure. Since Lightning now supports multi-path payments, you can split your initial funds into several channels and route bigger payments by combining their capacity. Don't make your channels too small, however. Since you need to pay Bitcoin transaction fees to open and close a channel, the channel balance should not be so small that the on-chain fees consume a big portion. It's all about balance! + +To summarize: + +* Find a few well connected nodes +* Open more than one channel +* Don't open too many channels +* Don't make the channels too small + +One way to find well connected nodes is to open a channels to merchants selling something on the Lightning Network. These nodes tend to be well funded and well connected. So when you are ready to make your first payment, you can open a channel directly to the merchant's node. The merchant's node ID will be in the invoice you will receive when you try to buy something, so that makes it easy. + +Another way to find well connected nodes is to use a Lightning Explorer, such as +1ml.com+ and browse the list of nodes sorted by channel capacity and number of channels. Don't go for the biggest nodes, as that encourages centralization. Go for a node in the middle of the list, so that you can help them grow. + +===== Autopilot -==== Autopilot +The task of opening channels can be automated, somewhat, with the use of an _autopilot_, which is software that opens channels automatically based on some heuristic rules. Autopilot software is still relatively new and it doesn't always select the best channel partners for you. It might be better, especially in the beginning, to open channels manually. ==== Getting inbound liquidity From 63b6ea7a2f2ab9333ff68ed1acbfe1d10be68514 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Wed, 2 Sep 2020 09:37:39 -0400 Subject: [PATCH 27/31] node_operations: LND autopilot config --- node_operations.asciidoc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index a1a2c85..6c90449 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -704,6 +704,18 @@ Another way to find well connected nodes is to use a Lightning Explorer, such as The task of opening channels can be automated, somewhat, with the use of an _autopilot_, which is software that opens channels automatically based on some heuristic rules. Autopilot software is still relatively new and it doesn't always select the best channel partners for you. It might be better, especially in the beginning, to open channels manually. +LND: + +---- +[autopilot] +autopilot.active=0 +autopilot.maxchannels=400 +autopilot.allocation=0.98 +autopilot.maxchansize=5550000 +autopilot.minchansize=1000000 +autopilot.heuristic=top_centrality:1.0 +---- + ==== Getting inbound liquidity In the current design of the Lightning Network, it is more typical for users to obtain outbound liquidity _before_ obtaining inbound liquidity. From 82eeba5ac0e0f34fb2cf107f61dcfe7305fbe146 Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Wed, 2 Sep 2020 16:48:18 +0200 Subject: [PATCH 28/31] drafts on the autopilot --- node_operations.asciidoc | 72 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 6c90449..1ce23b6 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -703,19 +703,77 @@ Another way to find well connected nodes is to use a Lightning Explorer, such as ===== Autopilot The task of opening channels can be automated, somewhat, with the use of an _autopilot_, which is software that opens channels automatically based on some heuristic rules. Autopilot software is still relatively new and it doesn't always select the best channel partners for you. It might be better, especially in the beginning, to open channels manually. +Autopilots currently exist in 3 forms. -LND: +- Originally lnd published an autopilot that is fully integrated with lnd and runs constantly in the background while turned on +- lib_autopilot.py which can technically operate autopilot operations on the gossip and channel data from any implementation. +- A clighting plugin based on lib_autopilot.py exists that provides an easy to use interface for c-lightning users. + +The main thing to watch out when running the lnd autopilot is that as soon as it is turned on the config file it will run automatically in the background and it will start to open channels if you have onchain outputs in your lnd wallet. +If you want to have full controll over the bitcoin transactions that you make and the channels that you open make sure to turn off the autopilot before you load your lnd wallet with bitcoin funds. +If the autopilot was previously turned on you might have to restart your lnd before you top up your wallet with an onchain transaction. +Another thing to keep in mind is to set the most important config values if you want to run the autopilot. +here you can find an example configuration: ---- -[autopilot] -autopilot.active=0 -autopilot.maxchannels=400 -autopilot.allocation=0.98 -autopilot.maxchansize=5550000 -autopilot.minchansize=1000000 +[lnd-autopilot] +autopilot.active=1 +autopilot.maxchannels=40 +autopilot.allocation=0.70 +autopilot.maxchansize=500000 +autopilot.minchansize=5000000 autopilot.heuristic=top_centrality:1.0 ---- +This config file would activate the autopilot. +It would open channels as long as the following two conditions are met: + +1. The amount of channels that you have does not exceed 40 +2. Not more than 70% of your total funds are offchain in payment channels. + +The numbers 40 and 0.7 are chosen completely arbitrary here as we cannot really make a recommendation that goes for everyone about how many channels one should have and how manu percent of their funds should be off chain. +The autopilot in lnd will not take into account to run when on chain fees are alow. It will make channel recommendations when ever the conditions are met and will directly try to open a channel by using the appropriate fees. +According to this configuration file channels will be between 5 and 50 mBTC. +The size is actually as most of the time on the lightning network depicted in satoshi but we converted the amount for you. +It has become clear that too small channels below 1 mBTC are not very usefull and we do not recommend to open too small channels. +With the wider adoption of multipath payments smaller channels are less of a burden but we still stick to our recommendation. + +The c-lightning plugin works very different to the lnd autopilot. +Not only from the used algorithms to make the recommendations - which we do not discuss here - but also from the user interface. +First you will need to download the autopilot plugin from the c-lightning plugin repository at https://github.com/lightningd/plugins/tree/master/autopilot and activate it. +We have already explained how to activate plugins in c-lightning. +The autopilot in c-lightning now gets 3 configuration values which can be set in the config file or as command line arguments when you start lightningd + +---- +[c-lightning-autopilot] +autopilot-percent=75 +autopilot-num-channels=10 +autopilot-min-channel-size-msat=100000000msat +---- + +These values are the actual default config and you do not need to set them at all. +The autopilot will not autoamatically run in the background like lnd. +Instead you have to start a run specifically with `lightning-cli autopilot-run-once`. +If you do not want the autopilot to open the recommended channels but want it to just make recommendations to you from which you can handpick the nodes you can add the optional `dryrun` argument. + +A key difference between the lnd and the c-lightning autopilot is that the c-lightning autopilot will also make a recommendation for the channel size. +For example if the autopilot recommends to open a channel with a small node that only has small channels it will not recommend to open a large channel. +However if it opens a channel with a well connected node that also has many large channels it will probably recommend a larger channel size. + +As you can see the c-lightning autopilot is not as automatic as lnd but gives you a little bit more control. + + +Luckily the c-lightning autopilot has a dryrun option that will just list some potential channel partners for you and you can then by hand decide if you want to open channels with these nodes. + + + + +Current autopilots will mainly use public information from the gossip protocol about the current topology of the lightning network. +It is very obvious that your personal requirements for channels can and will only be reflected to a certain degree. +More advanced autopilots would use information that your node already has gatherd by running in the past about routing successes and who you have paid in the past. +Such autopilots might in the future also use the knowledge and statistics that they have collected to make recommendations to close channels and allocate the funds in another way. +We mention these things to you as a word of warning to not really to heavily on the autopilot feature at the time of writing this book. + ==== Getting inbound liquidity In the current design of the Lightning Network, it is more typical for users to obtain outbound liquidity _before_ obtaining inbound liquidity. From 11b30087814d41139e122e013d4a5e690dc943cf Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Wed, 2 Sep 2020 10:48:21 -0400 Subject: [PATCH 29/31] node_operations: re-balancing --- images/circular-rebalancing.png | Bin 0 -> 45664 bytes node_operations.asciidoc | 62 +++++++++++++++++++------------- 2 files changed, 38 insertions(+), 24 deletions(-) create mode 100644 images/circular-rebalancing.png diff --git a/images/circular-rebalancing.png b/images/circular-rebalancing.png new file mode 100644 index 0000000000000000000000000000000000000000..81454bd420fd76d95ba6d40eea01b4b42c1af9bd GIT binary patch literal 45664 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. + +[[circular-rebalancing]] +.Circular route re-balancing +image::images/circular-rebalancing.png[] -One of the methods rebalancing a channel is to "loop out". -A user can pay an invoice to itself of 0.05 BTC. -This payment will exit one of the channels, resulting in an inbound capacity of 0.1 BTC and an outbound capacity of 0, and enter the other channel, resulting in an inbound capacity of 0 and an outbound capacity of 0.1 BTC -(minus, of course, the routing fees that will need to be paid). -This can be repeated with an arbitrary number of channels until the required channel balances are obtained. -It could even be automated through autopilot. +Circular re-balancing is supported by most Lightning node implementations and can be done on the command-line or via one of the web management interfaces such as _Ride the Lightning (RTL)_ (see <>). +Channel rebalancing is a complex issue that is the subject of active research and covered in more detail in <>. === Routing fees From a859b24baaf33d04120f55d69821fb697f87346a Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Wed, 2 Sep 2020 17:39:20 +0200 Subject: [PATCH 30/31] fixed some flaws with the autopilot section --- node_operations.asciidoc | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index f96fb2e..5bf6553 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -705,13 +705,13 @@ Another way to find well connected nodes is to use a Lightning Explorer, such as The task of opening channels can be automated, somewhat, with the use of an _autopilot_, which is software that opens channels automatically based on some heuristic rules. Autopilot software is still relatively new and it doesn't always select the best channel partners for you. It might be better, especially in the beginning, to open channels manually. Autopilots currently exist in 3 forms. -- Originally lnd published an autopilot that is fully integrated with lnd and runs constantly in the background while turned on -- lib_autopilot.py which can technically operate autopilot operations on the gossip and channel data from any implementation. +- Originally lnd published an autopilot that is fully integrated with lnd and runs constantly in the background while it is turned on. +- lib_autopilot.py can technically offer autopilot computations on the gossip and channel data from any implementation. - A clighting plugin based on lib_autopilot.py exists that provides an easy to use interface for c-lightning users. -The main thing to watch out when running the lnd autopilot is that as soon as it is turned on the config file it will run automatically in the background and it will start to open channels if you have onchain outputs in your lnd wallet. +The main thing to watch out when running the lnd autopilot is that as soon as it is turned on via the config file it will automatically run in the background and it will start to open channels if you have onchain outputs in your lnd wallet. If you want to have full controll over the bitcoin transactions that you make and the channels that you open make sure to turn off the autopilot before you load your lnd wallet with bitcoin funds. -If the autopilot was previously turned on you might have to restart your lnd before you top up your wallet with an onchain transaction. +If the autopilot was previously turned on you might have to restart your lnd before you top up your wallet with an onchain transaction or before you lose channels which effectively gives you on chain funds again.. Another thing to keep in mind is to set the most important config values if you want to run the autopilot. here you can find an example configuration: @@ -728,17 +728,19 @@ autopilot.heuristic=top_centrality:1.0 This config file would activate the autopilot. It would open channels as long as the following two conditions are met: -1. The amount of channels that you have does not exceed 40 +1. The amount of channels that your node currently has open does not exceed 40. 2. Not more than 70% of your total funds are offchain in payment channels. -The numbers 40 and 0.7 are chosen completely arbitrary here as we cannot really make a recommendation that goes for everyone about how many channels one should have and how manu percent of their funds should be off chain. -The autopilot in lnd will not take into account to run when on chain fees are alow. It will make channel recommendations when ever the conditions are met and will directly try to open a channel by using the appropriate fees. +The numbers 40 and 0.7 are chosen completely arbitrary here as we cannot really make a recommendation that goes for everyone about how many channels one should have and how many percent of their funds should be off chain. +The autopilot in lnd will not take into account to run when onchain fees are low. +Thus you might spend quite some funds on transactions fees. +It will make channel recommendations when ever the conditions are met and will directly try to open a channel by using the appropriate fees. According to this configuration file channels will be between 5 and 50 mBTC. The size is actually as most of the time on the lightning network depicted in satoshi but we converted the amount for you. It has become clear that too small channels below 1 mBTC are not very usefull and we do not recommend to open too small channels. With the wider adoption of multipath payments smaller channels are less of a burden but we still stick to our recommendation. -The c-lightning plugin works very different to the lnd autopilot. +The c-lightning plugin works very differently in comparison to the lnd autopilot. Not only from the used algorithms to make the recommendations - which we do not discuss here - but also from the user interface. First you will need to download the autopilot plugin from the c-lightning plugin repository at https://github.com/lightningd/plugins/tree/master/autopilot and activate it. We have already explained how to activate plugins in c-lightning. @@ -753,22 +755,17 @@ autopilot-min-channel-size-msat=100000000msat These values are the actual default config and you do not need to set them at all. The autopilot will not autoamatically run in the background like lnd. -Instead you have to start a run specifically with `lightning-cli autopilot-run-once`. -If you do not want the autopilot to open the recommended channels but want it to just make recommendations to you from which you can handpick the nodes you can add the optional `dryrun` argument. +Instead you have to start a run specifically with `lightning-cli autopilot-run-once` if you do not want the autopilot to open the recommended channels. +But if you want it to just make recommendations to you from which you can handpick the nodes you can add the optional `dryrun` argument. A key difference between the lnd and the c-lightning autopilot is that the c-lightning autopilot will also make a recommendation for the channel size. For example if the autopilot recommends to open a channel with a small node that only has small channels it will not recommend to open a large channel. However if it opens a channel with a well connected node that also has many large channels it will probably recommend a larger channel size. As you can see the c-lightning autopilot is not as automatic as lnd but gives you a little bit more control. +These differences are of personal preference and could actually be the deciding factor for you why you chose one implementation over the other. - -Luckily the c-lightning autopilot has a dryrun option that will just list some potential channel partners for you and you can then by hand decide if you want to open channels with these nodes. - - - - -Current autopilots will mainly use public information from the gossip protocol about the current topology of the lightning network. +Keep in mind that current autopilots will mainly use public information from the gossip protocol about the current topology of the lightning network. It is very obvious that your personal requirements for channels can and will only be reflected to a certain degree. More advanced autopilots would use information that your node already has gatherd by running in the past about routing successes and who you have paid in the past. Such autopilots might in the future also use the knowledge and statistics that they have collected to make recommendations to close channels and allocate the funds in another way. From 0fc8cc668e2d5d01c427e7a55636b94dd094d839 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Wed, 2 Sep 2020 12:43:05 -0400 Subject: [PATCH 31/31] node_operations: routing, management, conclusion --- images/RTL-LND-Dashboard.png | Bin 0 -> 145199 bytes node_operations.asciidoc | 63 +++++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 images/RTL-LND-Dashboard.png diff --git a/images/RTL-LND-Dashboard.png b/images/RTL-LND-Dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..92c2db05b4c7563ba58cfeef88a17ba3116b140d GIT binary patch literal 145199 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