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
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 !
- If you feel this project is the right one for you, please, donate to
terra1uwkfuh6crvlttqsj2rv0tjpl8v0dy3d4swayg7if you feel like doing so.
Thanks Terra and Anchor team!