diff --git a/.envrc b/.envrc index 66d11ab..9eeb370 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,4 @@ CURRENT_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -export PATH=$PATH:$CURRENT_DIRECTORY/bin +export PATH=$PATH:$CURRENT_DIRECTORY/bin:$CURRENT_DIRECTORY/scripts diff --git a/bin/liquidate-single-account b/bin/liquidate-single-account index 54a0a3a..25dbe86 100755 --- a/bin/liquidate-single-account +++ b/bin/liquidate-single-account @@ -1,8 +1,5 @@ #!/usr/bin/env python3 -import logging -logging.basicConfig(level=logging.INFO) - import os, sys from pathlib import Path @@ -23,6 +20,7 @@ startup_directory = notebook_directory / "meta" / "startup" sys.path.append(str(startup_directory)) import argparse +import logging import os.path import projectsetup import time @@ -38,29 +36,32 @@ from Context import Context, default_cluster, default_cluster_url, default_progr from SimpleLiquidator import SimpleLiquidator from Wallet import Wallet -logging.info(WARNING_DISCLAIMER_TEXT) - # We explicitly want argument parsing to be outside the main try-except block because some arguments # (like --help) will cause an exit, which our except: block traps. parser = argparse.ArgumentParser(description='Liquidate a single margin account.') -parser.add_argument('--cluster', type=str, default=default_cluster, +parser.add_argument("--cluster", type=str, default=default_cluster, help="Solana RPC cluster name") -parser.add_argument('--cluster-url', type=str, default=default_cluster_url, +parser.add_argument("--cluster-url", type=str, default=default_cluster_url, help="Solana RPC cluster URL") -parser.add_argument('--program-id', type=str, default=default_program_id, +parser.add_argument("--program-id", type=str, default=default_program_id, help="Mango program ID/address") -parser.add_argument('--dex-program-id', type=str, default=default_dex_program_id, +parser.add_argument("--dex-program-id", type=str, default=default_dex_program_id, help="DEX program ID/address") -parser.add_argument('--group-name', type=str, default=default_group_name, +parser.add_argument("--group-name", type=str, default=default_group_name, help="Mango group name") -parser.add_argument('--group-id', type=str, default=default_group_id, +parser.add_argument("--group-id", type=str, default=default_group_id, help="Mango group ID/address") -parser.add_argument('--id-file', type=str, default="id.json", +parser.add_argument("--id-file", type=str, default="id.json", help="file containing the JSON-formatted wallet private key") +parser.add_argument("--log-level", default=logging.INFO, type=lambda level: getattr(logging, level), + help="level of verbosity to log (possible values: DEBUG, INFO, WARNING, ERROR, CRITICAL)") parser.add_argument('--margin-account-address', type=PublicKey, help="Solana address of the Mango Markets margin account to be liquidated") args = parser.parse_args() +logging.basicConfig(level=args.log_level) +logging.info(WARNING_DISCLAIMER_TEXT) + try: id_filename = args.id_file if not os.path.isfile(id_filename): diff --git a/bin/liquidator b/bin/liquidator index 9e1201b..faf844e 100755 --- a/bin/liquidator +++ b/bin/liquidator @@ -1,8 +1,5 @@ #!/usr/bin/env python3 -import logging -logging.basicConfig(level=logging.INFO) - import os, sys from pathlib import Path @@ -23,9 +20,9 @@ startup_directory = notebook_directory / "meta" / "startup" sys.path.append(str(startup_directory)) import argparse +import logging import os.path import projectsetup -import sys import time import traceback @@ -36,29 +33,32 @@ from Context import Context, default_cluster, default_cluster_url, default_progr from SimpleLiquidator import SimpleLiquidator from Wallet import Wallet -logging.info(WARNING_DISCLAIMER_TEXT) - # We explicitly want argument parsing to be outside the main try-except block because some arguments # (like --help) will cause an exit, which our except: block traps. parser = argparse.ArgumentParser(description='Run a liquidator for a Mango Markets group.') -parser.add_argument('--cluster', type=str, default=default_cluster, +parser.add_argument("--cluster", type=str, default=default_cluster, help="Solana RPC cluster name") -parser.add_argument('--cluster-url', type=str, default=default_cluster_url, +parser.add_argument("--cluster-url", type=str, default=default_cluster_url, help="Solana RPC cluster URL") -parser.add_argument('--program-id', type=str, default=default_program_id, +parser.add_argument("--program-id", type=str, default=default_program_id, help="Mango program ID/address") -parser.add_argument('--dex-program-id', type=str, default=default_dex_program_id, +parser.add_argument("--dex-program-id", type=str, default=default_dex_program_id, help="DEX program ID/address") -parser.add_argument('--group-name', type=str, default=default_group_name, +parser.add_argument("--group-name", type=str, default=default_group_name, help="Mango group name") -parser.add_argument('--group-id', type=str, default=default_group_id, +parser.add_argument("--group-id", type=str, default=default_group_id, help="Mango group ID/address") -parser.add_argument('--id-file', type=str, default="id.json", +parser.add_argument("--id-file", type=str, default="id.json", help="file containing the JSON-formatted wallet private key") -parser.add_argument('--throttle-to-seconds', type=int, default=60, +parser.add_argument("--log-level", default=logging.INFO, type=lambda level: getattr(logging, level), + help="level of verbosity to log (possible values: DEBUG, INFO, WARNING, ERROR, CRITICAL)") +parser.add_argument("--throttle-to-seconds", type=int, default=60, help="minimum number of seconds between each loop (including time taken processing accounts)") args = parser.parse_args() +logging.basicConfig(level=args.log_level) +logging.info(WARNING_DISCLAIMER_TEXT) + try: id_filename = args.id_file if not os.path.isfile(id_filename): diff --git a/bin/liquidator-single-run b/bin/liquidator-single-run index 4fe9ea4..70b74a6 100755 --- a/bin/liquidator-single-run +++ b/bin/liquidator-single-run @@ -1,8 +1,5 @@ #!/usr/bin/env python3 -import logging -logging.basicConfig(level=logging.INFO) - import os, sys from pathlib import Path @@ -23,6 +20,7 @@ startup_directory = notebook_directory / "meta" / "startup" sys.path.append(str(startup_directory)) import argparse +import logging import os.path import projectsetup import time @@ -35,27 +33,30 @@ from Context import Context, default_cluster, default_cluster_url, default_progr from SimpleLiquidator import SimpleLiquidator from Wallet import Wallet -logging.info(WARNING_DISCLAIMER_TEXT) - # We explicitly want argument parsing to be outside the main try-except block because some arguments # (like --help) will cause an exit, which our except: block traps. parser = argparse.ArgumentParser(description='Run a single pass of the liquidator for a Mango Markets group.') -parser.add_argument('--cluster', type=str, default=default_cluster, +parser.add_argument("--cluster", type=str, default=default_cluster, help="Solana RPC cluster name") -parser.add_argument('--cluster-url', type=str, default=default_cluster_url, +parser.add_argument("--cluster-url", type=str, default=default_cluster_url, help="Solana RPC cluster URL") -parser.add_argument('--program-id', type=str, default=default_program_id, +parser.add_argument("--program-id", type=str, default=default_program_id, help="Mango program ID/address") -parser.add_argument('--dex-program-id', type=str, default=default_dex_program_id, +parser.add_argument("--dex-program-id", type=str, default=default_dex_program_id, help="DEX program ID/address") -parser.add_argument('--group-name', type=str, default=default_group_name, +parser.add_argument("--group-name", type=str, default=default_group_name, help="Mango group name") -parser.add_argument('--group-id', type=str, default=default_group_id, +parser.add_argument("--group-id", type=str, default=default_group_id, help="Mango group ID/address") -parser.add_argument('--id-file', type=str, default="id.json", +parser.add_argument("--id-file", type=str, default="id.json", help="file containing the JSON-formatted wallet private key") +parser.add_argument("--log-level", default=logging.INFO, type=lambda level: getattr(logging, level), + help="level of verbosity to log (possible values: DEBUG, INFO, WARNING, ERROR, CRITICAL)") args = parser.parse_args() +logging.basicConfig(level=args.log_level) +logging.info(WARNING_DISCLAIMER_TEXT) + try: id_filename = args.id_file if not os.path.isfile(id_filename): diff --git a/bin/build-container b/scripts/build-container similarity index 100% rename from bin/build-container rename to scripts/build-container diff --git a/bin/run-jupyter b/scripts/run-jupyter similarity index 100% rename from bin/run-jupyter rename to scripts/run-jupyter diff --git a/bin/run-lint.py b/scripts/run-lint.py similarity index 100% rename from bin/run-lint.py rename to scripts/run-lint.py diff --git a/bin/run-mypy.py b/scripts/run-mypy.py similarity index 100% rename from bin/run-mypy.py rename to scripts/run-mypy.py