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:


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:


Hey ZOMG and ZEC friends! Here’s an update:

I found some time to jump into the code maintainability action over the weekend! I also added an acknowledgement for ZOMG to the faucet app (Thanks again!). Cleaned up the codebase, completed the project setup instructions, and even added a branch that works from zecwallet-cli instead of full node rpc. Repo Plus we’re rocking zcashd 4.4.0 now. :metal:

So far the faucet’s been tapped 47 times.

I hope you’re all having a wonderful April!


I also make a faucet of ZCash. Cause I love this coins​:smiling_face_with_three_hearts::smiling_face_with_three_hearts::smiling_face_with_three_hearts:
Here is my faucet 10bits.top
If you have any idea for my site , just be friends with me in there. Thanks

Its spelled ‘Zcash’ ™ and theres no terms of use link, also the 25 ads and trackers and stuff is a lot


@BrunchTime Faucet down?

It looks good to me. I just used it to send to that same address: https://explorer.testnet.z.cash/tx/efc00a137794ecb3b1948bd9cdc4c457ff756c16058a068e86710c1a4758405f

i reached out to kv for details :slight_smile: Thanks for the ping


Does it work with transparent addresses?
It returns no error but no txid and no coins either.

1 Like

Thanks for the q - It’s intended to - I’ll check it out

EDIT: Issue is resolved. Thanks again.

EDIT 2: I’d messed up fund management and run out of TAZ in the appropriate address :man_facepalming: The good news is that the faucet is getting used! It’s been tapped over 250 times now!


Thanks for your work on this!

Is the faucet down right now? I’m getting 502 from the OPTIONS request to api/sendtaz

1 Like

fwiw, it looks like the issue is that the page is sending the request to https://light-faucet.zecpages.com/api/sendtaz instead of https://faucet.zecpages.com/api/sendtaz

sending a curl request to the latter worked

1 Like

CC @BrunchTime with the issue

1 Like

kicked server, back in business. I can think of a couple pretty simple stability upgrades, will keep ya posted