From d866e125b5c43e51ba5c51b4675b7cbe9438afbd Mon Sep 17 00:00:00 2001 From: Johns Beharry Date: Sun, 6 Dec 2020 02:58:12 +0100 Subject: [PATCH 01/38] fix(glossary): make correction to BOLT acronym --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index 1f3be62..504d445 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -88,7 +88,7 @@ blockchain:: New blocks have a statistical probability of being produced every ten minutes. BOLT:: - BOLT, or Basics Of Lightning Technology, is the formal specification of the Lightning Network Protocol. It serves only as such without delving into implementation, unlike Bitcoin, in which both are one and the same. It is available in https://github.com/lightningnetwork/lightning-rfc. + BOLT, or Basis Of Lightning Technology, is the formal specification of the Lightning Network Protocol. It serves only as such without delving into implementation, unlike Bitcoin Improvement Proposals (BIPs), in which both are one and the same. It is available in https://github.com/lightningnetwork/lightning-rfc. Breach Remedy Transaction:: A transaction claiming the outputs of a Revocable Sequence Maturity Contract with the help of the revocation key. From e6e30e27fc2627bd08d21ee08239bb451182b604 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Wed, 9 Dec 2020 09:54:52 +0200 Subject: [PATCH 02/38] Glossary - Feature Bits --- glossary.asciidoc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/glossary.asciidoc b/glossary.asciidoc index d9018dd..e99f8f7 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -182,6 +182,12 @@ ephemeral key:: This increases the security of transported messages or payments. Even if an ephemeral key leaks, only information about a single payment becomes public. +feature bits:: + A binary string that Lightning nodes use to communicate to each other which features they support. + Feature bits are included in many types of communication, such as invoices or channel announcements. + They can be decoded using BOLT #11, and will tell nodes which features the node has enabled, and whether these are backwards-compatible. + Also known as feature flags. + fees:: 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. From a1d30a7503ffbabda52e4ceb59f3ea98101d66a2 Mon Sep 17 00:00:00 2001 From: Imran <60175113+ImranLorgat@users.noreply.github.com> Date: Thu, 10 Dec 2020 17:14:23 +0200 Subject: [PATCH 03/38] Update glossary.asciidoc --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index e99f8f7..031ea0a 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -185,7 +185,7 @@ ephemeral key:: feature bits:: A binary string that Lightning nodes use to communicate to each other which features they support. Feature bits are included in many types of communication, such as invoices or channel announcements. - They can be decoded using BOLT #11, and will tell nodes which features the node has enabled, and whether these are backwards-compatible. + They can be decoded using BOLT #9, and will tell nodes which features the node has enabled, and whether these are backwards-compatible. Also known as feature flags. fees:: From 7231f5f1020c6ace428accdb56545e120db801ce Mon Sep 17 00:00:00 2001 From: Janus Troelsen Date: Sat, 12 Dec 2020 14:30:53 -0600 Subject: [PATCH 04/38] Update Eclair manual building instructions - Explain something that looks like a version number ("2.13"). - Explain how to skip tests, which are fragile on master and not run for the other clients. --- node_client.asciidoc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/node_client.asciidoc b/node_client.asciidoc index 7475fc3..68bd390 100644 --- a/node_client.asciidoc +++ b/node_client.asciidoc @@ -886,7 +886,7 @@ $ mvn package [INFO] eclair-node-gui [jar] [INFO] [INFO] --------------------< fr.acinq.eclair:eclair_2.13 >--------------------- -[INFO] Building eclair_2.13 0.4.1-SNAPSHOT [1/4] +[INFO] Building eclair_2.13 0.4.3-SNAPSHOT [1/4] [INFO] --------------------------------[ pom ]--------------------------------- [...] @@ -899,12 +899,16 @@ $ mvn package [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:06 min -[INFO] Finished at: 2020-06-26T09:43:21-04:00 +[INFO] Finished at: 2020-12-12T09:43:21-04:00 [INFO] ------------------------------------------------------------------------ ---- -After several minutes the build of the Eclair package will complete. You will find the Eclair server node under +eclair-node/target+, packaged as a zip file. Unzip and run it, by following the instructions found here: +The build logs above contain "2.13", for building a commit around version 0.4.3, this is expected. + +After several minutes the build of the Eclair package should complete. But the "package" action will also run tests, and some of them connect to the internet, which could fail. If you want to skip tests, add +-DskipTests+ to the command. + +Now, unzip and run the built package, by following the instructions found here: https://github.com/ACINQ/eclair#installing-eclair From ca79710601763d2249bae4b2569604ccb108c971 Mon Sep 17 00:00:00 2001 From: Johns Beharry Date: Sun, 13 Dec 2020 09:34:38 +0100 Subject: [PATCH 05/38] refactor(glossary): simplify BOLT definition --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index 504d445..5a4192b 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -88,7 +88,7 @@ blockchain:: New blocks have a statistical probability of being produced every ten minutes. BOLT:: - BOLT, or Basis Of Lightning Technology, is the formal specification of the Lightning Network Protocol. It serves only as such without delving into implementation, unlike Bitcoin Improvement Proposals (BIPs), in which both are one and the same. It is available in https://github.com/lightningnetwork/lightning-rfc. + BOLT, or Basis Of Lightning Technology, is the formal specification of the Lightning Network Protocol. By following these standards, the various implementations are able to to work in conjucntion with one another to form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. Breach Remedy Transaction:: A transaction claiming the outputs of a Revocable Sequence Maturity Contract with the help of the revocation key. From 4f2917d7d3c4356001d9c227bd5b7725305ef49e Mon Sep 17 00:00:00 2001 From: Johns Beharry Date: Sun, 13 Dec 2020 09:49:53 +0100 Subject: [PATCH 06/38] fix(glossary): lowercase protocol and of --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index 5a4192b..a4daaec 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -88,7 +88,7 @@ blockchain:: New blocks have a statistical probability of being produced every ten minutes. BOLT:: - BOLT, or Basis Of Lightning Technology, is the formal specification of the Lightning Network Protocol. By following these standards, the various implementations are able to to work in conjucntion with one another to form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. + BOLT, or Basis of Lightning Technology, is the formal specification of the Lightning Network protocol. By following these standards, the various implementations are able to to work in conjucntion with one another to form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. Breach Remedy Transaction:: A transaction claiming the outputs of a Revocable Sequence Maturity Contract with the help of the revocation key. From eec41ae02c100c3142dc9f92bbc625a5d2912326 Mon Sep 17 00:00:00 2001 From: Johns Beharry Date: Sun, 13 Dec 2020 09:51:20 +0100 Subject: [PATCH 07/38] fix(glossary): resolve typo --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index a4daaec..a237823 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -88,7 +88,7 @@ blockchain:: New blocks have a statistical probability of being produced every ten minutes. BOLT:: - BOLT, or Basis of Lightning Technology, is the formal specification of the Lightning Network protocol. By following these standards, the various implementations are able to to work in conjucntion with one another to form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. + BOLT, or Basis of Lightning Technology, is the formal specification of the Lightning Network protocol. By following these standards, the various implementations are able to work in conjucntion with one another and form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. Breach Remedy Transaction:: A transaction claiming the outputs of a Revocable Sequence Maturity Contract with the help of the revocation key. From 05b29ed36bba232d55f0f427e11068910964328b Mon Sep 17 00:00:00 2001 From: batmanscode <29989939+batmanscode@users.noreply.github.com> Date: Mon, 14 Dec 2020 03:27:38 +0530 Subject: [PATCH 08/38] Minor wording and punctuation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Changes:** * Added some missing full stops. * 'meaning a pre-defined process based on cryptography, used by the channel partners to re-distribute' to 'meaning a pre-defined process based on cryptography is used by the channel partners to re-distribute' * 'Payment channels basics' to 'Payment channel basics' * 'Channels partners can agree to announce' to 'Channel partners can agree to announce' * 'don’t need to trust your channel to retrieve the balance of your channel' to 'don’t need to trust your channel partner to retrieve the balance of your channel' * 'present a Lightning invoice to Alice as a QR code, or send it via email, or any other message channel' or 'present a Lightning invoice to Alice as a QR code, send it via email, or any other message channel' * 'who just sent her an uninvitedly email' to 'who just uninvitedly sent her an email' * 'addresses as part of payment channel on the Lightning Network' to 'addresses as part of payment channels on the Lightning Network' * 'We looked at how payments are routed. Finally, we compared Lightning and Bitcoin and analyzed their differences and commonalities' to 'We looked at how payments are routed and finally, we compared Lightning with Bitcoin and analyzed their differences and commonalities' --- 03_how_ln_works.asciidoc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index 7b33952..c9958d1 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -20,7 +20,7 @@ There are several ways to describe a payment channel, depending on the context. A payment channel is a _financial relationship_ between two nodes on the Lightning Network, called the "channel partners". The financial relationship allocates a _balance of funds_ (denominated in milli-satoshis), between the two channel partners. -The payment channel is managed by a _cryptographic protocol_, meaning a pre-defined process based on cryptography, used by the channel partners to re-distribute the balance of the channel in favor of one or the other channel partner. The cryptographic protocol ensures that one channel partner cannot cheat the other, so that the partners do not need to trust each other. +The payment channel is managed by a _cryptographic protocol_, meaning a pre-defined process based on cryptography is used by the channel partners to re-distribute the balance of the channel in favor of one or the other channel partner. The cryptographic protocol ensures that one channel partner cannot cheat the other, so that the partners do not need to trust each other. The cryptographic protocol is established by the funding of a 2-of-2 _multi-signature address_ that requires the two channel partners to cooperate and prevents either channel partner from spending the funds unilaterally. @@ -28,7 +28,7 @@ To summarize: A payment channel is a financial relationship between nodes, allocating funds from a multi-signature address, through a strictly defined cryptographic protocol. -=== Payment channels basics +=== Payment channel basics Underlying the payment channel is simply a 2-of-2 multisignature address on the Bitcoin blockchain, for which you hold one key and your channel partner holds the other key. @@ -270,7 +270,7 @@ After publishing the *last* commitment transaction on-chain Alice has to wait fo ==== Announcing the channel -Channels partners can agree to announce their channel to the whole Lightning Network, making it a _public channel_. To announce the channel, they use the Lightning Network's gossip protocol to tell other nodes about the existence, capacity and fees of the channel. +Channel partners can agree to announce their channel to the whole Lightning Network, making it a _public channel_. To announce the channel, they use the Lightning Network's gossip protocol to tell other nodes about the existence, capacity and fees of the channel. Announcing channels publicly allows other nodes to use them for payment routing, thereby also generating routing fees for the channel partners. @@ -279,7 +279,7 @@ By contrast, the channel partners may decide not to announce the channel, making [NOTE] ==== -You may hear the term "private channel", used to describe an unannounced channel. We avoid using that term because it is misleading and creates a false sense of privacy. While an unannounced channel will not be known to others while it is in use, its existence and capacity will be revealed when the channel closes, because those details will be visible on-chain in the final settlement transaction. Its existence can also leak in a variety of other ways, so we avoid calling it "private" +You may hear the term "private channel", used to describe an unannounced channel. We avoid using that term because it is misleading and creates a false sense of privacy. While an unannounced channel will not be known to others while it is in use, its existence and capacity will be revealed when the channel closes, because those details will be visible on-chain in the final settlement transaction. Its existence can also leak in a variety of other ways, so we avoid calling it "private". ==== Unannounced channels are still used to route payments but only by the nodes which are aware of their existence, or given "routing hints" about a path that includes an unannounced channel. @@ -301,7 +301,7 @@ By re-balancing a channel, it can be kept open almost indefinitely and used for However, sometimes closing a channel is desirable or necessary. For example: -* You want to reduce the balance held on your Lightning channels for security reasons and want to send funds to "cold storage" +* You want to reduce the balance held on your Lightning channels for security reasons and want to send funds to "cold storage". * Your channel partner becomes unresponsive for a long time and you cannot use the channel anymore. * The channel is not being used often because your channel partner is not a well-connected node, so you want to use the funds for another channel with a better-connected node. * Your channel partner has breached the protocol either due to a software bug or on purpose forcing you to close the channel to protect your funds. @@ -343,7 +343,7 @@ This is usually in the case that one of the channel partners is unreachable, and In this case, you would initiate a force close to unilaterally close the channel and "free" the funds. To initiate a force close, you can simply publish the last commitment transaction your node has. -After all, that's what commitment transactions are for - they offer a guarantee that you don't need to trust your channel to retrieve the balance of your channel. +After all, that's what commitment transactions are for - they offer a guarantee that you don't need to trust your channel partner to retrieve the balance of your channel. Once you broadcast the last commitment transaction to the Bitcoin network and it is confirmed, it will create two spendable outputs, one for you and one for your partner. As we discussed previously, the Bitcoin network has no way of knowing if this was the most recent commitment transaction or an old one which was published to steal from your partner. @@ -428,7 +428,7 @@ An invoice is a simple payment instruction containing information such as a uniq The most important part of the invoice is the payment hash, that allows the payment to travel across multiple channels in an _atomic_ way. Atomic, in computer science, means any action or state change that is either completed successfully or not at all - there is no possibility of an intermediate state or partial action. In the Lightning Network that means that the payment either travels the whole path or fails completely. It cannot be partially completed such that an intermediate node on the path can receive the payment and keep it. There is no such thing as a "partial payment" or "partly successful payment". -Invoices are not communicated over the Lightning Network. Instead, they are communicated "out of band", using any other communication mechanism. This is similar to how Bitcoin addresses are communicated to senders outside the Bitcoin network, as a QR code, over email, or a text message. For example, Bob can present a Lightning invoice to Alice as a QR code, or send it via email, or any other message channel. +Invoices are not communicated over the Lightning Network. Instead, they are communicated "out of band", using any other communication mechanism. This is similar to how Bitcoin addresses are communicated to senders outside the Bitcoin network, as a QR code, over email, or a text message. For example, Bob can present a Lightning invoice to Alice as a QR code, send it via email, or any other message channel. Invoices are usually encoded either as a long bech32-encoded string or as a QR code, to be scanned by a smartphone Lightning wallet. The invoice contains the amount of bitcoin that is requested and a signature of the recipient. The sender uses the signature to extract the public key (also known as the node ID) of the recipient so that the sender knows where to send the payment. @@ -584,7 +584,7 @@ The onion routing protocol used in Lightning has the following properties: . The onions are constructed such that they will always have the same length independent of the position of the processing node along the path. As each layer is "peeled" the onion is padded with encrypted "junk" data to keep the size of the onion the same. This prevents intermediary nodes from knowing their position in the path. -. Onions have an HMAC (Hashed Message Authentication code) at each layer so that manipulations of onions are prevented and practically impossible +. Onions have an HMAC (Hashed Message Authentication code) at each layer so that manipulations of onions are prevented and practically impossible. . Onions can have up to 20 hops or onion layers if you prefer. This allows for sufficiently long paths. @@ -644,7 +644,7 @@ Alice will need to have a small amount of trust in Bob. Alice has been to Bob's Cafe and clearly Bob is interested in selling her coffee, so Alice can trust Bob in this sense. There are mutual benefits to both Alice and Bob. Alice decides that the reward is enough for her to take on the cost of the on-chain fee for creating a channel to Bob. -In contrast, Alice will not open a channel to someone unknown who just sent her an uninvitedly email asking her to open a channel to him. +In contrast, Alice will not open a channel to someone unknown who just uninvitedly sent her an email asking her to open a channel to him. === Comparison with Bitcoin @@ -777,7 +777,7 @@ The milli-satoshi unit cannot, of course, be settled on the Bitcoin blockchain a ==== Monetary Unit -Both the Bitcoin network and the Lightning network use the same monetary units: bitcoin. Lightning payments use the very same bitcoin as Bitcoin transactions. As an implication, because the monetary unit is the same, the monetary limit is the same: less than 21 million bitcoin. Of Bitcoin's 21 million total bitcoin, some are already allocated to 2-of-2 multi-signature addresses as part of payment channel on the Lightning Network. +Both the Bitcoin network and the Lightning network use the same monetary units: bitcoin. Lightning payments use the very same bitcoin as Bitcoin transactions. As an implication, because the monetary unit is the same, the monetary limit is the same: less than 21 million bitcoin. Of Bitcoin's 21 million total bitcoin, some are already allocated to 2-of-2 multi-signature addresses as part of payment channels on the Lightning Network. ==== Irreversibility and finality of payments @@ -799,6 +799,6 @@ Both, Bitcoin and Lightning are open-source software systems built by a decentra === Conclusion -In this chapter we looked at how the Lightning network actually works and all of the constituent components. We examined each step in constructing, operating and closing a channel. We looked at how payments are routed. Finally, we compared Lightning and Bitcoin and analyzed their differences and commonalities. +In this chapter we looked at how the Lightning network actually works and all of the constituent components. We examined each step in constructing, operating and closing a channel. We looked at how payments are routed and finally, we compared Lightning with Bitcoin and analyzed their differences and commonalities. In the next several chapters we will revisit all these topics, but in much more detail. From d3eae93bbec4b45f0328362e955ec54ea2ed603b Mon Sep 17 00:00:00 2001 From: Johns Beharry Date: Wed, 16 Dec 2020 02:08:49 +0100 Subject: [PATCH 09/38] refactor(glossary): differentiate bitcoin and lightning specs --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index a237823..38877ea 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -88,7 +88,7 @@ blockchain:: New blocks have a statistical probability of being produced every ten minutes. BOLT:: - BOLT, or Basis of Lightning Technology, is the formal specification of the Lightning Network protocol. By following these standards, the various implementations are able to work in conjucntion with one another and form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. + BOLT, or Basis Of Lightning Technology, is the formal specification of the Lightning Network protocol. Unlike Bitcoin, which has a reference implementation that also serves as the protocol's specification the various Lightning Network implementations follow BOLT so they can work with one another to form the same network. It is available at https://github.com/lightningnetwork/lightning-rfc. Breach Remedy Transaction:: A transaction claiming the outputs of a Revocable Sequence Maturity Contract with the help of the revocation key. From f70c0145070f59af4b058db32f2ab6e812108360 Mon Sep 17 00:00:00 2001 From: Scott-Driscoll Date: Tue, 22 Dec 2020 19:36:30 -0500 Subject: [PATCH 10/38] We will not revise these concepts --> We will not review --- 03_how_ln_works.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index 7b33952..8018c7f 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -103,7 +103,7 @@ Eltoo channels have some interesting properties and simplify the implementation ==== Multisig addresses -Payment channels are built on top of 2-of-2 multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not revise these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. +Payment channels are built on top of 2-of-2 multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not review these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. If you have already studied Bitcoin and are familiar with multisignature addresses, feel free to skip this section. [TIP] From b0e3d9f5cd346251aa204f9e1d50f44ba5e7fc23 Mon Sep 17 00:00:00 2001 From: Scott-Driscoll Date: Sun, 27 Dec 2020 08:46:44 -0500 Subject: [PATCH 11/38] We will not review these advanced... in depth --- 03_how_ln_works.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index 8018c7f..4987646 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -103,7 +103,7 @@ Eltoo channels have some interesting properties and simplify the implementation ==== Multisig addresses -Payment channels are built on top of 2-of-2 multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not review these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. +Payment channels are built on top of 2-of-2 multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not review these relatively advanced concepts of the Bitcoin system in depth. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. If you have already studied Bitcoin and are familiar with multisignature addresses, feel free to skip this section. [TIP] From 6158b78123536594e1247503fa887cced6abc08b Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Sun, 27 Dec 2020 18:11:44 +0100 Subject: [PATCH 12/38] Update e2e-presentation-layer.asciidoc Added a period after the last sentence of a paragraph. After spotting it I could not help correcting it. --- e2e-presentation-layer.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-presentation-layer.asciidoc b/e2e-presentation-layer.asciidoc index cdf1348..9e0defc 100644 --- a/e2e-presentation-layer.asciidoc +++ b/e2e-presentation-layer.asciidoc @@ -96,7 +96,7 @@ This would be of particular benefit to online stores and exchanges that accept B footnote:[One variant of this is called a "dust attack", whereby an attacker can send a very small amount of Bitcoin (called a "dust output") to an address it knows is owned by a store or exchange. By monitoring where this small amount of bitcoin moves, it can determine which other addresses the exchange to store owns. This kind of attack is not possible on the Lightning Network]. -This is not possible on the Lightning Network +This is not possible on the Lightning Network. **Multiplayer Games**: Lightning Payments can be integrated into online and collaborative games. One example of this is _Satoshi's Place_, an online billboard where users can pay 1 satoshi to paint 1 pixel on a one-million-pixel canvas. @@ -125,4 +125,4 @@ The Lightning Network's principal object is to move payments across a network. Could it move data other than payments across its network too? It can. Some projects such as _Whatsat_, _Sphinx Chat_, and _Juggernaut_ are implementing instant messaging chat apps on top of the Ligtning Network. One can imaging other types of data such as electronic tickets, QR codes, or other forms of tokens flowing across the Lightning Network as well. -The use cases are limited only by our imagination and reach beyond finance. \ No newline at end of file +The use cases are limited only by our imagination and reach beyond finance. From 68ebd75d5b6b98cc30fc6848f22885686670d50a Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Mon, 28 Dec 2020 19:42:53 +0100 Subject: [PATCH 13/38] Consistency in spelling out the numbers that are < 10 It would be well to maintain consistency in spelling out the numbers (provided that they are not code/math/ BTC amounts) that are < 10. I left out "chapter 6" and the like unchanged. [A post about style][1] for the reference. >In scientific and technical writing, the prevailing style is to write out numbers under ten. While there are exceptions to these rules, your predominant concern should be expressing numbers consistently. [1]: https://www.grammarly.com/blog/when-to-spell-out-numbers/ --- 03_how_ln_works.asciidoc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index 7b33952..b6ae709 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -22,7 +22,7 @@ A payment channel is a _financial relationship_ between two nodes on the Lightni The payment channel is managed by a _cryptographic protocol_, meaning a pre-defined process based on cryptography, used by the channel partners to re-distribute the balance of the channel in favor of one or the other channel partner. The cryptographic protocol ensures that one channel partner cannot cheat the other, so that the partners do not need to trust each other. -The cryptographic protocol is established by the funding of a 2-of-2 _multi-signature address_ that requires the two channel partners to cooperate and prevents either channel partner from spending the funds unilaterally. +The cryptographic protocol is established by the funding of a two-of-two _multi-signature address_ that requires the two channel partners to cooperate and prevents either channel partner from spending the funds unilaterally. To summarize: @@ -30,7 +30,7 @@ A payment channel is a financial relationship between nodes, allocating funds fr === Payment channels basics -Underlying the payment channel is simply a 2-of-2 multisignature address on the Bitcoin blockchain, for which you hold one key and your channel partner holds the other key. +Underlying the payment channel is simply a two-of-two multisignature address on the Bitcoin blockchain, for which you hold one key and your channel partner holds the other key. You and your channel partner negotiate a sequence of transactions that spend from this multisignature address. Instead of transmitting and recording these transactions on the Bitcoin blockchain, you both hold on to them, unspent. @@ -43,7 +43,7 @@ The smart contract is set up to penalize a channel member if they try to submit [NOTE] ==== -If you have an unpublished transaction from a 2-of-2 multisignature address, that pays you part of the balance, then a signature from the other party ensures that you can independently publish this transaction anytime by adding your own signature. +If you have an unpublished transaction from a two-of-two multisignature address, that pays you part of the balance, then a signature from the other party ensures that you can independently publish this transaction anytime by adding your own signature. The ability to hold a partially-signed transaction, offline and unpublished, with the option to publish and own that balance at any time, is the basis of the Lightning Network. ==== @@ -95,7 +95,7 @@ Payment channels have a few very interesting and useful properties: * Payments made in a payment channel are only known to you and your partner. In that sense, you gain privacy compared to Bitcoin, where every transaction is public. Only the final balance, which is the aggregate of all payments in that channel, will become visible on the Bitcoin blockchain. -Bitcoin was about 5 years old when talented developers first figured out how payment channels could be constructed and by now there are at least 3 different methods known. +Bitcoin was about five years old when talented developers first figured out how payment channels could be constructed and by now there are at least three different methods known. This chapter will focus on the channel construction method first described in the Lightning Network whitepaper by Joseph Poon and Thaddeus Dryja in 2015. These are known as _Poon-Dryja_ channels, and are the channel construction method currently used in the Lightning Network. The other two proposed methods are _Duplex Micropayment_ channels, introduced by Christian Decker around the same time as the "Poon-Dryja" channels and _eltoo_ channels, introduced in 2018 by Christian Decker, Rusty Russel and (author of this book) Olaoluwa Osuntokun. @@ -103,7 +103,7 @@ Eltoo channels have some interesting properties and simplify the implementation ==== Multisig addresses -Payment channels are built on top of 2-of-2 multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not revise these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. +Payment channels are built on top of two-of-two multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not revise these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. If you have already studied Bitcoin and are familiar with multisignature addresses, feel free to skip this section. [TIP] @@ -127,7 +127,7 @@ K ... N CHECKMULTISIG where N is the total number of listed public keys (Public Key 1 through Public Key N) and K is the threshold of required signatures to spend the output. -The Lightning Network uses a 2-of-2 multisignature scheme to build a payment channel. For example, a payment channel between Alice and Bob would be built on a 2-of-2 multisignature like this: +The Lightning Network uses a two-of-two multisignature scheme to build a payment channel. For example, a payment channel between Alice and Bob would be built on a two-of-two multisignature like this: ---- 2 2 CHECKMULTISIG @@ -146,7 +146,7 @@ The two scripts together would form the combined validation script: ==== Funding Transaction -The fundamental building block of a payment channel, is a 2-of-2 multisignature address. The two channel partners fund the payment channel by sending bitcoin to the multisignature address. This transaction is called the _funding transaction_, and is recorded on the Bitcoin blockchain. footnote:[While the original Lightning whitepaper described channels funded by both channel partners, the current specification, as of 2020, assumes that just one partner commits funds to the channel.] +The fundamental building block of a payment channel, is a two-of-two multisignature address. The two channel partners fund the payment channel by sending bitcoin to the multisignature address. This transaction is called the _funding transaction_, and is recorded on the Bitcoin blockchain. footnote:[While the original Lightning whitepaper described channels funded by both channel partners, the current specification, as of 2020, assumes that just one partner commits funds to the channel.] Even though the funding transaction is public, it is not obvious that it is a Lightning payment channel until it is closed. Furthermore, channel payments are still not visible to anyone other than the channel partners, nor is the distribution of the channel balance between them. @@ -160,9 +160,9 @@ The funds sent to the multisignature address in the funding transaction are some ===== Example of a poor channel opening procedure -If you think carefully about 2-of-2 multisignature addresses, you will realize that putting your funds into such an address seems to carry some risk. What if your channel partner refuses to sign a transaction to "release" the funds? Are they stuck forever? Let's look at that scenario and how the Lightning Network protocol avoids it, next. +If you think carefully about two-of-two multisignature addresses, you will realize that putting your funds into such an address seems to carry some risk. What if your channel partner refuses to sign a transaction to "release" the funds? Are they stuck forever? Let's look at that scenario and how the Lightning Network protocol avoids it, next. -Alice and Bob want to create a payment channel. They each create a private/public key pair and then exchange public keys. Now, they can construct a multisignature 2-of-2 with the two public keys, forming the foundation for their payment channel. +Alice and Bob want to create a payment channel. They each create a private/public key pair and then exchange public keys. Now, they can construct a multisignature two-of-two with the two public keys, forming the foundation for their payment channel. Next, Alice constructs a Bitcoin transaction sending a few mBTC to the multisignature address created from Alice's and Bob's public keys. If Alice doesn't take any additional steps and simply broadcasts this transaction, she has to trust that Bob will provide his signature to spend from the multisignature address. Bob on the other hand has the chance to blackmail Alice by withholding his signature and denying Alice access to her funds. @@ -191,7 +191,7 @@ Initially, Alice owns 100k satoshi, the entirety of the funds in the channel. He . Bob provides a signature for Alice's Commitment Transaction and sends this back to Alice via the `funding_signed` message. . Now that signatures have been exchanged Alice will broadcast the funding transaction to the Bitcoin network. -By following this protocol, Alice does not give up ownership of her 100k satoshi even though the funds are sent to a 2-of-2 multisignature address for which Alice controls only one key. +By following this protocol, Alice does not give up ownership of her 100k satoshi even though the funds are sent to a two-of-two multisignature address for which Alice controls only one key. If Bob stops responding to Alice she will be able to broadcast her commitment transaction and receive her funds back. Her only costs are the fees for the on-chain transactions. As long as she follows the protocol this is her only risk when opening a channel. @@ -306,7 +306,7 @@ However, sometimes closing a channel is desirable or necessary. For example: * The channel is not being used often because your channel partner is not a well-connected node, so you want to use the funds for another channel with a better-connected node. * Your channel partner has breached the protocol either due to a software bug or on purpose forcing you to close the channel to protect your funds. -There are 3 ways to close a payment channel: +There are three ways to close a payment channel: * Mutual close (the good way) * Force close (the bad way) @@ -353,7 +353,7 @@ In the case that you broadcasted an earlier commitment transaction, the timelock When publishing a commitment transaction during a force close, the on-chain fees will be higher than a mutual close for several reasons: -. When the commitment transaction was negotiated, the channel partners didn't know how much the on-chain fees would be at the future time the transaction would be broadcast. Since the fees cannot be changed without changing the outputs of the commitment transaction (needs both signatures) and since the force close happens when a channel partner is not available to sign, the protocol developers decided to be very generous with the fee rate included in the commitment transactions. It can be up to 5 times higher than the fee estimators suggest at the time the commitment transaction is negotiated. +. When the commitment transaction was negotiated, the channel partners didn't know how much the on-chain fees would be at the future time the transaction would be broadcast. Since the fees cannot be changed without changing the outputs of the commitment transaction (needs both signatures) and since the force close happens when a channel partner is not available to sign, the protocol developers decided to be very generous with the fee rate included in the commitment transactions. It can be up to five times higher than the fee estimators suggest at the time the commitment transaction is negotiated. . The commitment transaction includes additional outputs for any pending routing attempts (HTLCs), which makes the commitment transaction larger (in terms of bytes) than a mutual close transaction. Larger transactions incur more fees. . Any pending routing attempts will have to be resolved on-chain causing additional on-chain transactions. @@ -777,7 +777,7 @@ The milli-satoshi unit cannot, of course, be settled on the Bitcoin blockchain a ==== Monetary Unit -Both the Bitcoin network and the Lightning network use the same monetary units: bitcoin. Lightning payments use the very same bitcoin as Bitcoin transactions. As an implication, because the monetary unit is the same, the monetary limit is the same: less than 21 million bitcoin. Of Bitcoin's 21 million total bitcoin, some are already allocated to 2-of-2 multi-signature addresses as part of payment channel on the Lightning Network. +Both the Bitcoin network and the Lightning network use the same monetary units: bitcoin. Lightning payments use the very same bitcoin as Bitcoin transactions. As an implication, because the monetary unit is the same, the monetary limit is the same: less than 21 million bitcoin. Of Bitcoin's 21 million total bitcoin, some are already allocated to two-of-two multi-signature addresses as part of payment channel on the Lightning Network. ==== Irreversibility and finality of payments From 28f1552be8e48c83fb88b123763935dd4dda2dc9 Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Wed, 30 Dec 2020 09:41:27 +0100 Subject: [PATCH 14/38] Update 03_how_ln_works.asciidoc You are right [Umar](@bolatovumar) , I have not found a single source on the web with _two-of-two_, _2-of-2_ seems to be the standard. I edited my pull request, so now the changes do not include 2-of-2 modification. I find the issue of '2-of-2' vs 'two-of-two' interesting and may soon create a question on [English Stack Exchange](https://english.stackexchange.com/) in order to get their opinion. --- 03_how_ln_works.asciidoc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index b6ae709..6b7cfd6 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -22,7 +22,7 @@ A payment channel is a _financial relationship_ between two nodes on the Lightni The payment channel is managed by a _cryptographic protocol_, meaning a pre-defined process based on cryptography, used by the channel partners to re-distribute the balance of the channel in favor of one or the other channel partner. The cryptographic protocol ensures that one channel partner cannot cheat the other, so that the partners do not need to trust each other. -The cryptographic protocol is established by the funding of a two-of-two _multi-signature address_ that requires the two channel partners to cooperate and prevents either channel partner from spending the funds unilaterally. +The cryptographic protocol is established by the funding of a 2-of-2 _multi-signature address_ that requires the two channel partners to cooperate and prevents either channel partner from spending the funds unilaterally. To summarize: @@ -30,7 +30,7 @@ A payment channel is a financial relationship between nodes, allocating funds fr === Payment channels basics -Underlying the payment channel is simply a two-of-two multisignature address on the Bitcoin blockchain, for which you hold one key and your channel partner holds the other key. +Underlying the payment channel is simply a 2-of-2 multisignature address on the Bitcoin blockchain, for which you hold one key and your channel partner holds the other key. You and your channel partner negotiate a sequence of transactions that spend from this multisignature address. Instead of transmitting and recording these transactions on the Bitcoin blockchain, you both hold on to them, unspent. @@ -43,7 +43,7 @@ The smart contract is set up to penalize a channel member if they try to submit [NOTE] ==== -If you have an unpublished transaction from a two-of-two multisignature address, that pays you part of the balance, then a signature from the other party ensures that you can independently publish this transaction anytime by adding your own signature. +If you have an unpublished transaction from a 2-of-2 multisignature address, that pays you part of the balance, then a signature from the other party ensures that you can independently publish this transaction anytime by adding your own signature. The ability to hold a partially-signed transaction, offline and unpublished, with the option to publish and own that balance at any time, is the basis of the Lightning Network. ==== @@ -103,7 +103,7 @@ Eltoo channels have some interesting properties and simplify the implementation ==== Multisig addresses -Payment channels are built on top of two-of-two multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not revise these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. +Payment channels are built on top of 2-of-2 multisignature addresses, timelocks and Segregated Witness transaction outputs. We will not revise these relatively advanced concepts of the Bitcoin system. Instead, in this section we will provide a high-level overview of multisignature scripts and how they allow us to construct payment channels. If you have already studied Bitcoin and are familiar with multisignature addresses, feel free to skip this section. [TIP] @@ -127,7 +127,7 @@ K ... N CHECKMULTISIG where N is the total number of listed public keys (Public Key 1 through Public Key N) and K is the threshold of required signatures to spend the output. -The Lightning Network uses a two-of-two multisignature scheme to build a payment channel. For example, a payment channel between Alice and Bob would be built on a two-of-two multisignature like this: +The Lightning Network uses a 2-of-2 multisignature scheme to build a payment channel. For example, a payment channel between Alice and Bob would be built on a 2-of-2 multisignature like this: ---- 2 2 CHECKMULTISIG @@ -146,7 +146,7 @@ The two scripts together would form the combined validation script: ==== Funding Transaction -The fundamental building block of a payment channel, is a two-of-two multisignature address. The two channel partners fund the payment channel by sending bitcoin to the multisignature address. This transaction is called the _funding transaction_, and is recorded on the Bitcoin blockchain. footnote:[While the original Lightning whitepaper described channels funded by both channel partners, the current specification, as of 2020, assumes that just one partner commits funds to the channel.] +The fundamental building block of a payment channel, is a 2-of-2 multisignature address. The two channel partners fund the payment channel by sending bitcoin to the multisignature address. This transaction is called the _funding transaction_, and is recorded on the Bitcoin blockchain. footnote:[While the original Lightning whitepaper described channels funded by both channel partners, the current specification, as of 2020, assumes that just one partner commits funds to the channel.] Even though the funding transaction is public, it is not obvious that it is a Lightning payment channel until it is closed. Furthermore, channel payments are still not visible to anyone other than the channel partners, nor is the distribution of the channel balance between them. @@ -160,9 +160,9 @@ The funds sent to the multisignature address in the funding transaction are some ===== Example of a poor channel opening procedure -If you think carefully about two-of-two multisignature addresses, you will realize that putting your funds into such an address seems to carry some risk. What if your channel partner refuses to sign a transaction to "release" the funds? Are they stuck forever? Let's look at that scenario and how the Lightning Network protocol avoids it, next. +If you think carefully about 2-of-2 multisignature addresses, you will realize that putting your funds into such an address seems to carry some risk. What if your channel partner refuses to sign a transaction to "release" the funds? Are they stuck forever? Let's look at that scenario and how the Lightning Network protocol avoids it, next. -Alice and Bob want to create a payment channel. They each create a private/public key pair and then exchange public keys. Now, they can construct a multisignature two-of-two with the two public keys, forming the foundation for their payment channel. +Alice and Bob want to create a payment channel. They each create a private/public key pair and then exchange public keys. Now, they can construct a multisignature 2-of-2 with the two public keys, forming the foundation for their payment channel. Next, Alice constructs a Bitcoin transaction sending a few mBTC to the multisignature address created from Alice's and Bob's public keys. If Alice doesn't take any additional steps and simply broadcasts this transaction, she has to trust that Bob will provide his signature to spend from the multisignature address. Bob on the other hand has the chance to blackmail Alice by withholding his signature and denying Alice access to her funds. @@ -191,7 +191,7 @@ Initially, Alice owns 100k satoshi, the entirety of the funds in the channel. He . Bob provides a signature for Alice's Commitment Transaction and sends this back to Alice via the `funding_signed` message. . Now that signatures have been exchanged Alice will broadcast the funding transaction to the Bitcoin network. -By following this protocol, Alice does not give up ownership of her 100k satoshi even though the funds are sent to a two-of-two multisignature address for which Alice controls only one key. +By following this protocol, Alice does not give up ownership of her 100k satoshi even though the funds are sent to a 2-of-2 multisignature address for which Alice controls only one key. If Bob stops responding to Alice she will be able to broadcast her commitment transaction and receive her funds back. Her only costs are the fees for the on-chain transactions. As long as she follows the protocol this is her only risk when opening a channel. @@ -777,7 +777,7 @@ The milli-satoshi unit cannot, of course, be settled on the Bitcoin blockchain a ==== Monetary Unit -Both the Bitcoin network and the Lightning network use the same monetary units: bitcoin. Lightning payments use the very same bitcoin as Bitcoin transactions. As an implication, because the monetary unit is the same, the monetary limit is the same: less than 21 million bitcoin. Of Bitcoin's 21 million total bitcoin, some are already allocated to two-of-two multi-signature addresses as part of payment channel on the Lightning Network. +Both the Bitcoin network and the Lightning network use the same monetary units: bitcoin. Lightning payments use the very same bitcoin as Bitcoin transactions. As an implication, because the monetary unit is the same, the monetary limit is the same: less than 21 million bitcoin. Of Bitcoin's 21 million total bitcoin, some are already allocated to 2-of-2 multi-signature addresses as part of payment channel on the Lightning Network. ==== Irreversibility and finality of payments From 0feaabb3656e3ba6c40681c89277e82075eb94bb Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Wed, 30 Dec 2020 10:15:54 +0100 Subject: [PATCH 15/38] Consistency in spelling out the numbers that are < 10 (introduction) It would be fine to maintain consistency in spelling out the numbers (provided that they are not code/math/ BTC amounts) that are < 10. I left out "8 GB" unchanged, though. "eight Gigabyte" would perhaps be more consistent, but at the same time would seem very unusual, whereas "eight GB" just make no sense to me. [A post about style](https://www.grammarly.com/blog/when-to-spell-out-numbers/) for the reference. >In scientific and technical writing, the prevailing style is to write out numbers under ten. While there are exceptions to these rules, your predominant concern should be expressing numbers consistently. --- 01_introduction.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/01_introduction.asciidoc b/01_introduction.asciidoc index 39fcaa3..e417942 100644 --- a/01_introduction.asciidoc +++ b/01_introduction.asciidoc @@ -35,7 +35,7 @@ Assuming 250 Bytes on average per transaction this would result in a data stream This does not include the traffic overhead of forwarding the transaction information to other peers. While 10 MB/s does not seem extreme in the context of high-speed fibre and 5G mobile speeds, it would effectively exclude anyone who cannot meet this requirement from running a node, especially in countries where high-performance internet is not affordable or widely available. Users also have many other demands on their bandwidth and cannot be expected to expend this much only to receive transactions. -Furthermore storing this information locally would result in 864,000 Megabytes per day. This is roughly 1 Terabyte of data or the size of a hard drive. +Furthermore storing this information locally would result in 864,000 Megabytes per day. This is roughly one Terabyte of data or the size of a hard drive. While verifying 40,000 ECDSA signatures per second seems barely feasible (c.f.: https://bitcoin.stackexchange.com/questions/95339/how-many-bitcoin-transactions-can-be-verified-per-second) nodes could hardly catch up initial sync of the blockchain. ==== @@ -130,10 +130,10 @@ web designer:: Saanvi is a web designer and developer in Bangalore, India. She accepts bitcoin for her work, but would prefer to get paid more frequently and so uses the Lightning Network to get paid incrementally for each small milestone she completes. With the Lightning Network, she can do more small jobs for more clients without worrying about fees or delays. content creator / curator:: -John is a 9-year-old boy from New Zealand, who wanted a games console just like his friends. However, his dad told him that in order to buy it, he had to earn the money himself. Now John is an aspiring artist, so he knows that while he is still improving, he can't charge much for his artwork. +John is a nine-year-old boy from New Zealand, who wanted a games console just like his friends. However, his dad told him that in order to buy it, he had to earn the money himself. Now John is an aspiring artist, so he knows that while he is still improving, he can't charge much for his artwork. After learning about Bitcoin, he managed to set up a website to sell his drawings across the internet. By using the Lightning Network, John was able to charge as little as $1 for one of his drawings, which would normally be considered a micro-payment and, as such, would typically be impossible on traditional systems. -Furthermore, most legacy financial systems wouldn't even allow a 9-year old like John to open an account! +Furthermore, most legacy financial systems wouldn't even allow a nine-year old like John to open an account! By using a global currency such as bitcoin, John was able to sell his artwork to customers all over the world, store the money he's earned without a bank account and, in the end, buy the games console he so desperately wanted. gamer:: From d430b7014991474d1fc8414d646d5d37b7609f08 Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Wed, 30 Dec 2020 10:29:15 +0100 Subject: [PATCH 16/38] Corrected a typo "2-of-2" instead of "2-2" --- glossary.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index d9018dd..0889781 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -282,7 +282,7 @@ A multipart payment (which is often also refered to as multipath payment) is a m multisignature:: Multisignature (multisig) refers to requiring more than one key to authorize a Bitcoin transaction. Payment channels are always encoded as multisignature addresses requiring one signature from each peer of the payment channel. - In the standard case of a two-party payment channel a 2-2 multisignature address is used. + In the standard case of a two-party payment channel a 2-of-2 multisignature address is used. Neutrino:: Neutrino is a later alternative to SPV that also verifies whether certain transactions are contained in a block without downloading the entire block. However, it offers a number of improvements over SPV: Neutrino does not transmit any information that would allow a third party to determine users’ identities, it facilitates the use of non-custodial apps, and it reduces the computational load on full nodes. The trade-off for these improvements is that Neutrino requires more data from the full node than SPV. From e460a145fb2d21006cfc86724db330b6338187ad Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Sat, 2 Jan 2021 17:51:33 +0000 Subject: [PATCH 17/38] [fix] minor misspells --- 02_getting_started.asciidoc | 2 +- channel-construction.asciidoc | 8 ++++---- channel-graph.asciidoc | 8 ++++---- channel-operation.asciidoc | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index 449bcea..b8948d4 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -286,7 +286,7 @@ Furthermore, Alice's channel peer can _forward_ payments via other channels furt [TIP] ==== -Not all channel peers are _good_ peers for routing payments. Well-connected peers will be able to route payements over shorter paths to the destination, increasing the chance of success. Channel peers with ample funds in their other channels will be able to route larger payments. +Not all channel peers are _good_ peers for routing payments. Well-connected peers will be able to route payments over shorter paths to the destination, increasing the chance of success. Channel peers with ample funds in their other channels will be able to route larger payments. ==== 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. diff --git a/channel-construction.asciidoc b/channel-construction.asciidoc index 325ac5a..ed5e29e 100644 --- a/channel-construction.asciidoc +++ b/channel-construction.asciidoc @@ -23,7 +23,7 @@ If you are new to the topic we highly encourage you to start there first. If you however already know a fair share about bitcoin script, OP_CODES and protocol design it might be sufficient to skip the previous chapter and start here with us. This books follows the construction of payment channels as described in BOLT 02 which is titled `peer protocol` and describes how two peers communicate to open, maintain and close a channel. As stated we will only discuss opening and closing a channel in this chapter and -the operation and maintainance of a channel which means either attempting to make or forward a payment as well as failing or settling such attempts is the normal operation and will be discussed in the next chapter. +the operation and maintenance of a channel which means either attempting to make or forward a payment as well as failing or settling such attempts is the normal operation and will be discussed in the next chapter. === Summary of what you (should) know about payment channels and Bitcoin @@ -46,10 +46,10 @@ The private key allows the owner to produce a signature for a transaction that s Thus 'ownership' of bitcoin can be defined as the ability to spend that bitcoin. If you have an unpublished but signed transaction from a 2-of-2 multisignature address, where some outputs are sent to an address you own, and additionally you exclusively know one of the private keys of the multisignature address, then you effectively own the bitcoin of that output. -Without your help no other transaction from the 2-of-2 multisignature address can be produced (as only you possesess one of the needed keys to sign a transaction that spends from this address) +Without your help no other transaction from the 2-of-2 multisignature address can be produced (as only you possesses one of the needed keys to sign a transaction that spends from this address) However, without the help of anybody else you can transfer the funds to an address which you control. You do that by broadcasting the transaction to the bitcoin network which will accept it as it has valid signatures. -As the funds in this transaction go to a regular address for which you controll the private key you can again move the funds and thus you effectively own them. +As the funds in this transaction go to a regular address for which you control the private key you can again move the funds and thus you effectively own them. On the Lightning Network ownership of your funds is almost always encoded with you having a pre-signed transaction spending from a 2-of-2 multisignature address. While your funds on the Lightning Network are called to be "off-chain" they are actually very much on chain and very much owned by you just like you might own other bitcoin. @@ -127,7 +127,7 @@ Each channel partner has both signatures for one of the commitment transactions The split of the capacity is realized by a `to_local` and a `to_remote` output that is part of every commitment transaction. The `to_local` output goes to an address that is controlled by the peer that holds this fully signed commitment transaction. `to_local` outputs, which also exist in the second stage HTLC transactions - which we discuss in the routing chapter - have two spending conditions. -The `to_local` output can be spent either at any time with the help of a revocation secret or after a timelock with the secret key that is controled by the peer holding this commitment transaction. +The `to_local` output can be spent either at any time with the help of a revocation secret or after a timelock with the secret key that is controlled by the peer holding this commitment transaction. The revocation secret is necessary to economically disincentivice peers to publish previous commitment transactions. Addresses and revokation secretes change with every new pair of commitment transactions that are being negotiated. The Lightning Network as a protocol defines the communication protocols that are necessary to achieve this. diff --git a/channel-graph.asciidoc b/channel-graph.asciidoc index 17836ab..c026891 100644 --- a/channel-graph.asciidoc +++ b/channel-graph.asciidoc @@ -31,7 +31,7 @@ As such, a zombie channel is technically still an open channel, but cannot be us Zombie channels offer no benefit to the user but have several downsides: -* Any capacity you have locked in the channel is useless for routing payments and could be allocated elsehwere +* Any capacity you have locked in the channel is useless for routing payments and could be allocated elsewhere * If you lose access to your own node and restore it with only your private key, you will lose access to funds in open zombie channels * If you lose access to your own node and restore it with your private key and channel backups, you will not be able to contact your channel partner to cooperatively close the channel and may also lose the funds * Public zombie channels are a burden on the network, as information about them is communicated to the rest of the network, but they cannot be used to route payments @@ -74,13 +74,13 @@ Well, verifying a channel is pretty important. If Wei tries to forward any payments through a channel that doesn't exist, his payments are going to fail. Even if the channel does exist, Wei still needs assurances that Bob and Alice actually control the funds inside of it. Alice and Bob could potentially dupe him by claiming ownership of a channel that actually belongs to someone else. -So Wei will definintely want to verify before he updates his channel graph. +So Wei will definitely want to verify before he updates his channel graph. Firstly, Wei will check the channel ID to discover which Bitcoin transaction contains the channel funds. He will then look up this transaction on the Bitcoin blockchain and he should discover a P2WSH bitcoin UTXO that is signed by both Alice and Bob. -Secondly, Wei will verify the signatures in the channel annoucenment message and confirm that the two nodes who signed the channel announcement are actually Alice and Bob. +Secondly, Wei will verify the signatures in the channel announcement message and confirm that the two nodes who signed the channel announcement are actually Alice and Bob. Once he's done so, he's convinced that the channel is funded and that Alice and Bob are the funders and owners of that channel. If any of these checks fail, he'll ignore the channel announcement. -Once Wei is satisifed that the channel announcement checks out, he'll update his channel graph. +Once Wei is satisfied that the channel announcement checks out, he'll update his channel graph. He will also send information about this channel to his peers, and they will verify it for themselves. diff --git a/channel-operation.asciidoc b/channel-operation.asciidoc index 95aef77..acb36f2 100644 --- a/channel-operation.asciidoc +++ b/channel-operation.asciidoc @@ -108,7 +108,7 @@ Then it has included a signature for the entire commitment transaction. As commitment transactions can have several HTLCs and HTLC success transactions need signatures which might not be provided at the time when they are needed those signatures are all already sent over to Bob. If all signatures are valid Bob has a new commitment transaction. At this time he would be able to publish either the old one or the new one without getting a penality as the old one is not yet revoked and invalidated. -However this is safe for Alice as Bob has less money in this old state and is economically not incentivised to publish the old commitment transaction. +However this is safe for Alice as Bob has less money in this old state and is economically not incentivized to publish the old commitment transaction. Alice on the other side has no problem if Bob publishes the new commitment transaction as she wanted to send him money. If Bob can provide the preimage he is by their agreement and expectation entitled to claim the HTLC output. Should Bob decide to sabotage to future steps of the protocol Alice can publish her commitment transaction without Bob being able to punish her. From 41b06b0d7f2330f9d6e905a1465f9a0155eb52b8 Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Mon, 4 Jan 2021 10:02:44 +0100 Subject: [PATCH 18/38] Consistent spelling of timelock (ch. 3) Both "timelock" and "time lock" are correct but let us be consistent and stick to the one form. --- 03_how_ln_works.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index 7b33952..ac6d5af 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -266,7 +266,7 @@ Technologies such as Watchtower services or changing the channel construction pr ==== Alice can close the channel at any time if Bob does not respond, claiming her fair share of the balance. -After publishing the *last* commitment transaction on-chain Alice has to wait for the time lock to expire before she can spend her funds from the commitment transaction. As we will see later, there is an easier way to close a channel without waiting, as long as Alice and Bob are both online and cooperate to close the channel with the correct balance allocation. But the commitment transactions stored by each channel partner act as a failsafe, ensuring they do not lose funds if there is a problem with their channel partner. +After publishing the *last* commitment transaction on-chain Alice has to wait for the timelock to expire before she can spend her funds from the commitment transaction. As we will see later, there is an easier way to close a channel without waiting, as long as Alice and Bob are both online and cooperate to close the channel with the correct balance allocation. But the commitment transactions stored by each channel partner act as a failsafe, ensuring they do not lose funds if there is a problem with their channel partner. ==== Announcing the channel @@ -326,7 +326,7 @@ No new routing attempts will be accepted from either channel partner and any ong Finalizing the routing attempts takes time, so a mutual close can also take some time to complete. Once there are no pending routing attempts, the nodes cooperate to prepare a _closing transaction_. -This transaction is similar to the commitment transaction; it encodes the last balance of the channel but the outputs are NOT encumbered with a time lock. +This transaction is similar to the commitment transaction; it encodes the last balance of the channel but the outputs are NOT encumbered with a timelock. The on-chain transaction fees for the closing transaction are paid by the channel partner who opened the channel and not by the one who initiated the closing procedure. Using the on-chain fee estimator, the channel partners agree on the appropriate fee and both sign the closing transaction. @@ -378,7 +378,7 @@ A Protocol Breach is when your channel partner tries to cheat you, whether delib Your node must be online and watching new blocks and transactions on the Bitcoin blockchain to detect this. Because your channel partner's payment will be encumbered by a timelock, your node has some time to act. -You have until the time lock expires to detect a protocol breach and publish a _punishment transaction_. +You have until the timelock expires to detect a protocol breach and publish a _punishment transaction_. If you successfully detect the protocol breach and enforce the penalty, you will receive all of the funds in the channel, including your channel partner's funds. In this scenario, the channel closure will be rather fast. From aff95b8b108763e52107c716605c2ec62a6341ab Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 31 Dec 2020 17:13:55 -0800 Subject: [PATCH 19/38] ch-channel-graph: initial draft of channel graph chapter In this commit, we present an initial version of the chapter on the channel graph itself, how to bootstrap a new peer to the network, how to sync it, how to validate it, and how to maintain it once bootstrapped. The current version of this chapter covers the following BOLTs: 07, 10. BOLTs 09, 08, and 01 are alluded to along the way. This is marked as a draft commit, as I still need to fill out the final portion that covers how the current gossip network works, and the protocol used to sync the channel graph based on block heights of channels. Due to the current length, we may want to consider eventually breaking this chapter up, however I'm focusing on content first. --- gossip.asciidoc | 655 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 655 insertions(+) create mode 100644 gossip.asciidoc diff --git a/gossip.asciidoc b/gossip.asciidoc new file mode 100644 index 0000000..f428d80 --- /dev/null +++ b/gossip.asciidoc @@ -0,0 +1,655 @@ +# Channel Graph Discovery, Authentication & Maintenance + +## Intro + +In this chapter, we'll explore exactly _how_ Lightning nodes discover each +other, and also the channel graph itself. The channel graph is the +interconnected set of publicly advertised channels (more on that later), and +the nodes that these channels interlink. When most refer to the _network_ part +of the Lightning Network, they're referring to the Channel Graph which itself +is a unique authenticated data structured _anchored_ in the base Bitcoin +blockchain. + +As the Lightning Network is a peer-to-peer network, some initial bootstrapping +is required in order for peers to discover each other. Within this chapter +we'll follow the story of a new peer connecting to the network for the first +time, and examine each step in the bootstrapping process from initial peer +discovery, to channel graph syncing and validation. + +As an initial step, our new node needs to somehow _discover_ at least _one_ +peer that is already connected to the network and has a full channel graph (as +we'll see later, there's no canonical version as the update dissemination +system is _eventually consistent_). Using on of many initial bootstrapping +protocols to find that first peer, after a connection is established, our new +peer now needs to _download_ and _validate_ the channel graph. Once the channel +graph has been fully validated, our new peer is ready to start opening channels +and sending payments on the network. + +After initial bootstrap, a node on the network needs to continue to maintain +its view of the channel graph by: processing new channel routing policy +updates, discovering and validating new channels, removing channels that have +been closed on chain, and finally pruning channels that fail to send out a +proper "heartbeat" every 2 weeks or so. + +Upon completion of this chapter, the reader will understand a key component of +the p2p Lightning Network: namely how peers discover each other and maintain a +personal view of the channel graph. We'll being our story with exploring the +story of a new node that has just booted up, and needs to find other peers to +connect to on the network. + +## Peer Discovery + +In this section, we'll begin to follow the story of Norman, a new Lightning +node that wishes to join the network as he sets out on his journey to: +discovery a set of bootstrap peers, download and validate the channel graph, +and finally begin the process of ongoing maintain once of the channel graph +itself. + + +### P2P Boostrapping + +Before doing any thing else, Norman first needs to discover a set of peers whom +are already part of the network. We call this process initial peer +bootstrapping, and it's something hat every peer to peer network needs to +implement properly in order to ensure a robust, healthy network. Bootstrapping +new peers to existing peer to peer networks is a very well studied problem with +several known solutions, each with their own distinct trade offs. The simplest +solution to this problem is simply to package a set of _hard coded_ bootstrap +peers into the packaged p2p node software. This is simple in that each new node +can find the bootstrap peer with nothing else but the software they're running, +but rather fragile given that if the set of bootstrap peers goes offline, then +no new nodes will be able to join the network. Due to this fragility, this +option is usually used as a fallback in case none of the other p2p bootstrapping +mechanisms work properly. + +Rather than hard coding the set of bootstrap peers within the software/binary +itself, we can instead opt to devise a method that allows peers to dynamically +obtain a fresh/new set of bootstrap peers they can use to join the network. +We'll call this process initial peer discovery. Typically we'll leverage +existing Internet protocols to maintain and distribute a set of bootstrapping +peers. A non-exhaustive list of protocols that have been used in the past to +accomplish initial peer discovery include: + + * DNS + * IRC + * HTTP + +Similar to the Bitcoin protocol, the primary initial peer discovery mechanism +used in the Lightning Network. As initial peer discovery is a critical and +universal task for the network, the process has been _standardized_ in a +document that is a part of the Basis of Lightning Technology (BOLT) +specification. This document is [BOLT +10](https://github.com/lightningnetwork/lightning-rfc/blob/master/10-dns-bootstrap.md). + +### DNS Bootstrapping via BOLT 10 + +The BOLT 10 document describes a standardized way of implementing peer +discovery using the Domain Name System (DNS). Lightning's flavor of DNS based +bootstrapping uses up to 3 distinct record types: + + * `SRV` records for discovering a set of _node public keys_. + * `A` records for mapping a node's public key to its current `IPv4` address. + * `AAA` records for mapping a node's public key to its current `IPv6` address + (if one exists). + +Those somewhat familiar with the DNS protocol may already be familiar with the +`A` and `AAA` record types, but not the `SRV` type. The `SRV` record type is +used less commonly by protocols built on DNS, that's used to determine the +_location_ for a specified service. In our context, the service in question is +a given Lightning node, and the location its IP address. We need to use this +additional record type as unlike nodes within the Bitcoin protocol, we need +both a public key _and_ an IP address in order to connect to a node. As we saw +in chapter XX on the transport encryption protocol used in LN, by requiring +knowledge of the public key of a node before one can connect to it, we're able +to implement a form of _identity_ hiding for nodes in the network. + +// TODO(roasbeef): move paragraph below above? + +#### A New Peer's Bootstrapping Workflow + +Before diving into the specifics of BOLT 10, we'll first outline the high level +flow of a new node that wishes to use BOLT 10 to join the network. + +First, a node needs to identify a single, or set of DNS servers that understand +BOLT 10 so they can be used for p2p bootstrapping. There exists no "official" +set of DNS seeds for this purpose, but each of the major implementations +maintain their own DNS seed, and cross query each other's seeds for redundancy +purposes. DNS seeds exist for both Bitcoin's mainnet and testnet. For the sake +of our example, we'll assume the existence of a valid BOLT 10 DNS seed at +`nodes.lightning.directory`. + +Next, we'll now issue an `SRV` query to obtain a set of _candidate bootstrap +peers_. The response to our query will be a series of _bech32_ encoded public +keys. As DNS is a text based protocol, we can't send raw bytes, so an encoding +scheme is required. For this scheme BOLT 10 has selected _bech32_ due to its +existing propagation in the wider Bitcoin ecosystem. The number of encoded +public keys returned depends on the server returning the query, as well as all +the resolver that stand between the client and the authoritative server. Many +resolvers may filter out SRV records all together, or attempt to truncate the +response size itself. + +Using the widely available `dig` command-line tool, we can query the _testnet_ +version of the DNS seed mentioned above with the following command: +``` +$ dig @8.8.8.8 test.nodes.lightning.directory SRV +``` + +We use the `@` argument to force resolution via Google's nameserver as they +permit our larger SRV query responses. At the end, we specify that we only want +`SRV` records to be returned. A sample response looks something like: +``` +$ dig @8.8.8.8 test.nodes.lightning.directory SRV + +; <<>> DiG 9.10.6 <<>> @8.8.8.8 test.nodes.lightning.directory SRV +; (1 server found) +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43610 +;; flags: qr rd ra; QUERY: 1, ANSWER: 25, AUTHORITY: 0, ADDITIONAL: 1 + +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 512 +;; QUESTION SECTION: +;test.nodes.lightning.directory. IN SRV + +;; ANSWER SECTION: +test.nodes.lightning.directory. 59 IN SRV 10 10 9735 ln1qfkxfad87fxx7lcwr4hvsalj8vhkwta539nuy4zlyf7hqcmrjh40xx5frs7.test.nodes.lightning.directory. +test.nodes.lightning.directory. 59 IN SRV 10 10 15735 ln1qtgsl3efj8verd4z27k44xu0a59kncvsarxatahm334exgnuvwhnz8dkhx8.test.nodes.lightning.directory. + + + +;; Query time: 89 msec +;; SERVER: 8.8.8.8#53(8.8.8.8) +;; WHEN: Thu Dec 31 16:41:07 PST 2020 +``` + +We've truncated the response for brevity. In our truncated responses, we can +see two responses. Starting from the right-most column, we have a candidate +"virtual" domain name for a target node, then to the left we have the _port_ +that this node can be reached using. The first response uses the standard port +for LN: `9735`. The second response uses a custom port which is permitted by +the protocol. + +Next, we'll attempt to obtain the other piece of information we need to connect +to a node: it's IP address. Before we can query for this however, we'll fist +_decode_ the returned sub-domain for this virtual host name returned by the +server. To do that, we'll first encoded public key: +``` +ln1qfkxfad87fxx7lcwr4hvsalj8vhkwta539nuy4zlyf7hqcmrjh40xx5frs7 +``` + +Using `bech32`, we can decode this public key to obtain the following valid +`secp256k1` public key: +``` +026c64f5a7f24c6f7f0e1d6ec877f23b2f672fb48967c2545f227d70636395eaf3 +``` + +Now that we have the raw public key, we'll now ask the DNS server to _resolve_ +the virtual host given so we can obtain the IP information for the node: +``` +$ dig ln1qfkxfad87fxx7lcwr4hvsalj8vhkwta539nuy4zlyf7hqcmrjh40xx5frs7.test.nodes.lightning.directory A + +; <<>> DiG 9.10.6 <<>> ln1qfkxfad87fxx7lcwr4hvsalj8vhkwta539nuy4zlyf7hqcmrjh40xx5frs7.test.nodes.lightning.directory A +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41934 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 + +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 4096 +;; QUESTION SECTION: +;ln1qfkxfad87fxx7lcwr4hvsalj8vhkwta539nuy4zlyf7hqcmrjh40xx5frs7.test.nodes.lightning.directory. IN A + +;; ANSWER SECTION: +ln1qfkxfad87fxx7lcwr4hvsalj8vhkwta539nuy4zlyf7hqcmrjh40xx5frs7.test.nodes.lightning.directory. 60 IN A X.X.X.X + +;; Query time: 83 msec +;; SERVER: 2600:1700:6971:6dd0::1#53(2600:1700:6971:6dd0::1) +;; WHEN: Thu Dec 31 16:59:22 PST 2020 +;; MSG SIZE rcvd: 138 +``` + +In the above command, we've queried the server so we can obtain an `IPv4` +address for our target node. Now that we have both the raw public key _and_ IP +address, we can connect to the node using the `brontide` transport protocol at: +`026c64f5a7f24c6f7f0e1d6ec877f23b2f672fb48967c2545f227d70636395eaf3@X.X.X.X`. +Querying for the curent `A` record for a given node can also be used to look up +the _latest_ set of addresses for a given node. Such queries can be used to +more quickly (compared to waiting on gossip as we'll cover later) sync the +latest addressing information for a node. + +At this point in our journey, Norman our new Lightning Node has found its first +peer and established its first connect! Now we can being the second phase of +new peer bootstrapping: channel graph synchronization and validation, but +first, we'll explore more of the intricacies of BOLT 10 itself to take a deeper +look into how things work under the hood. + +### A Deep Dive Into BOLT 10 + +As we learned earlier in the chapter, BOLT 10 describes the standardized +protocol for boostrapping new peer suing the DNS protocol. In this section, +we'll dive into the details of BOLT 10 itself in order to explore exactly how +bootstrapping queries are made, and also the additional set of options +available for querying. + +#### SRV Query Options + +The BOLT 10 standard is highly extensible due to its usage of nested +sub-domains as a communication layer for additional query options. The +bootstrapping protocol allows clients to further specify the _type_ of nodes +they're attempting to query for vs the default of receiving a random subset of +nodes in the query responses. + +The query option sub-domain scheme uses a series of key-value pairs where the +key itself is a _single letter_ and the remaining set of text is the value +itself. The following query types exist in the current version of the BOLT 10 +standards document: + + * `r`: The "realm" byte which is used to determine which chain or realm + queries should be returned for. As is, the only value for this key is `0` + which denotes Bitcoin itself. + + * `a`: Allows clients to filter out returned nodes based on the _types_ of + addresses they advertise. As an example, this can be used to only obtain + nodes that advertise a valid IPv6 address. + * The value that follows this type is based on a bitfled that _indexes_ + into the set of specified address _type_ which are defined in BOLT 7. + We'll cover this material shortly later in this chapter once we examine + the structure of the channel graph itself. + * The default value for this field is `6`, which is `2 || 4`, which denotes + bit 1 and 2, which are IPv4 and IPv6. + + * `l`: A valid node public key serialized in compressed format. This allows a + client to query for a specified node rather than receiving a set of random + nodes. + + * `n`: The number of records to return. The default value for this field is + `25`. + +An example query with additional query options looks something like the following: +``` +r0.a2.n10.nodes.lightning.directory +``` + +Breaking down the query one key-value pair at a time we gain the following +insights: + + * `r0`: The query targets the Bitcoin realm. + * `a2`: The query only wants IPv4 addresses to be returned. + * `n10`: The query requests + +## Channel Graph: Structure and Attributes + +Now that Norman is able to use the DNS boostrapping protocol to connect to his +very first peer, we can now start to sync the channel graph! However, before we +sync the channel graph, we'll need to learn exactly _what_ we mean by the +channel graph. In this section we'll explore the precise _structure_ of the +channel graph and examine the unique aspects of the channel graph compared to +the typical abstract "graph" data structure which is well known/used in the +field of Computer Science. + +### The Channel Graph as a Directed Overlay Data Structure + +A graph in computer science is a special data structure composed of vertices +(typically referred to as nodes) and edges (also known as links). Two nodes may +be connected by one or more edges. The channel graph is also _directed_ given +that a payment is able to flow in either direction over a given edge (a +channel). As we're concerned with _routing payments_, in our model a node with +no edges isn't considered to be a part of the graph as it isn't "productive". +In the context of the Lightning Network, our vertices are the Lightning nodes +themselves, with our edges being the channels that _connect_ these nodes. As +channels are themselves a special type of multi-sig UTXO anchored in the base +Bitcoin blockchain, possible to scan the chain (with the assistance of special +meta data proofs) and re-derive the channel graph first-hand (though we'd be +missing some information as we see below). + +As channels themselves are UTXOs, we can view the channel graph as a special +sub-set of the UTXO set, on top of which we can add some additional information +(the nodes, etc) to arrive at the final overlay structure which is the channel +graph. This anchoring of fundamental components of the cahnnel graph in the +base Bitcoin blockchain means that it's impossible to _fake_ a valid channel +graph, which has useful properties when it comes to spam prevention as we'll +see later. The channel graph in the Lightning Network is composed of 3 +individual components which are described in BOLT 7: + + * `node_announcement`: The vertex in our graph which communicates the public + key of a node, as well as how to reach the node over the internet and some + additional metadata describing the set of _features_ the node supports. + + * `channel_announcement`: A blockchain anchored proof of the existence of a + channel between two individual nodes. Any 3rd party can verify this proof in + order to ensure that a _real_ channel is actually being advertised. Similar + to the `node_announcement` this message also contains information describing + the _capabilities_ of the channel which is useful when attempting to route a + payment. + + * `channel_update`: A _pair_ of structures that describes the set of _routing + policies_ for a given channel. `channel_update`s come in a _pair_ as a + channel is a directed edge, so both sides of the channel are able to specify + their own custom routing policy. An example of a policy communicated in a + +It's important to note that each of components of the channel graph are +themselves _authenticated_ allowing a 3rd party to ensure that the owner of a +channel/update/node is actually the one sending out an update. This effectively +makes the Channel Graph a unique type of _authenticated data structure_ that +cannot be counterfeited. For authentication, we use an `secp256k1` ECDSA +digital signature (or a series of them) over the serialized digest of the +message itself. We won't get into the specific of the messaging +framing/serialization used in the LN in this chapter, as we'll cover that +information in Chapter XX on the wire protocol used in in the protocol. + +With the high level structure of the channel graph laid out, we'll now dive +down into the precise structure of each of the 3 components of the channel +graph. We'll also explain how one can also _verify_ each component of the +channel graph as well. + +#### Node Announcement: Structure & Validation + +First, we have the `node_announcement` which plays the role of the vertex in +the channel graph. A node's announcement in the network serves to primary +purposes: + + 1. To advertise connection information so other nodes can connect to it, + either to bootstrap to the network, or to attempt to establish a set of new + channels. + + 2. To communicate the set of features protocol level features a node + understands. This communication is critical to the decentralized + de-synchronized update nature of the Lightning Network itself. + +Unlike channel announcements, node announcements aren't actually anchored in +the base blockchain. As a result, advertising a node announcement in isolation +bares no up front cost. As a result, we require that all node announcements are +only considered "valid" if it has propagated with a corresponding channel +announcement as well. In other words, we always reject unconnected nodes in +order to ensure a rogue peer can't fill up our disk with bogus nodes that may +not actually be part of the network. + +##### Structure + +The node announcement is a simple data structure that needs to exist for each +node that's a part of the channel graph. The node announcement is comprised of +the following fields, which are encoded using the wire protocol structure +described in BOLT 1: + + * `signature`: A valid ECDSA signature that covers the serialized digest of + all fields listed below. This signature MUST be venerated by the private + key that backs the public key of the advertised node. + + * `features`: A bit vector that describes the set of protocol features that + this node understands. We'll cover this field in more detail in Chapter XX + on the extensibility of the Lightning Protocol. At a high level, this field + carries a set of bits (assigned in pairs) that describes which new features + a node understands. As an example, a node may signal that it understands + the latest and greatest channel type, which allows peers that which + bootstrap to the network to filter out the set of nodes they want to connect + to. + + * `timestamp`: A timestamp which should be interpreted as a unix epoch + formatted timestamp. This allows clients to enforce a partial ordering over + the updates to a node's announcement. + + * `node_id`: The `secp256k1` public key that this node announcement belongs + to. There can only be a single `node_announcement` for a given node in the + channel graph at any given time. As a result, a `node_announcement` can + superseded a prior `node_announcement` for the same node if it carries a + higher time stamp. + + * `rgb_color`: A mostly unused field that allows a node to specify an RGB + "color" to be associated with it. + + * `alias`: A UTF-8 string to serve as the nickname for a given node. Note + that these aliases aren't required to be globally unique, nor are they + verified in any shape or form. As a result, they are always to be + interpreted as being "unofficial". + + * `addresses`: A set of public internet reachable addresses that are to be + associated with a given node. In the current version of the protocol 4 + address types are supported: IPv4 (1), IPv6 (2), Tor V2 (3), Tor V3 (4). On + the wire, each of these address types are denoted by an integer type which + is included in parenthesis after the address type. + +##### Validation + +Validating an incoming `node_announcement` is straight forward, the following +assertions should be upheld when examining a node announcement: + + * If an existing `node_announcement` for that node is already known, then the + `timestamp` field of a new incoming `node_announcement` MUST be greater + than the prior one. + + * With this constraint, we enforce a forced level of "freshness". + + * If no `node_announcement` exist for the given node, then an existing + `channel_announcement` that refernces the given node (more on that later) + MUST already exist in one's local channel graph. + + * The included `signature` MUST be a valid ECDSA signature verified using the + included `node_id` public key and the double-sha256 digest of the raw + message encoding (mins the signature and frame header!) as the message. + + * All included `addresses` MUST be sorted in ascending order based on their + address identifier. + + * The included `alias` bytes MUST be a valid UTF-8 string. + +#### Channel Announcement: Structure & Validation + +Next, we have the `channel_announcement`. This message is used to _announce_ a +new _public_ channel to the wider network. Note that announcing a channel is +_optional_. A channel only needs to be announced if its intended to be used for +routing by the public network. Active routing nodes may wish to announce all +their channels. However, certain nodes like mobile nodes likely don't have the +uptime or desire required to be an active routing node. As a result, these +mobile nodes (which typically use light clients to connect to the Bitcoin p2p +network), instead may have purely _unadvertised_ channels. + +##### Unadvertised Channels & The "True" Channel Graph + +An unadvertised channel isn't part of the known public channel graph, but can +still be used to send/receive payments. An astute reader may now be wondering +how a channel which isn't part of the public channel graph is able to receive +payments. The solution to this problem is a set of "path finding helpers" that +we call "routing hints. As we'll see in Chapter XX on the presentation/payment +layer, invoices created by nodes with unadvertised channels will include +auxiliary information to help the sender route to them assuming the no has at +least a single channel with an existing public routing node. + +Due to the existence of unadvertised channels, the _true_ size of the channel +graph (both the public and private components) is unknown. In addition, any +snapshot of the channel graph that doesn't come directly from one's own node +(via a Block Explorer or the like) is to be considered non-canonical as +updates to the graph are communicated using a system that only is able to +achieve an eventually consistent view of the channel graph. + +##### Locating Channel In the Blockchain via Short Channel IDs + +As mentioned earlier, the channel graph is authenticated due to its usage of +public key cryptography, as well as the Bitcoin blockchain as a spam prevention +system. In order to have a node accept a new `channel_announcement`, the +advertise must _prove_ that the channel actually exists in the Bitcoin +blockchain. This proof system adds an upfront cost to adding a new entry to the +channel graph (the on-chain fees on must pay to create the UTXO of the +channel). As a result, we mitigate spam and ensure that another node on the +network can't costless fill up the disk of an honest node with bogus channels. + +Given that we need to construct a proof of the existence of a channel, a +natural question that arises is: how to we "point to" or reference a given +channel for the verifier? Given that a channel MUST be a UTXO, an initial +thought might be to first attempt to just advertise the full outpoint +(`txid:index`) of the channel. Given the outpoint of a UTXO is globally unique +one confirmed in the chain, this sounds like a good idea, however it has one +fatal flow: the verifier must maintain a full copy of the UTXO set in order to +verify channels. This works fine for full-node, but light clients which rely on +primarily PoW verification don't typically maintain a full UTXO set. As we want +to ensure we can support mobile nodes in the Lightning Network, we're forced to +find another solution. + +What if rather than referencing a channel by its UTXO, we reference it based on +its "location" in the chain? In order to do this, we'll need a scheme that +allows us to "index" into a given block, then a transaction within that block, +and finally a specific output created by that transaction. Such an identifier +is described in BOLT 7 and is referred to as a: short channel ID, or `scid`. +The `scid` is used both in `channel_announcement` (and `channel_update`) as +well as within the onion encrypted routing packet included within HTLCs as we +learned in Chapter XX. + +###### The Short Channel ID Identifier + +Based on the information above, we have 3 piece of information we need to +encode in order to uniquely reference a given channel. As we want to very +compact representation, we'll attempt to encode the information into a _single_ +integer using existing known bit packing techniques. Our integer format of +choice is an unsigned 64-bit integer, which is comprised of 8 logical bytes. + +First, the block height. Using 3 bytes (24-bits) we can encode 16777216 blocks, +which is more than double the number of blocks that are attached to the current +mainnet Bitcoin blockchain. That leaves 5 bytes left for us to encode the +transaction index and the output index respectively. We'll then use the next 3 +bytes to encode the transaction index _within_ a block. This is more than +enough given that it's only possible to fix tens of thousands of transactions +in a block at current block sizes. This leaves 2 bytes left for us to encode +the output index of the channel within the transaction. + +Our final `scid` format resembles: +``` +block_height (3 bytes) || transaction_index (3 bytes) || output_index (2 byes) +``` + +Using bit packing techniques, we first encode the most significant 3 bytes as +the block height, the next 3 bytes as the transaction index, and the least +significant 2 bytes as the output index of that creates the channel UTXO. + +A short channel ID can be represented as a single integer +(`695313561322258433`) or as a more human friendly string: `632384x1568x1`. +Here we see the channel was mined in block `632384`, was the `1568` th +transaction in the block, with the channel output being found as the second +(UTXOs are zero-indexed) output produced by the transaction. + +Now that we're able to succinctly defence a given channel in the chain, we can +now examine the full structure of the `channel_announcement` message, as well +as how to verify the proof-of-existence included within the message. + +##### Channel Announcement Structure + +A channel announcement primarily communicates two aspects: + + 1. A proof that a channel exists between Node A and Node B with both nodes + controlling the mulit-sig keys in the refracted channel output + + 2. The set of capabilities of the channel (what types of HTLCs can it route, + etc) + +When describing the proof, we'll typically refer to node `1` and node `2`. Out +of the two nodes that a channel connects, the "first" node is the node that has +a "lower" public key encoding when we compare the public key of the two nodes +in compressed format hex-encoded in lexicographical order. Correspondingly, in +addition to a node public key on the network, each node should also control a +public key within the Bitcoin blockchain. + +Similar to the `node_announcement` message, all included signatures of the +`channel_announcement` message should be signed/verified against the raw +encoding of the message (minus the header) that follows _after_ the final +signature (as it isn't possible for a signature to sign itself..) + +With that said, a `channel_announcement` message (the edge descriptor in the +channel graph) has the following attributes: + + * `node_signature_1`: The signature of the first node over the message digest. + + * `node_signature_2`: The signature of the second node over the message + digest. + + * `bitcoin_signature_1`: The signature of the multi-sig key (in the funding + output) of the first node over the message digest. + + * `bitcoin_signature_2`: The signature of the multi-sig key (in the funding + output) of the second node over the message digest. + + * `features`: A feature bitvector that describes the set of protocol level + features supported by this channel. + + * `chain_hash`: A 32 byte hash which is typically the genesis block hash of + the chain the channel was opened within. + + * `short_channel_id`: The `scid` that uniquely locates the given channel + within the blockchain. + + * `node_id_1`: The public key of the first node in the network. + + * `node_id_2`: The public key of the second node in the network. + + * `bitcoin_key_1`: The raw multi-sig key for the channel funding output for + the first node in the network. + + * `bitcoin_key_2`: The raw multi-sig key for the channel funding output for + the second node in the network. + +##### Channel Announcement Validation + +Now that we know what a `channel_announcement` contains. We can now move onto +to exactly _how_ to verify such an announcement. + + +#### Channel Update: Structure & Validation + + +// TODO(roasbeef): rename to "the structure of the channel graph"? + +## Syncing the Channel Graph + + + +* introduce the NodeAnnouncement (purpose structure validation) + * go thru fields, ref ability to use Tor, etc + * ref feature bits at high level, say will be covered in later chapter + * node announcement validation + * acceptance critera + + +### Channel Announcement + +## Ongoing Channel Graph Maintenance + +### Gossip Protocols in the Abstract + +* what is a gossip protocol? +* why are they used? +* what other famous uses of gossip protocols are out there? +* when does it make sense to use a gossip protocol? +* what are some use a gossip protocol? +* why does LN uise +* questions to ask for gossip rptocol + * what is being gossiped + * what is the expected delay bound? + * how is DoS prevented + +## Gossip in LN + +### Channel Announcements + +### Purpose +### Structure +### Validation + +### Channel Updates + +### Purpose +### Structure +### Validation + +### Node Announcements + +### Purpose +### Structure +### Validation + +* anser the three quesitons above + +* what: node info, chan info, channel updates + +* delay: 2 week liveness assumption, otherwise pruned, keep alive updates + +* DoS: real channel, proper validation of sigs, etc + +# Conlusion From 9cac112c96d50aed6967d105fe16cd1e3bc6cf05 Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Wed, 6 Jan 2021 10:39:10 +0100 Subject: [PATCH 20/38] Minor modification that removes ambiguity (ch. 3) I removed "You have". Now it's all in one sentence -- less ambiguous and more concise I believe. The more verbose alternative would be: >You have *time* until ... --- 03_how_ln_works.asciidoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/03_how_ln_works.asciidoc b/03_how_ln_works.asciidoc index 7b33952..e5c0aed 100644 --- a/03_how_ln_works.asciidoc +++ b/03_how_ln_works.asciidoc @@ -377,8 +377,7 @@ You should consider a force close only as the last resort. A Protocol Breach is when your channel partner tries to cheat you, whether deliberately or not, by publishing an outdated commitment transaction to the Bitcoin blockchain, essentially initiating a (dishonest) force close from their side. Your node must be online and watching new blocks and transactions on the Bitcoin blockchain to detect this. -Because your channel partner's payment will be encumbered by a timelock, your node has some time to act. -You have until the time lock expires to detect a protocol breach and publish a _punishment transaction_. +Because your channel partner's payment will be encumbered by a timelock, your node has some time to act until the time lock expires to detect a protocol breach and publish a _punishment transaction_. If you successfully detect the protocol breach and enforce the penalty, you will receive all of the funds in the channel, including your channel partner's funds. In this scenario, the channel closure will be rather fast. From f35b50dfd4f18e967ee322a8fa9a0cd682fddd88 Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Wed, 6 Jan 2021 21:16:03 +0100 Subject: [PATCH 21/38] Made one sentence out of these two. Someone better versed in the noise protocol may consider including 'authentication' and 'identity privacy', so that the glossary information on the noise protocol is parallel to [the one in ch.3](https://github.com/lnbook/lnbook/blob/develop/03_how_ln_works.asciidoc): >The Noise Protocol Framework allows the construction of cryptographic communication protocols that offer authentication, encryption, forward secrecy and identity privacy. --- glossary.asciidoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index d9018dd..f6d1883 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -302,8 +302,7 @@ Noise_XK:: The template of the Noise protocol framework to establish an authenticated and encrypted communication channel between two peers of the Lightning Network. X means that no public key needs to be known from the initiator of the connection. K means that the public key of the receiver needs to be known. - More particular (from: http://www.noiseprotocol.org/noise.html) the protocol enables. - Encryption to a known recipient, strong forward secrecy. This payload is encrypted based on an ephemeral-ephemeral DH as well as an ephemeral-static DH with the recipient's static key pair. Assuming the ephemeral private keys are secure, and the recipient is not being actively impersonated by an attacker that has stolen its static private key, this payload cannot be decrypted. Sender authentication resistant to key-compromise impersonation (KCI). The sender authentication is based on an ephemeral-static DH ("es" or "se") between the sender's static key pair and the recipient's ephemeral key pair. Assuming the corresponding private keys are secure, this authentication cannot be forged. + More particular (from: http://www.noiseprotocol.org/noise.html) the protocol enables encryption to a known recipient and strong forward secrecy. This payload is encrypted based on an ephemeral-ephemeral DH as well as an ephemeral-static DH with the recipient's static key pair. Assuming the ephemeral private keys are secure, and the recipient is not being actively impersonated by an attacker that has stolen its static private key, this payload cannot be decrypted. Sender authentication resistant to key-compromise impersonation (KCI). The sender authentication is based on an ephemeral-static DH ("es" or "se") between the sender's static key pair and the recipient's ephemeral key pair. Assuming the corresponding private keys are secure, this authentication cannot be forged. // the noise protocol documentation is according to their IPR section public domain. The author is Trevor Perrin (noise@trevp.net) onion routing:: From bda10134d694a4ad19453f82174bff851002d3cb Mon Sep 17 00:00:00 2001 From: Fichte42 Date: Fri, 15 Jan 2021 20:22:44 +0100 Subject: [PATCH 22/38] Added Umbrel to Node Operations refs #529 --- images/umbrel.png | Bin 0 -> 186863 bytes node_operations.asciidoc | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 images/umbrel.png diff --git a/images/umbrel.png b/images/umbrel.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2db36e3cb698fe03f9dcfc53f4e91addc950c3 GIT binary patch literal 186863 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 uFYGSFOqYZGHZ%mBjSe)qTGJ0-pHeA@c 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⋘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

W`0y_;}$Fe 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 c2jb`9{o+V@TS?0l1M1_G6qOUH5YqGiKjv|9 Date: Mon, 18 Jan 2021 18:15:46 +0100 Subject: [PATCH 23/38] Add Muun refs #528 --- 02_getting_started.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index b8948d4..5aa9335 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -116,6 +116,7 @@ In <> we see some examples of currently popular Lightning nod | Zeus | Mobile | Full Node | Bitcoin Core/btcd | Self-Custody | lntxbot | Mobile | None | None | Custodial | Blue Wallet | Mobile | None | None | Custodial +| Muun | Mobile | None | None | Custodial |=== === Balancing complexity and control From 5079219077ea8e1129c2b88b23f5b36a8b4ca315 Mon Sep 17 00:00:00 2001 From: Fichte42 Date: Mon, 18 Jan 2021 18:36:15 +0100 Subject: [PATCH 24/38] Fixed Keystore --- 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 5aa9335..2fa8c56 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -116,7 +116,7 @@ In <> we see some examples of currently popular Lightning nod | Zeus | Mobile | Full Node | Bitcoin Core/btcd | Self-Custody | lntxbot | Mobile | None | None | Custodial | Blue Wallet | Mobile | None | None | Custodial -| Muun | Mobile | None | None | Custodial +| Muun | Mobile | None | None | Self-Custody |=== === Balancing complexity and control From 634b9208699ed50723d00e9932b92b98aa5caffd Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Mon, 18 Jan 2021 19:49:34 +0100 Subject: [PATCH 25/38] completed missing sentence --- gossip.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gossip.asciidoc b/gossip.asciidoc index f428d80..3068152 100644 --- a/gossip.asciidoc +++ b/gossip.asciidoc @@ -75,7 +75,7 @@ accomplish initial peer discovery include: * HTTP Similar to the Bitcoin protocol, the primary initial peer discovery mechanism -used in the Lightning Network. As initial peer discovery is a critical and +used in the Lightning Network happens via DNS. As initial peer discovery is a critical and universal task for the network, the process has been _standardized_ in a document that is a part of the Basis of Lightning Technology (BOLT) specification. This document is [BOLT From 60bc30a8a9ed4c556ca04d328c294a8d0ea07e70 Mon Sep 17 00:00:00 2001 From: Hannah Date: Wed, 20 Jan 2021 17:06:28 -0600 Subject: [PATCH 26/38] Rearranged list, making alphanumeric and swapping URL/description. --- 02_getting_started.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index 2fa8c56..2dfc0b9 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -16,10 +16,10 @@ A Lightning network explorer is a useful tool to show the statistics of nodes, c The below is an inexhaustive list (in alphanumerical order): -* https://1ml.com/, 1ML Lightning explorer -* https://explorer.acinq.co/, ACINQ's Lightning explorer, with fancy visualization -* https://lightblock.me/, Lightblock Lightning explorer -* https://hashxp.org/lightning/node/, hashXP Lightning explorer +* 1ML Lightning explorer, https://1ml.com/ +* ACINQ's Lightning explorer, with fancy visualization, https://explorer.acinq.co/ +* hashXP Lightning explorer, https://hashxp.org/lightning/node/ +* Lightblock Lightning explorer, https://lightblock.me/ [TIP] ==== From 5bd24d15782275508a9bd48167fa482f7c2712ab Mon Sep 17 00:00:00 2001 From: Hannah Date: Fri, 22 Jan 2021 15:45:30 -0600 Subject: [PATCH 27/38] Adding alt text to images --- 02_getting_started.asciidoc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index 2fa8c56..f6aac1f 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -221,7 +221,7 @@ Let's assume Alice has found a local Bitcoin ATM and has decided to buy some bit [[bitcoin-atm]] .A Lamassu Bitcoin ATM -image:images/bitcoin-atm.png[] +image:images/bitcoin-atm.png["Lamassu Bitcoin ATM"] To receive the bitcoin in her Eclair Lightning wallet, Alice will need to present a _Bitcoin Address_ from the Eclair Lightning wallet to the ATM. The ATM can then send Alice's newly acquired bitcoin to this bitcoin address. @@ -229,7 +229,7 @@ To see a Bitcoin Address on the Eclair wallet, Alice must swipe to the left colu [[eclair-receive]] .Alice's bitcoin address, shown in Eclair -image:images/eclair-receive.png[] +image:images/eclair-receive.png["Eclair bitcoin address QR code"] The QR code contains the same string of letters and numbers as shown below it, in an easy to scan format. This way, Alice doesn't have to type the Bitcoin Address. In the screenshot <>, we have purposely blurred both, to prevent readers from inadvertently sending bitcoin to this address. @@ -242,7 +242,7 @@ Alice can take her mobile device to the ATM and show it to the built-in camera, [[bitcoin-atm-receive]] .Bitcoin ATM scans the QR code. -image:images/bitcoin-atm-receive.png[] +image:images/bitcoin-atm-receive.png["Bitcoin ATM scans the QR code"] Alice will see the transaction from the ATM in the "TRANSACTION HISTORY" tab of the Eclair wallet. While Eclair will detect the bitcoin transaction in just a few seconds, it will take approximately one hour for the bitcoin transaction to be "confirmed" on the Bitcoin blockchain. As you can see in <>, Alice's Eclair wallet shows "6+ conf" below the transaction, indicating that the transaction has received the required minimum of six confirmations, and her funds are now ready to use. @@ -254,7 +254,7 @@ The number of "confirmations" on a transaction is the number of blocks mined sin [[eclair-tx1]] .Alice receives bitcoin -image:images/eclair-tx1-btc.png[] +image:images/eclair-tx1-btc.png["Bitcoin transaction received"] While in this example Alice used an ATM to acquire her first bitcoin, the same basic concepts would apply even if she used one of the other methods in <>. For example, if Alice wanted to sell a product or provide a professional service in exchange for bitcoin, her customers could scan the Bitcoin Address with their wallets and pay her in bitcoin. @@ -309,7 +309,7 @@ A "node URI" is a Universal Resource Identifier (URI) that identifies a specific [[node-URI-QR]] .node URI as a QR code -image:images/node-URI-QR.png[width=120] +image:images/node-URI-QR.png["Lightning node URI QR code",width=120] [[node-URI-example]] .node URI @@ -331,7 +331,7 @@ Alice allocates 0.018BTC of her 0.020 total to her channel and accepts the defau [[eclair-open-channel]] .Opening a Lightning Channel -image:images/eclair-open-channel-detail.png[] +image:images/eclair-open-channel-detail.png["Opening a Lightning Channel"] Once she clicks "OPEN", her wallet constructs the special Bitcoin transaction that opens a Lightning channel, known as the _funding transaction_. The "on-chain" funding transaction is sent to the Bitcoin Network for confirmation. @@ -372,7 +372,7 @@ On the counter at Bob's Cafe, there is a tablet device showing <>. [[alice-send-start]] .Alice Send -image:images/alice-send-start.png[width=300] +image:images/alice-send-start.png["Lightning transaction send",width=300] [TIP] ==== @@ -397,7 +397,7 @@ Alice selects the option to "scan a payment request" and scans the QR code displ [[alice-send-detail]] .Alice's Send Confirmation -image:images/alice-send-detail.png[width=300] +image:images/alice-send-detail.png["Lightning transaction send confirmation",width=300] Alice presses "PAY," and a second later, Bob's tablet shows a successful payment. Alice has completed her first Lightning Network payment! It was fast, inexpensive, and easy. Now she can enjoy her latte which was purchased using a payment system that is fast, cheap and decentralized. And from now on, whenever Alice feels like drinking a coffee at Bob's Cafe she selects an item on Bob's tablet screen, scans the QR code with her cell phone, clicks pay, and is served a coffee, all within seconds and all without an "on-chain" transaction. From 58c77cbb27b79e7a7ba63bb1fc28a734cb17ccb1 Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Mon, 25 Jan 2021 17:29:28 +0100 Subject: [PATCH 28/38] added my favorite ln explorer (: --- 02_getting_started.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index 2dfc0b9..77d112d 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -18,6 +18,7 @@ The below is an inexhaustive list (in alphanumerical order): * 1ML Lightning explorer, https://1ml.com/ * ACINQ's Lightning explorer, with fancy visualization, https://explorer.acinq.co/ +* Fiatjaf's Lightning explorer with many diagrams, https://ln.bigsun.xyz/ * hashXP Lightning explorer, https://hashxp.org/lightning/node/ * Lightblock Lightning explorer, https://lightblock.me/ From 91377b9728ec9b903ac3a925df4dff726e18f446 Mon Sep 17 00:00:00 2001 From: HannahMR Date: Mon, 25 Jan 2021 10:34:04 -0600 Subject: [PATCH 29/38] Changing buttlet point list to numbered list to match the below reference to a numbered list. (#592) --- 02_getting_started.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/02_getting_started.asciidoc b/02_getting_started.asciidoc index 77d112d..d34909a 100644 --- a/02_getting_started.asciidoc +++ b/02_getting_started.asciidoc @@ -61,9 +61,9 @@ Finally, those seeking simplicity and convenience, even at the expense of contro There are many ways wallets can be characterized or categorized. The most important questions to ask about a specific wallet are: -- Does this Lightning wallet have a full Lightning Node or does it use a third-party Lightning Node? -- Does this Lightning wallet have a full Bitcoin Node or does it use a third-party Bitcoin Node? footnote:[If a Lightning wallet uses a third-party Lightning node, it is this third-party Lightning node who decides how to communicate with Bitcoin. Hence, using a third-party Lightning node implies that you as a wallet user also use a third-party Bitcoin node. Only in the other case, when the Lightning wallet uses its own Lightning node, does the choice "full Bitcoin-node" vs. "third-party Bitcoin node" exist. ] -- Does this Lightning wallet store its own keys under user control (self-custody) or are the keys held by a third-party custodian? +. Does this Lightning wallet have a full Lightning Node or does it use a third-party Lightning Node? +. Does this Lightning wallet have a full Bitcoin Node or does it use a third-party Bitcoin Node? footnote:[If a Lightning wallet uses a third-party Lightning node, it is this third-party Lightning node who decides how to communicate with Bitcoin. Hence, using a third-party Lightning node implies that you as a wallet user also use a third-party Bitcoin node. Only in the other case, when the Lightning wallet uses its own Lightning node, does the choice "full Bitcoin-node" vs. "third-party Bitcoin node" exist. ] +. Does this Lightning wallet store its own keys under user control (self-custody) or are the keys held by a third-party custodian? At the highest level of abstraction, questions 1 and 3 are the most elementary ones. From these two questions, we can derive four possible categories. From 74b5e4cb07545e3b74f7c36c0b8a93c0bb75ea97 Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Mon, 25 Jan 2021 17:34:42 +0100 Subject: [PATCH 30/38] node_operations.asciidoc: correcting a typo (#598) "definitely" instead of "defintely" --- node_operations.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 35d94e0..6c71e33 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -25,7 +25,7 @@ Let's get started! It is important that one sets her or his own expectations correctly on accurate facts. If one plans to operate a Lightning node _solely_ to gain income by earning routing fees, please do your homework diligently first. Running a profitable business by operating a Lighning node is -defintely _not_ easy. Calculate all your initial and ongoing costs in a spreadsheet. Study Lightning Network statistics carefully. +definitely _not_ easy. Calculate all your initial and ongoing costs in a spreadsheet. Study Lightning Network statistics carefully. What is the current payment volume? What is the volume per node? What are the current average routing fees? Consult forums and ask for advice or feedback from other community members who have already gained real-world experience. Form your own educated opinion only _after_ you have done this due-diligence exercise. Most people will find their motivation for running a node not in financial gain From bd68075856d19c8c52cff87284b833441aaa5b0e Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Mon, 25 Jan 2021 17:36:50 +0100 Subject: [PATCH 31/38] node_client.asciidoc: "collaboratively developed" instead of "collaborative developed" (#597) [Collaborative](https://dictionary.cambridge.org/dictionary/english/collaborative) is not an adverb, [collaboratively](https://en.wiktionary.org/wiki/collaboratively) is. I also added 'are' for the sake of [parallelism](https://en.wikipedia.org/wiki/Parallelism_(grammar)), the said 'are' is optional, though. --- node_client.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_client.asciidoc b/node_client.asciidoc index 68bd390..8ab9336 100644 --- a/node_client.asciidoc +++ b/node_client.asciidoc @@ -1,7 +1,7 @@ [[set_up_a_lightning_node]] == Lightning Node Software -As we have seen in previous chapters, a Lightning node is a computer system that participates in the Lightning Network. The Lightning Network is not a product or company, it is a set of open standards that define a baseline for interoperability. As such, Lightning node software has been built by a variety of companies and community groups. The vast majority of Lightning software is _open source_, meaning that the source code is open and licensed in such a way as to enable collaboration, sharing and community participation in the development process. Similarly, the Lightning node implementations we will present in this chapter are all open source and collaborative developed. +As we have seen in previous chapters, a Lightning node is a computer system that participates in the Lightning Network. The Lightning Network is not a product or company, it is a set of open standards that define a baseline for interoperability. As such, Lightning node software has been built by a variety of companies and community groups. The vast majority of Lightning software is _open source_, meaning that the source code is open and licensed in such a way as to enable collaboration, sharing and community participation in the development process. Similarly, the Lightning node implementations we will present in this chapter are all open source and are collaboratively developed. Unlike Bitcoin, where the standard is defined by a _reference implementation_ in software (Bitcoin Core), in Lightning the standard is defined by a series of standards documents called _Basis of Lightning Technology (BOLT)_, found at the _lightning-rfc_ repository at: From d627f47f65cd0b740e483326d3b276475ae5a00c Mon Sep 17 00:00:00 2001 From: HannahMR Date: Mon, 25 Jan 2021 10:38:15 -0600 Subject: [PATCH 32/38] Breaking up a long note into two paragraphs. (#593) --- 01_introduction.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/01_introduction.asciidoc b/01_introduction.asciidoc index e417942..3375be1 100644 --- a/01_introduction.asciidoc +++ b/01_introduction.asciidoc @@ -33,6 +33,7 @@ The side effects of increasing the block size or decreasing the block time with Let us assume the usage of Bitcoin grows so that the network has to process 40,000 transactions per second. Assuming 250 Bytes on average per transaction this would result in a data stream of 10 Megabyte per second or 80 Mbit/s just to be able to receive all the transactions. This does not include the traffic overhead of forwarding the transaction information to other peers. + While 10 MB/s does not seem extreme in the context of high-speed fibre and 5G mobile speeds, it would effectively exclude anyone who cannot meet this requirement from running a node, especially in countries where high-performance internet is not affordable or widely available. Users also have many other demands on their bandwidth and cannot be expected to expend this much only to receive transactions. Furthermore storing this information locally would result in 864,000 Megabytes per day. This is roughly one Terabyte of data or the size of a hard drive. From dc7d2d75603112c4ec82ce0a9d2b9ad012fdab89 Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Tue, 26 Jan 2021 16:51:53 +0100 Subject: [PATCH 33/38] added some motivation and a more educational version to the beginning of the gossip chapter --- gossip.asciidoc | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/gossip.asciidoc b/gossip.asciidoc index 3068152..dd17229 100644 --- a/gossip.asciidoc +++ b/gossip.asciidoc @@ -2,13 +2,53 @@ ## Intro +As we have seen the Lightning Network uses a sourced base Onion Routing Protocol to deliver a payment from a sender to the recipient. +For this the sending node has to be able to construct a path of payment channels that connects it with the recipient. +Thus the sender has to be aware of the Channel Graph. +The channel graph is the interconnected set of publicly advertised channels (more on that later), and the nodes that these channels interlink. +As channels are backed by a funding transaction that is happening on chain one might falsely believe that Lightning Nodes could just extract the existing channels from the Bitcoin Blockchain. +However this only possible to a certain extend. +The Funding transactions are Pay to Whitness Script addresses and the nature of the script will only be revealed once the funding transaction output is spent. +Even if the nature of the script was known we emphasize that not all 2 - of - 2 multisignature scripts correspond to payment channels. +Since not even every Pay to Whitness Script address that we see in the Bitcoin Blockchain corresponds to a payment channel this approach is not helpful. +There are actually more reasons why looking at the Bitcoin Blockchain might not be helpful. +For example on the Lightnign Network the Bitcoin keys that are used for signing are rotated by the nodes for every channel and update. +Thus even if we could reliably detect funding transactions on the Bitcoin Blockchain we would not know which two nodes on the Lightning Network own that particular channel. +Thus we could node create the Channel Graph that would be used to create candidate paths during the payment delivery via onion routing. + +The Lightning Network solves the afore mentioned problem by implementing a gossip protocol. +Gossip protocols are typical for peer 2 peer networks and are being used so that nodes can share information with other nodes without talking to those other nodes directly. +For that Lightning Nodes open encrypted peer 2 peer connections to each other and share novel information that they have received from other peers. +As soon as a node wants to share some information - for example about a newly created channel - it sends a message to all its peers. +Uppon receiving a message a node decides if the received message was novel and if so it will forward the information to its peers. +In this way if the peer 2 peer network is connected all new information that is necessary for the operation of the network will eventually be propagated to all other peers. + +Obviously if a new peer initially wants to join the network it needs to know some other peers on the Network initially. +Only then the new peer could connect to them in order to learn about the existance of other peers. In this chapter, we'll explore exactly _how_ Lightning nodes discover each -other, and also the channel graph itself. The channel graph is the -interconnected set of publicly advertised channels (more on that later), and -the nodes that these channels interlink. When most refer to the _network_ part +other, and also the channel graph itself. +When most refer to the _network_ part of the Lightning Network, they're referring to the Channel Graph which itself -is a unique authenticated data structured _anchored_ in the base Bitcoin +is a unique authenticated data structure _anchored_ in the base Bitcoin blockchain. +However the Lightning network is also a peer to peer network of nodes that are have just opened an encrypted peer connection. +Usually for 2 peers to maintain a payment channel they need to talk to each other directly which means that there will be a peer connection between them. +This suggests that the Channel Graph is a subnetwork of the peer to peer network. +However this is not true. +As payment channels do not need to be closed if one or both peers are going offline they can continue to exist even though the peer connection is terminated. +It might be usefull to get familiar with the different terminology that we have used througout the book for similar concepts / actions depending on weather they happen on the Channel Graph or on the peer 2 peer network. + +[[network-terminology]] +.Terminology of the different Networks +[options="header"] +|=== +| | Channel Graph |peer to peer network +| Name | channel | connection | +| initiate | open | (re)connect | +| finalize | close| terminate| +| technology | Bitcoin Blockchain | encrypted TCP/IP connection +| lifetime | until funding spent | while peers are online + As the Lightning Network is a peer-to-peer network, some initial bootstrapping is required in order for peers to discover each other. Within this chapter From 6df8e4bbb7befdbfa2b8719c604ccfabcd1caeba Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Tue, 26 Jan 2021 16:53:41 +0100 Subject: [PATCH 34/38] fix formatting error of the new table --- gossip.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gossip.asciidoc b/gossip.asciidoc index dd17229..1f1bf66 100644 --- a/gossip.asciidoc +++ b/gossip.asciidoc @@ -48,7 +48,7 @@ It might be usefull to get familiar with the different terminology that we have | finalize | close| terminate| | technology | Bitcoin Blockchain | encrypted TCP/IP connection | lifetime | until funding spent | while peers are online - +|=== As the Lightning Network is a peer-to-peer network, some initial bootstrapping is required in order for peers to discover each other. Within this chapter From e64d151cfb8201d48cc1dbc36a1d2828b9d4ed31 Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Tue, 26 Jan 2021 16:54:46 +0100 Subject: [PATCH 35/38] more table formatting fixing --- gossip.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gossip.asciidoc b/gossip.asciidoc index 1f1bf66..9d4e5f2 100644 --- a/gossip.asciidoc +++ b/gossip.asciidoc @@ -43,9 +43,9 @@ It might be usefull to get familiar with the different terminology that we have [options="header"] |=== | | Channel Graph |peer to peer network -| Name | channel | connection | -| initiate | open | (re)connect | -| finalize | close| terminate| +| Name | channel | connection +| initiate | open | (re)connect +| finalize | close| terminate | technology | Bitcoin Blockchain | encrypted TCP/IP connection | lifetime | until funding spent | while peers are online |=== From eec465f44eedf322f5b5cf16dce83932ddc19aca Mon Sep 17 00:00:00 2001 From: jerzybrzoska <51721153+jerzybrzoska@users.noreply.github.com> Date: Tue, 26 Jan 2021 17:01:26 +0100 Subject: [PATCH 36/38] node_operations.asciidoc: -m is needed for 'useradd' to work The reader was not asked to create a directory 'bitcoin' on his external drive. `sudo useradd -d /external_drive/bitcoin -s /dev/null bitcoin` will not make `/external_drive/bitcoin` the user's home directory as it can only assign existing directories. `sudo useradd -d /external_drive/bitcoin -s /dev/null bitcoin` cannot make new directories, for this '-m' is needed. --- node_operations.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/node_operations.asciidoc b/node_operations.asciidoc index 6c71e33..a0ab736 100644 --- a/node_operations.asciidoc +++ b/node_operations.asciidoc @@ -277,10 +277,10 @@ In addition, if you have connected an external drive, you will need to tell the On most Linux systems you can create a new user with the +useradd+ command, like this: ---- -$ sudo useradd -d /external_drive/bitcoin -s /dev/null bitcoin +$ sudo useradd -m -d /external_drive/bitcoin -s /dev/null bitcoin ---- -The +d+ flag assigns the user's home directory. In this case, we put it on the external drive. The +s+ flag assigns the user's interactive shell. In this case we set it to +/dev/null+ to disable interactive shell use. The last argument is the new user's username +bitcoin+. +The +m+ and +d+ flags create the user's home directory as specified by /external_drive/bitcoin in this case. The +s+ flag assigns the user's interactive shell. In this case we set it to +/dev/null+ to disable interactive shell use. The last argument is the new user's username +bitcoin+. ==== Node startup From 431ea23458d74a91d9ee7523000ff22921999fc0 Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Wed, 27 Jan 2021 16:02:05 +0100 Subject: [PATCH 37/38] some minor adds to gossip --- gossip.asciidoc | 1 - 1 file changed, 1 deletion(-) diff --git a/gossip.asciidoc b/gossip.asciidoc index dd17229..5961c0f 100644 --- a/gossip.asciidoc +++ b/gossip.asciidoc @@ -49,7 +49,6 @@ It might be usefull to get familiar with the different terminology that we have | technology | Bitcoin Blockchain | encrypted TCP/IP connection | lifetime | until funding spent | while peers are online - As the Lightning Network is a peer-to-peer network, some initial bootstrapping is required in order for peers to discover each other. Within this chapter we'll follow the story of a new peer connecting to the network for the first From 88f822a3c7e8ce12390a748021b91f4379a86c0d Mon Sep 17 00:00:00 2001 From: Rene Pickhardt Date: Thu, 28 Jan 2021 16:57:55 +0100 Subject: [PATCH 38/38] added a table of dns servers --- README.md | 2 +- gossip.asciidoc | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8eb94a7..8e73f21 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ The current status of the book is "IN PROGRESS". See below for status of specifi | [Lightning Applications (LApps)]() | # | :thought_balloon: | | [LN's Future]() | # | :thought_balloon: | -Total Word Count: 83393 +Total Word Count: 89705 Target Word Count: 100,000-120,000 diff --git a/gossip.asciidoc b/gossip.asciidoc index 9d4e5f2..11de102 100644 --- a/gossip.asciidoc +++ b/gossip.asciidoc @@ -59,7 +59,7 @@ discovery, to channel graph syncing and validation. As an initial step, our new node needs to somehow _discover_ at least _one_ peer that is already connected to the network and has a full channel graph (as we'll see later, there's no canonical version as the update dissemination -system is _eventually consistent_). Using on of many initial bootstrapping +system is _eventually consistent_). Using one of many initial bootstrapping protocols to find that first peer, after a connection is established, our new peer now needs to _download_ and _validate_ the channel graph. Once the channel graph has been fully validated, our new peer is ready to start opening channels @@ -80,10 +80,11 @@ connect to on the network. ## Peer Discovery In this section, we'll begin to follow the story of Norman, a new Lightning -node that wishes to join the network as he sets out on his journey to: -discovery a set of bootstrap peers, download and validate the channel graph, -and finally begin the process of ongoing maintain once of the channel graph -itself. +node that wishes to join the network as he sets out on his journey to which consists of 3 steps: + +. discovery a set of bootstrap peers. +. download and validate the channel graph. +. begin the process of ongoing maintainance of the channel graph itself. ### P2P Boostrapping @@ -151,10 +152,25 @@ Before diving into the specifics of BOLT 10, we'll first outline the high level flow of a new node that wishes to use BOLT 10 to join the network. First, a node needs to identify a single, or set of DNS servers that understand -BOLT 10 so they can be used for p2p bootstrapping. There exists no "official" +BOLT 10 so they can be used for p2p bootstrapping. +While BOLT 10 uses lseed.bitcoinstats.com as the seed server as the example there exists no "official" set of DNS seeds for this purpose, but each of the major implementations maintain their own DNS seed, and cross query each other's seeds for redundancy -purposes. DNS seeds exist for both Bitcoin's mainnet and testnet. For the sake +purposes. + +[[dns seeds]] +.Table of known lightning dns seed servers +[options="header"] +|=== +| dns server | Maintainer +| lseed.bitcoinstats.com | Christian Decker +| nodes.lightning.directory | lightning labs (Olaoluwa Osuntokun) +| soa.nodes.lightning.directory | lightning labs (Olaoluwa Osuntokun) +| lseed.darosior.ninja | Antoine Poinsot +|=== + + +DNS seeds exist for both Bitcoin's mainnet and testnet. For the sake of our example, we'll assume the existence of a valid BOLT 10 DNS seed at `nodes.lightning.directory`.