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

