@@ -234,26 +234,30 @@ These session-specific parameters use a bech32-inspired encoding.
234
234
The HRP is used as the parameter key, followed by the '1' separator,
235
235
followed by the parameter value encoded using the bech32 character set in
236
236
[ uppercase] ( #uppercase-url ) . No checksum is used. Parameters are separated
237
- by a ` - ` character (previously a ` + ` separator [ was specified ] ( #bip-77 ) ) .
237
+ by a ` - ` character.
238
238
239
- The following parameters are defined, and must be provided in reverse
240
- lexicographical order:
239
+ The following parameters are defined, and must be provided in lexicographical
240
+ order:
241
241
242
- - ` RK ` : encodes the * receiver key* as a 33-byte compressed public key.
243
- Senders will initiate HPKE with the receiver using this key.
242
+ - ` EX ` : specifies a [ session
243
+ expiration] ( #session-expiration ) in [ unix
244
+ time] ( https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_16 ) .
244
245
- ` OH ` : encodes an alternate format of the OHTTP Key Configuration of
245
246
the directory. It consists of a 33-byte compressed public key of the
246
247
directory's OHTTP Gateway, prefixed by the 2-byte Key Identifier. A [
247
248
RFC 9458 Key
248
249
Configuration] ( https://www.ietf.org/rfc/rfc9458.html#section-3.1 )
249
250
is reconstructed by assuming the HPKE KEM ID and Symmetric Algorithms
250
251
are [ fixed] ( #secp256k1-hybrid-public-key-encryption ) .
251
- - ` EX ` : specifies a [ session
252
- expiration] ( #session-expiration ) in [ unix
253
- time] ( https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_16 ) .
252
+ - ` RK ` : encodes the * receiver key* as a 33-byte compressed public key.
253
+ Senders will initiate HPKE with the receiver using this key.
254
254
255
255
For example, a properly encoded endpoint Bitcoin URI looks like this
256
- ` bitcoin:tb1q6q6de88mj8qkg0q5lupmpfexwnqjsr4d2gvx2p?amount=0.00666666&pjos=0&pj=HTTPS://PAYJO.IN/TXJCGKTKXLUUZ%23RK1Q0DJS3VVDXWQQTLQ8022QGXSX7ML9PHZ6EDSF6AKEWQG758JPS2EV-OH1QYPM59NK2LXXS4890SUAXXYT25Z2VAPHP0X7YEYCJXGWAG6UG9ZU6NQ-EX1WKV8CEC `
256
+ ` bitcoin:tb1q6q6de88mj8qkg0q5lupmpfexwnqjsr4d2gvx2p?amount=0.00666666&pjos=0&pj=HTTPS://PAYJO.IN/TXJCGKTKXLUUZ%23EX1WKV8CEC-OH1QYPM59NK2LXXS4890SUAXXYT25Z2VAPHP0X7YEYCJXGWAG6UG9ZU6NQ-RK1Q0DJS3VVDXWQQTLQ8022QGXSX7ML9PHZ6EDSF6AKEWQG758JPS2EV `
257
+
258
+ Until 2026 implementations SHOULD also accept ` + ` as a fragment parameter
259
+ separator and not enforce parameter ordering requirements, for compatibility
260
+ with the [ previous version of this document] ( #changelog ) .
257
261
258
262
### Sender Original PSBT Messaging
259
263
@@ -711,8 +715,6 @@ receiver also specifies the directory.
711
715
712
716
## Backwards compatibility
713
717
714
- ### BIP 78
715
-
716
718
Senders not supporting Payjoin will just ignore the ` pj ` parameter and
717
719
proceed to typical address-based transaction flows.
718
720
@@ -728,18 +730,6 @@ seconds or else the directory should respond with an `unavailable` JSON
728
730
error code as [ defined in BIP
729
731
78] ( https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki#receivers-well-known-errors ) .
730
732
731
- ### BIP 77
732
-
733
- A previous version of this document specified ` + ` as the fragment parameter
734
- separator. This can cause issues due to a common convention (not specified in
735
- RFC 3986, but in RFC 1866 in relation to HTML form submission and query
736
- parameters, not URI fragments) of representing ` ` with ` + ` in URI query
737
- parameters.
738
-
739
- As a result of this change implementations are encouraged to still accept ` + `
740
- delimited fragment parameters for during 2026 (a grace period of just under 6
741
- months).
742
-
743
733
## Reference implementation
744
734
745
735
A production reference implementation client can be found at
@@ -748,3 +738,15 @@ directory, and development kit may be found here:
748
738
< https://github.com/payjoin/rust-payjoin > . Source code for an Oblivious
749
739
HTTP relay implementation may be found here:
750
740
< https://github.com/payjoin/ohttp-relay > .
741
+
742
+ ## Changelog
743
+
744
+ - 0.2.0 2025-07-08
745
+ - Change fragment parameter delimiter from ` + ` to ` - ` to improve
746
+ compatibility with generic URI parsing libraries, and order them
747
+ lexicographically. ` + ` can cause issues due to a common convention (not
748
+ specified in RFC 3986, but in RFC 1866, in relation to HTML form
749
+ submission and query parameters) of interpreting ` + ` as ` ` when decoding
750
+ URIs.
751
+ - 0.1.0 2025-05-28
752
+ - First merged Draft version of BIP 77
0 commit comments