Skip to content

Commit ff2d872

Browse files
Shannon Appelclinerustyrussell
Shannon Appelcline
authored andcommitted
Adjustments per reviews
Including some large-scale changes of punctuation in examples.
1 parent a630180 commit ff2d872

File tree

1 file changed

+25
-32
lines changed

1 file changed

+25
-32
lines changed

11-payment-encoding.md

+25-32
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,9 @@ over Lightning.
66
# Table of Contents
77

88
* [Encoding Overview](#encoding-overview)
9-
* [Requirements](#requirements)
109
* [Human-Readable Part](#human-readable-part)
11-
* [Requirements](#requirements-1)
12-
* [Rationale](#rationale)
1310
* [Data Part](#data-part)
14-
* [Requirements](#requirements-2)
15-
* [Rationale](#rationale-1)
1611
* [Tagged Fields](#tagged-fields)
17-
* [Requirements](#requirements-3)
18-
* [Rationale](#rationale-2)
1912
* [Payer / Payee Interactions](#payer--payee-interactions)
2013
* [Payer / Payee Requirements](#payer--payee-requirements)
2114
* [Implementation](#implementation)
@@ -88,7 +81,7 @@ whatever is being offered in return.
8881
The data part of a Lightning invoice consists of multiple sections:
8982

9083
1. `timestamp`: seconds-since-1970 (35 bits, big-endian)
91-
1. Zero or more tagged parts
84+
1. zero or more tagged parts
9285
1. `signature`: bitcoin-style signature of above (520 bits)
9386

9487
## Requirements
@@ -108,7 +101,7 @@ field specified below).
108101
## Rationale
109102

110103
`signature` covers an exact number of bytes even though the SHA-2
111-
standard actually supports hashing in bit boundaries because it's not widely
104+
standard actually supports hashing in bit boundaries, because it's not widely
112105
implemented. The recovery ID allows public-key recovery, so the
113106
identity of the payee node can be implied.
114107

@@ -123,13 +116,13 @@ Each Tagged Field is of the form:
123116
Currently defined tagged fields are:
124117

125118
* `p` (1): `data_length` 52. 256-bit SHA256 payment_hash. Preimage of this provides proof of payment
126-
* `d` (13): `data_length` variable. short description of purpose of payment (ASCII), e.g. '1 cup of coffee'
119+
* `d` (13): `data_length` variable. Short description of purpose of payment (ASCII), e.g. '1 cup of coffee'
127120
* `n` (19): `data_length` 53. 33-byte public key of the payee node
128121
* `h` (23): `data_length` 52. 256-bit description of purpose of payment (SHA256). This is used to commit to an associated description that is too long to fit, such as on a web page.
129122
* `x` (6): `data_length` variable. `expiry` time in seconds (big-endian). Default is 3600 (1 hour) if not specified.
130123
* `c` (24): `data_length` variable. `min_final_cltv_expiry` to use for the last HTLC in the route. Default is 9 if not specified.
131124
* `f` (9): `data_length` variable, depending on version. Fallback on-chain address: for bitcoin, this starts with a 5-bit `version` and contains a witness program or P2PKH or P2SH address.
132-
* `r` (3): `data_length` variable. one or more entries containing extra routing information for a private route; there may be more than one `r` field
125+
* `r` (3): `data_length` variable. One or more entries containing extra routing information for a private route; there may be more than one `r` field
133126
* `pubkey` (264 bits)
134127
* `short_channel_id` (64 bits)
135128
* `fee_base_msat` (32 bits, big-endian)
@@ -167,7 +160,7 @@ public channel associated with its public key. The `r` field MUST contain
167160
one or more ordered entries, indicating the forward route from a
168161
public node to the final destination. For each entry, the `pubkey` is the
169162
node ID of the start of the channel; `short_channel_id` is the short channel ID
170-
field to identify the channel; and `fee_base_msat`, `fee_proportional_millionths` and `cltv_expiry_delta` are as specified in [BOLT #7](07-routing-gossip.md#the-channel_update-message). A writer MAY include more than one `r` field to
163+
field to identify the channel; and `fee_base_msat`, `fee_proportional_millionths`, and `cltv_expiry_delta` are as specified in [BOLT #7](07-routing-gossip.md#the-channel_update-message). A writer MAY include more than one `r` field to
171164
provide multiple routing options.
172165

173166
A writer MUST pad field data to a multiple of 5 bits, using zeroes.
@@ -274,15 +267,15 @@ Breakdown:
274267
* `1`: Bech32 separator
275268
* `pvjluez`: timestamp (1496314658)
276269
* `p`: payment hash
277-
* `p5`: `data_length` (`p` = 1, `5` = 20. 1 * 32 + 20 == 52)
270+
* `p5`: `data_length` (`p` = 1, `5` = 20; 1 * 32 + 20 == 52)
278271
* `qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypq`: payment hash 0001020304050607080900010203040506070809000102030405060708090102
279272
* `d`: short description
280-
* `pl`: `data_length` (`p` = 1, `l` = 31. 1 * 32 + 31 == 63)
273+
* `pl`: `data_length` (`p` = 1, `l` = 31; 1 * 32 + 31 == 63)
281274
* `2pkx2ctnv5sxxmmwwd5kgetjypeh2ursdae8g6twvus8g6rfwvs8qun0dfjkxaq`: 'Please consider supporting this project'
282275
* `8rkx3yf5tcsyz3d73gafnh3cax9rn449d9p5uxz9ezhhypd0elx87sjle52x86fux2ypatgddc6k63n7erqz25le42c4u4ecky03ylcq`: signature
283276
* `ca784w`: Bech32 checksum
284277
* Signature breakdown:
285-
* `38ec6891345e204145be8a3a99de38e98a39d6a569434e1845c8af7205afcfcc7f425fcd1463e93c32881ead0d6e356d467ec8c02553f9aab15e5738b11f127f` hex of signature data (32 byte r, 32 byte s)
278+
* `38ec6891345e204145be8a3a99de38e98a39d6a569434e1845c8af7205afcfcc7f425fcd1463e93c32881ead0d6e356d467ec8c02553f9aab15e5738b11f127f` hex of signature data (32-byte r, 32-byte s)
286279
* `0` (int) recovery flag contained in `signature`
287280
* `6c6e62630b25fe64410d00004080c1014181c20240004080c1014181c20240004080c1014181c202404081a1fa83632b0b9b29031b7b739b4b232b91039bab83837b93a34b733903a3434b990383937b532b1ba0` hex of data for signing (prefix + data after separator up to the start of the signature)
288281
* `c3d4e83f646fa79a393d75277b1d858db1d1f7ab7137dcb7835db2ecd518e1c9` hex of SHA256 of the preimage
@@ -298,15 +291,15 @@ Breakdown:
298291
* `pvjluez`: timestamp (1496314658)
299292
* `p`: payment hash...
300293
* `d`: short description
301-
* `q5`: `data_length` (`q` = 0, `5` = 20. 0 * 32 + 20 == 20)
294+
* `q5`: `data_length` (`q` = 0, `5` = 20; 0 * 32 + 20 == 20)
302295
* `xysxxatsyp3k7enxv4js`: '1 cup coffee'
303296
* `x`: expiry time
304-
* `qz`: `data_length` (`q` = 0, `z` = 2. 0 * 32 + 2 == 2)
305-
* `pu`: 60 seconds (`p` = 1, `u` = 28. 1 * 32 + 28 == 60)
297+
* `qz`: `data_length` (`q` = 0, `z` = 2; 0 * 32 + 2 == 2)
298+
* `pu`: 60 seconds (`p` = 1, `u` = 28; 1 * 32 + 28 == 60)
306299
* `aztrnwngzn3kdzw5hydlzf03qdgm2hdq27cqv3agm2awhz5se903vruatfhq77w3ls4evs3ch9zw97j25emudupq63nyw24cg27h2rsp`: signature
307300
* `fj9srp`: Bech32 checksum
308301
* Signature breakdown:
309-
* `e89639ba6814e36689d4b91bf125f10351b55da057b00647a8dabaeb8a90c95f160f9d5a6e0f79d1fc2b964238b944e2fa4aa677c6f020d466472ab842bd750e` hex of signature data (32 byte r, 32 byte s)
302+
* `e89639ba6814e36689d4b91bf125f10351b55da057b00647a8dabaeb8a90c95f160f9d5a6e0f79d1fc2b964238b944e2fa4aa677c6f020d466472ab842bd750e` hex of signature data (32-byte r, 32-byte s)
310303
* `1` (int) recovery flag contained in `signature`
311304
* `6c6e626332353030750b25fe64410d00004080c1014181c20240004080c1014181c20240004080c1014181c202404081a0a189031bab81031b7b33332b2818020f00` hex of data for signing (prefix + data after separator up to the start of the signature)
312305
* `3cd6ef07744040556e01be64f68fd9e1565fb47d78c42308b1ee005aca5a0d86` hex of SHA256 of the preimage
@@ -322,12 +315,12 @@ Breakdown:
322315
* `pvjluez`: timestamp (1496314658)
323316
* `p`: payment hash...
324317
* `h`: tagged field: hash of description
325-
* `p5`: `data_length` (`p` = 1, `5` = 20. 1 * 32 + 20 == 52)
318+
* `p5`: `data_length` (`p` = 1, `5` = 20; 1 * 32 + 20 == 52)
326319
* `8yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqs`: SHA256 of 'One piece of chocolate cake, one icecream cone, one pickle, one slice of swiss cheese, one slice of salami, one lollypop, one piece of cherry pie, one sausage, one cupcake, and one slice of watermelon'
327320
* `cc6gd6ql3jrc5yzme8v4ntcewwz5cnw92tz0pc8qcuufvq7khhr8wpald05e92xw006sq94mg8v2ndf4sefvf9sygkshp5zfem29trqq`: signature
328321
* `2yxxz7`: Bech32 checksum
329322
* Signature breakdown:
330-
* `c63486e81f8c878a105bc9d959af1973854c4dc552c4f0e0e0c7389603d6bdc67707bf6be992a8ce7bf50016bb41d8a9b5358652c4960445a170d049ced4558c` hex of signature data (32 byte r, 32 byte s)
323+
* `c63486e81f8c878a105bc9d959af1973854c4dc552c4f0e0e0c7389603d6bdc67707bf6be992a8ce7bf50016bb41d8a9b5358652c4960445a170d049ced4558c` hex of signature data (32-byte r, 32-byte s)
331324
* `0` (int) recovery flag contained in `signature`
332325
* `6c6e626332306d0b25fe64410d00004080c1014181c20240004080c1014181c20240004080c1014181c202404082e1a1c92db7b3f161a001b7689049eea2701b46f8db7513629edf2408fac7eaedc60800` hex of data for signing (prefix + data after separator up to the start of the signature)
333326
* `b6025e8a10539dddbcbe6840a9650707ae3f147b8dcfda338561ada710508916` hex of SHA256 of the preimage
@@ -344,13 +337,13 @@ Breakdown:
344337
* `h`: tagged field: hash of description...
345338
* `p`: payment hash...
346339
* `f`: tagged field: fallback address
347-
* `pp`: `data_length` (`p` = 1. 1 * 32 + 1 == 33)
340+
* `pp`: `data_length` (`p` = 1; 1 * 32 + 1 == 33)
348341
* `3` = 17, so P2PKH address
349342
* `x9et2e20v6pu37c5d9vax37wxq72un98`: 160 bit P2PKH address
350343
* `kmzzhznpurw9sgl2v0nklu2g4d0keph5t7tj9tcqd8rexnd07ux4uv2cjvcqwaxgj7v4uwn5wmypjd5n69z2xm3xgksg28nwht7f6zsp`: signature
351344
* `wp3f9t`: Bech32 checksum
352345
* Signature breakdown:
353-
* `b6c42b8a61e0dc5823ea63e76ff148ab5f6c86f45f9722af0069c7934daff70d5e315893300774c897995e3a7476c8193693d144a36e2645a0851e6ebafc9d0a` hex of signature data (32 byte r, 32 byte s)
346+
* `b6c42b8a61e0dc5823ea63e76ff148ab5f6c86f45f9722af0069c7934daff70d5e315893300774c897995e3a7476c8193693d144a36e2645a0851e6ebafc9d0a` hex of signature data (32-byte r, 32-byte s)
354347
* `1` (int) recovery flag contained in `signature`
355348
* `6c6e746232306d0b25fe64570d0e496dbd9f8b0d000dbb44824f751380da37c6dba89b14f6f92047d63f576e304021a000081018202830384048000810182028303840480008101820283038404808102421898b95ab2a7b341e47d8a34ace9a3e7181e5726538` hex of data for signing (prefix + data after separator up to the start of the signature)
356349
* `00c17b39642becc064615ef196a6cc0cce262f1d8dde7b3c23694aeeda473abe` hex of SHA256 of the preimage
@@ -367,16 +360,16 @@ Breakdown:
367360
* `p`: payment hash...
368361
* `h`: tagged field: hash of description...
369362
* `f`: tagged field: fallback address
370-
* `pp`: `data_length` (`p` = 1. 1 * 32 + 1 == 33)
363+
* `pp`: `data_length` (`p` = 1; 1 * 32 + 1 == 33)
371364
* `3` = 17, so P2PKH address
372365
* `qjmp7lwpagxun9pygexvgpjdc4jdj85f`: 160 bit P2PKH address
373366
* `r`: tagged field: route information
374-
* `9y`: `data_length` (`9` = 5, `y` = 4. 5 * 32 + 4 = 164)
367+
* `9y`: `data_length` (`9` = 5, `y` = 4; 5 * 32 + 4 = 164)
375368
`q20q82gphp2nflc7jtzrcazrra7wwgzxqc8u7754cdlpfrmccae92qgzqvzq2ps8pqqqqqqqqqqqq9qqqvpeuqafqxu92d8lr6fvg0r5gv0heeeqgcrqlnm6jhphu9y00rrhy4grqszsvpcgpy9qqqqqqqqqqqq7qqzq`: pubkey `029e03a901b85534ff1e92c43c74431f7ce72046060fcf7a95c37e148f78c77255`, `short_channel_id` 0102030405060708, `fee_base_msat` 1 millisatoshi, `fee_proportional_millionths` 20, `cltv_expiry_delta` 3. pubkey `039e03a901b85534ff1e92c43c74431f7ce72046060fcf7a95c37e148f78c77255`, `short_channel_id` 030405060708090a, `fee_base_msat` 2 millisatoshi, `fee_proportional_millionths` 30, `cltv_expiry_delta` 4.
376369
* `j9n4evl6mr5aj9f58zp6fyjzup6ywn3x6sk8akg5v4tgn2q8g4fhx05wf6juaxu9760yp46454gpg5mtzgerlzezqcqvjnhjh8z3g2qq`: signature
377370
* `dhhwkj`: Bech32 checksum
378371
* Signature breakdown:
379-
* `91675cb3fad8e9d915343883a49242e074474e26d42c7ed914655689a8074553733e8e4ea5ce9b85f69e40d755a55014536b12323f8b220600c94ef2b9c51428` hex of signature data (32 byte r, 32 byte s)
372+
* `91675cb3fad8e9d915343883a49242e074474e26d42c7ed914655689a8074553733e8e4ea5ce9b85f69e40d755a55014536b12323f8b220600c94ef2b9c51428` hex of signature data (32-byte r, 32-byte s)
380373
* `0` (int) recovery flag contained in `signature`
381374
* `6c6e626332306d0b25fe64410d00004080c1014181c20240004080c1014181c20240004080c1014181c202404082e1a1c92db7b3f161a001b7689049eea2701b46f8db7513629edf2408fac7eaedc60824218825b0fbee0f506e4ca122326620326e2b26c8f448ca4029e03a901b85534ff1e92c43c74431f7ce72046060fcf7a95c37e148f78c77255010203040506070800000001000000140003039e03a901b85534ff1e92c43c74431f7ce72046060fcf7a95c37e148f78c77255030405060708090a000000020000001e00040` hex of data for signing (prefix + data after separator up to the start of the signature)
382375
* `ff68246c5ad4b48c90cf8ff3b33b5cea61e62f08d0e67910ffdce1edecade71b` hex of SHA256 of the preimage
@@ -393,13 +386,13 @@ Breakdown:
393386
* `h`: tagged field: hash of description...
394387
* `p`: payment hash...
395388
* `f`: tagged field: fallback address
396-
* `pp`: `data_length` (`p` = 1. 1 * 32 + 1 == 33)
389+
* `pp`: `data_length` (`p` = 1; 1 * 32 + 1 == 33)
397390
* `j` = 18, so P2SH address
398391
* `3a24vwu6r8ejrss3axul8rxldph2q7z9`: 160 bit P2SH address
399392
* `kmrgvr7xlaqm47apw3d48zm203kzcq357a4ls9al2ea73r8jcceyjtya6fu5wzzpe50zrge6ulk4nvjcpxlekvmxl6qcs9j3tz0469gq`: signature
400393
* `5g658y`: Bech32 checksum
401394
* Signature breakdown:
402-
* `b6c6860fc6ff41bafba1745b538b6a7c6c2c0234f76bf817bf567be88cf2c632492c9dd279470841cd1e21a33ae7ed59b25809bf9b3366fe81881651589f5d15` hex of signature data (32 byte r, 32 byte s)
395+
* `b6c6860fc6ff41bafba1745b538b6a7c6c2c0234f76bf817bf567be88cf2c632492c9dd279470841cd1e21a33ae7ed59b25809bf9b3366fe81881651589f5d15` hex of signature data (32-byte r, 32-byte s)
403396
* `0` (int) recovery flag contained in `signature`
404397
* `6c6e626332306d0b25fe64570d0e496dbd9f8b0d000dbb44824f751380da37c6dba89b14f6f92047d63f576e304021a000081018202830384048000810182028303840480008101820283038404808102421947aaab1dcd0cf990e108f4dcf9c66fb437503c228` hex of data for signing (prefix + data after separator up to the start of the signature)
405398
* `64f1ff500bcc62a1b211cd6db84a1d93d1f77c6a132904465b6ff912420176be` hex of SHA256 of the preimage
@@ -414,13 +407,13 @@ Breakdown:
414407
* `h`: tagged field: hash of description...
415408
* `p`: payment hash...
416409
* `f`: tagged field: fallback address
417-
* `pp`: `data_length` (`p` = 1. 1 * 32 + 1 == 33)
410+
* `pp`: `data_length` (`p` = 1; 1 * 32 + 1 == 33)
418411
* `q`: 0, so witness version 0
419412
* `w508d6qejxtdg4y5r3zarvary0c5xw7k`: 160 bits = P2WPKH.
420413
* `epvrhrm9s57hejg0p662ur5j5cr03890fa7k2pypgttmh4897d3raaq85a293e9jpuqwl0rnfuwzam7yr8e690nd2ypcq9hlkdwdvycq`: signature
421414
* `a0qza8`: Bech32 checksum
422415
* Signature breakdown:
423-
* `c8583b8f65853d7cc90f0eb4ae0e92a606f89caf4f7d65048142d7bbd4e5f3623ef407a75458e4b20f00efbc734f1c2eefc419f3a2be6d51038016ffb35cd613` hex of signature data (32 byte r, 32 byte s)
416+
* `c8583b8f65853d7cc90f0eb4ae0e92a606f89caf4f7d65048142d7bbd4e5f3623ef407a75458e4b20f00efbc734f1c2eefc419f3a2be6d51038016ffb35cd613` hex of signature data (32-byte r, 32-byte s)
424417
* `0` (int) recovery flag contained in `signature`
425418
* `6c6e626332306d0b25fe64570d0e496dbd9f8b0d000dbb44824f751380da37c6dba89b14f6f92047d63f576e304021a00008101820283038404800081018202830384048000810182028303840480810242103a8f3b740cc8cb6a2a4a0e22e8d9d191f8a19deb0` hex of data for signing (prefix + data after separator up to the start of the signature)
426419
* `b3df27aaa01d891cc9de272e7609557bdf4bd6fd836775e4470502f71307b627` hex of SHA256 of the preimage
@@ -435,13 +428,13 @@ Breakdown:
435428
* `h`: tagged field: hash of description...
436429
* `p`: payment hash...
437430
* `f`: tagged field: fallback address
438-
* `p4`: `data_length` (`p` = 1, `4` = 21. 1 * 32 + 21 == 53)
431+
* `p4`: `data_length` (`p` = 1, `4` = 21; 1 * 32 + 21 == 53)
439432
* `q`: 0, so witness version 0
440433
* `rp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q`: 260 bits = P2WSH.
441434
* `28j0v3rwgy9pvjnd48ee2pl8xrpxysd5g44td63g6xcjcu003j3qe8878hluqlvl3km8rm92f5stamd3jw763n3hck0ct7p8wwj463cq`: signature
442435
* `l26ava`: Bech32 checksum
443436
* Signature breakdown:
444-
* `51e4f6446e410a164a6da9f39507e730c26241b4456ab6ea28d1b12c71ef8ca20c9cfe3dffc07d9f8db671ecaa4d20beedb193bda8ce37c59f85f82773a55d47` hex of signature data (32 byte r, 32 byte s)
437+
* `51e4f6446e410a164a6da9f39507e730c26241b4456ab6ea28d1b12c71ef8ca20c9cfe3dffc07d9f8db671ecaa4d20beedb193bda8ce37c59f85f82773a55d47` hex of signature data (32-byte r, 32-byte s)
445438
* `0` (int) recovery flag contained in `signature`
446439
* `6c6e626332306d0b25fe64570d0e496dbd9f8b0d000dbb44824f751380da37c6dba89b14f6f92047d63f576e304021a00008101820283038404800081018202830384048000810182028303840480810243500c318a1e0a628b34025e8c9019ab6d09b64c2b3c66a693d0dc63194b02481931000` hex of data for signing (prefix + data after separator up to the start of the signature)
447440
* `399a8b167029fda8564fd2e99912236b0b8017e7d17e416ae17307812c92cf42` hex of SHA256 of the preimage

0 commit comments

Comments
 (0)