Faucet for EVM chains

Overview

FaucETH

Faucet for EVM chains

Why

I had a lot of problems with existing simple faucets (the ones that do not force you to use some centralized service like twitter) and had the urge to create one that does not suffer from these problems for a while. Then a tweet of pari in context of faucet problems for the kintsugi merge testnet gave the spark to finally code the faucet.

What

This faucet uses hCaptcha instead of reCaptcha to not feed the google.

How

Either download the tar from the release then run:

./bin/fauceth

you can also build the tar via:

./gradlew distTar

or directly run tha app from within the repo via:

./gradlew run

your working dir needs a file called fauceth.properties that looks like this:

hcaptcha.secret=your_hcaptcha_secret
hcaptcha.sitekey=your_hcaptcha_site_key

Make sure to replace the values with yours. You can also inject these properties via environment variables or systen properties.

Dream

What would be reall nice would be a web3 faucet - if anyone has ideas how to realize it please contact me. The problem I cannot overcome is how to validate a captcha without a backend.

Yea you could use a PoH blockchain like idena or a dapp like Proof of Humanity or brightId - but often you need the faucet to get started with crypto - so there is a hen and a egg problem here.

License

AGPLv3

Comments
  • Could not resolve ENS name

    Could not resolve ENS name

    I have just registered sennett.eth on Goeril: https://goerli.etherscan.io/enslookup-search?search=sennett.eth

    When I enter this into the faucet, I get an error "Could not resolve ENS name".

    image image
    opened by sennett 2
  • @ligi Ran the prettier function as requested.

    @ligi Ran the prettier function as requested.

    @ligi Ran the prettier function as requested. Hopefully that fixes this issue!

    Originally posted by @TheGreatAxios in https://github.com/ethereum-lists/chains/pull/1876#issuecomment-1317120356

    opened by milad237 1
  • Bump gradle-versions-plugin from 0.43.0 to 0.44.0

    Bump gradle-versions-plugin from 0.43.0 to 0.44.0

    Bumps gradle-versions-plugin from 0.43.0 to 0.44.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump kluent from 1.68 to 1.71

    Bump kluent from 1.68 to 1.71

    Bumps kluent from 1.68 to 1.71.

    Release notes

    Sourced from kluent's releases.

    v1.71

    What's Changed

    🐛 Bug Fixes

    v1.70

    What's Changed

    🚀 Features

    • Added should throw and should not throw assertions that operate on suspending functions (#216) @​piotrb5e3

    🐛 Bug Fixes

    v1.69

    What's Changed

    🚀 Features

    • Add shouldContainNone and shouldNotContainAny with check lambda (#210) @​andersu

    🐛 Bug Fixes

    ⬆️ Dependencies

    • Update junit dependency to non-vulnerable version (#209) @​rohte
    Changelog

    Sourced from kluent's changelog.

    Changelog has moved to GitHub releases starting from 1.69.

    1.69 (WIP)

    • Add support for file assertions shouldContainLineWithString and shouldNotContainLineWithString | Issue | PR | thanks to @​priyaaank
    Commits
    • 2ceebe1 Merge pull request #221 from MarkusAmshove/target-java-8
    • 7f0fc0d Update JVM target
    • d1f1efb Bump version
    • e6a0335 Merge pull request #219 from MarkusAmshove/fix-java-version
    • 7dddc98 Fix Java version to run on
    • 385570a Merge pull request #216 from piotrb5e3/add-suspend-backticks-exception-assert...
    • e46ca10 Added should throw and should not throw assertions that operate on suspen...
    • 96b5314 Remove snapshot repository
    • 03562fd Update changelog
    • a7233ab Update version
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump kluent from 1.68 to 1.70

    Bump kluent from 1.68 to 1.70

    Bumps kluent from 1.68 to 1.70.

    Release notes

    Sourced from kluent's releases.

    v1.70

    What's Changed

    🚀 Features

    • Added should throw and should not throw assertions that operate on suspending functions (#216) @​piotrb5e3

    🐛 Bug Fixes

    v1.69

    What's Changed

    🚀 Features

    • Add shouldContainNone and shouldNotContainAny with check lambda (#210) @​andersu

    🐛 Bug Fixes

    ⬆️ Dependencies

    • Update junit dependency to non-vulnerable version (#209) @​rohte
    Changelog

    Sourced from kluent's changelog.

    Changelog has moved to GitHub releases starting from 1.69.

    1.69 (WIP)

    • Add support for file assertions shouldContainLineWithString and shouldNotContainLineWithString | Issue | PR | thanks to @​priyaaank
    Commits
    • d1f1efb Bump version
    • e6a0335 Merge pull request #219 from MarkusAmshove/fix-java-version
    • 7dddc98 Fix Java version to run on
    • 385570a Merge pull request #216 from piotrb5e3/add-suspend-backticks-exception-assert...
    • e46ca10 Added should throw and should not throw assertions that operate on suspen...
    • 96b5314 Remove snapshot repository
    • 03562fd Update changelog
    • a7233ab Update version
    • 4b2d5f1 Merge pull request #211 from samsonjs/fix/ByteArray-assertion-order
    • eafe5cf Merge branch 'master' into fix/ByteArray-assertion-order
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump kluent from 1.68 to 1.69

    Bump kluent from 1.68 to 1.69

    Bumps kluent from 1.68 to 1.69.

    Release notes

    Sourced from kluent's releases.

    v1.69

    What's Changed

    🚀 Features

    • Add shouldContainNone and shouldNotContainAny with check lambda (#210) @​andersu

    🐛 Bug Fixes

    ⬆️ Dependencies

    • Update junit dependency to non-vulnerable version (#209) @​rohte
    Changelog

    Sourced from kluent's changelog.

    1.69 (WIP)

    • Add support for file assertions shouldContainLineWithString and shouldNotContainLineWithString | Issue | PR | thanks to @​priyaaank
    Commits
    • 03562fd Update changelog
    • a7233ab Update version
    • 4b2d5f1 Merge pull request #211 from samsonjs/fix/ByteArray-assertion-order
    • eafe5cf Merge branch 'master' into fix/ByteArray-assertion-order
    • 7a0d8f1 Merge pull request #210 from andersu/should-contain-none-and-not-contain-any-...
    • 0da09bd Merge branch 'master' into fix/ByteArray-assertion-order
    • c7d3c53 Merge branch 'master' into should-contain-none-and-not-contain-any-with-check
    • 28c0c35 Merge pull request #209 from rohte/master
    • f8b266f Merge branch 'master' into master
    • 583d5e5 Add maven central badge
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Feature Request: allow chain information to be encoded into the URL

    Feature Request: allow chain information to be encoded into the URL

    As a user, I would like to be able to load a URL containing encoded chainID e.g. ?chainID=421611 and for this to pre-select the "Arbitrum Rinkeby" network from the drop-down.

    image

    opened by chrishobcroft 1
  • Bump gradle-versions-plugin from 0.41.0 to v0.42.0

    Bump gradle-versions-plugin from 0.41.0 to v0.42.0

    Bumps gradle-versions-plugin from 0.41.0 to v0.42.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump gradle-versions-plugin from 0.41.0 to 0.42.0

    Bump gradle-versions-plugin from 0.41.0 to 0.42.0

    Bumps gradle-versions-plugin from 0.41.0 to 0.42.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump khex from 0.6 to 1.1.2

    Bump khex from 0.6 to 1.1.2

    Bumps khex from 0.6 to 1.1.2.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Add Dockerfile

    Add Dockerfile

    Adding this so that it becomes easier to build and deploy the FaucETH in container platforms.

    @ligi would you also like a github workflow that automatically builds and pushes release tags to Github Packages container registry?

    opened by skylenet 1
  • Unable to request eth

    Unable to request eth

    My requests for sepolia eth are failing due to some uncaught error. I'm on firefox 104.0.1.

    Uncaught (in promise) SyntaxError: expected expression, got '<'
        submitFinalForm https://fauceth.komputing.org/static/js/main.js:40
    
    opened by lightclient 1
  • Automatically update balance without having to restart

    Automatically update balance without having to restart

    Currently whenever we fund the faucet with new amounts we have to restart it so that it picks up the amount. It would be nice if the balances could be updated automatically without a restart.

    enhancement 
    opened by skylenet 0
  • Configurable rate limiting by IP address

    Configurable rate limiting by IP address

    It would be nice to have a configurable rate limiting by IP address.

    Something like:

    • Only allow an IP address to perform N requests per TIME_FRAME
      e.g. Only allow an IP address to perform 2 requests per 1 hour

    Note that the source IP address doesn't need to necessarily be the one that is doing the request to the faucet. Sometimes there are proxies or load balancers in between. In those cases, the X-Forwarded-For header could be used. So this should also be configurable, either the src IP of the request, or given a HTTP header.

    As an initial version I think it's fine if the "IP database" keeps in memory and is dropped when the faucet is restarted.

    Example of a config in YAML. (Could ofc be in a different format):

    ipRateLimit:
      maxRequests: 2
      timeFrame: "1h"
      sourceIPHeader: "X-Forwarded_For" # when not set, fall back to source IP of the HTTP request
    

    Requests that are rate limited should get a HTTP/1.1 429 Too Many Requests as a response. The "Retry-After" response header could also be added, but it's just a nice to have.

    opened by skylenet 1
  • requesting funds from a dry faucets activates the 60 minutes delay

    requesting funds from a dry faucets activates the 60 minutes delay

    when getting the 'faucet dry' error while requesting funds from the testnet, the user has to wait for 60 minutes in order to find out if the faucet has been fixed. As a user who regularly forgets to funds his faucet, I don't think it should work like this: I would prefer being marked for the cooldown period upon actually receiving the funds.

    opened by gballet 1
  • Proof of testnet ether usage to fight faucet drainers

    Proof of testnet ether usage to fight faucet drainers

    Faucet draining is a real problem - there are people out there trying to make a profit with testnet ether.

    • CAPTCHAs only hold up a little - seems people are paying to solve them. (maybe we should also try finding harder ones)
    • restricting to only ENS seems to work a bit better (but comes with challenges like #37 and is really hindering onboarding completely new users)
    • inflating the total supply has not yet proven to scare faucet drainers/speculators away

    But I guess even for ENS we will see draining bots over time - so I think of the current timeout-based approach might also be problematic in the future. Maybe we should think about analyzing if an ENS address really uses the testnet ether (currently the drainers are easy to detect - but might also become harder in the future)

    enhancement 
    opened by ligi 0
Releases(2.3)
Owner
Komputing
Kotlin libraries shared between different projects - mainly in the web3 space.
Komputing
A Kotlin library used to analyse discrete Markov chains, in order to generate plausible sequences

Markov Markov is a Kotlin library used to analyse discrete Markov chains, in order to generate plausible sequences. Using This project is still under

Xavier F. Gouchet 0 Nov 14, 2021