From ad10d550fc4d005ae6ccc7480e33525a7a02aec4 Mon Sep 17 00:00:00 2001 From: Ferdinando Ametrano Date: Fri, 14 Aug 2026 19:23:44 +0200 Subject: [PATCH] bip-0375: say the version byte belongs to the identifier, not to the field "The PSBT_OUT_SP_V0_INFO should be serialized as a zero byte for the version, followed by the 33 bytes of the scan key and then 33 bytes for the spend key" names the field, and the field is 66 bytes: its table entry is "<33 byte scan key> <33 byte spend key>", the test vectors carry 66, and the validator refuses anything else. The sentence is in the Unique Identification section and was added with it, so what it describes is the output script that stands in for a silent payment output when building the unsigned transaction that identifies the psbt -- 67 bytes there, and nothing about the field. Read as the field's own serialization it contradicts the table, which is how it first read here. Only the wording changes. --- bip-0375.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0375.mediawiki b/bip-0375.mediawiki index 7d6089a469..74fe6401c4 100644 --- a/bip-0375.mediawiki +++ b/bip-0375.mediawiki @@ -146,7 +146,7 @@ If only PSBT_OUT_SCRIPT is present for an output, then the output is not being s ===Unique Identification=== Silent payment capable PSBTs can be uniquely identified the same way as PSBTv2s, except when including silent payment outputs. If an output contains the PSBT_OUT_SP_V0_INFO field, it must use that field instead of PSBT_OUT_SCRIPT as the output script when creating the unsigned transaction used for unique identification. ''' Why use PSBT_OUT_SP_V0_INFO when serializing for a unique identifier?''' Since the same silent payment capable PSBT is valid whether or not a PSBT_OUT_SCRIPT is included in an output that has PSBT_OUT_SP_V0_INFO set, using the PSBT_OUT_SCRIPT if present for the unique identifier will cause malleability. The identifier will be different depending on whether PSBT_OUT_SCRIPT is present, so always using PSBT_OUT_SP_V0_INFO if it exists makes sure the PSBT is always identified uniquely. -The PSBT_OUT_SP_V0_INFO should be serialized as a zero byte for the version, followed by the 33 bytes of the scan key and then 33 bytes for the spend key. +In that unsigned transaction, the output script of such an output is a zero byte for the version, followed by the 33 bytes of the scan key and then 33 bytes for the spend key; the PSBT_OUT_SP_V0_INFO field itself is the two keys, without the version byte. ==Roles==