gratipay / gratipay.com

Here lieth a pioneer in open source sustainability. RIP
https://gratipay.news/the-end-cbfba8f50981
MIT License
1.12k stars 308 forks source link

pay in with bitcoin #14

Closed chadwhitacre closed 10 years ago

chadwhitacre commented 12 years ago

Status: We need someone to join Team Gittip and take ownership of our bitcoin integration. Is it you?!

The essence of Gittip is recurring gifts, and there is (I gather) no way to do recurring bitcoin payments. Gittip will likely add explicit support for one-off (#5) and pre-paid (#113) gifts once the core recurring feature has matured. At that point we'll be ready for funding with bitcoin.

I (@whit537) am going to let someone else contribute the bulk of this work. On the pattern of Balanced contributing integration with their system (#78), my ideal would be to see a bitcoin processor such as Bit-Pay step forward and contribute integration with their service. A lesser option would be for a non-Bit-Pay member of the Gittip community to contribute the integration.

thiloplanz commented 11 years ago

gittip will, therefore, have to have escrow accounts for every currency that it allows to be directly gifted.

I think that is a very bad idea.

It greatly decreases usability (everyone knows what a dollar is, it is the established standard in international trade and also the most common reserve currency, introducing many currencies make everything very confusing, and especially with bitcoin there is extreme volatility, see also http://www.freedomsponsors.org/core/issue/195/actual-payment-option-should-be-decoupled-from-bid-currency ), and it also increases the implementation complexity without need (all payment services will gladly convert currencies for you).

It think any money that gets deposited in gittip should be converted into USD, and handled as USD internally.

gittip will, therefore, have to have escrow accounts for every currency that it allows to be directly gifted.

Well, in a way, I agree with that sentence. I just think the number of currencies that gittip allows to be directly gifted should be one (USD only).

chadwhitacre commented 11 years ago

@thiloplanz In some ways this is parallel to application architecture best practices around time: convert all inputs to UTC, store it thus internally, and convert to local timezones during rendering to the user. The difference here is that there's significant expense involved in converting all money to and from USD, whereas converting timestamps to and from UTC is free.

I agree that the N currencies scenario is potentially complicated and confusing. I'm not sure yet of the best way to proceed here.

MaddieM4 commented 11 years ago

@whit537 Maybe lazy conversion? So, say, you pledge $3 to someone, and pay with Bitcoin.

Always converting only for arrangements where it's necessary, and only doing conversion math when it's necessary.

thiloplanz commented 11 years ago

Just to add my use-case: I think in Euro. I can live with gittip being denominated in USD (most my online purchases are). I want to set up a X USD/weekly donation on gittip. But I don't want to set up anything that results in automatic weekly charges against my credit card. I could live with something like PayPal, but they don't do that unless I give them my credit card. So I want to pre-pay gittip. I would pre-pay by whatever means to get a USD balance (because the weekly donation is also in USD). Again, I would use PayPal or whatever for that. I'd prefer bitcoin for pure geekness reasons. But I would not want to deposit bitcoins as bitcoins, because of the extreme volatility of that currency. Pre-paying every could of month would not work, because you have no idea how long that would last with bitcoins.

And to add a related example: Flattr is very similar to Gittip. You set up a regular amount (in this case, Euro per month), and in this case, it can be pre-paid. Everything is handled in Euro, but can be displayed in any other currencies.

The difference here is that there's significant expense involved in converting all money to and from USD, whereas converting timestamps to and from UTC is free.

Are you sure accepting multiple currencies as is improves that? That seems to make things worse, as bigger amounts (such a pre-payments) tend to have better conditions here.

If gittip accepted multiple payments, then Joe Coder would end up with a balance of 10 USD, 6 EUR, 8 CAN, 0.03 Bitcoin, 3000 Yen, 400 RMB. Assuming he lives in the US, it is probably only possible for him to withdraw the 10 USD conveniently. All the other amounts have to be converted somehow, at probably very unfavourable rates.

If all payments were handled in USD, he would just need to do a 30 USD withdrawal (or whatever the above amounts to, note that even figuring that out is non-trivial). Currency exchange would have been done when the money was deposited to bittip. It would have been higher amounts, and only in the single currency the depositor was actually using and hence already comfortable with, not with anything like the weird basket above.

Even if he lives in another country, it is probably not a problem to withdraw 30 USD.

pjz commented 11 years ago

I think the volatility is the point - we should provide ways for the recipient to turn their gifts into whatever currency they want; equally, we should allow them to keep it as whatever currency it was given in, if that's more convenient. This means that gittip itself won't ever do any conversion - it will be the recipient who's doing the conversion, at a time (and therefore a rate) that they choose. Gittip will help, insomuch as gittip provides the connection with a payment provider (or N of them) that will do the conversion, but getting set up with that provider will be as muc hthe recipient's issue as gittip's (just as it is now).

lyndsysimon commented 11 years ago

From a sheer practicality standpoint, I agreew with @thiloplanz - we should operate in a single currency on the back end.

However, I see Bitcoin (and potentially, later, other cryptocurrencies) as a special case. Most people who hold Bitcoin and the vast majority of people who would tip others in Bitcoin don't want it converted over to USD right away - especially if the end user elects to withdraw in BTC.

I guess what I'm trying to say is that Bitcoin's volatility is novel, and it is an expected and understood property of the currency. I don't think anyone is going to be upset when their 0.1 BTC / week tip goes from being work $19 USD to $1.90 USD - but if we convert it on our side and their tip of 0.1 BTC ends up netting the recipient $19 USD when 0.1 BTC is going for $40 USD on MtGox... I don't think anyone is going to be happy.

Also, you made a bit of a slip of the tongue - "Bittip". I'm a little starry-eyed over that name :)

colindean commented 11 years ago

However, I see Bitcoin (and potentially, later, other cryptocurrencies) as a special case. Most people who hold Bitcoin and the vast majority of people who would tip others in Bitcoin don't want it converted over to USD right away - especially if the end user elects to withdraw in BTC.

:+1:

thiloplanz commented 11 years ago

I guess what I'm trying to say is that Bitcoin's volatility is novel, and it is an expected and understood property of the currency

And how people deal with it is to not denominate prices in Bitcoin, but rather have prices either in USD directly (and use bitcoin only to handle a transaction), or adjust the Bitcoin prices rather frequently. That is what Mega.com and Wordpress are doing, right?

To reiterate, I think most people using Bitcoin, especially if they are not being pre-paid, but deducted from their wallets at a recurring rate, would rather commit to a weekly USD amount then a weekly Bitcoin amount.

thiloplanz commented 11 years ago

To reiterate, I think most people using Bitcoin,

Okay, let me paddle back on that, as most people using Bitcoin probably don't just use it for practical reasons but also what to evangelize it as a currency.

I agree that we could (not necessarily should) accept Bitcoin as a special case and offer handling it natively (if someone volunteers with the implementation). But not for other currencies like Canadian Dollars or Euros. And even if Bitcoin support like that is on the roadmap, we should not defer the more simple implementation of hooking into a Bitcoin merchant services provider that works on a USD-basis to provide a non-credit-card way of prepaid payments (for the people that would already be happy with that).

chadwhitacre commented 11 years ago

+1 from @rstacruz via Twitter.

untitaker commented 11 years ago

Maybe there's a possibility to implement Bitcoin support with low risk and independent of the unstable exchange rate of Bitcoin by only allowing to tip somebody in BC if the reciever also has linked a BC address, without any USD conversion inbetween.

thiloplanz commented 11 years ago

Flattr is accepting bitcoin deposits now: http://blog.flattr.net/2013/07/adding-bitcoin-support/

Payments are handled by bips.me (a Danish company), and converted into a regular Euro deposit.

janearc commented 11 years ago

I am only interested in using this service if it is less-attributable than bank accounts and credit cards, and more suitable to my own spending practices. That is to say, bitcoin.

chadwhitacre commented 11 years ago

IRC

janearc commented 11 years ago

Whit, have you actually looked at the size of the bitcoin economy? Is it not peculiar how many people have asked for this specific feature? Simply because you do not use bitcoin does not mean others do not.

Bitcoin is convenient because I've always got it sitting around and I odn't have ot give anyone a credit card or bank account. Bitcoin is convenient because, for me, it tends to appreciate, and there's a lower commitment to the giving than pulling money directly from my salary.

You are basing your response to this on whether it is convenient for you to code in the support, rather than whether it is convenient for users to actually gift money. Don't you think maybe there is a problem there with your priorities? As a developer, I can tell you if my API or system cannot take a modification without requiring substantial amounts of work, I have done a terrible job.

Think on that.

<3 alex

Alex J Avriette http://search.cpan.org/~alex/ +1 858 3677293

On Mon, Jul 8, 2013 at 11:44 AM, Chad Whitacre notifications@github.comwrote:

IRC https://botbot.me/freenode/gittip/msg/4326133/

— Reply to this email directly or view it on GitHubhttps://github.com/gittip/www.gittip.com/issues/14#issuecomment-20614682 .

chadwhitacre commented 11 years ago

@avriette Pull requests accepted. :-)

bruceadams commented 11 years ago

@avriette What I see as "hard to implement" isn't technical implementation. The problem is with how to make it work for users, all users. A single unit of value is far easier to explain for users to understand. My (very limited) understanding of Bitcoin is that converting into and out of US Dollars is messy (notably, cannot be done quickly).

I do think Gittip should allow one-time deposits of funds. I've been meaning to write up my thoughts about that under issue #5. (I'm uncomfortable with one-time tips, but do recognize that many people do not want to sign up for endless charges to a credit card or bank account. One-time deposits might help those people.)

janearc commented 11 years ago

There are several systems that provide bitcoin-as-a-service. Coinbase, who I "bank" with, also provides transactions allowing e.g., OKCupid to request "$10" from a user in the form of (for example) BTC0.10 and then some combination of thousands, ten-thousandths, and so on, to generate a unique transaction ID (independent of the BTC sending address.

This is not something you have to code from the ground up every time. Have you looked at what it would take to integrate that? It seems to me that if you were to implement one-time payments/tips/deposits/whatever you care to call it, that the next "difficult" part would simply be plugging in to Coinbase and saying "I have requested a $1 tip" and simply wait for that transaction to percolate through. In my experience this was less than five minutes. After which, you havey our $1, Coinbase presumably has a commission, and you're done.

Whether Coinbase actually "gives you a dollar" at that point that is then wired into an account, or whether that becomes aggregated in an account at Coinbase (to be subsequently pulled out into your account) I am not sure. It is not, however, especially complicated.

As far as presenting "a single unit of value," I suspect your Bitcoin users are pretty aware of what their btc are actually worth. If they say "I want to give you BTC0.10", they likely are not confusing $255 with $55 with $5.50 I'm not sure you need to provide that information, however, it's exceptionally easy to pull the current exchange rate from BTC->USD.

This may be met with jeers, but you may want to look at SilkRoad's implementation – they traffic in bitcoins all day, and the base currency is the US Dollar (or so I understand; I'd never use such a site). The conversion from btc to usd happens continually; transactions are "pushed" to your wallet (which could be Coinbase) as soon as it is completed. There's no question about how many US Dollars you've received, because it's calculated at the time of the transaction.

I think the muddiness you're referring to here is in fact the red herring Whit is concerned about.

And as for pulls/pushes – if you folks were doing stuff in perl, I'd be happy to help. I suspect you aren't.

alex

Alex J Avriette http://search.cpan.org/~alex/ +1 858 3677293

On Mon, Jul 8, 2013 at 1:53 PM, Bruce Adams notifications@github.comwrote:

@avriette https://github.com/avriette What I see as "hard to implement" isn't technical implementation. The problem is with how to make it work for users, all users. A single unit of value is far easier to explain for users to understand. My (very limited) understanding of Bitcoin is that converting into and out of US Dollars is messy (notably, cannot be done quickly).

I do think Gittip should allow one-time deposits of funds. I've been meaning to write up my thoughts about that under issue #5https://github.com/gittip/www.gittip.com/issues/5. (I'm uncomfortable with one-time tips, but do recognize that many people do not want to sign up for endless charges to a credit card or bank account. One-time deposits might help those people.)

— Reply to this email directly or view it on GitHubhttps://github.com/gittip/www.gittip.com/issues/14#issuecomment-20623540 .

pjz commented 11 years ago

@avriette Actually, it was decided that the Right Way to do Bitcoin tips was in bitcoin and not go through any kind of exchange at all. If I fund gittip with 1 BTC, I expect to be able to give out 100x 0.01BTC tips - not a random number of tips based on the current exchange rate. Relatedly, the tip receiver might be fine with receiving BTC, so it would never have to touch an exchange... thereby saving conversion fees.

All of this points at gittip needing to be able to keep per-user balances in an arbitrary number of currencies and to specify giving in any of them as well as being able to set up connected accounts for each type (or one with multiple).

And that is a lot more complicated than just a Coinbase integration.

janearc commented 11 years ago

Well, it's your site. This is not the way other sites manage bitcoin donations (I presume because it is in fact more difficult to keep a btc wallet for each user…). I am not sure I see the advantage, and I do see substantial added complexity.

But, it is your site. Best of luck.

Alex J Avriette http://search.cpan.org/~alex/ +1 858 3677293

On Mon, Jul 8, 2013 at 2:35 PM, Paul Jimenez notifications@github.comwrote:

@avriette https://github.com/avriette Actually, it was decided that the Right Way to do Bitcoin tips was in bitcoin and not go through any kind of exchange at all. If I fund gittip with 1 BTC, I expect to be able to give out 100x 0.01BTC tips - not a random number of tips based on the current exchange rate. Relatedly, the tip receiver might be fine with receiving BTC, so it would never have to touch an exchange... thereby saving conversion fees.

All of this points at gittip needing to be able to keep per-user balances in an arbitrary number of currencies and to specify giving in any of them as well as being able to set up connected accounts for each type (or one with multiple).

And that is a lot more complicated than just a Coinbase integration.

— Reply to this email directly or view it on GitHubhttps://github.com/gittip/www.gittip.com/issues/14#issuecomment-20626404 .

chadwhitacre commented 11 years ago

@avriette For the record, I didn't call bitcoin a "red herring."

janearc commented 11 years ago

Nope, that would be this person:

Alex J Avriette http://search.cpan.org/~alex/ +1 858 3677293

On Mon, Jul 8, 2013 at 3:07 PM, Chad Whitacre notifications@github.comwrote:

@avriette https://github.com/avriette For the record, I didn't call bitcoin a "red herring."

— Reply to this email directly or view it on GitHubhttps://github.com/gittip/www.gittip.com/issues/14#issuecomment-20628577 .

martindale commented 11 years ago

+1 for the idea of dealing purely with BTC, regardless of any exchanges or their rates. The USD (and all other currencies) float in exactly the same way; it does not make sense to try to account for fluctuating exchange rates in one currency but not others.

On that note, there is also Coinpunk, which might be an easy way to set up an internal service to manage Bitcoin wallets. I haven't used it yet, but have been planning on exploring this same option for other projects.

chadwhitacre commented 11 years ago

@avriette Sorry, that's my fault: I should have been clearer that that link wasn't aimed at you. I was merely pointing to additional conversation related to this thread. :-)

janearc commented 11 years ago

And apologies for having my knickers unduly twisted. It seemed kind of offensive to have the first line in the link sent to me without context was referring to same functionality as a red herring. Thanks for being reasonably.

-alex

Alex J Avriette http://search.cpan.org/~alex/ +1 858 3677293

On Mon, Jul 8, 2013 at 3:42 PM, Chad Whitacre notifications@github.comwrote:

@avriette https://github.com/avriette Sorry, that's my fault: I should have been clearer that that link wasn't aimed at you. I was merely pointing to additional conversation related to this thread. :-)

— Reply to this email directly or view it on GitHubhttps://github.com/gittip/www.gittip.com/issues/14#issuecomment-20630692 .

chadwhitacre commented 11 years ago

We already do payouts in bitcoin (manually via Coinbase, parallel to how we do payouts via PayPal for non-U.S. account holders). My position on bitcoin payins is that it's on the table, but personally it's not my highest priority. Ideally we'd have a bitcoin service provider step forward to contribute the integration, though as @bruceadams @pjz and @martindale point out, user-friendly multicurrency is the harder problem here.

chadwhitacre commented 11 years ago

+1 from @pyalot on Twitter.

pyalot commented 11 years ago

You don't have to go trough third parties to exchange bitcoin. A wallet can be run on your server and you'll create an address for every incoming transaction, the bitcoin daemon has an XMLRPC api.

chadwhitacre commented 11 years ago

@pyalot We need someone to join Team Gittip and take ownership of our bitcoin integration. Would you like to?

patcon commented 11 years ago

Didn't realize +1's were welcome here -- I was just watching the issue :)

:+1:

patcon commented 11 years ago

@pyalot Wouldn't running bitcoind directly open the gittip service up to losing everything from a hack, whereas at least when done through an external service's API, they have their own internal limits and restrictions. Also more likely to notice abnormal behaviour patterns as their systems mature.

And not to be contrary, but having to worry about the smallest vulnerability being introduced to the open source project -- that might change the nature of how gittip community/maintainers can run the project. (Disclosure: saying this without the faintest idea of how gittip infra actually runs...!)

chadwhitacre commented 11 years ago

@patcon +1's always welcome. :-)

That way we can sort issues by number of comments to see what's hot:

https://github.com/gittip/www.gittip.com/issues?direction=desc&sort=comments&state=open

artob commented 11 years ago

:+1:

pyalot commented 11 years ago

@patcon If the machine that contains a wallet is hacked (or if you don't have backups and delete wallet) all the coins are gone. Yellow pages, get a security expert to lock down a machine tight and a competent sysops to run it professionally.

patcon commented 11 years ago

@pyalot I understand that a competent sysadmin could manage it, but I'm unsure the expectation of change management and security and off-site wallet storage etc with an opensource project such as gittip. My concern is that the stringent security required for running bitcoind might cripple the project's open source agility. Maybe that's wrong, but I just wanted to express the concern :) One exploit and everything is gone, regardless of backups. External services can help alleviate that concern is all I'm saying.

janearc commented 11 years ago

This is true of any such system. To suggest "well, we better not do that because we might be pwned" is a fallacy. You might be pwned without gittip; your banking provider might be; your credit card processing provider might; your cloud services provider might; the NSA might steal your monies … and so on. One cannot simply not move forward because Big Scary Demons exist out there. One notes the risks, attempts to mitigate the risks, and moves forward, as any rational, thinking adult does.

Alex J Avriette http://search.cpan.org/~alex/ +1 858 3677293

On Wed, Jul 17, 2013 at 10:27 AM, Patrick Connolly <notifications@github.com

wrote:

@pyalot https://github.com/pyalot I understand that a competent sysadmin could manage it, but I'm unsure the expectation of change management and security and off-site wallet storage etc with an opensource project such as gittip. My concern is that the stringent security required for running bitcoind might cripple the project's open source agility. Maybe that's wrong, but I just wanted to express the concern :) One exploit and everything is gone, regardless of backups. External services can help alleviate that concern is all I'm saying.

— Reply to this email directly or view it on GitHubhttps://github.com/gittip/www.gittip.com/issues/14#issuecomment-21116502 .

pyalot commented 11 years ago

@patcon So to get this in a nutshell, you're running a company that manages money of other people and you're worried about being professional enough to manage other peoples money right?

patcon commented 11 years ago

@pyalot When you're running through a payment gateway, there are boatloads of safeguards that the company must have in place to protect a user's money, and know their customers. Plus the credit card companies have boatloads of responsibilities as well. Plus any stolen money must be laundered or it has a trail to a bank account. None of this exists with running bitcoind directly. It's incredibly enticing for a malicious user to penetrate, much more so that any service working with Stripe. Nuff said. That's my only point.

If you don't think that's at least a cautious observation worth considering, then I don't know what else to say.

@avriette I'm suggesting "attempts to mitigate the risks" might involve using a third party for now.

I'm not saying we can't do it guys. Honestly. I'm just trying to point out some of the stuff that I don't think has been raised yet, and which we, the presumed decision-makers, should keep in mind.

Also, if we're planning to do any conversion of bitcoin to dollars, then we might be an MSB and so running bitcoind rather than using an accredited MSB (Coinbase) could possibly be illegal. so maybe the point is moot :) I'm a little fuzzy on the minutia of money services business licensing

pyalot commented 11 years ago

@patcon see yellow pages, security/sysops professional, I think that's plenty of consideration.

patcon commented 11 years ago

OK, cool. Thanks for hearing me out guys. Sorry for the abundance of words.

chadwhitacre commented 11 years ago

@patcon So to get this in a nutshell, you're running a company [...]

@pyalot For the record, he's not running the company. I'm running the company. :-)

[...] that manages money of other people and you're worried about being professional enough to manage other peoples money right

Gittip uses third-party vendors to process payments. Just as we don't process credit cards directly in order to avoid the direct burden of PCI compliance, we're not going to process bitcoin directly either. Processing payments is not Gittip's core business. Gittip's core business is enabling users to tell a story about how they're making the world better, and to participate in one another's stories through weekly financial gifts and other encouragement. The actual mechanics of the financial transactions themselves are uninteresting to Gittip, and are duly outsourced.

That said, we do make appropriate efforts to ensure that Gittip is secure, and to monitor for fraud on Gittip. For more information, see https://www.gittip.com/security.txt regarding security, and https://www.gittip.com/about/fraud/2012-11-05.html regarding fraud.

colindean commented 11 years ago

It may take come convincing for others, but @whit537 knows how much of a vested interest I have in seeing gittip support Bitcoin. I've talked ad nauseam about it to a bunch of folk at Pittsburgh-area meetups.

The actual mechanics of the financial transactions themselves are uninteresting to Gittip, and are duly outsourced.

This. :+1:

The time and attention of the Gittip team is better of spent building a community, not a payment service. When comes into existence a Bitcoin payment service that service a business model like Gittip's as close as we want it to, then I'm sure I'll be racing y'all to submit that PR ;-)

reedlaw commented 10 years ago

What about integrating bitcoin in a way that's tangential to the way all other payments are processed? That is, make a field for a bitcoin address to receive bitcoin tips. Givers can then send directly to the address using any means they like. The amount given can be tracked by periodically looking up the address on the blockchain. If givers don't want to be anonymous they can link their gifts to their sending bitcoin address by signing a statement with their private key.

thiloplanz commented 10 years ago

What about integrating bitcoin in a way that's tangential to the way all other payments are processed? That is, make a field for a bitcoin address to receive bitcoin tips

That seems to be the idea expressed in #104. People can put alternative ways to donate on their profile, Gittip has nothing to do with it (except vouching for that it was the account owner who put that info there and maybe surfacing this info in interesting ways -- such as showing logos, links, or tallying amounts from the Bitcoin blockchain as indicated above).

MaddieM4 commented 10 years ago

There's an update coming to Bitcoin itself, where you can publish a request that Person A pay Person B in the amount of X BTC. Once support rolls out widely in the Bitcoin network itself, and third party services start to make use of it, you could simply work out a way to regularly issue payment requests based on the current value of Bitcoin.

This doesn't solve the "abstracting away exchanges" problem - you are still limited to BTC -> BTC transfers here, so that may not be the "ideal" solution. But I'm starting to think that it's better than holding out indefinitely for a perfect solution that may never happen. Payment requests may not be ready yet, but they're actually in the development pipeline of reputable people, whereas a transparent exchange system is total vaporware (something like Ripple might someday solve that, but Ripple itself has a lot of serious issues, and I would not invest any serious trust or effort into supporting it).

chadwhitacre commented 10 years ago

+1 from @Jauny on Twitter.

knocte commented 10 years ago

+1

andychase commented 10 years ago

Coinbase has a recurring payment system now, but only for people with Coinbase accounts.

Still, that might be good enough for gittip:

https://coinbase.com/docs/merchant_tools/recurring_payments

Note you don't need a bank account to use Coinbase, you can simply make an account and send Bitcoins there from other wallets.

colindean commented 10 years ago

I think it would suffice, but would this integration limit us to US Bitcoiners only?

andychase commented 10 years ago

@colindean

It's true Coinbase only works with US-Based bank accounts for trading for USD, but you can still make an account and load it with Bitcoins from anywhere in the world for free.