A cryptocurrency "faucet" is a site that gives away cryptocurrency. Faucets are especially common on test networks such as NEAR TestNet to allow developers to test apps with tokens which have no monetary value.
Faucets can run out of tokens, especially if people abuse them and purposely attempt to drain available funds. While test network tokens can be replenished one way or another, doing so can be a hassle, so it's useful to deter this sort of behavior.
To this end, some faucets require that token requests be accompanied by a post on Twitter. But it's easy for one person to spin up many fake Twitter accounts to drain a faucet. This sort of behavior would be classified as a Sybil attack.
This demo uses a different approach.
First, each new account created with this faucet receives 1/1000 of the funds remaining at the time it was created.
u64 salt for a given account id + public key in such a way that the
sha256(account_id + ':' + public_key + ':' + salt) has
min_difficulty leading zeroes).
You can try out a live version of this demo: https://near-examples.github.io/pow-faucet/
This demo version creates new NEAR TestNet accounts with a
The code lives in two different places:
The smart contract source code lives in the
contract-rs folder, and specifically in
After you make changes, run tests by entering the
contract-rs directory (
cd contract-rs) and running:
To recompile the smart contract in preparation for deploying it, again enter the
contract-rs directory and run:
It was bootstrapped with
create-react-app. Check out the README in the
frontend folder to learn how to play with the code.
The Contract and the Frontend need to be deployed separately.
As a follow-up to this demo, we created a Proof of Work Transfer Faucet. This "Transfer Faucet" differs from the current example in two main ways:
By using Gitpod in this project, you agree to opt-in to basic, anonymous analytics. No personal information is transmitted. Instead, these usage statistics aid in discovering potential bugs and user flow information.