Author

Topic: Feature request: recurring payments (Read 973 times)

member
Activity: 103
Merit: 10
June 08, 2013, 11:47:16 AM
#6
There's a couple ways that this can be done, but they won't ever be as pleasant as it is with your bank account:  when a withdrawal is made from you bank account, it doesn't matter which $X is taken, as long as $X is available.  Bitcoin is a bit different, in that you must select which BTC to spend, and then you sign the transaction with the coin selection as part of it.  This kind of removes one possibility, which is pre-signing transactions.

That's not to say that pre-signing transactions won't work, but you'd have to "lock" those funds in your wallet and not touch them.  With a bank account, you could have a monthly recurring payment of $1,000, and it doesn't matter if you have $200 at some point, as long as you get back to $1,000 by the time the withdrawal is made.  It won't work that way in  Bitcoin.

And just for completeness, I should mention that the fact that each transaction requires your authorization is one of the primary reason to use Bitcoin!  No one else has control over it except you.  This is why people have credit cards stolen when a merchant's database is compromised, because you're trusting them to secure your CC number, which gives someone access to the credit behind the card.  When you pay with Bitcoin, there is no way for the merchant to "do another pull."  You have to initiate it, and they get no information that can compromise your funds.  With extra security comes extra responsibility...

As such, there's a few ways to do what you are requesting.  But all of them require you to pre-allocate all the funds ahead of time, and not touch them.  If you needed to use those funds with the intention of replacing them, the app would warn you that you will invalidate your pre-signed payments.   Maybe it won't be a big deal with a decent interface... but it doesn't change the fact that you will break the auto payment and have to recreate it when the funds are available again.  And if you are receiving monthly payments to your wallet, you obviously can't pre-sign payments from coins you haven't received yet...

So if you have enough laying around to allocate, you can:

(1) Just "lock" the coins in your wallet, and pre-sign 12 transactions of X BTC each.  Your system will automatically broadcast one per month.
(2) You put the money into escrow -- a 2-of-2 tx between you and the merchant.  This is more of a deposit-like system though, where you are required to prove ahead of time that the funds are available, and the funds may be returned to you later, but you can't just take it back unless they provide you a signature.  Your app would pre-sign 12 transactions, which would only be one of two signatures needed for the tx to be valid.  Once per month your system sends it to their server, they add the second signature, and you're done.
(2a) You use Rapidly Adjusted (Micro)Payments which does the same as the 2-of-2 transaction above, but reduces the necessity to actually broadcast each transaction.  The entire 12 payments will be bundled into 2 transactions (one at the beginning, and one at "settlement").

There's options, but they're probably not exactly what people want.  If you're going to run your wallet yourself, anything you try to do to get exactly what you are seeking, will likely negate many benefits of Bitcoin that we value.

Thanks for the thoughtful response Etotheipi.  I don't disagree with any of it, and I am aware of the fundamentals of bitcoin transactions. 

But to make this feature possible, the angle I was coming from was a bit different.  Given:  I trust my armory wallet.  I also use QT on another computer and I trust it.  I have to, they are the baskets in which I keep my eggs.

So here's the whammy:  Since I Trust my wallet, I just authorize it to sign these special payments on my behalf when the time comes provided there are enough funds, my frequency and amount limits are respected, and the wallet is online.  It picks from the available inputs and shoots it out.

If a wallet is password protected, then it's probably not *able* to sign without me entering my secret...  But there must be some way in the world of cryptography to pre-sign a block of tokens for the automatic scheduled payments (maybe limited to 24 month in advance chunks like my bank limits it) which the client can then use on its own to properly sign the transaction in the future.  Can probably also make it so the tokens only work with specific payment parameters to prevent them from being abused while I'm not looking?

Even if the wallet nags me to review the transactions once a month and enter my password, it's still a step forward.  The nasty part to me seems to be that a new messaging protocol is needed (or a few functions added to an existing protocol) which would allow a 3rd party to request a recurring payment after I provide them a means to reach my wallet.  The protocol would need to handle fresh requests each month with unique transfer amounts (think telephone bills), and if it were super awesome, be able to negotiate new addresses to keep privacy groovy.  (Business hate letting people see what they earn more than private individuals - trade secrets and all.)

Bottom line:  I'm willing to enter a sacred agreement with my wallet and a 3rd party to just deal with it within limits of frequency and max amount which I set.  Have I changed anything regarding the possibilities? 
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
June 07, 2013, 09:27:30 PM
#5
There's a couple ways that this can be done, but they won't ever be as pleasant as it is with your bank account:  when a withdrawal is made from you bank account, it doesn't matter which $X is taken, as long as $X is available.  Bitcoin is a bit different, in that you must select which BTC to spend, and then you sign the transaction with the coin selection as part of it.  This kind of removes one possibility, which is pre-signing transactions.

That's not to say that pre-signing transactions won't work, but you'd have to "lock" those funds in your wallet and not touch them.  With a bank account, you could have a monthly recurring payment of $1,000, and it doesn't matter if you have $200 at some point, as long as you get back to $1,000 by the time the withdrawal is made.  It won't work that way in  Bitcoin.

And just for completeness, I should mention that the fact that each transaction requires your authorization is one of the primary reason to use Bitcoin!  No one else has control over it except you.  This is why people have credit cards stolen when a merchant's database is compromised, because you're trusting them to secure your CC number, which gives someone access to the credit behind the card.  When you pay with Bitcoin, there is no way for the merchant to "do another pull."  You have to initiate it, and they get no information that can compromise your funds.  With extra security comes extra responsibility...

As such, there's a few ways to do what you are requesting.  But all of them require you to pre-allocate all the funds ahead of time, and not touch them.  If you needed to use those funds with the intention of replacing them, the app would warn you that you will invalidate your pre-signed payments.   Maybe it won't be a big deal with a decent interface... but it doesn't change the fact that you will break the auto payment and have to recreate it when the funds are available again.  And if you are receiving monthly payments to your wallet, you obviously can't pre-sign payments from coins you haven't received yet...

So if you have enough laying around to allocate, you can:

(1) Just "lock" the coins in your wallet, and pre-sign 12 transactions of X BTC each.  Your system will automatically broadcast one per month.
(2) You put the money into escrow -- a 2-of-2 tx between you and the merchant.  This is more of a deposit-like system though, where you are required to prove ahead of time that the funds are available, and the funds may be returned to you later, but you can't just take it back unless they provide you a signature.  Your app would pre-sign 12 transactions, which would only be one of two signatures needed for the tx to be valid.  Once per month your system sends it to their server, they add the second signature, and you're done.
(2a) You use Rapidly Adjusted (Micro)Payments which does the same as the 2-of-2 transaction above, but reduces the necessity to actually broadcast each transaction.  The entire 12 payments will be bundled into 2 transactions (one at the beginning, and one at "settlement").

There's options, but they're probably not exactly what people want.  If you're going to run your wallet yourself, anything you try to do to get exactly what you are seeking, will likely negate many benefits of Bitcoin that we value.
member
Activity: 103
Merit: 10
June 07, 2013, 04:17:50 AM
#4
Yeah, that's something that I'll actually add to the new wallets when I get back to them... some kind of "schedule" entry that could be used to trigger notifications for making payments.  It wouldn't even just notify you, it would actually pop up with the "Send Bitcoins" dialog already pre-filled in, you just have to hit "Send" (or "Create Unsigned Transaction", if it's a watching-only wallet).

But as you noted, that's low priority.  But I've made a note to myself to add it to the new wallets (though, they are being made with extensibility in mind, so that it should be easy to upgrade later if I forget).

Was just searching and found this post, as I want the same feature!  Smiley  So count my vote for recurring payments.

@Etotheipi, have you ever considered what it would take to also establish recurring "pulls" from trusted parties?  Example, my cell phone, mortgage, and utilities all pull from my bank each month and I love it because I have no patience to waste my time trying to remember to pay everyone promptly.  Those companies also love it because as long as I have funds, they know I can't forget to pay on time.

Seems to me an off-blockchain protocol for two wallets (a vendor and me for example) would be possible to establish a long term relationship whereby they could send a message to my wallet each month for what they want, and I could authorize my wallet to let them have it if it fits within a normal limit which I set.  Kind a crypto-chat protocol for wallets to talk to each other.

I see this as a killer feature from the perspective of all the companies out there that provide monthly services.  ISP's, mobile phone providers, loaning parties, renters, utility companies, and so forth.  If there's no recurring pull mechanism in bitcoin, they won't ever accept it as payment.  And that's a pretty big chunk of monthly commerce.  By value, recurring payments might even be the biggest portion of the average person's expenditures.  (My mortgage and utilities are way more than my other day to day costs in any given month.)

My dream use case: 
Case 1.  My wallet notifies me once a month of the pending scheduled payments (or requests for payment) which I just tick off and approve for payment with a password confirmation.
Case 2.  If I really trust the person I'm paying, I tick an option to "pre-authorize" the wallet to automatically pay their requests within the max limits I set for frequency and amount.  Since the exact transaction amount often varies a bit from month to month, a fresh request is needed each time.

Think there's a chance?
hero member
Activity: 490
Merit: 500
May 16, 2013, 05:32:56 PM
#3
Thanks, I appreciate it. 

I don't have much in the way of bitcoins, but I definitely plan on making a donation later on when I acquire some.  It'll probably be a while though since I don't plan on buying them on an exchange, I'm more interested in setting up a business that uses bitcoins as the medium of exchange.
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
May 16, 2013, 05:19:15 PM
#2
Yeah, that's something that I'll actually add to the new wallets when I get back to them... some kind of "schedule" entry that could be used to trigger notifications for making payments.  It wouldn't even just notify you, it would actually pop up with the "Send Bitcoins" dialog already pre-filled in, you just have to hit "Send" (or "Create Unsigned Transaction", if it's a watching-only wallet).

But as you noted, that's low priority.  But I've made a note to myself to add it to the new wallets (though, they are being made with extensibility in mind, so that it should be easy to upgrade later if I forget).
hero member
Activity: 490
Merit: 500
May 16, 2013, 05:12:12 PM
#1
This is obviously not a high priority feature since dealing with the RAM issues are much more pressing. 

But, as far as I know, recurring payments are not a feature that currently exists within Bitcoin.  The reason I suggest this as a client feature is that while recurring payments in the credit card world are typically done on a "pull" basis, ie, the merchant charges your card, in the bitcoin world, it would make more logical sense for the payments to happen on a "push" basis since with the design of bitcoin, it may or may not even be possible to implement the traditional credit card recurring payment model.

There would probably have to be some sort of security implemented like a prompt for a password to ensure that viruses don't use the recurring payment setup as a way to steal all your bitcoins, but I'm sure etotheipi knows security far better than I do, so I'll defer to his wisdom on the details of the implementation if he decides he's interested in implementing this.

Great wallet, by the way, I love Armory.
Jump to: