diff --git a/proxy/__main__.py b/proxy/__main__.py index bdee15917..8ddad90f9 100644 --- a/proxy/__main__.py +++ b/proxy/__main__.py @@ -9,10 +9,8 @@ :license: BSD, see LICENSE for more details. """ -from solana.publickey import PublicKey from .proxy import entry_point import os -from .indexer.airdropper import run_airdropper from .indexer.indexer import run_indexer if __name__ == '__main__': @@ -20,29 +18,9 @@ evm_loader_id = os.environ['EVM_LOADER'] print(f"Will run with SOLANA_URL={solana_url}; EVM_LOADER={evm_loader_id}") - airdropper_mode = os.environ.get('AIRDROPPER_MODE', 'False').lower() in [1, 'true', 'True'] indexer_mode = os.environ.get('INDEXER_MODE', 'False').lower() in [1, 'true', 'True'] - if airdropper_mode: - print("Will run in airdropper mode") - pyth_mapping_account = PublicKey(os.environ['PYTH_MAPPING_ACCOUNT']) - faucet_url = os.environ['FAUCET_URL'] - wrapper_whitelist = os.environ['INDEXER_ERC20_WRAPPER_WHITELIST'] - if wrapper_whitelist != 'ANY': - wrapper_whitelist = wrapper_whitelist.split(',') - neon_decimals = int(os.environ.get('NEON_DECIMALS', '9')) - - pp_solana_url = os.environ.get('PP_SOLANA_URL', None) - max_conf = float(os.environ.get('MAX_CONFIDENCE_INTERVAL', 0.02)) - - run_airdropper(solana_url, - pyth_mapping_account, - faucet_url, - wrapper_whitelist, - neon_decimals, - pp_solana_url, - max_conf) - elif indexer_mode: + if indexer_mode: print("Will run in indexer mode") run_indexer(solana_url) else: diff --git a/proxy/airdropper/__init__.py b/proxy/airdropper/__init__.py new file mode 100644 index 000000000..4079bb6ea --- /dev/null +++ b/proxy/airdropper/__init__.py @@ -0,0 +1,2 @@ +from .airdropper import Airdropper, AIRDROP_AMOUNT_SOL, NEON_PRICE_USD +from .airdropper_app import AirdropperApp diff --git a/proxy/airdropper/__main__.py b/proxy/airdropper/__main__.py new file mode 100644 index 000000000..bb17d771f --- /dev/null +++ b/proxy/airdropper/__main__.py @@ -0,0 +1,6 @@ +from . import AirdropperApp + +if __name__ == '__main__': + airdropper_app = AirdropperApp() + exit_code = airdropper_app.run() + exit(exit_code) diff --git a/proxy/indexer/airdropper.py b/proxy/airdropper/airdropper.py similarity index 89% rename from proxy/indexer/airdropper.py rename to proxy/airdropper/airdropper.py index 08c3088a2..81f380106 100644 --- a/proxy/indexer/airdropper.py +++ b/proxy/airdropper/airdropper.py @@ -1,9 +1,4 @@ from solana.publickey import PublicKey -from proxy.indexer.indexer_base import IndexerBase -from proxy.indexer.pythnetwork import PythNetworkClient -from proxy.indexer.base_db import BaseDB -from proxy.indexer.utils import check_error -from proxy.indexer.sql_dict import SQLDict import requests import base58 import traceback @@ -13,6 +8,11 @@ from ..environment import NEON_PRICE_USD, EVM_LOADER_ID from ..common_neon.solana_interactor import SolanaInteractor +from ..indexer.indexer_base import IndexerBase +from ..indexer.pythnetwork import PythNetworkClient +from ..indexer.base_db import BaseDB +from ..indexer.utils import check_error +from ..indexer.sql_dict import SQLDict ACCOUNT_CREATION_PRICE_SOL = Decimal('0.00472692') @@ -271,34 +271,3 @@ def process_receipts(self): self.process_trx_airdropper_mode(trx) self.latest_processed_slot = max(self.latest_processed_slot, max_slot) self._constants['latest_processed_slot'] = self.latest_processed_slot - - -@logged_group("neon.Airdropper") -def run_airdropper(solana_url, - pyth_mapping_account: PublicKey, - faucet_url, - wrapper_whitelist = 'ANY', - neon_decimals = 9, - pp_solana_url = None, - max_conf = 0.1, *, logger): - logger.info(f"""Running indexer with params: - solana_url: {solana_url}, - evm_loader_id: {EVM_LOADER_ID}, - pyth.network mapping account: {pyth_mapping_account}, - faucet_url: {faucet_url}, - wrapper_whitelist: {wrapper_whitelist}, - NEON decimals: {neon_decimals}, - Price provider solana: {pp_solana_url}, - Max confidence interval: {max_conf}""") - - try: - airdropper = Airdropper(solana_url, - pyth_mapping_account, - faucet_url, - wrapper_whitelist, - neon_decimals, - pp_solana_url, - max_conf) - airdropper.run() - except Exception as err: - logger.error(f'Failed to start Airdropper: {err}') diff --git a/proxy/airdropper/airdropper_app.py b/proxy/airdropper/airdropper_app.py new file mode 100644 index 000000000..30d058a8b --- /dev/null +++ b/proxy/airdropper/airdropper_app.py @@ -0,0 +1,45 @@ +import os +from logged_groups import logged_group +from solana.publickey import PublicKey + +from ..environment import EVM_LOADER_ID + +from .airdropper import Airdropper + + +@logged_group("neon.Airdropper") +class AirdropperApp: + + def __init__(self): + self.info("Airdropper application is starting ...") + pyth_mapping_account = PublicKey(os.environ['PYTH_MAPPING_ACCOUNT']) + faucet_url = os.environ['FAUCET_URL'] + wrapper_whitelist = os.environ['INDEXER_ERC20_WRAPPER_WHITELIST'] + if wrapper_whitelist != 'ANY': + wrapper_whitelist = wrapper_whitelist.split(',') + neon_decimals = int(os.environ.get('NEON_DECIMALS', '9')) + + pp_solana_url = os.environ.get('PP_SOLANA_URL', None) + max_conf = float(os.environ.get('MAX_CONFIDENCE_INTERVAL', 0.02)) + solana_url = os.environ['SOLANA_URL'] + + self.info(f"""Construct Airdropper with params: + solana_url: {solana_url}, + evm_loader_id: {EVM_LOADER_ID}, + pyth.network mapping account: {pyth_mapping_account}, + faucet_url: {faucet_url}, + wrapper_whitelist: {wrapper_whitelist}, + NEON decimals: {neon_decimals}, + Price provider solana: {pp_solana_url}, + Max confidence interval: {max_conf}""") + + self._airdropper = Airdropper(solana_url, pyth_mapping_account, faucet_url, wrapper_whitelist, neon_decimals, + pp_solana_url, max_conf) + + def run(self) -> int: + try: + self._airdropper.run() + except Exception as err: + self.error(f'Failed to start Airdropper: {err}') + return 1 + return 0 diff --git a/proxy/indexer/__init__.py b/proxy/indexer/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/proxy/testing/test_airdropper.py b/proxy/testing/test_airdropper.py index 264bcf803..a97aaa8a0 100644 --- a/proxy/testing/test_airdropper.py +++ b/proxy/testing/test_airdropper.py @@ -3,7 +3,7 @@ from solana.publickey import PublicKey from proxy.testing.mock_server import MockServer -from proxy.indexer.airdropper import Airdropper, AIRDROP_AMOUNT_SOL, NEON_PRICE_USD +from proxy.airdropper import Airdropper, AIRDROP_AMOUNT_SOL, NEON_PRICE_USD from proxy.indexer.sql_dict import SQLDict from proxy.common_neon.solana_interactor import SolanaInteractor import time diff --git a/run-airdropper.sh b/run-airdropper.sh index fcaf5716b..1636e0587 100755 --- a/run-airdropper.sh +++ b/run-airdropper.sh @@ -7,7 +7,7 @@ if [ -z "$EVM_LOADER" ]; then export EVM_LOADER=$(solana address -k /spl/bin/evm_loader-keypair.json) echo "$(date "+%F %X.%3N") I $(basename "$0"):${LINENO} $$ ${COMPONENT}:StartScript {} EVM_LOADER=$EVM_LOADER" fi -export AIRDROPPER_MODE='true' + [[ -z "$FINALIZED" ]] && export FINALIZED="confirmed" -python3 -m proxy +python3 -m proxy.airdropper