Testnet Faucet from ZECpages

Applicant background

I, Michael Harms, am a full stack web developer. I first built ZECpages.com a year ago. I made zecmailer.com before that, as a way to streamline anonymous publishing. They are and will always be open source.

ZECpages is an example of what Balaji Srinivasan has called “Blockchain MVC”, a full stack app built on a global data store. For ZECpages, this means a set of encrypted memos associated with one view key. This makes the data that powers ZECpages durable, auditable, and open.

Motivation and overview

I’ve seen quite a few threads of people asking for TAZ because https://faucet.testnet.z.cash/ doesn’t support taddrs. I often end up sending these people TAZ manually.

I ran this testnet faucet for about a month, but I took down the full node because of costs.

Onboarding developers to Zcash is super important. A working, accessible testnet faucet removes a great deal of friction in that onboarding.

In addition, the codebase is a very simple example implementation of a React/Node app that uses Zcash RPC. I’ve been told that ‘[my] repositories are an inspiration.’ It’s an honor to hear that, and while I’d maybe not go that far, having simple, readable examples of Zcash apps seems important in onboarding devs, possibly even more than quick access to TAZ. To this end, the codebase/readme could use a refactor for more thorough deployment details and code readability.

I’m not worried about autonomy over my testnet faucet - I’d gladly acknowledge on the faucet’s single page that this developer resource was made possible and funded in full by a grant from ZOMG (if that’s desirable).

Technical approach

The faucet is live. See it here: https://faucet.zecpages.com

It works with zaddrs and taddrs, and uses push notifications to return users a txid when the send operation succeeds. Its code is already open-source. See it here: GitHub - michaelharms6010/zcash-faucet: React app => Nodejs => zcashd rpc zcash faucet

It also runs a public instance of ZecWallet’s lightwalletd on testnet - I straight up don’t know how useful or valuable this is but it was easy enough to patch on, thought I’d mention it as well - tlightwalletd.zecpages.com:443

If a testnet fullnode / lightwalletd isn’t useful, it would be pretty trivial to refactor this to use a light wallet and save on servers.

Execution risks

Use could outscale the box. I’m happy to roll with this challenge with the possibility of a future grant if needed.


Not sure - open to suggestions

Evaluation plan

Uptime - The faucet and node should have 99.9% uptime

Tasks and schedule

Day 0 - Faucet is already deployed, code already open sourced

Week 1 - Readability/documentation refactor (~1/2 day of work)

Week 52 - Faucet is still up has been for 99.9% or more of the last year

Occasionally: NU/deprecation updates to zcashd

Budget and justification


One developer - 16 hrs (2 full days) to build/test faucet app + 4 hour refactor = 20 hrs * $150/hr - $3000

Total Dev - $3000


1 yr Large instance + extra storage - $115/month - $1380/yr 2 hr/month maintenance * 50/hr = $100/month - $1200/yr

This request covers 1 year of servers/maintenance as well as the development of the app.

Total Infra - $2580

Total - $5580


there is a need for a fully functioning testnet faucet ( I had thought about building one myself in the past).


  1. how will you get TAZ ? will you mine them on the testnet ?
  2. will you be adding any rate limits ?

The faucet can be designed to also accepts TAZ so that others can send it into the pool. @BrunchTime
As for the rate limit I think that should be a given, we certainly don’t want DoS attack on testnet. :laughing:

1 Like

Good questions, thanks!

  1. Yes I’m mining the TAZ that the faucet provides. I’m currently mining ~100 TAZ/month, but that’s easy enough to scale up if the need should arise.
  2. It’s currently rate limited to one request every 15 minutes, which I think might be a bit strict - I was thinking yesterday that 2 minutes is probably more than enough.
1 Like

How about setting the rate limit to 75 seconds? You know, something about Zcash block time. :wink:


Thank you for submitting a second proposal @BrunchTime!

A question about this part of the budget:

Is this piece of the budget for work that has already been done? I don’t think if the answer is “yes” that’s a blocker, but I just wanted to be clear about it. It’s something that came up on another project too and we don’t really have a policy for it yet.

My sense is that, because it would be trivial for someone to conceal from us that work had already been done, we shouldn’t have a rule against funding work that has already been completed.

That said, it does seem different and I’m curious what others think. Perhaps we should think of funding pre-done work as a prize and be explicit about that?

Also, apologies if I’m misunderstanding—and again I think it’s okay either way!


Hey Holmes - Thanks for the question! I’m happy to clarify.

Yes, it covers work already done. I entirely agree with you that since work is super simple to conceal, having an explicit policy against rewarding complete work, especially in an open-source culture, would be silly. I certainly don’t want to hold useful developments for ransom.

I’d also agree that it’s a different kind of request! I won’t claim to know the best way for ZOMG to handle it, but I definitely think it’s cool to be having the conversation! :slight_smile:

1 Like

Hey Michael / @BrunchTime!

Speaking on behalf of the @ZOMG, we agree that having a testnet faucet is important for onboarding devs to Zcash. We’re approving the grant proposal. Watch for an email about admin next steps :slight_smile:

Thanks for applying! We’re also going to tweet about this to help spread the message. Is there anything else we can do to find and send more people your way?

Could we also ask that you update this thread when you see good traction? Would be great to see how it’s doing.


Hey @ml_sudo / @ZOMG !

Thank you for choosing to fund this project! I’ll happily update the thread with some usage metrics in future. And I very much appreciate ya’ll tweeting about it! :slight_smile: