Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-26 Thread Mike Hearn
Thanks for the explanation. I agree that makes sense, and you did actually
explain this before, I just didn't connect the dots :)

The accompanying BIP should explain all this, so the rationale for the
design and how you use it is made clear to developers.

I've CCd Jeff and Stephen on this thread, so they can go review it and
weigh in with any comments. They may want to go back to customers who
requested this feature and ask if it'd satisfy their needs.


On Wed, Feb 26, 2014 at 9:23 AM, Stephane Brossier
wrote:

>
>
>
>
>
>
> *Hi Mike, Jeremy, Drak,Before going through your questions, I would like
> to bring some clarity on a few key elements in that protocol. There are
> really two aspects to it: 1. The contract negotiation; when the user first
> subscribes, it is prompted by a contract that will define the payment
> bounds associated with that subscription. 2. Once accepted, the wallet is
> in charge and the user does not have to interact anymore -- this is the
> point of the recurring payment protocol. The wallet will poll the merchant
> and issue payments as they are requested by the merchant as long as they
> stay within the bounds of what was specified by the contract (and accepted
> by the customer).I think it would help to explain how we ended up with the
> type of contract we introduced in that protocol. In an ideal world and in a
> NON recurring scheme, the contract should simply be the exact amount to be
> paid. In our case the exact amount may not be completely known in advance
> -- for e.g taxes, shipping, pro-rations, … and so we decided to introduce
> first a max amount per payment, and also a max amount per period. It is up
> to the merchant to decide whether to specify none, any or both bounds (max
> amount per payment and max amount per period). By specifying both, the
> contract is tighter and the client would feel safer to accept it. In the
> extreme case, by specifying none, the client would be presented with a
> contract to pay whatever is requested -- probably not a good option in the
> Bitcoin world unless there is a high sense of trust with the merchant.
>   From reading your comments, it appears we have not been clear on how that
> frequency (PaymentFrequencyType) is being used. Its sole purpose is to
> define the max amount per period in the contract. The frequency of the
> payment is implicitly dictated by the merchant but not specified in the
> protocol by design: the wallet has to poll with a fine granularity (ideally
> each day when it is up) to understand if there is something pending. In the
> same way, a specified amount was not enough in the contract, we feel it
> would be restrictive to specify in advance when payments are due. There are
> a lot of complex scenarios in the billing space, and having the wallet poll
> the merchant to inquire for pending payments is the most flexible option
> and the contract is there to ensure the client will not be abused. To give
> a concrete example, imagine a data plan where you pay a base recurring
> price of $70 per month, but you are charged $10 per GB of data used beyond
> your included limit. If you exceed your limit on the 15th and the 23rd of a
> given month, two extra payment attempts will be requested by the merchant,
> that you couldn’t predict (this scenario is often referred to as usage
> billing with Prepay Credits and Top-up, where the customer pays in advance
> for blocks of N units, and once they are consumed another N are purchased).*
>
>
> *See answers in your questions inlined below:*
>
>
> I have the following comments:
>
>1. There's no need to serialize RecurringPaymentDetails as bytes here.
>It's done that way outside of PaymentDetails in order to support digital
>signatures over protobufs that may have extensions the wallet app isn't
>aware of, but it's a pain and inside PaymentDetails (and therefore for most
>extensions) it shouldn't be necessary. So you can just use "optional
>RecurringPamentDetails recurring_payments = 8;"
>
>
>
> OK, we'll fix it.
>
>
>
>1. There's only 4 possibilities here for recurrences. That seems
>rather restrictive. Is the cost of being more expressive really so high?
>Why not allow more flexible specification of periods?
>
>
>1. If there's no payment_frequency_type field then what happens? A
>quirk of protobufs to be aware of is that making an enum field "required"
>can hurt backwards compatibility. Because it will be expressed using a
>languages underlying enum type, if there's a new enum member added later
>old software that attempts to deserialize this will throw exceptions
>because the new "unknown" member would be unrepresentable in the old model.
>Making the field optional avoids this problem (it will be treated as
>missing instead) but means software needs to be written to know what to do
>when it can't read the enum value / sees enum values from the future.
>
>
>
> I hope the explanation above answers the

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-25 Thread Stephane Brossier
Hi Mike, Jeremy, Drak,

Before going through your questions, I would like to bring some clarity on a 
few key elements in that protocol. There are really two aspects to it:
The contract negotiation; when the user first subscribes, it is prompted by a 
contract that will define the payment bounds associated with that subscription. 
Once accepted, the wallet is in charge and the user does not have to interact 
anymore -- this is the point of the recurring payment protocol. The wallet will 
poll the merchant and issue payments as they are requested by the merchant as 
long as they stay within the bounds of what was specified by the contract (and 
accepted by the customer).

I think it would help to explain how we ended up with the type of contract we 
introduced in that protocol. In an ideal world and in a NON recurring scheme, 
the contract should simply be the exact amount to be paid. In our case the 
exact amount may not be completely known in advance -- for e.g taxes, shipping, 
pro-rations, … and so we decided to introduce first a max amount per payment, 
and also a max amount per period. It is up to the merchant to decide whether to 
specify none, any or both bounds (max amount per payment and max amount per 
period). By specifying both, the contract is tighter and the client would feel 
safer to accept it. In the extreme case, by specifying none, the client would 
be presented with a contract to pay whatever is requested -- probably not a 
good option in the Bitcoin world unless there is a high sense of trust with the 
merchant.   

From reading your comments, it appears we have not been clear on how that 
frequency (PaymentFrequencyType) is being used. Its sole purpose is to define 
the max amount per period in the contract. The frequency of the payment is 
implicitly dictated by the merchant but not specified in the protocol by 
design: the wallet has to poll with a fine granularity (ideally each day when 
it is up) to understand if there is something pending. In the same way, a 
specified amount was not enough in the contract, we feel it would be 
restrictive to specify in advance when payments are due. There are a lot of 
complex scenarios in the billing space, and having the wallet poll the merchant 
to inquire for pending payments is the most flexible option and the contract is 
there to ensure the client will not be abused. To give a concrete example, 
imagine a data plan where you pay a base recurring price of $70 per month, but 
you are charged $10 per GB of data used beyond your included limit. If you 
exceed your limit on the 15th and the 23rd of a given month, two extra payment 
attempts will be requested by the merchant, that you couldn’t predict (this 
scenario is often referred to as usage billing with Prepay Credits and Top-up, 
where the customer pays in advance for blocks of N units, and once they are 
consumed another N are purchased).


See answers in your questions inlined below:

> 
> I have the following comments:
> There's no need to serialize RecurringPaymentDetails as bytes here. It's done 
> that way outside of PaymentDetails in order to support digital signatures 
> over protobufs that may have extensions the wallet app isn't aware of, but 
> it's a pain and inside PaymentDetails (and therefore for most extensions) it 
> shouldn't be necessary. So you can just use "optional RecurringPamentDetails 
> recurring_payments = 8;"
> 

OK, we'll fix it.


> There's only 4 possibilities here for recurrences. That seems rather 
> restrictive. Is the cost of being more expressive really so high? Why not 
> allow more flexible specification of periods?
> If there's no payment_frequency_type field then what happens? A quirk of 
> protobufs to be aware of is that making an enum field "required" can hurt 
> backwards compatibility. Because it will be expressed using a languages 
> underlying enum type, if there's a new enum member added later old software 
> that attempts to deserialize this will throw exceptions because the new 
> "unknown" member would be unrepresentable in the old model. Making the field 
> optional avoids this problem (it will be treated as missing instead) but 
> means software needs to be written to know what to do when it can't read the 
> enum value / sees enum values from the future.
> 

I hope the explanation above answers the questions.

> I assume the amounts are specified in terms of satoshi, and timestamps are 
> UNIX time, but better to make that explicit.
> 

Yes.

> Seems there's an implicit value constraint that max_payment_amount <= 
> max_payment_per_period. What happens if that constraint is violated? Best to 
> document that.
> 

As explained above, contract would define none, 1 or both conditions.  First 
the merchant should not return such 'conditions' but if it does the client 
should not accept the contract. If the client decides to accept it anyway, then 
the wallet just verifies both conditions are met separately regardless of 
whether there is 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-25 Thread Christophe Biocca
Given the enormous number of variations on time periods for a
recurring payment, might it be better to simple allow a list of
timestamps? It costs almost nothing, bandwidth wise, and shifts the
thinking to the merchant platform. That doesn't give you an infinite
time frame, but you just get a new list of timestamps every time you
pay the service.

Continuing that thought, is a "next_payment_time" field with each
incremental transaction enough to cover everything?

On Tue, Feb 25, 2014 at 1:40 PM, Drak  wrote:
> Forgive me if I missed it, but the spec doesnt look like it can handle only
> handle periods of per week, per month, per quarter rather than 'n period'. I
> take Paypal as a reference example for subscription payments where you can
> set recurring to every: n days, n weeks, n months, n years. That way a
> quarterly payment is every 3 months. This fine granularity is necessary
> because sometime a payment scheme can be per 4 weekly rather than per
> monthly.
>
> So in summary the spec needs daily as an option, and to specify the
> recurring cycle as every n*period (one of daily, weekly, monthly, yearly):
> and you can drop quarterly since it's just expressed as per 3*monthly.
>
> Drak
>
>
> On 25 February 2014 16:29, Mike Hearn  wrote:
>>
>> Hey there,
>>
>> So the essence of this protocol is as follows:
>>
>>
>> enum PaymentFrequencyType {
>> WEEKLY = 1;
>> MONTHLY = 2;
>> QUARTERLY = 3;
>> ANNUAL = 4;
>> }
>> message RecurringPaymentDetails {
>> // Namespace for the merchant such as org.foo.bar
>> required string merchant_id = 1;
>>
>>
>> // Id for the recurring subscription
>> required bytes subscription_id = 2;
>>
>>
>> // Contracts associated with a given subscription
>> repeated RecurringPaymentContract contracts = 3;
>>
>>
>> }
>> message RecurringPaymentContract {
>>
>>
>> // Unique id for a given contract
>> required bytes contract_id = 1;
>>
>>
>> // URL to poll to get the next PaymentRequest
>> required string polling_url = 2;
>>
>>
>> // Timestamp; when this contract starts
>> required uint64 starts = 3;
>>
>>
>> // Timestamp; when this contract should be considered invalid
>> optional uint64 ends = 4;
>>
>>
>> // Expected payment frequency
>> optional PaymentFrequencyType payment_frequency_type = 5;
>>
>>
>> // Max payment amount within that frequency (e.g. no more than 5
>> BTC per month)
>> optional uint64 max_payment_per_period  = 6;
>>
>>
>> // Max payment amount (e.g. no more than 3 BTC per payment)
>> optional uint64 max_payment_amount = 7;
>>
>>
>> }
>>
>> I have the following comments:
>>
>> There's no need to serialize RecurringPaymentDetails as bytes here. It's
>> done that way outside of PaymentDetails in order to support digital
>> signatures over protobufs that may have extensions the wallet app isn't
>> aware of, but it's a pain and inside PaymentDetails (and therefore for most
>> extensions) it shouldn't be necessary. So you can just use "optional
>> RecurringPamentDetails recurring_payments = 8;"
>>
>> There's only 4 possibilities here for recurrences. That seems rather
>> restrictive. Is the cost of being more expressive really so high? Why not
>> allow more flexible specification of periods?
>>
>> If there's no payment_frequency_type field then what happens? A quirk of
>> protobufs to be aware of is that making an enum field "required" can hurt
>> backwards compatibility. Because it will be expressed using a languages
>> underlying enum type, if there's a new enum member added later old software
>> that attempts to deserialize this will throw exceptions because the new
>> "unknown" member would be unrepresentable in the old model. Making the field
>> optional avoids this problem (it will be treated as missing instead) but
>> means software needs to be written to know what to do when it can't read the
>> enum value / sees enum values from the future.
>>
>> I assume the amounts are specified in terms of satoshi, and timestamps are
>> UNIX time, but better to make that explicit.
>>
>> Seems there's an implicit value constraint that max_payment_amount <=
>> max_payment_per_period. What happens if that constraint is violated? Best to
>> document that.
>>
>> What's the "merchant ID" namespace thing about? What's it for? What
>> happens if I set my competitors merchant ID there?
>>
>> What's the "subscription ID"? Is this stuff not duplicative/redundant with
>> the existing merchant_data field?
>>
>> In what situations would you have >1 contract per payment request? I'm not
>> sure I understand why it's repeated. Presumably if there are zero contracts
>> included the data should be ignored, or an error thrown and the entire
>> payment request rejected? Which should it be?
>>
>> It's unclear to me given such a contract when the payment should actually
>> occur. For instance if it's "monthl

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-25 Thread Jeremy Spilman

>
> So in summary the spec needs daily as an option, and to specify the  
> recurring cycle as every n*period >(one of daily, weekly, monthly,  
> yearly): and you can drop quarterly since it's just expressed as per  
> >3*monthly.

If you're going to go the direction of a {unitType, unitsPerInterval}  
tuple, then I think the only two units you could ever want are minutes and  
months. All other standard units of time can be expressed in terms of  
those two, right?

Also consider changing "optional uint64 ends = 4;" to be a interval count  
instead of a UTC timestamp, to avoid any ambiguity over how the 'while'  
loop should be implemented.






--
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-25 Thread Drak
Forgive me if I missed it, but the spec doesnt look like it can handle only
handle periods of per week, per month, per quarter rather than 'n period'.
I take Paypal as a reference example for subscription payments where you
can set recurring to every: n days, n weeks, n months, n years. That way a
quarterly payment is every 3 months. This fine granularity is necessary
because sometime a payment scheme can be per 4 weekly rather than per
monthly.

So in summary the spec needs daily as an option, and to specify the
recurring cycle as every n*period (one of daily, weekly, monthly, yearly):
and you can drop quarterly since it's just expressed as per 3*monthly.

Drak


On 25 February 2014 16:29, Mike Hearn  wrote:

> Hey there,
>
> So the essence of this protocol is as follows:
>
> enum PaymentFrequencyType {
>
> WEEKLY = 1;
>
> MONTHLY = 2;
>
> QUARTERLY = 3;
>
> ANNUAL = 4;
> }
> message RecurringPaymentDetails {
> // Namespace for the merchant such as org.foo.bar
>
> required string merchant_id = 1;
>
> // Id for the recurring subscription
> required bytes subscription_id = 2;
>
> // Contracts associated with a given subscription
>
> repeated RecurringPaymentContract contracts = 3;
>
> }
> message RecurringPaymentContract {
>
> // Unique id for a given contract
>
> required bytes contract_id = 1;
>
> // URL to poll to get the next PaymentRequest
>
> required string polling_url = 2;
>
> // Timestamp; when this contract starts
> required uint64 starts = 3;
>
> // Timestamp; when this contract should be considered invalid
>
> optional uint64 ends = 4;
>
> // Expected payment frequency
> optional PaymentFrequencyType payment_frequency_type = 5;
>
> // Max payment amount within that frequency (e.g. no more than 5 BTC 
> per month)
>
> optional uint64 max_payment_per_period  = 6;
>
> // Max payment amount (e.g. no more than 3 BTC per payment)
>
> optional uint64 max_payment_amount = 7;
>
> }
>
> I have the following comments:
>
>1. There's no need to serialize RecurringPaymentDetails as bytes here.
>It's done that way outside of PaymentDetails in order to support digital
>signatures over protobufs that may have extensions the wallet app isn't
>aware of, but it's a pain and inside PaymentDetails (and therefore for most
>extensions) it shouldn't be necessary. So you can just use "optional
>RecurringPamentDetails recurring_payments = 8;"
>
>2. There's only 4 possibilities here for recurrences. That seems
>rather restrictive. Is the cost of being more expressive really so high?
>Why not allow more flexible specification of periods?
>
>3. If there's no payment_frequency_type field then what happens? A
>quirk of protobufs to be aware of is that making an enum field "required"
>can hurt backwards compatibility. Because it will be expressed using a
>languages underlying enum type, if there's a new enum member added later
>old software that attempts to deserialize this will throw exceptions
>because the new "unknown" member would be unrepresentable in the old model.
>Making the field optional avoids this problem (it will be treated as
>missing instead) but means software needs to be written to know what to do
>when it can't read the enum value / sees enum values from the future.
>
>4. I assume the amounts are specified in terms of satoshi, and
>timestamps are UNIX time, but better to make that explicit.
>
>5. Seems there's an implicit value constraint that max_payment_amount
><= max_payment_per_period. What happens if that constraint is violated?
>Best to document that.
>
>6. What's the "merchant ID" namespace thing about? What's it for? What
>happens if I set my competitors merchant ID there?
>
>7. What's the "subscription ID"? Is this stuff not
>duplicative/redundant with the existing merchant_data field?
>
>8. In what situations would you have >1 contract per payment request?
>I'm not sure I understand why it's repeated. Presumably if there are zero
>contracts included the data should be ignored, or an error thrown and the
>entire payment request rejected? Which should it be?
>
>9. It's unclear to me given such a contract when the payment should
>actually occur. For instance if it's "monthly" then what day in the month
>would the payment occur?
>
>10. You'll notice I moved the comments to be above the field
>definitions. I know the current proto isn't done that way, but let's change
>it - long comments are good and putting them above the field definitions
>encourages people to write enough detail without being put off by line
>length constraints
>
>
> I think the next step would be to talk to BitPay/get Jeff+Stephen involved
> because I know they have customers that really want 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-25 Thread Mike Hearn
Hey there,

So the essence of this protocol is as follows:

enum PaymentFrequencyType {
WEEKLY = 1;
MONTHLY = 2;
QUARTERLY = 3;
ANNUAL = 4;
}
message RecurringPaymentDetails {
// Namespace for the merchant such as org.foo.bar
required string merchant_id = 1;
// Id for the recurring subscription
required bytes subscription_id = 2;
// Contracts associated with a given subscription
repeated RecurringPaymentContract contracts = 3;
}
message RecurringPaymentContract {
// Unique id for a given contract
required bytes contract_id = 1;
// URL to poll to get the next PaymentRequest
required string polling_url = 2;
// Timestamp; when this contract starts
required uint64 starts = 3;
// Timestamp; when this contract should be considered invalid
optional uint64 ends = 4;
// Expected payment frequency
optional PaymentFrequencyType payment_frequency_type = 5;
// Max payment amount within that frequency (e.g. no more than
5 BTC per month)
optional uint64 max_payment_per_period  = 6;
// Max payment amount (e.g. no more than 3 BTC per payment)
optional uint64 max_payment_amount = 7;
}

I have the following comments:

   1. There's no need to serialize RecurringPaymentDetails as bytes here.
   It's done that way outside of PaymentDetails in order to support digital
   signatures over protobufs that may have extensions the wallet app isn't
   aware of, but it's a pain and inside PaymentDetails (and therefore for most
   extensions) it shouldn't be necessary. So you can just use "optional
   RecurringPamentDetails recurring_payments = 8;"

   2. There's only 4 possibilities here for recurrences. That seems rather
   restrictive. Is the cost of being more expressive really so high? Why not
   allow more flexible specification of periods?

   3. If there's no payment_frequency_type field then what happens? A quirk
   of protobufs to be aware of is that making an enum field "required" can
   hurt backwards compatibility. Because it will be expressed using a
   languages underlying enum type, if there's a new enum member added later
   old software that attempts to deserialize this will throw exceptions
   because the new "unknown" member would be unrepresentable in the old model.
   Making the field optional avoids this problem (it will be treated as
   missing instead) but means software needs to be written to know what to do
   when it can't read the enum value / sees enum values from the future.

   4. I assume the amounts are specified in terms of satoshi, and
   timestamps are UNIX time, but better to make that explicit.

   5. Seems there's an implicit value constraint that max_payment_amount <=
   max_payment_per_period. What happens if that constraint is violated? Best
   to document that.

   6. What's the "merchant ID" namespace thing about? What's it for? What
   happens if I set my competitors merchant ID there?

   7. What's the "subscription ID"? Is this stuff not duplicative/redundant
   with the existing merchant_data field?

   8. In what situations would you have >1 contract per payment request?
   I'm not sure I understand why it's repeated. Presumably if there are zero
   contracts included the data should be ignored, or an error thrown and the
   entire payment request rejected? Which should it be?

   9. It's unclear to me given such a contract when the payment should
   actually occur. For instance if it's "monthly" then what day in the month
   would the payment occur?

   10. You'll notice I moved the comments to be above the field
   definitions. I know the current proto isn't done that way, but let's change
   it - long comments are good and putting them above the field definitions
   encourages people to write enough detail without being put off by line
   length constraints


I think the next step would be to talk to BitPay/get Jeff+Stephen involved
because I know they have customers that really want recurring payments, and
those guys will have a clearer idea of customer requirements than we do. I
feel uncomfortable with designing or reviewing in a vacuum without some
actual people who would use it chiming in, as I don't really know much
about the underlying business processes.

I have some other comments about the bitcoinj implementation specifically -
for instance, we don't have a "wallet directory" concept: everything goes
into the wallet file. So we'll need to think about how to structure the
code to allow that. Also, just using a background polling thread is likely
not flexible enough, as on some platforms you can't stay running all the
time (e.g. Android) without upsetting people, but the underlying OS can
wake you up at the right times, so wallet apps should have an ability to
control wakeup tasks. But we can discuss that over on the bitcoinj list
specifically. Let's keep this thread for the general protoc

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-24 Thread Stephane Brossier
Mike,


Just want to follow up with you and the community in general regarding the 
BIP0070 extension for recurring billing. At this point we have a working 
prototype that we checked-in in our fork of bitcoinj 
(https://github.com/killbill/bitcoinj). We tested it by extending the php 
'payment server' from Gavin which we also check-in in a fork 
(https://github.com/killbill/paymentrequest). I think it does not make much 
sense from our side to invest more efforts until we hear some feedbacks.

Once we agree/integrate any feedbacks you guys may have-- a proposal for next 
steps would be:
* Turn that into a actual BIP so as to detail how that works, 
* Write some more serious unit tests
* Merge back code into bitconj trunk

Down the line write the C++ code, but of course that would assume BIP0070 is 
also implemented in C++ as we rely on it.

I understand you guys may have more important matters to solve these days with 
the recent malleability issue, but i want to make it clear that we are waiting 
for feedbacks to make additional progress.

Thanks!

S.




On Feb 14, 2014, at 12:28 PM, Stephane Brossier  wrote:

> 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.
> 
> From 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  wrote:
> 
>> Sending this again and truncating since apparently the message body was too 
>> long.
>> 
>> Thanks for humoring my questions!
>> 
>> >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?
>> 
>> 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.
>> 
>> 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).
>> 
>> Question to everyone:
>> How does bitcoin-qt handle a PaymentRequest with no outputs?
> 

--
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-14 Thread Stephane Brossier
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.

From 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  wrote:

> Sending this again and truncating since apparently the message body was too 
> long.
> 
> Thanks for humoring my questions!
> 
> >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?
> 
> 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.
> 
> 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).
> 
> Question to everyone:
> How does bitcoin-qt handle a PaymentRequest with no outputs?

--
Android apps run on BlackBerry 10
Introducing the new BlackBerry 10.2.1 Runtime for Android apps.
Now with support for Jelly Bean, Bluetooth, Mapview and more.
Get your Android app in front of a whole new audience.  Start now.
http://pubads.g.doubleclick.net/gampad/clk?id=124407151&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-12 Thread Kevin Greene
Thanks for humoring my questions!

>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?

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.

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". 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).

*Question to everyone:*
How does bitcoin-qt handle a PaymentRequest with no outputs?



On Tue, Feb 11, 2014 at 10:01 AM, Stephane Brossier
wrote:

> Hi Kevin,
>
> On Feb 11, 2014, at 2:00 AM, Kevin Greene  wrote:
>
> Figured I would have a crack at reviewing this since Mike is out for a
> bit. It was great running into you guys at the bitcoin fair in SF! Small
> world :)
>
>
> Indeed! It was great meeting you! It's always nice to meet people in
> person...
>
> I like how simple this is. You just give it an url to fetch the next
> payment request and a date to fetch it.
>
> What should happen if the client tries to fetch the PaymentRequest early
> or late?
>
>
> If the client tries to fetch too early, then  the merchant will return a
> PaymentRequest with no output (there is nothing to pay yet). If it fetches
> too late, this is merchant specific. It could be that the service got
> discontinued -- extreme case -- or that there are now multiple
> PaymentRequest pending or that the merchant decided to aggregate those into
> one. In that scenario, it could lead to a case where the amount to pay goes
> beyond the contract and the wallet would refuse to make the recurring
> payment.
>
> Does it become valid after some date and stay valid for some length of
> time?
>
>
> The protocol we sketched does not include (yet) an expiration date. At
> this point the contract is fairly minimal, and we could envision adding
> more parameters such as expiration date. So at this point the behavior
> would be dictated by the merchant.
>
> Also, what should happen if the client tries to consume the same
> PaymentRequest twice (or multiple times) during the same period?
>
>
> The merchant initiates the PaymentRequest and is in charge to make sure
> they match the invoices that the client should pay. On the client side, the
> wallet is responsible to verify that the contract is respected, so if a
> merchant were to issue multiple times the same PaymentRequest, the wallet
> would detect it goes beyond the bonds defined in the contract and would
> refuse to make the additional Payments.
>
> I do not think daily/weekly/monthly is flexible enough. What do you think
> about having a concrete start time and end time when the next
> PaymentRequest will be valid?
>
>
> I agree that daily/weekly/monthly may not be flexible enough. However
> specifying a fixed date may be very tricky because in some cases a monthly
> subscription may start on a 31st of a month, and depending on the month,
> the due date will vary -- could be 30th, 28th, 29th, ... Also note that the
> frequency (daily/weekly/monthly) is not used as a polling interval, but is
> only used to verify the contract is respected.
>
> There are multiple viable options to specify that contract and ideally we
> could/should support multiple schemes; different merchants could use
> different schemes, and the client would decide wether or not he is ready to
> accept the terms that will later be enforced by the wallet. But of course
> all this flexibility goes against simplicity and so this is tradeoff...
>
>
> This also prevents the wallet from having to remember when it last sent a
> payment and getting skewed over time.
>
>
> Today, our current prototype is polling every day -- which is the lowest
> granularity we introduced -- and so there is no risk of getting skewed.
>
>
> When a wallet hits the polling_url to download the next PaymentRequest, it
> seems we need a way to communicate an error code to the wallet, for example
> if the server canceled the contract without the wallet knowing. Perhaps a
> separate polling_status_url, with a corresponding ACK message to indicate
> if the PaymentRequest is available. What do you think of that idea?
>
>
> 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?
>
>  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.
>
>
> Subscriptions are non ending by definition, but at any time the client
> (through the wallet) or the merchant can decide to terminate the
> subscriptions -- we 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-12 Thread Stephane Brossier
Hi Kevin,

On Feb 11, 2014, at 2:00 AM, Kevin Greene  wrote:

> Figured I would have a crack at reviewing this since Mike is out for a bit. 
> It was great running into you guys at the bitcoin fair in SF! Small world :)

Indeed! It was great meeting you! It's always nice to meet people in person...

> I like how simple this is. You just give it an url to fetch the next payment 
> request and a date to fetch it.
> 
> What should happen if the client tries to fetch the PaymentRequest early or 
> late?

If the client tries to fetch too early, then  the merchant will return a 
PaymentRequest with no output (there is nothing to pay yet). If it fetches too 
late, this is merchant specific. It could be that the service got discontinued 
-- extreme case -- or that there are now multiple PaymentRequest pending or 
that the merchant decided to aggregate those into one. In that scenario, it 
could lead to a case where the amount to pay goes beyond the contract and the 
wallet would refuse to make the recurring payment.

> Does it become valid after some date and stay valid for some length of time?

The protocol we sketched does not include (yet) an expiration date. At this 
point the contract is fairly minimal, and we could envision adding more 
parameters such as expiration date. So at this point the behavior would be 
dictated by the merchant.

> Also, what should happen if the client tries to consume the same 
> PaymentRequest twice (or multiple times) during the same period?

The merchant initiates the PaymentRequest and is in charge to make sure they 
match the invoices that the client should pay. On the client side, the wallet 
is responsible to verify that the contract is respected, so if a merchant were 
to issue multiple times the same PaymentRequest, the wallet would detect it 
goes beyond the bonds defined in the contract and would refuse to make the 
additional Payments.

> I do not think daily/weekly/monthly is flexible enough. What do you think 
> about having a concrete start time and end time when the next PaymentRequest 
> will be valid?

I agree that daily/weekly/monthly may not be flexible enough. However 
specifying a fixed date may be very tricky because in some cases a monthly 
subscription may start on a 31st of a month, and depending on the month, the 
due date will vary -- could be 30th, 28th, 29th, ... Also note that the 
frequency (daily/weekly/monthly) is not used as a polling interval, but is only 
used to verify the contract is respected. 

There are multiple viable options to specify that contract and ideally we 
could/should support multiple schemes; different merchants could use different 
schemes, and the client would decide wether or not he is ready to accept the 
terms that will later be enforced by the wallet. But of course all this 
flexibility goes against simplicity and so this is tradeoff...


> This also prevents the wallet from having to remember when it last sent a 
> payment and getting skewed over time.

Today, our current prototype is polling every day -- which is the lowest 
granularity we introduced -- and so there is no risk of getting skewed.


> When a wallet hits the polling_url to download the next PaymentRequest, it 
> seems we need a way to communicate an error code to the wallet, for example 
> if the server canceled the contract without the wallet knowing. Perhaps a 
> separate polling_status_url, with a corresponding ACK message to indicate if 
> the PaymentRequest is available. What do you think of that idea?

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?

> 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.

Subscriptions are non ending by definition, but at any time the client (through 
the wallet) or the merchant can decide to terminate the subscriptions -- we did 
not yet implement cancellation in that prototype but we are planning to add it 
later this week. Think of your Netflix subscriptions, this is never ending 
(evergreen) until you decide to terminate it or Netflix does it (abuse, bills 
not paid,...)

Thanks for taking a look!

> 
> On Sat, Feb 8, 2014 at 6:48 PM, Stephane Brossier  
> wrote:
> Mike, Gavin,
> 
> 
> We started to work on the merchant side to test the integration of our 
> prototype for the recurring payments. We modified the 'Payment Request 
> Generator' from Gavin to include a new check box 'set recurring'. We forked 
> the code and checked in our modification here: 
> https://github.com/killbill/paymentrequest/commit/e530f6ec528266aacfd076d7c3154ad39267c3f3
> 
> We also found a few issues with the code diff that we sent yesterday for 
> bitcoinj and checked in the bug fixes  in our fork-- so the diff sent 
> yesterday is slightly outdated.
> 
> So at this point we have a 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-11 Thread Kevin Greene
Sending this again and truncating since apparently the message body was too
long.

Thanks for humoring my questions!

>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?

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.

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).

*Question to everyone:*
How does bitcoin-qt handle a PaymentRequest with no outputs?
--
Android apps run on BlackBerry 10
Introducing the new BlackBerry 10.2.1 Runtime for Android apps.
Now with support for Jelly Bean, Bluetooth, Mapview and more.
Get your Android app in front of a whole new audience.  Start now.
http://pubads.g.doubleclick.net/gampad/clk?id=124407151&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-11 Thread Mike Hearn
Hey guys,

I'm on vacation now so won't be able to take a look until I'm back in a
couple of weeks but the approach sounds reasonable based on your
description.
On 8 Feb 2014 08:28, "Stephane Brossier"  wrote:

> Mike and all,
>
> Pierre and I just committed a prototype implementation of the recurring
> payment protocol using bitcoinj. You can find the diff on our fork:
>
> https://github.com/killbill/bitcoinj/commit/40c657c4191498f12539c60316116aa68af368a7
>
> We did not write the server (merchant side), but wanted to have some
> feedback before going deeper (merchant implementation and tests). We did
> our best to build it on top of the existing BIP-0070 protocol-- only a few
> additions in the messages, but no new calls and no new uri scheme. We
> created a new package 'recurring' where most of the new code lives.
>
> At a high level:
>
> 1. Creation of the subscription:
>
> The initial handshake for creating the subscription is exactly similar to
> the one for the payment protocol (PaymentRequest is used to provide the
> contract)
>
> 2. Wallet can decide to poll the merchants for its active subscriptions.
>
> Here the flow is exactly similar to the payment protocol but the wallet
> receives a callback to verify the payment matches the contract and should
> go through.
>
> Please give us some feedback whenever you have the chance. In the meantime
> we will start implementing the merchant side and test the code.
>
> Cheers!
>
>
>
> On Jan 31, 2014, at 10:13 AM, Mike Hearn  wrote:
>
> That looks OK at a very high level. Things you probably want to think
> about:
>
>- How to trigger it off the existing payment protocol (no new top
>level messages or mime types or uri extensions please)
>- Data structures to define the payment schedule
>- Do you allow pre-submission of time locked transactions or not?
>
> I think as you prototype these things will become clearer.  You could try
> prototyping either in Bitcoin Core (C++) or bitcoinj (java, look at the
> PaymentSession class).
>
>
>
> On Wed, Jan 29, 2014 at 3:47 AM, Stephane Brossier  > wrote:
>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *From what I have seen so far, there seems to be an agreement that this
>> is a nice feature to add. We are pretty new to that community and so we
>> don't know exactly what the process is, and in particular how we reach
>> consensus via email. I am certainly open to follow 'the way' if there is
>> one, but one solution would be to follow Mike's suggestion on providing a
>> (prototype) implementation first and then defining/refining the BIP. Odinn
>> also suggested a possible retribution for our time through crowd-sourcing
>> which I am interested to pursue if that makes sense. We have quite some
>> experience on the subscription side of things and while we are growing our
>> knowledge on the Bitcoin technology (and ecosystem at large) we would
>> benefit from: * some feedbacks on the high level proposal * additional
>> requirements we might have missed So, below is a high level description of
>> what we have in mind. If this sounds reasonable, we could start working on
>> an implementation. I. Abstract --- This describes a protocol to
>> enable recurring payments in bitcoins and can be seen as an extension of
>> BIP-0070. The main goal here is to have the customer subscribe to a service
>> of some kind (that is, agreeing on the terms of that subscription
>> contract), and then have the wallet make recurring payments without any
>> intervention from the customer as long as the payments match what the
>> customer agreed on paying. An example of such service would be an online
>> streaming website, to which a user pays a fixed recurring monthly fee to
>> access videos (a.k.a. resources). Note that there is also usage based
>> billing: for example, the user may need to purchase additional access for
>> premium videos (overage charges). This type of billing is more complicated
>> and there are many variations to it used in the industry (pre-paid, …). For
>> the sake of discussion, we’ll focus on fixed recurring payments only, but
>> we will keep usage in mind to make sure the protocol will be able to
>> support it as well. II. Motivation -- Subscription based
>> services have been growing in the past few years and so the intent it to
>> make it possible for customers to pay in bitcoins. Bitcoin’s push model
>> presents new advantages for the customer compared to traditional payment
>> methods: the user has control over the subscription (for example, there is
>> no need to call the merchant to explicitly cancel the credit card
>> payments). It also opens the door to subscription management tools in
>> wallets (e.g. Hive apps), which would give user an overview of what they
>> are paying each month. III. Flow of
>> Operations*
>>
>>
>>
>>
>> * Creation of the subscription: - - - - - - - - - - - - - - - - - - - - -
>> - 1. The customer clicks 'subsc

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-11 Thread Kevin Greene
Figured I would have a crack at reviewing this since Mike is out for a bit.
It was great running into you guys at the bitcoin fair in SF! Small world :)

I like how simple this is. You just give it an url to fetch the next
payment request and a date to fetch it.

What should happen if the client tries to fetch the PaymentRequest early or
late? Does it become valid after some date and stay valid for some length
of time? Also, what should happen if the client tries to consume the same
PaymentRequest twice (or multiple times) during the same period?

I do not think daily/weekly/monthly is flexible enough. What do you think
about having a concrete start time and end time when the next
PaymentRequest will be valid? This also prevents the wallet from having to
remember when it last sent a payment and getting skewed over time.

When a wallet hits the polling_url to download the next PaymentRequest, it
seems we need a way to communicate an error code to the wallet, for example
if the server canceled the contract without the wallet knowing. Perhaps a
separate polling_status_url, with a corresponding ACK message to indicate
if the PaymentRequest is available. What do you think of that idea?

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.




On Sat, Feb 8, 2014 at 6:48 PM, Stephane Brossier wrote:

> Mike, Gavin,
>
>
> We started to work on the merchant side to test the integration of our
> prototype for the recurring payments. We modified the 'Payment Request
> Generator' from Gavin to include a new check box 'set recurring'. We forked
> the code and checked in our modification here:
> https://github.com/killbill/paymentrequest/commit/e530f6ec528266aacfd076d7c3154ad39267c3f3
>
> We also found a few issues with the code diff that we sent yesterday for
> bitcoinj and checked in the bug fixes  in our fork-- so the diff sent
> yesterday is slightly outdated.
>
> So at this point we have a working prototype for bitcoinj and we are
> waiting for your feedbacks. We also started to look at integrating the
> protocol in Kill Bill to check that what is proposed supports indeed the
> business cases of a full recurring billing platform.
>
> Hope to hear from you guys soon!
>
>
> On Feb 7, 2014, at 6:57 PM, Stephane Brossier 
> wrote:
>
> Mike and all,
>
> Pierre and I just committed a prototype implementation of the recurring
> payment protocol using bitcoinj. You can find the diff on our fork:
>
> https://github.com/killbill/bitcoinj/commit/40c657c4191498f12539c60316116aa68af368a7
>
> We did not write the server (merchant side), but wanted to have some
> feedback before going deeper (merchant implementation and tests). We did
> our best to build it on top of the existing BIP-0070 protocol-- only a few
> additions in the messages, but no new calls and no new uri scheme. We
> created a new package 'recurring' where most of the new code lives.
>
> At a high level:
>
> 1. Creation of the subscription:
>
> The initial handshake for creating the subscription is exactly similar to
> the one for the payment protocol (PaymentRequest is used to provide the
> contract)
>
> 2. Wallet can decide to poll the merchants for its active subscriptions.
>
> Here the flow is exactly similar to the payment protocol but the wallet
> receives a callback to verify the payment matches the contract and should
> go through.
>
> Please give us some feedback whenever you have the chance. In the meantime
> we will start implementing the merchant side and test the code.
>
> Cheers!
>
>
>
> On Jan 31, 2014, at 10:13 AM, Mike Hearn  wrote:
>
> That looks OK at a very high level. Things you probably want to think
> about:
>
>- How to trigger it off the existing payment protocol (no new top
>level messages or mime types or uri extensions please)
>- Data structures to define the payment schedule
>- Do you allow pre-submission of time locked transactions or not?
>
> I think as you prototype these things will become clearer.  You could try
> prototyping either in Bitcoin Core (C++) or bitcoinj (java, look at the
> PaymentSession class).
>
>
>
> On Wed, Jan 29, 2014 at 3:47 AM, Stephane Brossier  > wrote:
>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *From what I have seen so far, there seems to be an agreement that this
>> is a nice feature to add. We are pretty new to that community and so we
>> don't know exactly what the process is, and in particular how we reach
>> consensus via email. I am certainly open to follow 'the way' if there is
>> one, but one solution would be to follow Mike's suggestion on providing a
>> (prototype) implementation first and then defining/refining the BIP. Odinn
>> also suggested a possible retribution for our time through crowd-sourcing
>> which I am interested to pursue if that makes sense. We have quite some
>> experience on the subscription side o

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-08 Thread Stephane Brossier
Mike, Gavin,


We started to work on the merchant side to test the integration of our 
prototype for the recurring payments. We modified the 'Payment Request 
Generator' from Gavin to include a new check box 'set recurring'. We forked the 
code and checked in our modification here: 
https://github.com/killbill/paymentrequest/commit/e530f6ec528266aacfd076d7c3154ad39267c3f3

We also found a few issues with the code diff that we sent yesterday for 
bitcoinj and checked in the bug fixes  in our fork-- so the diff sent yesterday 
is slightly outdated.

So at this point we have a working prototype for bitcoinj and we are waiting 
for your feedbacks. We also started to look at integrating the protocol in Kill 
Bill to check that what is proposed supports indeed the business cases of a 
full recurring billing platform.

Hope to hear from you guys soon!


On Feb 7, 2014, at 6:57 PM, Stephane Brossier  wrote:

> Mike and all,
> 
> Pierre and I just committed a prototype implementation of the recurring 
> payment protocol using bitcoinj. You can find the diff on our fork: 
> https://github.com/killbill/bitcoinj/commit/40c657c4191498f12539c60316116aa68af368a7
> 
> We did not write the server (merchant side), but wanted to have some feedback 
> before going deeper (merchant implementation and tests). We did our best to 
> build it on top of the existing BIP-0070 protocol-- only a few additions in 
> the messages, but no new calls and no new uri scheme. We created a new 
> package 'recurring' where most of the new code lives.
> 
> At a high level:
> 
> 1. Creation of the subscription:
> 
> The initial handshake for creating the subscription is exactly similar to the 
> one for the payment protocol (PaymentRequest is used to provide the contract)
> 
> 2. Wallet can decide to poll the merchants for its active subscriptions.
> 
> Here the flow is exactly similar to the payment protocol but the wallet 
> receives a callback to verify the payment matches the contract and should go 
> through.
> 
> Please give us some feedback whenever you have the chance. In the meantime we 
> will start implementing the merchant side and test the code.
> 
> Cheers!
> 
> 
> 
> On Jan 31, 2014, at 10:13 AM, Mike Hearn  wrote:
> 
>> That looks OK at a very high level. Things you probably want to think about:
>> How to trigger it off the existing payment protocol (no new top level 
>> messages or mime types or uri extensions please)
>> Data structures to define the payment schedule
>> Do you allow pre-submission of time locked transactions or not?
>> I think as you prototype these things will become clearer.  You could try 
>> prototyping either in Bitcoin Core (C++) or bitcoinj (java, look at the 
>> PaymentSession class).
>> 
>> 
>> 
>> On Wed, Jan 29, 2014 at 3:47 AM, Stephane Brossier  
>> wrote:
>> From what I have seen so far, there seems to be an agreement that this is a 
>> nice feature to add.  We are pretty new to that community and so we don't 
>> know exactly what the process is, and in particular how we reach consensus 
>> via email. I am certainly open to follow 'the way' if there is one, but one 
>> solution would be to follow Mike's suggestion on providing a (prototype) 
>> implementation first and then defining/refining the BIP. Odinn also 
>> suggested a possible retribution for our time through crowd-sourcing which I 
>> am interested to pursue if that makes sense.
>> 
>> 
>> We have quite some experience on the subscription side of things and while 
>> we are growing our knowledge on the Bitcoin technology (and ecosystem at 
>> large) we would benefit from:
>> * some feedbacks on the high level proposal
>> * additional requirements we might have missed
>> 
>> So, below is a high level description of what we have in mind. If this 
>> sounds reasonable, we could start working on an implementation.
>> 
>> 
>>  
>> I. Abstract
>> ---
>> 
>> This describes a protocol to enable recurring payments in bitcoins and can 
>> be seen as an extension of BIP-0070. The main goal here is to have the 
>> customer subscribe to a service of some kind (that is, agreeing on the terms 
>> of that subscription contract), and then have the wallet make recurring 
>> payments without any intervention from the customer as long as the payments 
>> match what the customer agreed on paying.
>> 
>> An example of such service would be an online streaming website, to which a 
>> user pays a fixed recurring monthly fee to access videos (a.k.a. resources). 
>> Note that there is also usage based billing: for example, the user may need 
>> to purchase additional access for premium videos (overage charges). This 
>> type of billing is more complicated and there are many variations to it used 
>> in the industry (pre-paid, …). For the sake of discussion, we’ll focus on 
>> fixed recurring payments only, but we will keep usage in mind to make sure 
>> the protocol will be able to support it as well.
>> 
>> 
>> II. Motivation
>> --
>> 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-02-07 Thread Stephane Brossier
Mike and all,

Pierre and I just committed a prototype implementation of the recurring payment 
protocol using bitcoinj. You can find the diff on our fork: 
https://github.com/killbill/bitcoinj/commit/40c657c4191498f12539c60316116aa68af368a7

We did not write the server (merchant side), but wanted to have some feedback 
before going deeper (merchant implementation and tests). We did our best to 
build it on top of the existing BIP-0070 protocol-- only a few additions in the 
messages, but no new calls and no new uri scheme. We created a new package 
'recurring' where most of the new code lives.

At a high level:

1. Creation of the subscription:

The initial handshake for creating the subscription is exactly similar to the 
one for the payment protocol (PaymentRequest is used to provide the contract)

2. Wallet can decide to poll the merchants for its active subscriptions.

Here the flow is exactly similar to the payment protocol but the wallet 
receives a callback to verify the payment matches the contract and should go 
through.

Please give us some feedback whenever you have the chance. In the meantime we 
will start implementing the merchant side and test the code.

Cheers!



On Jan 31, 2014, at 10:13 AM, Mike Hearn  wrote:

> That looks OK at a very high level. Things you probably want to think about:
> How to trigger it off the existing payment protocol (no new top level 
> messages or mime types or uri extensions please)
> Data structures to define the payment schedule
> Do you allow pre-submission of time locked transactions or not?
> I think as you prototype these things will become clearer.  You could try 
> prototyping either in Bitcoin Core (C++) or bitcoinj (java, look at the 
> PaymentSession class).
> 
> 
> 
> On Wed, Jan 29, 2014 at 3:47 AM, Stephane Brossier  
> wrote:
> From what I have seen so far, there seems to be an agreement that this is a 
> nice feature to add.  We are pretty new to that community and so we don't 
> know exactly what the process is, and in particular how we reach consensus 
> via email. I am certainly open to follow 'the way' if there is one, but one 
> solution would be to follow Mike's suggestion on providing a (prototype) 
> implementation first and then defining/refining the BIP. Odinn also suggested 
> a possible retribution for our time through crowd-sourcing which I am 
> interested to pursue if that makes sense.
> 
> 
> We have quite some experience on the subscription side of things and while we 
> are growing our knowledge on the Bitcoin technology (and ecosystem at large) 
> we would benefit from:
> * some feedbacks on the high level proposal
> * additional requirements we might have missed
> 
> So, below is a high level description of what we have in mind. If this sounds 
> reasonable, we could start working on an implementation.
> 
> 
>  
> I. Abstract
> ---
> 
> This describes a protocol to enable recurring payments in bitcoins and can be 
> seen as an extension of BIP-0070. The main goal here is to have the customer 
> subscribe to a service of some kind (that is, agreeing on the terms of that 
> subscription contract), and then have the wallet make recurring payments 
> without any intervention from the customer as long as the payments match what 
> the customer agreed on paying.
> 
> An example of such service would be an online streaming website, to which a 
> user pays a fixed recurring monthly fee to access videos (a.k.a. resources). 
> Note that there is also usage based billing: for example, the user may need 
> to purchase additional access for premium videos (overage charges). This type 
> of billing is more complicated and there are many variations to it used in 
> the industry (pre-paid, …). For the sake of discussion, we’ll focus on fixed 
> recurring payments only, but we will keep usage in mind to make sure the 
> protocol will be able to support it as well.
> 
> 
> II. Motivation
> --
> 
> Subscription based services have been growing in the past few years and so 
> the intent it to make it possible for customers to pay in bitcoins. 
> 
> Bitcoin’s push model presents new advantages for the customer compared to 
> traditional payment methods: the user has control over the subscription (for 
> example, there is no need to call the merchant to explicitly cancel the 
> credit card payments). It also opens the door to subscription management 
> tools in wallets (e.g. Hive apps), which would give user an overview of what 
> they are paying each month.
> 
> 
> III. Flow of Operations
> 
> 
> 
> Creation of the subscription:
> - - - - - - - - - - - - - - - - - - - - - - 
> 
> 1. The customer clicks 'subscribe' -> A message is sent to the merchant.
> 2. The merchant sends back a message to the wallet with the details of the 
> subscription such as the amount to be paid. In reality, there will be more 
> information but for the purpose of the prototype implementation this is 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-31 Thread Mike Hearn
That looks OK at a very high level. Things you probably want to think about:

   - How to trigger it off the existing payment protocol (no new top level
   messages or mime types or uri extensions please)
   - Data structures to define the payment schedule
   - Do you allow pre-submission of time locked transactions or not?

I think as you prototype these things will become clearer.  You could try
prototyping either in Bitcoin Core (C++) or bitcoinj (java, look at the
PaymentSession class).



On Wed, Jan 29, 2014 at 3:47 AM, Stephane Brossier
wrote:

>
>
>
>
>
>
>
>
>
>
>
>
>
> *From what I have seen so far, there seems to be an agreement that this is
> a nice feature to add. We are pretty new to that community and so we don't
> know exactly what the process is, and in particular how we reach consensus
> via email. I am certainly open to follow 'the way' if there is one, but one
> solution would be to follow Mike's suggestion on providing a (prototype)
> implementation first and then defining/refining the BIP. Odinn also
> suggested a possible retribution for our time through crowd-sourcing which
> I am interested to pursue if that makes sense.We have quite some experience
> on the subscription side of things and while we are growing our knowledge
> on the Bitcoin technology (and ecosystem at large) we would benefit from:*
> some feedbacks on the high level proposal* additional requirements we might
> have missedSo, below is a high level description of what we have in mind.
> If this sounds reasonable, we could start working on an implementation. I.
> Abstract---This describes a protocol to enable recurring
> payments in bitcoins and can be seen as an extension of BIP-0070. The main
> goal here is to have the customer subscribe to a service of some kind (that
> is, agreeing on the terms of that subscription contract), and then have the
> wallet make recurring payments without any intervention from the customer
> as long as the payments match what the customer agreed on paying.An example
> of such service would be an online streaming website, to which a user pays
> a fixed recurring monthly fee to access videos (a.k.a. resources). Note
> that there is also usage based billing: for example, the user may need to
> purchase additional access for premium videos (overage charges). This type
> of billing is more complicated and there are many variations to it used in
> the industry (pre-paid, …). For the sake of discussion, we’ll focus on
> fixed recurring payments only, but we will keep usage in mind to make sure
> the protocol will be able to support it as well.II.
> Motivation--Subscription based services have been growing
> in the past few years and so the intent it to make it possible for
> customers to pay in bitcoins. Bitcoin’s push model presents new advantages
> for the customer compared to traditional payment methods: the user has
> control over the subscription (for example, there is no need to call the
> merchant to explicitly cancel the credit card payments). It also opens the
> door to subscription management tools in wallets (e.g. Hive apps), which
> would give user an overview of what they are paying each month.III. Flow of
> Operations*
>
>
>
>
> *Creation of the subscription:- - - - - - - - - - - - - - - - - - - - - -
> 1. The customer clicks 'subscribe' -> A message is sent to the merchant.2.
> The merchant sends back a message to the wallet with the details of the
> subscription such as the amount to be paid. In reality, there will be more
> information but for the purpose of the prototype implementation this is
> sufficient.3. The wallet prompts the customer for authorization.4. The
> customer authorizes (or denies) it.5. The wallet sends the confirmation to
> the merchant.6. The merchant confirms the subscription was created.Ongoing
> payments:*
>
> *- - - - - - - - - - - - - - - -*
>
>
>
>
>
>
> *From that time on and since Bitcoin is a 'push' model, the wallet is
> responsible to poll the merchant for due payments associated with that
> subscription. Note that the merchant could specify hints to the wallet on
> when to poll (specific dates) or not during the registration of the
> subscription.Note that we can't simply have the wallet push X bitcoins
> every month: the user account on the merchant side may have gotten credits,
> invoice adjustments, etc. since the last invoice, so the amount to pay for
> a given billing period may be lower than the regular amount. It could even
> be zero if the user decides to make a one-time payment to the merchant
> directly using a different wallet. Hence, the wallet needs to get the
> latest invoice balance to make sure how much it should pay. This also opens
> the door for the support of overage charges.Quick note on the
> implementation on the merchant side: an entitlement system is a piece of
> logic on the merchant side which grants the user access to certain
> resources depending 

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-28 Thread Stephane Brossier
From what I have seen so far, there seems to be an agreement that this is a 
nice feature to add. We are pretty new to that community and so we don't know 
exactly what the process is, and in particular how we reach consensus via 
email. I am certainly open to follow 'the way' if there is one, but one 
solution would be to follow Mike's suggestion on providing a (prototype) 
implementation first and then defining/refining the BIP. Odinn also suggested a 
possible retribution for our time through crowd-sourcing which I am interested 
to pursue if that makes sense.


We have quite some experience on the subscription side of things and while we 
are growing our knowledge on the Bitcoin technology (and ecosystem at large) we 
would benefit from:
* some feedbacks on the high level proposal
* additional requirements we might have missed

So, below is a high level description of what we have in mind. If this sounds 
reasonable, we could start working on an implementation.


 
I. Abstract
---

This describes a protocol to enable recurring payments in bitcoins and can be 
seen as an extension of BIP-0070. The main goal here is to have the customer 
subscribe to a service of some kind (that is, agreeing on the terms of that 
subscription contract), and then have the wallet make recurring payments 
without any intervention from the customer as long as the payments match what 
the customer agreed on paying.

An example of such service would be an online streaming website, to which a 
user pays a fixed recurring monthly fee to access videos (a.k.a. resources). 
Note that there is also usage based billing: for example, the user may need to 
purchase additional access for premium videos (overage charges). This type of 
billing is more complicated and there are many variations to it used in the 
industry (pre-paid, …). For the sake of discussion, we’ll focus on fixed 
recurring payments only, but we will keep usage in mind to make sure the 
protocol will be able to support it as well.


II. Motivation
--

Subscription based services have been growing in the past few years and so the 
intent it to make it possible for customers to pay in bitcoins. 

Bitcoin’s push model presents new advantages for the customer compared to 
traditional payment methods: the user has control over the subscription (for 
example, there is no need to call the merchant to explicitly cancel the credit 
card payments). It also opens the door to subscription management tools in 
wallets (e.g. Hive apps), which would give user an overview of what they are 
paying each month.


III. Flow of Operations



Creation of the subscription:
- - - - - - - - - - - - - - - - - - - - - - 

1. The customer clicks 'subscribe' -> A message is sent to the merchant.
2. The merchant sends back a message to the wallet with the details of the 
subscription such as the amount to be paid. In reality, there will be more 
information but for the purpose of the prototype implementation this is 
sufficient.
3. The wallet prompts the customer for authorization.
4. The customer authorizes (or denies) it.
5. The wallet sends the confirmation to the merchant.
6. The merchant confirms the subscription was created.

Ongoing payments:
- - - - - - - - - - - - - - - -

From that time on and since Bitcoin is a 'push' model, the wallet is 
responsible to poll the merchant for due payments associated with that 
subscription. Note that the merchant could specify hints to the wallet on when 
to poll (specific dates) or not during the registration of the subscription.

Note that we can't simply have the wallet push X bitcoins every month: the user 
account on the merchant side may have gotten credits, invoice adjustments, etc. 
since the last invoice, so the amount to pay for a given billing period may be 
lower than the regular amount. It could even be zero if the user decides to 
make a one-time payment to the merchant directly using a different wallet. 
Hence, the wallet needs to get the latest invoice balance to make sure how much 
it should pay. This also opens the door for the support of overage charges.


Quick note on the implementation on the merchant side: an entitlement system is 
a piece of logic on the merchant side which grants the user access to certain 
resources depending on the account status (unpaid invoices, etc.). This goes 
often hand in hand with a dunning system, which progressively restricts access 
as the user's account is more and more overdue. Since wallets can be offline 
for an extended period of time, payments may be missed and lead to an overdue 
state (e.g. extra fees, service degraded). It is the responsibility of the 
customer to ensure the wallet is up often enough for payments to happen.


In that recurring phase where the wallet polls the merchant, the wallet is 
responsible to check that payments match the subscription contract; that is, 
the amount, frequency of payments, … match what

Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Jeff Garzik
Let's keep fund raising off this mailing list, please.  PS bounties don't
work.


On Tue, Jan 28, 2014 at 1:08 AM, Odinn Cyberguerrilla <
odinn.cyberguerri...@riseup.net> wrote:

> Greatly appreciate seeing this discussion occur.  This is something that
> potentially could be supported through a bounty - possibly a process BIP?
>
> Possibly related: https://gist.github.com/ABISprotocol/8515891
>
> > Yes, recurring payments and subscriptions is a frequently-requested
> > feature.  It needs a new BIP.  Here is an outline:
> >
> > The situation is somewhat analogous to HTML5 local storage.  The remote
> > (merchant) wants to initiate a persistent behavior.  This is bitcoin, so
> > we
> > have a "push" model for payment, and the user has complete control.  The
> > merchant can, at most, send a "subscription request."  The user is
> > responsible for making on-time payments after that point.
> >
> > Centralized services like coinbase.com or blockchain.info will have an
> > easy
> > time of it.  An automated program on their backend, sending payments as
> > needed, is easy and direct.
> >
> > More inventive services might employ multisig transactions, generating
> and
> > signing one signature of a TX, then sending that TX to the human for
> > further signing and publishing.  A few competing vendors could offer bots
> > that provide this signing service.
> >
> > Decentralized, standalone wallet clients will be somewhat troublesome.
>  We
> > can store a local subscription request, and send recurring payments...
>  if
> > the wallet app is running.  If not, the user will be missing payments,
> > that
> > perhaps they intended to make (rent!).
> >
> > Each of these solutions can be cancelled at any time by the user.  As
> > such,
> > a courtesy "subscription cancelled" message sent to the merchant is
> > recommended.  User controls the usage of their money at all times, the
> way
> > things should be.
> >
> > And finally, you do not want to make it /too easy/ to send money over and
> > over again.  From a human-interface perspective, a textual reminder to
> > send
> > money might be preferred over actual recurring payment automation:
> > reminder
> > email + manual spend inserts a bit of additional human thought and review
> > into the process, with all that entails.
> >
> > --
> > Jeff Garzik
> > Bitcoin core developer and open source evangelist
> > BitPay, Inc.  https://bitpay.com/
> >
> --
> > WatchGuard Dimension instantly turns raw network data into actionable
> > security intelligence. It gives you real-time visual feedback on key
> > security issues and trends.  Skip the complicated setup - simply import
> > a virtual appliance and go from zero to informed in seconds.
> >
> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
> > Bitcoin-development mailing list
> > Bitcoin-development@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/bitcoin-development
> >
>
>
>


-- 
Jeff Garzik
Bitcoin core developer and open source evangelist
BitPay, Inc.  https://bitpay.com/
--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Mike Hearn
I think the right approach for this is to actually implement it and
*then* propose
a BIP. There are so many possible features we could add to the payment
protocol, any other approach would rapidly turn into lots of people
deciding to do the "fun bits" and often leaving others doing the hard work
with difficult or unworkable specs.

For instance, if you try to implement this, you would rapidly discover that
it probably makes more sense to do this as an additional set of fields in
PaymentDetails rather than a new message type entirely. A new top level
message type would in turn require new MIME types, URI extensions and so
on. That doesn't make any sense.

Once you decide to extend PaymentDetails, the next discovery would be that
it probably makes sense to try and solve the problem of address re-use for
recurring payments first, before speccing out time intervals and so on.
That's a separate BIP.

I'm all for adding recurring payments as a feature, that's what the
protocol is there for. But I'd like to see future protocol extension
requests come after at least one working implementation has been made .


On Tue, Jan 28, 2014 at 3:36 AM, Stephane Brossier
wrote:

> Hi,
>
> [I sent this email 2 days ago prior my registration to the mailing list;
> please forgive me if this is a duplicate]
>
> I would like to propose an extension to the Payment Protocol (bip-0070) to
> address the case of recurring payments in Bitcoin -- new bip or
> modification of bip-0070.
>
> There has been a lot of growth in the last few years in the 'subscription
> economy' with many new companies embracing that model -- online video,
> gaming, groceries, newspapers,... In parallel, Bitcoin is growing into a
> mainstream currency (hence bip-0070), and so the next logical step would be
> to define a protocol to address that need.
>
> We have been working in the past few years on an open-source billing
> platform (http://kill-bill.org/), and recently came with a prototype to
> do recurring billing in Bitcoin (see
> http://thekillbillstory.wordpress.com/2014/01/20/bitcoin-plugin/ and
> http://thekillbillstory.wordpress.com/2014/01/11/coinbase-integration-experiment/
> ).
>
>
> The work flow would look similar to the one from bip-0070. There would
> need to be some additions; the flow could be summarized as follow:
>
> 0. Click: 'Subscribe Now'
> 1. Wallet would get  a RecurringPaymentRequestAuth which describes the
> nature of the future recurring payments
> 2. The Customer would get prompted from the wallet to authorize it.
> 3. The wallet would then poll the Merchant server (startup time, and/or
> well defined frequency) and potentially merchant would start issuing a
> PaymentRequest); the role of the wallet is to ensure that PaymentRequest is
> within the bounds of what was accepted by the customer-- amount,
> frequency,.. If it is, then it would make the Payment the same way it works
> for bip-0070
>
> Is that something that the community would be interested in? We could
> provide more details about the protocol we have in mind (messages and
> flow), and also provide an implementation with bitcoinj as a wallet and
> Kill Bill as a merchant server.
>
> Le me know what you think.
>
> Stéphane
>
>
> --
> WatchGuard Dimension instantly turns raw network data into actionable
> security intelligence. It gives you real-time visual feedback on key
> security issues and trends.  Skip the complicated setup - simply import
> a virtual appliance and go from zero to informed in seconds.
>
> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
> ___
> Bitcoin-development mailing list
> Bitcoin-development@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Odinn Cyberguerrilla
Greatly appreciate seeing this discussion occur.  This is something that
potentially could be supported through a bounty - possibly a process BIP?

Possibly related: https://gist.github.com/ABISprotocol/8515891

> Yes, recurring payments and subscriptions is a frequently-requested
> feature.  It needs a new BIP.  Here is an outline:
>
> The situation is somewhat analogous to HTML5 local storage.  The remote
> (merchant) wants to initiate a persistent behavior.  This is bitcoin, so
> we
> have a "push" model for payment, and the user has complete control.  The
> merchant can, at most, send a "subscription request."  The user is
> responsible for making on-time payments after that point.
>
> Centralized services like coinbase.com or blockchain.info will have an
> easy
> time of it.  An automated program on their backend, sending payments as
> needed, is easy and direct.
>
> More inventive services might employ multisig transactions, generating and
> signing one signature of a TX, then sending that TX to the human for
> further signing and publishing.  A few competing vendors could offer bots
> that provide this signing service.
>
> Decentralized, standalone wallet clients will be somewhat troublesome.  We
> can store a local subscription request, and send recurring payments...  if
> the wallet app is running.  If not, the user will be missing payments,
> that
> perhaps they intended to make (rent!).
>
> Each of these solutions can be cancelled at any time by the user.  As
> such,
> a courtesy "subscription cancelled" message sent to the merchant is
> recommended.  User controls the usage of their money at all times, the way
> things should be.
>
> And finally, you do not want to make it /too easy/ to send money over and
> over again.  From a human-interface perspective, a textual reminder to
> send
> money might be preferred over actual recurring payment automation:
> reminder
> email + manual spend inserts a bit of additional human thought and review
> into the process, with all that entails.
>
> --
> Jeff Garzik
> Bitcoin core developer and open source evangelist
> BitPay, Inc.  https://bitpay.com/
> --
> WatchGuard Dimension instantly turns raw network data into actionable
> security intelligence. It gives you real-time visual feedback on key
> security issues and trends.  Skip the complicated setup - simply import
> a virtual appliance and go from zero to informed in seconds.
> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
> Bitcoin-development mailing list
> Bitcoin-development@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>



--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread PikaPay
It could be useful to schedule x payments for y amount every z time
period, but you'd want to be able to pause or cancel at any time.

If you want the merchant to be able to request a series of payments
like a subscription, the merchant might also be able to request that
the subscription be paused or cancelled as well.


-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Richard Kohl  -  rich...@pikapay.com

Twitter: @generalseven
Phone: +31 6 284 00112

PikaPay: Send Bitcoins with Twitter

--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Jeff Garzik
Yes, recurring payments and subscriptions is a frequently-requested
feature.  It needs a new BIP.  Here is an outline:

The situation is somewhat analogous to HTML5 local storage.  The remote
(merchant) wants to initiate a persistent behavior.  This is bitcoin, so we
have a "push" model for payment, and the user has complete control.  The
merchant can, at most, send a "subscription request."  The user is
responsible for making on-time payments after that point.

Centralized services like coinbase.com or blockchain.info will have an easy
time of it.  An automated program on their backend, sending payments as
needed, is easy and direct.

More inventive services might employ multisig transactions, generating and
signing one signature of a TX, then sending that TX to the human for
further signing and publishing.  A few competing vendors could offer bots
that provide this signing service.

Decentralized, standalone wallet clients will be somewhat troublesome.  We
can store a local subscription request, and send recurring payments...  if
the wallet app is running.  If not, the user will be missing payments, that
perhaps they intended to make (rent!).

Each of these solutions can be cancelled at any time by the user.  As such,
a courtesy "subscription cancelled" message sent to the merchant is
recommended.  User controls the usage of their money at all times, the way
things should be.

And finally, you do not want to make it /too easy/ to send money over and
over again.  From a human-interface perspective, a textual reminder to send
money might be preferred over actual recurring payment automation: reminder
email + manual spend inserts a bit of additional human thought and review
into the process, with all that entails.

-- 
Jeff Garzik
Bitcoin core developer and open source evangelist
BitPay, Inc.  https://bitpay.com/
--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Jeff Garzik
Yes, recurring payments and subscriptions is a frequently-requested
feature.  It needs a new BIP.  Here is an outline:

The situation is somewhat analogous to HTML5 local storage.  The
remote (merchant) wants to initiate a persistent behavior.

Note: This is ONE

-- 
Jeff Garzik
Bitcoin core developer and open source evangelist
BitPay, Inc.  https://bitpay.com/

--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Kevin Greene
+1 to the idea of recurring payment requests.

Perhaps one way to realize this would be to add an optional URL to the
PaymentRequest object where the next PaymentRequest can be fetched and the
date at which the merchant expects the next payment.


On Mon, Jan 27, 2014 at 6:36 PM, Stephane Brossier
wrote:

> Hi,
>
> [I sent this email 2 days ago prior my registration to the mailing list;
> please forgive me if this is a duplicate]
>
> I would like to propose an extension to the Payment Protocol (bip-0070) to
> address the case of recurring payments in Bitcoin -- new bip or
> modification of bip-0070.
>
> There has been a lot of growth in the last few years in the 'subscription
> economy' with many new companies embracing that model -- online video,
> gaming, groceries, newspapers,... In parallel, Bitcoin is growing into a
> mainstream currency (hence bip-0070), and so the next logical step would be
> to define a protocol to address that need.
>
> We have been working in the past few years on an open-source billing
> platform (http://kill-bill.org/), and recently came with a prototype to
> do recurring billing in Bitcoin (see
> http://thekillbillstory.wordpress.com/2014/01/20/bitcoin-plugin/ and
> http://thekillbillstory.wordpress.com/2014/01/11/coinbase-integration-experiment/
> ).
>
>
> The work flow would look similar to the one from bip-0070. There would
> need to be some additions; the flow could be summarized as follow:
>
> 0. Click: 'Subscribe Now'
> 1. Wallet would get  a RecurringPaymentRequestAuth which describes the
> nature of the future recurring payments
> 2. The Customer would get prompted from the wallet to authorize it.
> 3. The wallet would then poll the Merchant server (startup time, and/or
> well defined frequency) and potentially merchant would start issuing a
> PaymentRequest); the role of the wallet is to ensure that PaymentRequest is
> within the bounds of what was accepted by the customer-- amount,
> frequency,.. If it is, then it would make the Payment the same way it works
> for bip-0070
>
> Is that something that the community would be interested in? We could
> provide more details about the protocol we have in mind (messages and
> flow), and also provide an implementation with bitcoinj as a wallet and
> Kill Bill as a merchant server.
>
> Le me know what you think.
>
> Stéphane
>
>
> --
> WatchGuard Dimension instantly turns raw network data into actionable
> security intelligence. It gives you real-time visual feedback on key
> security issues and trends.  Skip the complicated setup - simply import
> a virtual appliance and go from zero to informed in seconds.
>
> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
> ___
> Bitcoin-development mailing list
> Bitcoin-development@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


[Bitcoin-development] Extension for BIP-0070 to support recurring payments

2014-01-27 Thread Stephane Brossier
Hi,

[I sent this email 2 days ago prior my registration to the mailing list; please 
forgive me if this is a duplicate]

I would like to propose an extension to the Payment Protocol (bip-0070) to 
address the case of recurring payments in Bitcoin -- new bip or modification of 
bip-0070.

There has been a lot of growth in the last few years in the 'subscription 
economy' with many new companies embracing that model -- online video, gaming, 
groceries, newspapers,... In parallel, Bitcoin is growing into a mainstream 
currency (hence bip-0070), and so the next logical step would be to define a 
protocol to address that need.

We have been working in the past few years on an open-source billing platform 
(http://kill-bill.org/), and recently came with a prototype to do recurring 
billing in Bitcoin (see 
http://thekillbillstory.wordpress.com/2014/01/20/bitcoin-plugin/ and 
http://thekillbillstory.wordpress.com/2014/01/11/coinbase-integration-experiment/).


The work flow would look similar to the one from bip-0070. There would need to 
be some additions; the flow could be summarized as follow:

0. Click: 'Subscribe Now'
1. Wallet would get  a RecurringPaymentRequestAuth which describes the nature 
of the future recurring payments
2. The Customer would get prompted from the wallet to authorize it.
3. The wallet would then poll the Merchant server (startup time, and/or well 
defined frequency) and potentially merchant would start issuing a 
PaymentRequest); the role of the wallet is to ensure that PaymentRequest is 
within the bounds of what was accepted by the customer-- amount, frequency,.. 
If it is, then it would make the Payment the same way it works for bip-0070

Is that something that the community would be interested in? We could provide 
more details about the protocol we have in mind (messages and flow), and also 
provide an implementation with bitcoinj as a wallet and Kill Bill as a merchant 
server.

Le me know what you think.

Stéphane--
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development