My day job requires a fairly good amount of automation from time to time. Besides, I do like computers to work on what I cannot while I'm sleeping!
AnchorHoDL is an implementation that auto-pay/auto-borrow based on whatever config you desire.
I've started this app due my own needs and to learn more about Terra's ecosystem.
How it works
- It will query Anchor smart contracts checking LTV (Loan-to-Value);
- If the LTV is grater than
trigger_at_percentit will trigger a repay action.
- If the amount required to repay (
target_percent) is in the wallet, it will be used and loan will repay back to
- If not, it will withdraw from
- The script will NOT sell any asset to pay loan.
enabled_auto_borrowis enabled (by default) and current LTV is smaller than
auto_borrow_at_percent, an auto borrow will be trigger moving LTV to
How to use it
git clonethis repository.
config.pyas you desire and feed your seed (a dedicated wallet is recommended).
pip3 install -r requirements.txt
python3 webview.pyand simply browsing to http://localhost:5000 for an auto-pay/borrow running every 30 seconds. OR Run
python3 anchor_loan_repay.pyonce or use a while loop to run evey 30 seconds
while true; do python3 anchor_loan_repay.py; sleep 30; done
- Install gunicorn:
pip3 install gunicorn
gunicorn -b 127.0.0.1:5000 webview:app --daemon
Done! gunicorn is running as daemon!
- If you don't have Docker installed, grab if from https://docs.docker.com/get-docker/.
- Once installed, clone this repository by
git clone https://github.com/unl1k3ly/AnchorHODL
config.pyand provide details.
- Build the image with
docker build -t AnchorHODL .
- Run the image with
docker run -p 5000:5000 AnchorHODL:latestor add
-dif you want to run it as a daemon.
- Check if its working by
You can run the script in your terminal in a tmux/screen session as per figure below:
Or (recommended) you can spin a web service that does everything for you after you ran
If you use more Slack on daily bases like me, it might be simpler to be notified in there using Slack Webhooks.
- Create a Slack APP.
- Add the APP to a channel and get a webhook URL to feed the
More information can be found via this link https://api.slack.com/incoming-webhooks
If you want to be notified via Telegram, you'd need to get
access_token and your
chat_id from your Telegram bot.
If you are not familiarized creating a Telegram bot, please follow steps below:
- On Telegram, find
@BotFatherand open a DM.
/newbotto create a new bot for yourself.
- Then, name the bot as you wish, ie:
- Now, choose whatever username you desire for your bot, ie:
- Done! You should see a "Congratulations" message from BotFather.
- To get your own
chat_id, simply open a DM with your bot, send something up and run the following command below:
curl -s https://api.telegram.org/ACCESSTOKEN/getUpdates(replace
ACCESSTOKENwith an actual token you just got from item #5).
chat_idjust feed the
If these instructions are unclear, just Google "How to create a Telegram Bot and get your own chat_id"!
- It's recommended to run this code in a contained environment at maximum security. Dockerfile is also provided if you want to deploy it seamless somewhere.
- If you are using the
webview, ensure the access is restricted and not exposed to the entire Internet. You can use "CloudFare Argo Tunnel" for that.
- Since a wallet seed is required, ensure you protect it and know what you're doing while using this automation ...
- If you don't want to pass secrets into the config.py file, make sure you declare as a system variable.
- Everything will be logged into the
./logsfolder. Make sure you check those from time to time!
- I have no intentions to actively develop new features or take issue requests. As mentioned, this automation was to address a self issue I had and consequently avoid liquidation! It works for my own needs.
- I'm happy to fix bugs or take merge requests.
- If you intend to modify the code yourself, please do a fork and start from it !