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
|
Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191]
helo=mx.sourceforge.net)
by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76)
(envelope-from <stephane@kill-bill.org>) id 1WEPND-0004d7-Ha
for bitcoin-development@lists.sourceforge.net;
Fri, 14 Feb 2014 20:28:35 +0000
Received-SPF: pass (sog-mx-1.v43.ch3.sourceforge.com: domain of kill-bill.org
designates 209.85.220.51 as permitted sender)
client-ip=209.85.220.51; envelope-from=stephane@kill-bill.org;
helo=mail-pa0-f51.google.com;
Received: from mail-pa0-f51.google.com ([209.85.220.51])
by sog-mx-1.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128)
(Exim 4.76) id 1WEPNC-0001im-E8
for bitcoin-development@lists.sourceforge.net;
Fri, 14 Feb 2014 20:28:35 +0000
Received: by mail-pa0-f51.google.com with SMTP id ld10so12814113pab.38
for <bitcoin-development@lists.sourceforge.net>;
Fri, 14 Feb 2014 12:28:28 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20130820;
h=x-gm-message-state:content-type:mime-version:subject:from
:in-reply-to:date:cc:message-id:references:to;
bh=Fcd/m5trMbC0eSx5R1zhOsQtpd1jfV9ISrMogdNJcqo=;
b=J5ULrHpxQScs0mWMbCsWxfznmKR8++JCzf6B7jfUxOaI35bppRsSBkYJ4YI3UkPEdD
jK2kfL6R5unv3guIkL+YyEDoH+VYJptsTT0wGAjSNUpG5wg+crusyBfhTBaVc9XBiXT8
H1rpWJT3weu8Ri/IvayN7vyDJOA0OV9x4kwmLypQCP3UwazoDIWivpIhG1q3lCsVRLFS
12S0TBtwQyb1fpN99+g7mRRMHz6uxvugtMUQT4tmf+F0GJodrosjxaCXlOGM0opoo95g
XoLxKsl4U1y5WcUmyx1/CpnxDeChSM1I11AeTa8uILzoAJvKLsh9Dm2bH94wB/6F5dIo
Svlg==
X-Gm-Message-State: ALoCoQkNhkQqSIWBSCUubRSG8WpUUjL+5Svh5yLFEpTtv3IFe7r2JCgoxEakp9TVw9qWAjOTbyH2
X-Received: by 10.66.121.68 with SMTP id li4mr11429400pab.33.1392409708452;
Fri, 14 Feb 2014 12:28:28 -0800 (PST)
Received: from [192.168.1.104] (adsl-71-146-11-192.dsl.pltn13.sbcglobal.net.
[71.146.11.192]) by mx.google.com with ESMTPSA id
iq10sm20196216pbc.14.2014.02.14.12.28.26 for <multiple recipients>
(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
Fri, 14 Feb 2014 12:28:27 -0800 (PST)
Content-Type: multipart/alternative;
boundary="Apple-Mail=_347698E4-F605-4008-8465-350BC552A927"
Mime-Version: 1.0 (Mac OS X Mail 6.6 \(1510\))
From: Stephane Brossier <stephane@kill-bill.org>
In-Reply-To: <CAEY8wq40RxeUYYJS2m=xq26iTd2NE64WR7QOUO0+yR-MJQCoxQ@mail.gmail.com>
Date: Fri, 14 Feb 2014 12:28:24 -0800
Message-Id: <5F91BEBF-ECDD-4CBD-A85E-FD7E7DB3F01F@kill-bill.org>
References: <E1FDB3F2-25ED-4B99-979E-12CE943CBD66@kill-bill.org>
<CANEZrP10z6_UAHD97mj22kVEGyXgHPQ2PdP_8RxHT5Py+xRP_A@mail.gmail.com>
<D6BCC0C4-EF22-4DE8-868E-825D19C387E3@kill-bill.org>
<CANEZrP0FzTGmp1zbaW1VHJLk5117ZnTSehfF4uMX=+UFS+R_Dw@mail.gmail.com>
<0CC0BE1D-1DAA-4994-B034-EB7712F845CF@kill-bill.org>
<DBA255DB-4839-4C3A-BA62-BD3926995C12@kill-bill.org>
<CAEY8wq6F33814d2+97AqDoAicvh=0PigHZ03wHadMq6JqtQMLg@mail.gmail.com>
<EAEC76DA-A490-4A61-BFB7-611D4ADF1680@kill-bill.org>
<CAEY8wq5=pAMTqDPM8yeCF+Z2=1GWmD0UDQdgacN1o3jAUh_BYA@mail.gmail.com>
<CAEY8wq40RxeUYYJS2m=xq26iTd2NE64WR7QOUO0+yR-MJQCoxQ@mail.gmail.com>
To: Kevin Greene <kgreenek@gmail.com>
X-Mailer: Apple Mail (2.1510)
X-Spam-Score: -0.5 (/)
X-Spam-Report: Spam Filtering performed by mx.sourceforge.net.
See http://spamassassin.org/tag/ for more details.
-1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for
sender-domain
-0.0 SPF_PASS SPF: sender matches SPF record
1.0 HTML_MESSAGE BODY: HTML included in message
X-Headers-End: 1WEPNC-0001im-E8
Cc: Pierre-Alexandre Meyer <pierre@kill-bill.org>,
Bitcoin Dev <bitcoin-development@lists.sourceforge.net>
Subject: Re: [Bitcoin-development] Extension for BIP-0070 to support
recurring payments
X-BeenThere: bitcoin-development@lists.sourceforge.net
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: <bitcoin-development.lists.sourceforge.net>
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
<mailto:bitcoin-development-request@lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development>
List-Post: <mailto:bitcoin-development@lists.sourceforge.net>
List-Help: <mailto:bitcoin-development-request@lists.sourceforge.net?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
<mailto:bitcoin-development-request@lists.sourceforge.net?subject=subscribe>
X-List-Received-Date: Fri, 14 Feb 2014 20:28:35 -0000
--Apple-Mail=_347698E4-F605-4008-8465-350BC552A927
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=iso-8859-1
Kevin,
We did a second iteration on the prototype to implement subscription =
cancellation and upgrade/downgrade. We checked in both the bitcoinj and =
php server to be able to test it.
We also worked on our side of the merchant implementation (Kill Bill) to =
feel confident that the protocol will support advanced business cases. =
At this point it is looking promising, but more work is needed to =
conclude.
We wanted to follow up on a few pervious points you raised:
> However, continuing to think about this even more, maybe the simple =
memo field along with an empty set of outputs is enough already.
=46rom our merchant side (Kill Bill), we do indeed use this field to =
report successes or errors. Maybe it would be useful to extend =
PaymentACK with a boolean success field (so the wallet doesn't commit =
the transaction in case of failures)?
> One high-level comment -- the wallet in this design doesn't have any =
way of knowing when the payments are supposed to end. I feel this is =
important to show to the user before they start their wallet polling =
infinitely.
We extended our RecurringPaymentDetails message to support this use =
case, as it solves the problem of subscription changes and cancellations =
for free.
We introduced the concept of a subscription, referred to by a unique id =
(the tuple merchant_id,subscription_id should be globally unique), which =
has multiple contracts (RecurringPaymentContract). Besides payment =
bounds, each contract has a validity period: generally, a subscription =
will have a unique active contract at a given time and potentially one =
or more pending ones.
For example, say you are on the gold plan (1 BTC/mo.) and want to =
downgrade to a bronze plan (0.5 BTC/mo.) at your next billing date. =
Wshen you click "Downgrade" on the merchant site, you will update your =
wallet with two contracts: the current valid one until your next billing =
date (for up to 1 BTC), and a pending one, starting at your next billing =
date (for up to 0.5 BTC/mo. and without an ending date).
Upon cancellation of the bronze plan, the end date of the contract will =
be updated and polling will stop eventually.
All of this contract metadata is returned to the wallet so the user can =
make an informed decision.
Thanks for your feedbacks!
S.
On Feb 11, 2014, at 10:37 PM, Kevin Greene <kgreenek@gmail.com> wrote:
> Sending this again and truncating since apparently the message body =
was too long.
>=20
> Thanks for humoring my questions!
>=20
> >I think reporting such errors to the wallet would make complete =
sense. However i am not clear why we would a separate url for that?
>=20
> Hmm, thinking about this more, adding a simple status_code in =
PaymentRequest would be a much easier way to achieve this. However, =
continuing to think about this even more, maybe the simple memo field =
along with an empty set of outputs is enough already.
>=20
> In bitcoinj, right now the code will throw a =
PaymentRequestException.InvalidOutputs exception if the set of outputs =
is empty with a message of "No Outputs". Because of that, there isn't a =
good way to tell the difference between a payment request that had no =
outputs and a payment request that had some invalid output(s).
>=20
> Question to everyone:
> How does bitcoin-qt handle a PaymentRequest with no outputs?
--Apple-Mail=_347698E4-F605-4008-8465-350BC552A927
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=iso-8859-1
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Diso-8859-1"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; =
"><div>Kevin,</div><div><br></div><div>We did a second iteration on the =
prototype to implement subscription cancellation and upgrade/downgrade. =
We checked in both the bitcoinj and php server to be able to test =
it.</div><div>We also worked on our side of the merchant implementation =
(Kill Bill) to feel confident that the protocol will support advanced =
business cases. At this point it is looking promising, but more work is =
needed to conclude.</div><div><br></div><div>We wanted to follow up on a =
few pervious points you raised:</div><div><br></div><div><div>> =
However, continuing to think about this even more, maybe the simple memo =
field along with an empty set of outputs is enough =
already.</div><div><br></div><div>=46rom our merchant side (Kill Bill), =
we do indeed use this field to report successes or errors. Maybe it =
would be useful to extend PaymentACK with a boolean success field (so =
the wallet doesn't commit the transaction in case of =
failures)?</div><div><br></div><div>> One high-level comment -- the =
wallet in this design doesn't have any way of knowing when the payments =
are supposed to end. I feel this is important to show to the user before =
they start their wallet polling infinitely.</div><div><br></div><div>We =
extended our RecurringPaymentDetails message to support this use case, =
as it solves the problem of subscription changes and cancellations for =
free.</div><div><br></div><div>We introduced the concept of a =
subscription, referred to by a unique id (the tuple =
merchant_id,subscription_id should be globally unique), which has =
multiple contracts (RecurringPaymentContract). Besides payment bounds, =
each contract has a validity period: generally, a subscription will have =
a unique active contract at a given time and potentially one or more =
pending ones.</div><div><br></div><div>For example, say you are on the =
gold plan (1 BTC/mo.) and want to downgrade to a bronze plan (0.5 =
BTC/mo.) at your next billing date. Wshen you click "Downgrade" on the =
merchant site, you will update your wallet with two contracts: the =
current valid one until your next billing date (for up to 1 BTC), and a =
pending one, starting at your next billing date (for up to 0.5 BTC/mo. =
and without an ending date).</div><div>Upon cancellation of the bronze =
plan, the end date of the contract will be updated and polling will stop =
eventually.</div><div><br></div><div>All of this contract metadata is =
returned to the wallet so the user can make an informed =
decision.</div></div><div><br></div><div><br></div><div>Thanks for your =
feedbacks!</div><div><br></div><div>S.</div><div><br></div><div><br></div>=
<div><div>On Feb 11, 2014, at 10:37 PM, Kevin Greene <<a =
href=3D"mailto:kgreenek@gmail.com">kgreenek@gmail.com</a>> =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr"><div class=3D"gmail_default" =
style=3D"color:rgb(51,102,102)">Sending this again and truncating since =
apparently the message body was too long.</div><div =
class=3D"gmail_default" style=3D"color:rgb(51,102,102)"><br></div>
<div class=3D"gmail_default" style=3D"color:rgb(51,102,102)"><div =
class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px">Thanks for =
humoring my questions!</div><div class=3D"im" =
style=3D"font-family:arial,sans-serif;font-size:13px">
<div class=3D"gmail_default" style=3D"color:rgb(51,102,102)"><span =
style=3D"color:rgb(34,34,34)"><br></span></div><div =
class=3D"gmail_default" style=3D"color:rgb(51,102,102)"><span =
style=3D"color:rgb(34,34,34)">>I think reporting such errors to the =
wallet would make complete sense. However i am not clear why we would a =
separate url for that?</span><br>
</div><div class=3D"gmail_default" =
style=3D"color:rgb(51,102,102)"><br></div></div><div =
class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px">Hmm, thinking =
about this more, adding a simple status_code in PaymentRequest would be =
a much easier way to achieve this. However, continuing to think about =
this even more, maybe the simple memo field along with an empty set of =
outputs is enough already.</div>
<div class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px"><br></div><div =
class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px">In bitcoinj, right =
now the code will throw a PaymentRequestException.InvalidOutputs =
exception if the set of outputs is empty with a message of "No Outputs". =
Because of that, there isn't a good way to tell the difference between a =
payment request that had no outputs and a payment request that had some =
invalid output(s).</div>
<div class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px"><br></div><div =
class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px"><b>Question to =
everyone:</b></div><div class=3D"gmail_default" =
style=3D"font-family:arial,sans-serif;font-size:13px">
How does bitcoin-qt handle a PaymentRequest with no =
outputs?</div></div></div>
</blockquote></div><br></body></html>=
--Apple-Mail=_347698E4-F605-4008-8465-350BC552A927--
|