summaryrefslogtreecommitdiff
path: root/cd/4726249ef4524f346be79a29b035056d74fbd3
blob: 772a6a5b46f24d5dd94af4b7126f4bbb48a39921 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
Return-Path: <lloyd.fourn@gmail.com>
Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137])
 by lists.linuxfoundation.org (Postfix) with ESMTP id 0F10EC0001
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Wed, 10 Mar 2021 00:21:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by smtp4.osuosl.org (Postfix) with ESMTP id 099A44EBC2
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Wed, 10 Mar 2021 00:21:28 +0000 (UTC)
X-Virus-Scanned: amavisd-new at osuosl.org
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Level: 
X-Spam-Status: No, score=-2.099 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001]
 autolearn=ham autolearn_force=no
Authentication-Results: smtp4.osuosl.org (amavisd-new);
 dkim=pass (2048-bit key) header.d=gmail.com
Received: from smtp4.osuosl.org ([127.0.0.1])
 by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id QHeYVhkIbAU4
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Wed, 10 Mar 2021 00:21:26 +0000 (UTC)
X-Greylist: whitelisted by SQLgrey-1.8.0
Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com
 [IPv6:2607:f8b0:4864:20::635])
 by smtp4.osuosl.org (Postfix) with ESMTPS id 2E50D4EBBF
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Wed, 10 Mar 2021 00:21:26 +0000 (UTC)
Received: by mail-pl1-x635.google.com with SMTP id a24so7565533plm.11
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Tue, 09 Mar 2021 16:21:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to;
 bh=iM56/QbSksUNXb66CrEdatJZCcoCwWLAEkqFSJ0fLcY=;
 b=HE2dSRSKlAtiNSF04jfCSdmHFHy6kZ2ATpE0Kw3dv79YP9yL2D8zt4E6sZBnlobz79
 HAyarpGTKVlfFwuAWBHL9ms8baa0NGablEQoMmkaOC0jGL+pSH8SAxpYRgZHGje17sIN
 0PO1qUs0xxGWfanCafr2VNEQ8iIerOB8f906u9XVkIB4zJH8rXHd0z+q9O0WrUjxdFgZ
 jo1VZsbxlF2sE+KPUIV3DxyHBJlZ0I8PX2FXeQzvbVvNT8uKDFLHSLACdGe1NieyoVpz
 dCPUYGkNLQw4pQlkMhehmYs8OiAjStqD7jkbZx71D3+V0YuBH9Wgq7dHjzyvu3HsBGT3
 7MpQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to;
 bh=iM56/QbSksUNXb66CrEdatJZCcoCwWLAEkqFSJ0fLcY=;
 b=bJ1o77mkyV/XqtDmx5MtsENtr5N7Z+ifBN6StyQ50IrYx9GVmnqLu+htdigcD3gZdP
 mpQDBwAWhTHug0ikP9sRd+5213npidqPkpum2qyXWU53YkIn5U8yOCQJXhdIqDFChfQ9
 zuijW0xBS98EbvTogEL/jLrwsw9DVkx2vki+DDP/nhkV201vsswf7VpBY0wyhTMqz3dc
 4uMMtWXj5sLj84B6sCfP9nvBI/aC1aPkBIwuUftBuPSLK4A06kDPxmRcjvLJ5QnOM1+H
 emgqnUQk4lfZX92aGZwHChtduWllsvpTVC0G9asrhBTRa0NLBS6tVlzdYGoFPMnA0TXe
 +XYw==
X-Gm-Message-State: AOAM530IW37hAsauZMVn3SMUl3YRMG+FWM6a5IvFpiqNzPjiM7oQFk79
 G9UTBP8g3edOKbtUclEXZCfjyP+r0OfGf9EcPNhkMiSksao=
X-Google-Smtp-Source: ABdhPJzY8KZiuPl+Rbo0V920F3MA+aZTYrwgre72wr25Y+71zlxDkBgU1xJwUwZRKSLXjjjlmo6HqxCR0DjpBiBhywg=
X-Received: by 2002:a17:902:59c9:b029:e6:5cdd:f709 with SMTP id
 d9-20020a17090259c9b02900e65cddf709mr416311plj.20.1615335685432; Tue, 09 Mar
 2021 16:21:25 -0800 (PST)
MIME-Version: 1.0
References: <1dd8c285-e3f4-4f03-d608-103a5026146d@achow101.com>
In-Reply-To: <1dd8c285-e3f4-4f03-d608-103a5026146d@achow101.com>
From: Lloyd Fournier <lloyd.fourn@gmail.com>
Date: Wed, 10 Mar 2021 11:20:58 +1100
Message-ID: <CAH5Bsr22oQ_yOD1eom6gZhUVbr+bMj2W8rfWO=Edujhj9bNsEg@mail.gmail.com>
To: Andrew Chow <achow101-lists@achow101.com>, 
 Bitcoin Protocol Discussion <bitcoin-dev@lists.linuxfoundation.org>
Content-Type: multipart/alternative; boundary="000000000000b92b6a05bd23a520"
X-Mailman-Approved-At: Wed, 10 Mar 2021 00:53:23 +0000
Subject: Re: [bitcoin-dev] New PSBT version proposal
X-BeenThere: bitcoin-dev@lists.linuxfoundation.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org>
List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>, 
 <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe>
List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/>
List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org>
List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help>
List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>, 
 <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Mar 2021 00:21:28 -0000

--000000000000b92b6a05bd23a520
Content-Type: text/plain; charset="UTF-8"

Hi Andrew & all,

I've been working with PSBTs for a little while now. FWIW I agree with the
change of removing the global tx and having the input/output data stored
together in the new unified structures.

One thing I've been wondering about is how output descriptors could fit
into PSBTs. They are useful since they allow you to determine the maximum
satisfaction weight for inputs so you can properly align fees as things get
added. I haven't seen any discussion about including them in this revision.
Is it simply a matter of time before they make it into a subsequent PSBT
spec or is there something I'm missing conceptually?

Cheers,

LL

On Thu, 10 Dec 2020 at 09:33, Andrew Chow via bitcoin-dev <
bitcoin-dev@lists.linuxfoundation.org> wrote:

> Hi All,
>
> I would like to propose a new PSBT version that addresses a few
> deficiencies in the current PSBT v0. As this will be backwards
> incompatible, a new PSBT version will be used, v1.
>
> The primary change is to truly have all input and output data for each
> in their respective maps. Instead of having to parse an unsigned
> transaction and lookup some data from there, and other data from the
> correct map, all of the data for an input will be contained in its map.
> Doing so also disallows PSBT_GLOBAL_UNSIGNED_TX in this new version.
> Thus I propose that the following fields be added:
>
> Global:
> * PSBT_GLOBAL_TX_VERSION = 0x02
>    * Key: empty
>    * Value: 32-bit little endian unsigned integer for the transaction
> version number. Must be provided in PSBT v1 and omitted in v0.
> * PSBT_GLOBAL_PREFERRED_LOCKTIME = 0x03
>    * Key: empty
>    * Value: 32 bit little endian unsigned integer for the preferred
> transaction lock time. Must be omitted in PSBT v0. May be provided in
> PSBT v1, assumed to be 0 if not provided.
> * PSBT_GLOBAL_INPUT_COUNT = 0x04
>    * Key: empty
>    * Value: Compact size unsigned integer. Number of inputs in this
> PSBT. Must be provided in PSBT v1 and omitted in v0.
> * PSBT_GLOBAL_OUTPUT_COUNT = 0x05
>    * Key: empty
>    * Value: Compact size unsigned integer. Number of outputs in this
> PSBT. Must be provided in PSBT v1 and omitted in v0.
>
> Input:
> * PSBT_IN_PREVIOUS_TXID = 0x0e
>    * Key: empty
>    * Value: 32 byte txid of the previous transaction whose output at
> PSBT_IN_OUTPUT_INDEX is being spent. Must be provided in PSBT v1 and
> omitted in v0.
> * PSBT_IN_OUTPUT_INDEX = 0x0f
>    * Key: empty
>    * Value: 32 bit little endian integer for the index of the output
> being spent. Must be provided in PSBT v1 and omitted in v0.
> * PSBT_IN_SEQUENCE = 0x0f
>    * Key: empty
>    * Value: 32 bit unsigned little endian integer for the sequence
> number. Must be omitted in PSBT v0. May be provided in PSBT v1 assumed
> to be max sequence (0xffffffff) if not provided.
> * PSBT_IN_REQUIRED_LOCKTIME = 0x10
>    * Key: empty
>    * Value: 32 bit unsigned little endian integer for the lock time that
> this input requires. Must be omitted in PSBT v0. May be provided in PSBT
> v1, assumed to be 0 if not provided.
>
> Output:
> * PSBT_OUT_VALUE = 0x03
>    * Key: empty
>    * Value: 64-bit unsigned little endian integer for the output's
> amount in satoshis. Must be provided in PSBT v1 and omitted in v0.
> * PSBT_OUT_OUTPUT_SCRIPT = 0x04
>    * Key: empty
>    * Value: The script for this output. Otherwise known as the
> scriptPubKey. Must be provided in PSBT v1 and omitted in v0.
>
> This change allows for PSBT to be used in the construction of
> transactions. With these new fields, inputs and outputs can be added as
> needed. One caveat is that there is no longer a unique transaction
> identifier so more care must be taken when combining PSBTs.
> Additionally, adding new inputs and outputs must be done such that
> signatures are not invalidated. This may be harder to specify.
>
> An important thing to note in this proposal are the fields
> PSBT_GLOBAL_PREFERRED_LOCKTIME and PSBT_IN_REQUIRED_LOCKTIME. A Bitcoin
> transaction only has a single locktime yet a PSBT may have multiple
> locktimes. To choose the locktime for the transaction, finalizers must
> choose the maximum of all of the *_LOCKTIME fields.
> PSBT_IN_REQUIRED_LOCKTIME is added because some inputs, such as those
> involving OP_CHECKLOCKTIMEVERIFY, require a specific minimum locktime to
> be set. This field allows finalizers to choose a locktime that is high
> enough for all inputs without needing to understand the scripts
> involved. The PSBT_GLOBAL_PREFERRED_LOCKTIME is the locktime to use if
> no inputs require a particular locktime.
>
> As these changes disallow the PSBT_GLOBAL_UNSIGNED_TX field, PSBT v1
> needs the version number bump to enforce backwards incompatibility.
> However once the inputs and outputs of a PSBT are decided, a PSBT could
> be "downgraded" back to v0 by creating the unsigned transaction from the
> above fields, and then dropping these new fields.
>
> If the list finds that these changes are reasonable, I will write a PR
> to modify BIP 174 to incorporate them.
>
> Thanks,
> Andrew Chow
>
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>

--000000000000b92b6a05bd23a520
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hi Andrew &amp; all,</div><div><br></div><div>I&#39;v=
e been working with PSBTs for a little while now. FWIW I agree with the cha=
nge of removing the global tx and having the input/output data stored toget=
her in the new unified structures.</div><div><br></div><div>One thing I&#39=
;ve been wondering about is how output descriptors could fit into PSBTs. Th=
ey are useful since they allow you to determine the maximum satisfaction we=
ight for inputs so you can properly align fees as things get added. I haven=
&#39;t seen any discussion about including them in this revision. Is it sim=
ply a matter of time before they make it into a subsequent PSBT spec or is =
there something I&#39;m missing conceptually?</div><div><br></div><div>Chee=
rs,</div><div><br></div><div>LL<br></div></div><br><div class=3D"gmail_quot=
e"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, 10 Dec 2020 at 09:33, Andr=
ew Chow via bitcoin-dev &lt;<a href=3D"mailto:bitcoin-dev@lists.linuxfounda=
tion.org">bitcoin-dev@lists.linuxfoundation.org</a>&gt; wrote:<br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex">Hi All,<br>
<br>
I would like to propose a new PSBT version that addresses a few <br>
deficiencies in the current PSBT v0. As this will be backwards <br>
incompatible, a new PSBT version will be used, v1.<br>
<br>
The primary change is to truly have all input and output data for each <br>
in their respective maps. Instead of having to parse an unsigned <br>
transaction and lookup some data from there, and other data from the <br>
correct map, all of the data for an input will be contained in its map. <br=
>
Doing so also disallows PSBT_GLOBAL_UNSIGNED_TX in this new version. <br>
Thus I propose that the following fields be added:<br>
<br>
Global:<br>
* PSBT_GLOBAL_TX_VERSION =3D 0x02<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 32-bit little endian unsigned integer for the transac=
tion <br>
version number. Must be provided in PSBT v1 and omitted in v0.<br>
* PSBT_GLOBAL_PREFERRED_LOCKTIME =3D 0x03<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 32 bit little endian unsigned integer for the preferr=
ed <br>
transaction lock time. Must be omitted in PSBT v0. May be provided in <br>
PSBT v1, assumed to be 0 if not provided.<br>
* PSBT_GLOBAL_INPUT_COUNT =3D 0x04<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: Compact size unsigned integer. Number of inputs in th=
is <br>
PSBT. Must be provided in PSBT v1 and omitted in v0.<br>
* PSBT_GLOBAL_OUTPUT_COUNT =3D 0x05<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: Compact size unsigned integer. Number of outputs in t=
his <br>
PSBT. Must be provided in PSBT v1 and omitted in v0.<br>
<br>
Input:<br>
* PSBT_IN_PREVIOUS_TXID =3D 0x0e<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 32 byte txid of the previous transaction whose output=
 at <br>
PSBT_IN_OUTPUT_INDEX is being spent. Must be provided in PSBT v1 and <br>
omitted in v0.<br>
* PSBT_IN_OUTPUT_INDEX =3D 0x0f<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 32 bit little endian integer for the index of the out=
put <br>
being spent. Must be provided in PSBT v1 and omitted in v0.<br>
* PSBT_IN_SEQUENCE =3D 0x0f<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 32 bit unsigned little endian integer for the sequenc=
e <br>
number. Must be omitted in PSBT v0. May be provided in PSBT v1 assumed <br>
to be max sequence (0xffffffff) if not provided.<br>
* PSBT_IN_REQUIRED_LOCKTIME =3D 0x10<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 32 bit unsigned little endian integer for the lock ti=
me that <br>
this input requires. Must be omitted in PSBT v0. May be provided in PSBT <b=
r>
v1, assumed to be 0 if not provided.<br>
<br>
Output:<br>
* PSBT_OUT_VALUE =3D 0x03<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: 64-bit unsigned little endian integer for the output&=
#39;s <br>
amount in satoshis. Must be provided in PSBT v1 and omitted in v0.<br>
* PSBT_OUT_OUTPUT_SCRIPT =3D 0x04<br>
=C2=A0=C2=A0 * Key: empty<br>
=C2=A0=C2=A0 * Value: The script for this output. Otherwise known as the <b=
r>
scriptPubKey. Must be provided in PSBT v1 and omitted in v0.<br>
<br>
This change allows for PSBT to be used in the construction of <br>
transactions. With these new fields, inputs and outputs can be added as <br=
>
needed. One caveat is that there is no longer a unique transaction <br>
identifier so more care must be taken when combining PSBTs. <br>
Additionally, adding new inputs and outputs must be done such that <br>
signatures are not invalidated. This may be harder to specify.<br>
<br>
An important thing to note in this proposal are the fields <br>
PSBT_GLOBAL_PREFERRED_LOCKTIME and PSBT_IN_REQUIRED_LOCKTIME. A Bitcoin <br=
>
transaction only has a single locktime yet a PSBT may have multiple <br>
locktimes. To choose the locktime for the transaction, finalizers must <br>
choose the maximum of all of the *_LOCKTIME fields. <br>
PSBT_IN_REQUIRED_LOCKTIME is added because some inputs, such as those <br>
involving OP_CHECKLOCKTIMEVERIFY, require a specific minimum locktime to <b=
r>
be set. This field allows finalizers to choose a locktime that is high <br>
enough for all inputs without needing to understand the scripts <br>
involved. The PSBT_GLOBAL_PREFERRED_LOCKTIME is the locktime to use if <br>
no inputs require a particular locktime.<br>
<br>
As these changes disallow the PSBT_GLOBAL_UNSIGNED_TX field, PSBT v1 <br>
needs the version number bump to enforce backwards incompatibility. <br>
However once the inputs and outputs of a PSBT are decided, a PSBT could <br=
>
be &quot;downgraded&quot; back to v0 by creating the unsigned transaction f=
rom the <br>
above fields, and then dropping these new fields.<br>
<br>
If the list finds that these changes are reasonable, I will write a PR <br>
to modify BIP 174 to incorporate them.<br>
<br>
Thanks,<br>
Andrew Chow<br>
<br>
_______________________________________________<br>
bitcoin-dev mailing list<br>
<a href=3D"mailto:bitcoin-dev@lists.linuxfoundation.org" target=3D"_blank">=
bitcoin-dev@lists.linuxfoundation.org</a><br>
<a href=3D"https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev" =
rel=3D"noreferrer" target=3D"_blank">https://lists.linuxfoundation.org/mail=
man/listinfo/bitcoin-dev</a><br>
</blockquote></div>

--000000000000b92b6a05bd23a520--