Why The BTCPayServer Module Review Is Important

Two years ago, I was introduced to the Zcash Community Grants fund via Zooko. I had built a privacy-focused encrypted video conferencing platform called Birdcalls, along with our Internet Phone Booth [here’s an article about us in VICE Motherboard], and we wanted to explore integrating truly private payments into our private platform. Thus began my surreal journey into the depths of Zcash.

When we looked into integrating payments into our platform, there were two options: ZGo, and the BTCPayServer Zcash module. ZGo only functioned for Zcash, so as a seasoned leader of software teams, it seemed obvious to me that we ought implement the BTCPayServer module instead. BTCPayServer is a widely used payment gateway that supports multiple cryptocurrencies across the internet. That’s where our energy ought go, too.

But as we poked around at the Zcash module, we started to realize something was deeply wrong. We suspected that the module was completely broken. When we talked to some people at Zcash about it, they didn’t believe us.

Eventually, they agreed to let us do an ‘Exploratory Phase’ for our grant proposal where we were paid ~$14k USD equivalent in ZEC to do an in-depth review of the module.

As we did the review, we were appalled by the state of the module. It was completely nonfunctional. When we said that only highly technical users would be able to get it working, what we were trying to say nicely is that the module was so broken that the only way to get it working would be for the developer to just write their own heavy modifications to the code.

I was shocked. The Zcash Community Grants committee had payed someone six figures to build out that module. And he had delivered this? And just left it like that, silently?

If I had been the leader of this project when I discovered that wasteland of a repository, I would have considered this gross incompetence at best, malice at worst, and I would have fired that developer immediately. And yet, in the Zcash community, no one seemed to care. In fact, they kept paying this person to build out other key infrastructure. What was happening? What was wrong here?

Now, two years after I first pointed out that the module was shockingly broken, not all of the bullet points I pointed out have been fixed yet. The module is still not up to the normal minimum standard for a functional BTCPayServer module. How is this possible? What has gone wrong?

Furthermore, while I’ve been told repeatedly that there are now seven merchants using the module, the developers kept trying to prove to me that the implementations had occurred by sending me evidence of merchants who had tweeted that they were now offering ZEC. I tried to explain to them that that’s not really evidence; we’ve got to actually go through the full test of buying a good or service from the merchant’s shop, successfully paying for the good or service using ZEC, and then receiving the good or service that we purchased.

Only that full flow should count as proof that a merchant has implemented ZEC payments. When I tried to go through a purchase flow for the latest merchant they told me they’d successfully onboarded, I couldn’t even get started. The shop’s entire website had gone down. There was just a notice saying ‘Down For Maintenance.’

How could this be the accepted Zcash standard by which success is determined? What is happening here?

Over the last few years I’ve tried multiple techniques to punch through the inefficiencies of the grant community system in order to accomplish real, good work for Zcash. I got my career-start in the open-source world. I helped write the bylaws for Counter Culture Labs, a biohackerspace in San Francisco’s east bay. I have a soft spot for good-guy self-governance projects like Zcash. I see Zcash as like a microcosm for all democratic societies. The kinds of problems here are similar to the problems faced by Western nation-states. Figuring this stuff out matters.

For the record, this most recent attempt of mine to finally bring the BTCPayServer module up to a minimum standard of functionality was indeed back channel approved by multiple members of Zcash. Just like my last basket case of a grant proposal was. Over the course of two months in the back channels, I exchanged a few hundred text messages with various members of the community, putting together a picture of what improvements had taken place over the last two years, what remained to be done, the technical strengths and weaknesses of the currently contributing developers, and what skillsets would be needed to move forward.

So when I offered to recuse myself from development in order to re-perform that Project Review, it was a highly informed decision.

Why is Zcash’s BTCPayServer module a key development?

Because it’s what makes Zcash real.

  • Lots of things have happened internally to make the coin exist.
  • Lots of people are good at talking to the outside world about how cool the coin is.
  • The coin itself is starting to go up in value as more people hold onto it.
  • But it’s not a currency unless it gets used to make real transactions for goods and services in the world.

A coin that cannot be used may rise in value temporarily, but it will eventually be perceived as it ought be valued: worthless.

Do you want Zcash to have real value in the world? I don’t know what to do next to try to make that happen. If you have any ideas, I welcome them. However, I’m getting to the limit of my current capacity for unpaid labor. My first loyalty is to my team. My main job is to bring them paying work. If there’s anyone else in the Zcash ecosystem who would like to individually fund this review of the BTCPayServer module, I’m still wiling to follow through with it. Hell, if we could get paid for our time by someone then we’d be glad to finally do what the module really needs and start the development over from scratch. But otherwise, it is the sad truth that I’ve been successfully blocked from improving this project. It’s time for me to let it go.

Best of luck with this,

Sunny

3 Likes

Just want to point out that on multiple occassions I successfully used the new BTCPayServer on 2 seperate occasions.

Perhaps the service you were using is simply down ? We had a cool bounty submitted proving it worked:

2 Likes

Why should I have to go through every merchant and make a test purchase? I’ve made test purchases on my own instance, and all the merchants have made test purchases on their end. I don’t understand why you keep on throwing around such accusations about my honesty and the quality of our work. This discussion is going around in circles.

I don’t wish to continue this discussion after such statements.

1 Like

I hope that when @joshs 's team (I don’t know what they’re called now yet) gets tired of building wallets, they’ll make a payment module that’s as cool as Zashi. Meanwhile, we already have something that literally works.

2 Likes

@dismad thanks for pointing that out! I do think the module is implementable right now. The main point I was trying to make is that there isn’t a solid structure in place for how they determine success, so for the moment their success claims aren’t inherently trustworthy. If I had done the project review, I’d set up solid metrics for them to judge future success.

To be very clear, when I said that the repository was a wasteland, I was referring to the time period before you started working on it. :slightly_smiling_face: It’s very clear to me that you’ve done well by the module, and I’m glad that you’re involved. I do think you could use high-level guidance, which is why I thought the review would be the right next step.

@artkor I usually feel the same way about you too but I don’t understand why you suddenly blocked the vote from being able to occur in 2025. From my perspective it just seemed like some sort of dirty monkeywrench. I don’t know the real reason you did it though. I’m happy to listen if you choose to share. I do appreciate that you recused yourself from the vote! That sets a great precedent that’s healthy for Zcash moving forward.

You know, I keep thinking about this too. I’ve heard others express this desire - What is the payment gateway version of Zashi? I wish we could have a whole discussion just about that. Internally, my team has been discussing some interesting ideas along those lines. I thought that this review was just going to be something we’d do because it was the right thing to do for the hygiene of the ecosystem. And that then next on the agenda, we could talk about what the Zashi-style bigger solution is. But. Why would we do that now? We can’t even get something simple like this through. It’s too big a risk that our efforts will be wasted.

Regarding the module itself: Before, when I thought that everyone in the back channel was just in agreement that the review should take place, I was erring on the side of being polite. Perhaps by being too polite, I failed to communicate clear truth.

And thus did the community a disservice. As I think about all this, I think that another thing I failed to communicate is the true importance of multi-wallet and multi-store support.

Multi-wallet and multi-store support aren’t just two extra features on top of a module that’s already working well enough. Those two features fundamentally change the usefulness of the module for merchants. Right now the module is potentially useful to a very small percentage of merchants. Once you implement multi-wallet and multi-store support, the module becomes potentially useful to a very large percentage of the merchants.

That’s what I meant when I said that the module isn’t up to the minimum standard for usability yet.

I agree. You think the module is in good-enough working order. I think that I’m the expert here and you should listen to me when I say that the module isn’t in good-enough working order. That’s been the disagreement from the beginning. I thought I could solve the circularity in a healthy way by recusing myself from future development and just offering to do the review.

But, here we are.

I don’t feel it’s my place to reveal the details of the discussion, but that’s definitely not the correct formulation. I will simply recap the chronology of events. During the discussion on December 22, committee members raised questions that I was unable to answer on my own, so I have listed them here:

(On the evening of December 22)

Only the final summary of this discussion was included in the minutes:

But then you independently chose an unexpected course of action. Figuratively speaking, you effectively fired your assistant due to a conflict of interest. I can assure you that I am not to blame for this situation.

1 Like

@artkor Thanks for clarifying, that makes sense! In retrospect I should have texted you first to see what was up and then my next steps wouldn’t have been unexpected to you. :thinking: Maybe the reason I didn’t do that is that by that point I was getting exhausted and losing my belief that back channel communication could be helpful. It was also really alarming that the grant got pushed out to the new year where suddenly the person whose work I was calling out would be newly a member of the committee. I might not have reacted the same way if it had just been a regular vote postponement. Under the circumstance, it seemed like I might as well just keep all my communications in the open. But of course, text is hard because we lose tone of voice.

Also, I’m a structure person. I don’t like to solve things in a way that works once, I like to bring in structures that will help make the ecosystem stronger long term. I really genuinely think that there’s something off about the whole concept of the grant committee members deciding whether or not their work gets reviewed. And honestly, if my two options are (1) leave things alone & get money (2) point out something important for Zcash that makes people mad & not get money, then I’ll choose (2).

Of course it would have been best if there was a third option but obviously I wasn’t able to figure that out. :sweat_smile:

1 Like

Okay, I want to wrap this up! Was this discussion helpful? I’d still like to see the payment gateway move forward. What happens next? Should I resubmit the grant proposal? Should I help you find someone else to perform the project review?

The other possibility is to just give up on the review and skip straight to the part where someone implements multi-wallet and multi-store support. The problem with that approach is that I don’t think you’re going to have an accurate quote on how much that development should cost unless someone reviews the project first.

I never said that the “module is in good-enough working order.” There is a lot of work that needs to be done and is ongoing. I’m strongly against recreating something from scratch when there is zero evidence that there are serious problems with the existing codebase that make it unmaintainable.

I don’t wish to endorse or engage with any review which aims to attack @hanh’s work and calls his work a “wasteland of a repository.” He is one of the most respected Zcash developers and I have been and continue to work together with him. Hanh has been prompt to fix any issues that merchants have run into. I don’t understand why it should have been his responsibility to continue maintaining a repository that no one was actively using, to be involved in merchant outreach or why you continue to bring this up.

This is the risk and responsibility of whoever will perform this work and will be hard to measure without engaging directly with the developer/team that will perform this work. Was creating an accurate quote going to be a part of the review?

:smiling_face: If only there could be a neutral, respected 3rd party review of the project so that the harmony of the forum wouldn’t be disturbed by back-and-forth arguments regarding the success of the project. :downcast_face_with_sweat:

I stumbled on this in an article a few days ago and wanted to post the screenshot here as an example of people voluntarily refusing themselves. Not a hostile thing to request; just normal, good democratic process:

1 Like