liberapay / liberapay.com

Source code of the recurrent donations platform Liberapay
https://liberapay.com/
1.67k stars 215 forks source link

Liberapay 2.0 #1171

Open Changaco opened 6 years ago

Changaco commented 6 years ago

This issue is about the migration away from Mangopay (#374) and the ensuing changes to how Liberapay works.

ericfont commented 6 years ago

I would hope "Liberapay" would have a fully "libre" payment processor. So I think that means adding support for cryptocurrency (#364) and when need to use traditional banking systems, to prefer open-source implementations (e.g. https://github.com/openach/openach for US Automated Clearing System support), and if no such fully libre credit card processor exists, then I would say that is what needs to be created, either as part of liberapay or as a separate project.

Flaburgan commented 6 years ago

Hi! Sorry to hear what's happening to Liberapay.

There is something I don't understand. You're writing:

In addition to the problems caused by the sheer number of transactions, the processing of donations over time also requires holding the donors’ funds in their “wallets”, often for many weeks. This way of doing things severely limits the number of payment processors we can use, because few of them can provide this kind of wallet.

You mean that you're not holding any money, and that you created a "real" wallet managed by Mangopay for every liberapay accounts out there?

I was thinking that Liberapay was the one holding every $$. So that you only have one bank account, with all the money in it, and you're only storing the transaction in a classic database. So that money really moves only if I add it from my bank, or ask for a payout. But that all my +0,50, -1.00 were only done in a DB, not really with money. Why don't you do that? (of course, all users need to trust you but eh, they're already trusting you).

thehowl commented 6 years ago

@Flaburgan Discussed elsewhere, in a nutshell: to do that they would need to have a license (otherwise it would be considered illegal), which I guess what PayPal and other services have. But that has a minimum capital requirement of € 350k.

arunisaac commented 6 years ago

Would it be possible to re-imagine Liberapay as a mobile/desktop app where users can find and donate to creators? The app could periodically (say, weekly) prompt users to send out their recurring donations to creators. This way, the money goes directly from the donors to the receivers. There is no intermediary, and no need for Liberapay to get into contract with a payment processor like Mangopay, or buy an expensive license. Liberapay will only have to maintain information about creators on their website. What do you think? Is this worthwhile?

notpushkin commented 6 years ago

@thiscantbeserious Interesting that you push just that one crypto token.

codl commented 6 years ago

you're right, this cannot be serious

rugk commented 6 years ago

The actual only relevant question for SC is:

Everything else is totally irrelevant here. (okay, except of currency stability and some other minor stuff, but that is the biggest question) And I guess this question is very hard to fullfill with any crypto currency.

notpushkin commented 6 years ago

@thiscantbeserious Please stop. We did get your point already.

dotlambda commented 6 years ago

Would the following work legally? All donors donate to Liberapay, which in turn donates to recipients according to the amount set by donors. This would probably require Liberapay to be officially recognized as cheritable in order to avoid paying income tax, but it would avoid the problem of too many micro-transactions.

rugk commented 6 years ago

@dotlambda Great idea! Actually if that worked, donations may also be tax-deductable, so it's also a win for the users of Liberapay.

rugk commented 6 years ago

BTW did not you wanted to send a mail with the announcement about the issue? (so people can empty their wallets) I still have not received any.

coderberry commented 6 years ago

@Changaco We would love to discuss with you ways we could help if you are deciding to move to the crypto-based system. CodeFund is part of Gitcoin / ConsenSys and has a lot of experience/resources with that kind of stuff.

rikur commented 6 years ago

Please don't go all shitcoin.

snm247 commented 6 years ago

So far I didn't receive any email notification about the migration away from Mangopay. What if Liberapay donors don't read the blog post before July 26th? What will then happen with the money they donated?

bjorn commented 6 years ago

@rugk @snm247 I did get an email yesterday. Maybe there have been some delivery problems.

aggsol commented 6 years ago

I would like to see a European solution in Euros first things first as I found that always a very attractive suite of Liberapay. That is it not another US Dollar system built by some American startup/company. For people that require USD and American laws there enough other options.

That also means that crypto is not yet an option. Legislation on crypto in the EU is still in flux.

mattbk commented 6 years ago

I would like to object to the solution given at https://medium.com/liberapay-blog/liberapay-is-in-trouble-b58b40714d82:

So, we’re changing our approach of recurrent donations. Instead of distributing them weekly we’re going to distribute them as soon as the money arrives. For example, instead of disbursing a payment of €26 for a weekly donation of €0.50 as 52 weekly transfers of €0.50, we’ll do a single transfer of €26 and inform the recipient that it corresponds to “52 weeks of €0.50”.

All this would accomplish is to close #415 and allow people to give one-off donations. This isn't bad, but it's not supporting the original goal of providing sustained funding. It also doesn't allow donors to adjust their donations after setting them, because the money is already gone.

rugk commented 6 years ago

I guess they had it in mind by just leaving the current settings and money just goes directly to the donors, but it is still saved you donated the money for "x weeks". So you basically donate for future weeks at once in a (periodic) interval. But that thing is just caused by the payment processors, and if they have no other way… well… we'll see what they do.

bluecephalopod commented 6 years ago

From the Medium post:

[T]he processing of donations over time also requires holding the donors’ funds in their “wallets”, often for many weeks. This way of doing things severely limits the number of payment processors we can use, because few of them can provide this kind of wallet.

Couldn't Liberapay do what Patreon does by billing donors once per month for their total donations for that month? This would seem to eliminate the wallet issue and at least reduce the number of small transactions. (The bill also could be quarterly, while still providing projects with a weekly source of revenue.)

auge8472 commented 6 years ago

Couldn't Liberapay do what Patreon does by billing donors once per month for their total donations for that month?

Wouldn't this shift the problem only from once a week to once per month?

This would seem to eliminate the wallet issue and at least reduce the number of small transactions.

The wallet issue would still be existent but yes, the number of transactions would get reduced.

arunisaac commented 6 years ago

The actual only relevant question for SC is:

  • Can you just make a bank transfer to someone/somewhere and get some (whatever) coins into your Liberapay wallet, which you can donate to others?

PayPal has a REST API. We could call the API from the app to make transactions. Creators provide PayPal addresses to which donors send addresses. However, the app need not be limited to PayPal. We could extend it to support other payment providers. This way, the Liberapay organization itself does not have to handle any money at all. They simply become a means for donors to find creators.

MartinDelille commented 6 years ago

We could call the API from the app to make transactions.

Does https://www.railsbank.com/ allows that?

bluecephalopod commented 6 years ago

Wouldn't this shift the problem only from once a week to once per month? ... The wallet issue would still be existent

My understanding is that after users are billed, the funds would be aggregated and sent (effectively) immediately to each project, without the need for Liberapay to store the money for more than a few seconds, if at all. As holding money in wallets "severely limits the number of payment processors [Liberapay] can use," this approach might be able to expand our options. I would think payment processors would have experience with monthly recurring subscriptions, for online magazines for instance. However, I do not understand all of the intricacies of the banking system and am no expert in this.

I am also not opposed to adding cryptocurrency donation options, however I would like to see a more conventional payment method added as well in order to attract the maximum number of people to the platform. I think using cryptocurrencies as a payment option is a separate issue as it poses a unique set of technical questions, and should be addressed in a separate issue thread.

Changaco commented 6 years ago

@mattbk The change has nothing to do with #415, the donations will still be recurrent, but they'll be transferred immediately upon payment instead of being stored in a donor wallet and transferred weekly. This is necessary to be able to use payment processors like Stripe, PayPal and Adyen.

As a bonus, not having donor wallets will also reduce the amount of personal information we have to collect from donors, because we won't be holding their money anymore so they should fall out of scope of the banking KYC (Know Your Customer) requirements.

Donors will still be able to adjust the amounts of their donations at any time, such adjustments will automatically affect when the next payment is due and how the money will be distributed. The possibility of stopping a donation at any time could be preserved by implementing refunds.

spiraldancing commented 6 years ago

Hello, big fan, long-time listener first-time caller, etc ...

I came here, essentially, to agree with @mattbk et al. I understand the Medium blog description of the new plan for recurrent payments may be poorly described, and we may be misunderstanding it.

That said, if I set up a 52-week recurrent payment schedule, then two weeks later, I decide to cancel it, but I can't because all 52-weeks' worth of money has already been given to the donoree ... then this is not a recurrent payment program, and I would be much less enthusiastic about Liberapay.

Separately, please, absolutely continue to support USD and Euros. However, adding support for one or more cryptocoins would be wonderful -- to date, I have not found any service/wallet/exchange that supports recurrent payments in crypto. Yes, I do appreciate how complicated it will be; just adding my vote for this option.

mattbk commented 6 years ago

@Changaco, one of the pluses of having donor wallets was that it minimized transaction fees on the donor side by preloading the donor wallet rather than incurring a transaction for each donation that was set. How will the new system minimize transaction fees? Would it be possible to at least batch a week's worth of new donations into a single transaction?

I assume this is sort of what you are getting it when you talk about "when the next payment is due." So if I donate $1/week to someone by dumping in $10, on week 11 I should be notified (or automatically charged) that another $10 is going in. If sometime before week 11 I drop my donation to $0.50, it will be longer. If I'm donating to multiple people/teams, this gets more complicated and could mean a lot of transactions, which is why I'm still in favor of a weekly payday (plus it fits into the existing stats to some degree).

I'm intrigued by the idea of refunds if I stop my donations, but don't see how this would be possible unless there was a quarantine period for withdrawals, which doesn't seem exactly right. Additionally, after the whole VAT discussion, I wonder what the reporting/anonymity balance would need to exist for refunds.

Finally (and by making me think about this you may be bringing me around, so thanks for addressing concerns), how do team takes work in the new system being proposed?

ramack commented 6 years ago

An idea to keep the weekly pay-day structure and still accept small transfers could be to limit the amount, such that donations >= 1€ are payed directly weekly, while everything smaller is payed in 1€ batches and the periodicity is defined by the donation (1ct/week will take two years for the second payout).

With this you could drastically reduce the amount of transactions and maybe even increase the total volume.

After you found another payment processor I would propose for the long term to have a generic liberapay wallet (additional to Liberaypay and LiberaypayOrg ) for funding the 350k€ (+some more to have legal support etc.) for a banking license.

mattbk commented 6 years ago

@ramack I like the idea of having a cutoff to minimize transaction costs, although the floor will depend on the new processor.

+1 for a "become a payment processor" target for donations.

andreas-h commented 6 years ago

IANAL, but I don't see how Liberapay's service could possibly be charitable without imposing sevrre selection on who and why can receive donations.

Having said that, there should be a way to avoid income tax (not altogether, but for the donations) using accruals.

I'd assume that a PayPal-like license is needed then. Unless maybe if it'd be impossible for donors to withdraw money that was once tranferred to Liberapay.

Changaco commented 6 years ago

@mattbk

How will the new system minimize transaction fees? Would it be possible to at least batch a week's worth of new donations into a single transaction?

The ability to aggregate multiple donations into a single payment in order to reduce fees depends on the payment processor. Stripe has limited support for it, according to their documentation it's only possible if both the platform and the recipients are in the EU or both are in the US. Adyen's documentation doesn't mention a similar limitation.

When aggregation isn't possible a (partial) workaround can be to cycle through the recipients. For example a user setting up 5 donations on the same day would be charged immediately for at least 5 weeks worth for the first recipient, then the following week for at least 6 weeks worth for the second recipient, etc. Obviously, being able to aggregate payments would be preferable.

I'm intrigued by the idea of refunds if I stop my donations, but don't see how this would be possible unless there was a quarantine period for withdrawals, which doesn't seem exactly right.

Liberapay has had a 4-week quarantine since its launch, I only turned that off yesterday to facilitate the evacuation of funds from Mangopay wallets.

how do team takes work in the new system being proposed?

I'm not sure, the current team system, with the leftover staying in the donors' wallets, is incompatible.

If we can aggregate payments then we can continue to distribute money directly from donors to team members without going through a legal entity, but we need to know how to split the money. If we can't aggregate payments then someone needs to hold the team's funds, it could either be one of the team members or an organization acting as a fiscal sponsor.

arunisaac commented 6 years ago

We could call the API from the app to make transactions.

Does https://www.railsbank.com/ allows that?

railsbank also has an API to make transactions. So, it should be possible to use them as well.

Changaco commented 6 years ago

https://mastodon.xyz/@Liberapay/100439998677835442

As some of you have noticed we've added the possibility of connecting a Stripe account to a Liberapay account. This is only a first step in our migration away from Mangopay, we know that Stripe only supports a limited number of countries, we're working on adding other payment processors as well, including PayPal which covers more than 200 countries.

The new page to manage your payment accounts is https://liberapay.com/about/me/payment/ (please excuse its shortcomings, it's a work in progress).

mattbk commented 6 years ago

Can you update periodically on what percent of accounts have Stripe set up? I was surprised to see that even 3/17 of the accounts I give to are "active."

Changaco commented 6 years ago

I've made a lot of progress on the Stripe integration, we should be ready to process live payments next week.

Changaco commented 6 years ago

@mattbk Donations to teams are incorrectly marked as "active". As of now there are only 33 Stripe accounts connected on Liberapay. For comparison we had 518 users receiving donations before Mangopay messed things up.

ramack commented 6 years ago

I tried to create a stripe account, and I think I succeeded, but there are a lot of unclear things like:

Don't get me wrong, please keep your good work going! And it is more important to make it work than to explain everyone how it should work, but it doesn't. I just want to share the questions and problems I have. Do whatever you think is right with those.

notpushkin commented 6 years ago

@ramack Last time when I tried Stripe, it was accepting only company accounts. If this is still the case, I guess it would only be useful to teams on Liberapay, not individuals. :(

rugk commented 6 years ago

…and not even to all teams. And yes, it's still the case. Generally, stripe does not really work for LiberaPay. It also requests unnecessary data.

tanuk commented 6 years ago

I was able to create the Stripe account as a private individual, having a registered company was not mandatory. Maybe this varies by country? I'm from Finland.

notpushkin commented 6 years ago

Just checked the Stripe activation form, it does indeed allow signing up as an individual / sole proprietor for at least some countries now! (Including US)

tuxayo commented 6 years ago

@tanuk

I was able to create the Stripe account as a private individual, having a registered company was not mandatory. Maybe this varies by country? I'm from Finland.

Yes, by changing the country in the form, the number of options changes too.

So when the option isn't showing up, that means that an individual from that country is forbidden to use Stripe that way right? (lying of the status or country would expose Liberapay to get kicked off Stripe right?)

ramack commented 6 years ago

I can confirm: In Germany it is explicitly written tha natural persons are allowed. Still: you have to give the address once for the "company" and once for you being the representative. And you have to put the postal code where everyone would expect the housenumber to be put.

Now I have now a stripe account, linked to liberapay, good.

Beside the questions I mentioned above, another topic popped up: Stripe asks for a "Tax Identification number". So what about tax? - I have had only a few EUR ct. income on liberapay so far and in the time I can foresee I will even distribute everything I will not get money out of the system, but distribute everything I "earn" directly to others. So in a sense I have no income from it and think I have no need to consider the money on liberapay in tax declaration. But is there anyone who checked this carefully?

MartinDelille commented 6 years ago

@ramack This is a good point! What having an inner coin system to avoid this case?

rugk commented 6 years ago

Actually if Liberapay were an approved non-profit organisation/foundation, and you could donate to them and they just distribute the money on your behalf, this problem would be 100%ly solved. Don't know whether it is possible in the way, they work, though.

ramack commented 6 years ago

@rugk maybe for the case that you don't want to get money out of Liberapay, but finally it would not make sense if all would do it like that. So maybe it is more useful to care about the legal situation in different countries and document the status. And first we need to have back a technical solution that works.

Mikaela commented 6 years ago

I don't think that Stripe works well for average (Finnish) users. It scared me away by lumping "toiminimi" (sole practionerships?) and private individuals to the same category and asking what my business does and what is its website etc. Does it look good for Liberapay if many businesses register on Stripe just for "funding my Liberapay account" and setting websites as Liberapay profiles?

Also until I started typing this comment, I was under belief that "toiminimi" is a legal entity that I would have to report to market registry (and that it would affect social insurance which it probably would), but apparently it has three conditions of which even one filling would require the report. None of the conditions are fulfilled in this case.

rugk commented 6 years ago

Can we just conclude that stripe is totally unsuitable for Liberapay?

tuxayo commented 6 years ago

Maybe not totally. Aren't few countries where one

Or maybe this way of using Stripe is only for companies

notpushkin commented 6 years ago

I think we could just check with Stripe themselves if they're OK with that and what would be the best solution in their own opinion? Like, they know all the legal details better etc etc.

Flaburgan commented 6 years ago

Actually if Liberapay were an approved non-profit organisation/foundation, and you could donate to them and they just distribute the money on your behalf, this problem would be 100%ly solved. Don't know whether it is possible in the way, they work, though.

At least in France, this is not legal. The definition of donation is "do whatever you want with my money". If you're saying "here is my money please transfer it to XX and YY" then that's definitely not a donation (as you're asking the receiver to do something specific with your money) so obviously not except of taxes.

In my opinion, the Liberapay project role is to hold and manage the money. Otherwise, you could simply build a website to centralize persons wanting to receive donations with a paypal button on their profile, it is free and works very well, without taxes nor money related problem as the website would only be a list.

But Liberapay should go further and be as independent as possible from third parties like paypal or stripes. It needs to act as a trusted platform and hold the money, as I asked in the first comment.

So we need to find a legal way to do that. Multiple platforms like https://bountysource.com or https://freedomsponsors.org and all the crowdfunding platforms (indigogo, kisskissbankbank, ulule, etc...) are already doing that, and I'm sure they are not paying $350k for a bank license.