Try   HackMD

Discord faucet bot

Features

  • Responds to requests for vega and theta testnet tokens
  • Response includes a link to the transaction detail in the appropriate block explorer
  • Limits the tokens a user can get within a time period for a given testnet
  • Limits the tokens an address can get within a time period for a given testnet
  • Daily cap for each testnet token
  • Requests are saved in local csv file: date, cosmos address, amount, and testnet
  • Errors are logged to systemd journal

Deployment

  • The bot will be run in a Cosmos Digital Ocean droplet that Hypha has access to
  • The bot is a python script that makes calls to gaiad
  • The script can be run as a service
  • gaiad must be initialized (it can remain offline though) and the faucets' keys must be added to the keyring
  • The config.toml file must be modified with the token for the Testnet Faucet linked to the Cosmos Discord server
  • See the cosmos-discord-faucet repo for further details

Follow these steps starting from a base Ubuntu droplet.

Build environment

apt update
apt upgrade -y
apt install --yes libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libgdbm-dev lzma lzma-dev tcl-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev wget curl make build-essential python-openssl

gaiad

  1. Install golang
curl -OL https://go.dev/dl/go1.18.linux-amd64.tar.gz
tar -C /usr/local -xvf go1.18.linux-amd64.tar.gz
  1. Update .bashrc with go paths (add this line at the end)
PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
  1. Activate PATH environment variable
~ source .bashrc
  1. Install gaia 6.0.4
~
git clone https://github.com/cosmos/gaia
cd gaia
git checkout release/v6.0.4
git pull
make install
  1. Configure gaia and set up faucet keys
    We will use the mnemonic for address cosmos15aptdqmm7ddgtcrjvc5hs988rlrkze40l4q0he
export CHAIN_ID=faucet-localnet
export NODE_MONIKER=faucet-bridge
export BINARY=gaiad
export NODE_HOME=$HOME/.gaia
$BINARY config chain-id $CHAIN_ID --home $NODE_HOME
$BINARY config keyring-backend test --home $NODE_HOME
$BINARY config broadcast-mode block --home $NODE_HOME
$BINARY init $NODE_MONIKER --home $NODE_HOME --chain-id=$CHAIN_ID
export FAUCET_MNEMONIC="[moniker goes here]"
echo $FAUCET_MNEMONIC | gaiad --home /root/.gaia keys add faucet --recover --keyring-backend=test
  1. Test keys work for all chains

We are using cosmos15aptdqmm7ddgtcrjvc5hs988rlrkze40l4q0he as a faucet

gaiad tx bank send cosmos15aptdqmm7ddgtcrjvc5hs988rlrkze40l4q0he cosmos1j7qzunvzx4cdqya80wvnrsmzyt9069d3gwhu5p 1000uatom --fees=500uatom --chain-id="vega-testnet" --keyring-backend=test --node="http://165.22.235.50:26657" --yes
gaiad tx bank send cosmos15aptdqmm7ddgtcrjvc5hs988rlrkze40l4q0he cosmos1j7qzunvzx4cdqya80wvnrsmzyt9069d3gwhu5p 1000uatom --fees=500uatom --chain-id="theta-testnet-001" --keyring-backend=test --node="http://state-sync-01.theta-testnet.polypore.xyz:26657" --yes
gaiad tx bank send cosmos15aptdqmm7ddgtcrjvc5hs988rlrkze40l4q0he cosmos1j7qzunvzx4cdqya80wvnrsmzyt9069d3gwhu5p 1000uatom --fees=50uatom --chain-id="theta-devnet" --keyring-backend=test --node="http://one.theta-devnet.polypore.xyz:26657" --yes

Python

  1. Install pyenv
curl https://pyenv.run | bash
  1. Add the following lines to .bashrc
# Pyenv environment variables
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# Pyenv initialization
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)"
fi
  1. Update the environment variables
~ source .bashrc
  1. Install Python
pyenv install 3.8.12
pyenv global 3.8.12
  1. Set up cosmos-discord-faucet environment
~
git clone https://github.com/hyphacoop/cosmos-discord-faucet.git
cd cosmos-discord-faucet 
git pull
python -m venv .env
source .env/bin/activate
pip install -r requirements.txt
  1. Update config.toml

Add token and channels to listen to under the [discord] section

  1. Update cosmos-discord-faucet.service
User=root
Environment="PATH=/usr/local/go/bin:/root/go/bin:$PATH"
WorkingDirectory=/root/cosmos-discord-faucet
ExecStart=/root/cosmos-discord-faucet/.env/bin/python cosmos_discord_faucet.py
  1. Make a link in /etc/systemd/system to the service file
ln -s /root/cosmos-discord-faucet/cosmos-discord-faucet.service /etc/systemd/system/cosmos-discord-faucet.service
  1. Start the service
systemctl daemon-reload
systemctl enable cosmos-discord-faucet.service
systemctl start cosmos-discord-faucet.service
  1. Check the service is running
# journalctl -fu cosmos-discord-faucet
Mar 23 13:52:39 testnet-faucet-bot systemd[1]: Started "Discord testnet faucet bot".
Mar 23 13:52:42 testnet-faucet-bot python[62239]: 2022-03-23 13:52:42,455 INFO Logged into Discord as Testnet Faucet#2049

Default Settings

  • 10 ATOM sent per request on vega and theta, 1 ATOM on devnet
  • 400 ATOM daily cap for vega and theta, 50 ATOM for devnet
  • As of 2022-03-23, has:
    • 800,000 ATOM on both vega and theta

    • 90 ATOM on devnet

  • A user can only get tokens for the same testnet every 24h
  • An address can get tokens for the same testnet every 24h