django-cfg 1.3.5__py3-none-any.whl → 1.3.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_cfg/__init__.py +1 -1
- django_cfg/apps/accounts/admin/__init__.py +24 -8
- django_cfg/apps/accounts/admin/activity_admin.py +146 -0
- django_cfg/apps/accounts/admin/filters.py +98 -22
- django_cfg/apps/accounts/admin/group_admin.py +86 -0
- django_cfg/apps/accounts/admin/inlines.py +42 -13
- django_cfg/apps/accounts/admin/otp_admin.py +115 -0
- django_cfg/apps/accounts/admin/registration_admin.py +173 -0
- django_cfg/apps/accounts/admin/resources.py +123 -19
- django_cfg/apps/accounts/admin/twilio_admin.py +327 -0
- django_cfg/apps/accounts/admin/user_admin.py +362 -0
- django_cfg/apps/agents/admin/__init__.py +17 -4
- django_cfg/apps/agents/admin/execution_admin.py +204 -183
- django_cfg/apps/agents/admin/registry_admin.py +230 -255
- django_cfg/apps/agents/admin/toolsets_admin.py +274 -321
- django_cfg/apps/agents/core/__init__.py +1 -1
- django_cfg/apps/agents/core/django_agent.py +221 -0
- django_cfg/apps/agents/core/exceptions.py +14 -0
- django_cfg/apps/agents/core/orchestrator.py +18 -3
- django_cfg/apps/knowbase/admin/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/archive_admin.py +352 -640
- django_cfg/apps/knowbase/admin/chat_admin.py +258 -192
- django_cfg/apps/knowbase/admin/document_admin.py +269 -262
- django_cfg/apps/knowbase/admin/external_data_admin.py +271 -489
- django_cfg/apps/knowbase/config/settings.py +21 -4
- django_cfg/apps/knowbase/views/chat_views.py +3 -0
- django_cfg/apps/leads/admin/__init__.py +3 -1
- django_cfg/apps/leads/admin/leads_admin.py +235 -35
- django_cfg/apps/maintenance/admin/__init__.py +2 -2
- django_cfg/apps/maintenance/admin/api_key_admin.py +125 -63
- django_cfg/apps/maintenance/admin/log_admin.py +143 -61
- django_cfg/apps/maintenance/admin/scheduled_admin.py +212 -301
- django_cfg/apps/maintenance/admin/site_admin.py +213 -352
- django_cfg/apps/newsletter/admin/__init__.py +29 -2
- django_cfg/apps/newsletter/admin/newsletter_admin.py +531 -193
- django_cfg/apps/payments/admin/__init__.py +18 -27
- django_cfg/apps/payments/admin/api_keys_admin.py +179 -546
- django_cfg/apps/payments/admin/balance_admin.py +166 -632
- django_cfg/apps/payments/admin/currencies_admin.py +235 -607
- django_cfg/apps/payments/admin/endpoint_groups_admin.py +127 -0
- django_cfg/apps/payments/admin/filters.py +83 -3
- django_cfg/apps/payments/admin/networks_admin.py +258 -0
- django_cfg/apps/payments/admin/payments_admin.py +171 -461
- django_cfg/apps/payments/admin/subscriptions_admin.py +119 -636
- django_cfg/apps/payments/admin/tariffs_admin.py +248 -0
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +105 -34
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +12 -16
- django_cfg/apps/payments/admin_interface/views/__init__.py +2 -0
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +13 -18
- django_cfg/apps/payments/management/commands/manage_currencies.py +236 -274
- django_cfg/apps/payments/management/commands/manage_providers.py +4 -1
- django_cfg/apps/payments/middleware/api_access.py +32 -6
- django_cfg/apps/payments/migrations/0002_currency_usd_rate_currency_usd_rate_updated_at.py +26 -0
- django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +28 -0
- django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +30 -0
- django_cfg/apps/payments/models/balance.py +12 -0
- django_cfg/apps/payments/models/currencies.py +106 -32
- django_cfg/apps/payments/models/managers/currency_managers.py +65 -0
- django_cfg/apps/payments/services/core/currency_service.py +35 -28
- django_cfg/apps/payments/services/core/payment_service.py +1 -1
- django_cfg/apps/payments/services/providers/__init__.py +3 -0
- django_cfg/apps/payments/services/providers/base.py +95 -39
- django_cfg/apps/payments/services/providers/models/__init__.py +40 -0
- django_cfg/apps/payments/services/providers/models/base.py +122 -0
- django_cfg/apps/payments/services/providers/models/providers.py +87 -0
- django_cfg/apps/payments/services/providers/models/universal.py +48 -0
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +31 -0
- django_cfg/apps/payments/services/providers/nowpayments/config.py +70 -0
- django_cfg/apps/payments/services/providers/nowpayments/models.py +150 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers.py +879 -0
- django_cfg/apps/payments/services/providers/{nowpayments.py → nowpayments/provider.py} +240 -209
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +196 -0
- django_cfg/apps/payments/services/providers/registry.py +4 -32
- django_cfg/apps/payments/services/providers/sync_service.py +277 -0
- django_cfg/apps/payments/static/payments/js/api-client.js +23 -5
- django_cfg/apps/payments/static/payments/js/payment-form.js +65 -8
- django_cfg/apps/payments/tasks/__init__.py +39 -0
- django_cfg/apps/payments/tasks/types.py +73 -0
- django_cfg/apps/payments/tasks/usage_tracking.py +308 -0
- django_cfg/apps/payments/templates/admin/payments/_components/dashboard_header.html +23 -0
- django_cfg/apps/payments/templates/admin/payments/_components/stats_card.html +25 -0
- django_cfg/apps/payments/templates/admin/payments/_components/stats_grid.html +16 -0
- django_cfg/apps/payments/templates/admin/payments/apikey/change_list.html +39 -0
- django_cfg/apps/payments/templates/admin/payments/balance/change_list.html +50 -0
- django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +40 -0
- django_cfg/apps/payments/templates/admin/payments/payment/change_list.html +48 -0
- django_cfg/apps/payments/templates/admin/payments/subscription/change_list.html +48 -0
- django_cfg/apps/payments/urls_admin.py +1 -1
- django_cfg/apps/payments/views/api/currencies.py +5 -5
- django_cfg/apps/payments/views/overview/services.py +2 -2
- django_cfg/apps/payments/views/serializers/currencies.py +4 -3
- django_cfg/apps/support/admin/__init__.py +10 -1
- django_cfg/apps/support/admin/support_admin.py +338 -141
- django_cfg/apps/tasks/admin/__init__.py +11 -0
- django_cfg/apps/tasks/admin/tasks_admin.py +430 -0
- django_cfg/apps/urls.py +1 -2
- django_cfg/config.py +1 -1
- django_cfg/core/config.py +10 -5
- django_cfg/core/generation.py +1 -1
- django_cfg/management/commands/__init__.py +13 -1
- django_cfg/management/commands/app_agent_diagnose.py +470 -0
- django_cfg/management/commands/app_agent_generate.py +342 -0
- django_cfg/management/commands/app_agent_info.py +308 -0
- django_cfg/management/commands/migrate_all.py +9 -3
- django_cfg/management/commands/migrator.py +11 -6
- django_cfg/management/commands/rundramatiq.py +3 -2
- django_cfg/middleware/__init__.py +0 -2
- django_cfg/models/api_keys.py +115 -0
- django_cfg/modules/django_admin/__init__.py +64 -0
- django_cfg/modules/django_admin/decorators/__init__.py +13 -0
- django_cfg/modules/django_admin/decorators/actions.py +106 -0
- django_cfg/modules/django_admin/decorators/display.py +106 -0
- django_cfg/modules/django_admin/mixins/__init__.py +14 -0
- django_cfg/modules/django_admin/mixins/display_mixin.py +81 -0
- django_cfg/modules/django_admin/mixins/optimization_mixin.py +41 -0
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +202 -0
- django_cfg/modules/django_admin/models/__init__.py +20 -0
- django_cfg/modules/django_admin/models/action_models.py +33 -0
- django_cfg/modules/django_admin/models/badge_models.py +20 -0
- django_cfg/modules/django_admin/models/base.py +26 -0
- django_cfg/modules/django_admin/models/display_models.py +31 -0
- django_cfg/modules/django_admin/utils/badges.py +159 -0
- django_cfg/modules/django_admin/utils/displays.py +247 -0
- django_cfg/modules/django_app_agent/__init__.py +87 -0
- django_cfg/modules/django_app_agent/agents/__init__.py +40 -0
- django_cfg/modules/django_app_agent/agents/base/__init__.py +24 -0
- django_cfg/modules/django_app_agent/agents/base/agent.py +354 -0
- django_cfg/modules/django_app_agent/agents/base/context.py +236 -0
- django_cfg/modules/django_app_agent/agents/base/executor.py +430 -0
- django_cfg/modules/django_app_agent/agents/generation/__init__.py +12 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +15 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +147 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +99 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +32 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +290 -0
- django_cfg/modules/django_app_agent/agents/interfaces.py +376 -0
- django_cfg/modules/django_app_agent/core/__init__.py +33 -0
- django_cfg/modules/django_app_agent/core/config.py +300 -0
- django_cfg/modules/django_app_agent/core/exceptions.py +359 -0
- django_cfg/modules/django_app_agent/models/__init__.py +71 -0
- django_cfg/modules/django_app_agent/models/base.py +283 -0
- django_cfg/modules/django_app_agent/models/context.py +496 -0
- django_cfg/modules/django_app_agent/models/enums.py +481 -0
- django_cfg/modules/django_app_agent/models/requests.py +500 -0
- django_cfg/modules/django_app_agent/models/responses.py +585 -0
- django_cfg/modules/django_app_agent/pytest.ini +6 -0
- django_cfg/modules/django_app_agent/services/__init__.py +42 -0
- django_cfg/modules/django_app_agent/services/app_generator/__init__.py +30 -0
- django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +133 -0
- django_cfg/modules/django_app_agent/services/app_generator/context.py +40 -0
- django_cfg/modules/django_app_agent/services/app_generator/main.py +202 -0
- django_cfg/modules/django_app_agent/services/app_generator/structure.py +316 -0
- django_cfg/modules/django_app_agent/services/app_generator/validation.py +125 -0
- django_cfg/modules/django_app_agent/services/base.py +437 -0
- django_cfg/modules/django_app_agent/services/context_builder/__init__.py +34 -0
- django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +141 -0
- django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +276 -0
- django_cfg/modules/django_app_agent/services/context_builder/main.py +272 -0
- django_cfg/modules/django_app_agent/services/context_builder/models.py +40 -0
- django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +85 -0
- django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +31 -0
- django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +311 -0
- django_cfg/modules/django_app_agent/services/project_scanner/main.py +221 -0
- django_cfg/modules/django_app_agent/services/project_scanner/models.py +59 -0
- django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +94 -0
- django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +28 -0
- django_cfg/modules/django_app_agent/services/questioning_service/main.py +273 -0
- django_cfg/modules/django_app_agent/services/questioning_service/models.py +111 -0
- django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +251 -0
- django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +347 -0
- django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +356 -0
- django_cfg/modules/django_app_agent/services/report_service.py +332 -0
- django_cfg/modules/django_app_agent/services/template_manager/__init__.py +18 -0
- django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +236 -0
- django_cfg/modules/django_app_agent/services/template_manager/main.py +159 -0
- django_cfg/modules/django_app_agent/services/template_manager/models.py +36 -0
- django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +100 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +105 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +31 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +44 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +81 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +107 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +139 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +91 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +195 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +35 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +211 -0
- django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +200 -0
- django_cfg/modules/django_app_agent/services/validation_service/__init__.py +25 -0
- django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +333 -0
- django_cfg/modules/django_app_agent/services/validation_service/main.py +242 -0
- django_cfg/modules/django_app_agent/services/validation_service/models.py +66 -0
- django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +352 -0
- django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +272 -0
- django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +203 -0
- django_cfg/modules/django_app_agent/ui/__init__.py +25 -0
- django_cfg/modules/django_app_agent/ui/cli.py +419 -0
- django_cfg/modules/django_app_agent/ui/rich_components.py +622 -0
- django_cfg/modules/django_app_agent/utils/__init__.py +38 -0
- django_cfg/modules/django_app_agent/utils/logging.py +360 -0
- django_cfg/modules/django_app_agent/utils/validation.py +417 -0
- django_cfg/modules/django_currency/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/hybrid_client.py +587 -0
- django_cfg/modules/django_currency/core/converter.py +12 -12
- django_cfg/modules/django_currency/database/__init__.py +2 -2
- django_cfg/modules/django_currency/database/database_loader.py +93 -42
- django_cfg/modules/django_llm/llm/client.py +10 -2
- django_cfg/modules/django_unfold/callbacks/actions.py +1 -1
- django_cfg/modules/django_unfold/callbacks/statistics.py +1 -1
- django_cfg/modules/django_unfold/dashboard.py +14 -13
- django_cfg/modules/django_unfold/models/config.py +1 -1
- django_cfg/registry/core.py +3 -0
- django_cfg/registry/third_party.py +2 -2
- django_cfg/template_archive/django_sample.zip +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/METADATA +2 -1
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/RECORD +224 -118
- django_cfg/apps/accounts/admin/activity.py +0 -96
- django_cfg/apps/accounts/admin/group.py +0 -17
- django_cfg/apps/accounts/admin/otp.py +0 -59
- django_cfg/apps/accounts/admin/registration_source.py +0 -97
- django_cfg/apps/accounts/admin/twilio_response.py +0 -227
- django_cfg/apps/accounts/admin/user.py +0 -300
- django_cfg/apps/agents/core/agent.py +0 -281
- django_cfg/apps/payments/admin_interface/old/payments/base.html +0 -175
- django_cfg/apps/payments/admin_interface/old/payments/components/dev_tool_card.html +0 -125
- django_cfg/apps/payments/admin_interface/old/payments/components/loading_spinner.html +0 -16
- django_cfg/apps/payments/admin_interface/old/payments/components/ngrok_status_card.html +0 -113
- django_cfg/apps/payments/admin_interface/old/payments/components/notification.html +0 -27
- django_cfg/apps/payments/admin_interface/old/payments/components/provider_card.html +0 -86
- django_cfg/apps/payments/admin_interface/old/payments/components/status_card.html +0 -35
- django_cfg/apps/payments/admin_interface/old/payments/currency_converter.html +0 -382
- django_cfg/apps/payments/admin_interface/old/payments/payment_dashboard.html +0 -309
- django_cfg/apps/payments/admin_interface/old/payments/payment_form.html +0 -303
- django_cfg/apps/payments/admin_interface/old/payments/payment_list.html +0 -382
- django_cfg/apps/payments/admin_interface/old/payments/payment_status.html +0 -500
- django_cfg/apps/payments/admin_interface/old/payments/webhook_dashboard.html +0 -518
- django_cfg/apps/payments/admin_interface/old/static/payments/css/components.css +0 -619
- django_cfg/apps/payments/admin_interface/old/static/payments/css/dashboard.css +0 -188
- django_cfg/apps/payments/admin_interface/old/static/payments/js/components.js +0 -545
- django_cfg/apps/payments/admin_interface/old/static/payments/js/ngrok-status.js +0 -163
- django_cfg/apps/payments/admin_interface/old/static/payments/js/utils.js +0 -412
- django_cfg/apps/tasks/admin.py +0 -320
- django_cfg/middleware/static_nocache.py +0 -55
- django_cfg/modules/django_currency/clients/yahoo_client.py +0 -157
- /django_cfg/modules/{django_unfold → django_admin}/icons/README.md +0 -0
- /django_cfg/modules/{django_unfold → django_admin}/icons/__init__.py +0 -0
- /django_cfg/modules/{django_unfold → django_admin}/icons/constants.py +0 -0
- /django_cfg/modules/{django_unfold → django_admin}/icons/generate_icons.py +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,879 @@
|
|
1
|
+
"""
|
2
|
+
NowPayments currency parsers.
|
3
|
+
|
4
|
+
Handles parsing and normalization of NowPayments currency data.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from typing import Optional, Dict, Any, List
|
8
|
+
from django_cfg.modules.django_logger import get_logger
|
9
|
+
|
10
|
+
logger = get_logger("nowpayments_parsers")
|
11
|
+
|
12
|
+
|
13
|
+
class NowPaymentsCurrencyParser:
|
14
|
+
"""Parser for NowPayments currency data."""
|
15
|
+
|
16
|
+
def __init__(self):
|
17
|
+
"""Initialize currency parser."""
|
18
|
+
self.precise_patterns = self._get_precise_patterns()
|
19
|
+
self.fallback_patterns = self._get_fallback_patterns()
|
20
|
+
self.provider_code_patterns = self._get_provider_code_patterns()
|
21
|
+
self.network_suffixes = self._get_network_suffixes()
|
22
|
+
|
23
|
+
def parse_currency_code(
|
24
|
+
self,
|
25
|
+
provider_code: str,
|
26
|
+
currency_name: str,
|
27
|
+
network_code: Optional[str] = None,
|
28
|
+
ticker: str = ''
|
29
|
+
) -> tuple[str, Optional[str]]:
|
30
|
+
"""
|
31
|
+
Smart parsing using API data, prioritizing ticker field.
|
32
|
+
|
33
|
+
Uses ticker as primary source for base currency, then falls back to name parsing.
|
34
|
+
|
35
|
+
Examples:
|
36
|
+
- "1INCHBSC", "1Inch Network (BSC)", "bsc", "1inch" → ("1INCH", "bsc")
|
37
|
+
- "USDTERC20", "Tether USD (ERC-20)", "eth", "usdt" → ("USDT", "eth")
|
38
|
+
- "BTC", "Bitcoin", "btc", "btc" → ("BTC", "btc")
|
39
|
+
"""
|
40
|
+
# Skip currencies with empty network - they are duplicates
|
41
|
+
if network_code is not None and network_code.strip() == "":
|
42
|
+
return None, None # Skip this currency
|
43
|
+
|
44
|
+
# Priority 1: Use ticker if available and meaningful
|
45
|
+
if ticker and len(ticker.strip()) > 0:
|
46
|
+
base_currency = ticker.upper().strip()
|
47
|
+
return base_currency, network_code
|
48
|
+
|
49
|
+
# Priority 2: Extract from provider code patterns
|
50
|
+
base_currency = self.extract_base_currency_from_provider_code(provider_code)
|
51
|
+
if base_currency != provider_code:
|
52
|
+
return base_currency, network_code
|
53
|
+
|
54
|
+
# Priority 3: Extract from name using patterns
|
55
|
+
base_currency = self.extract_base_currency_from_name(currency_name, provider_code)
|
56
|
+
return base_currency, network_code
|
57
|
+
|
58
|
+
def extract_base_currency_from_name(self, currency_name: str, fallback_code: str) -> str:
|
59
|
+
"""Extract base currency from human-readable name using real API patterns."""
|
60
|
+
if not currency_name:
|
61
|
+
return fallback_code
|
62
|
+
|
63
|
+
name_lower = currency_name.lower()
|
64
|
+
|
65
|
+
# Check precise patterns first (most reliable)
|
66
|
+
for pattern, base in self.precise_patterns.items():
|
67
|
+
if pattern in name_lower:
|
68
|
+
return base
|
69
|
+
|
70
|
+
# Fallback patterns for edge cases
|
71
|
+
for pattern, base in self.fallback_patterns.items():
|
72
|
+
if pattern in name_lower:
|
73
|
+
return base
|
74
|
+
|
75
|
+
# Last resort: use the provider code as-is
|
76
|
+
return fallback_code
|
77
|
+
|
78
|
+
def extract_base_currency_from_provider_code(self, provider_code: str) -> str:
|
79
|
+
"""Extract base currency from NowPayments provider code patterns."""
|
80
|
+
if not provider_code:
|
81
|
+
return provider_code
|
82
|
+
|
83
|
+
code_upper = provider_code.upper()
|
84
|
+
|
85
|
+
# Check exact matches first
|
86
|
+
if code_upper in self.provider_code_patterns:
|
87
|
+
return self.provider_code_patterns[code_upper]
|
88
|
+
|
89
|
+
# Pattern matching for common suffixes
|
90
|
+
for suffix in self.network_suffixes:
|
91
|
+
if code_upper.endswith(suffix):
|
92
|
+
base_part = code_upper[:-len(suffix)]
|
93
|
+
if len(base_part) >= 2: # Ensure we have a meaningful base
|
94
|
+
return base_part
|
95
|
+
|
96
|
+
# Return original if no pattern matches
|
97
|
+
return provider_code
|
98
|
+
|
99
|
+
def generate_currency_name(
|
100
|
+
self,
|
101
|
+
base_currency_code: str,
|
102
|
+
network_code: Optional[str],
|
103
|
+
original_name: str
|
104
|
+
) -> str:
|
105
|
+
"""Generate proper currency name based on base currency and network."""
|
106
|
+
|
107
|
+
# Base currency display names
|
108
|
+
base_names = {
|
109
|
+
'BTC': 'Bitcoin',
|
110
|
+
'ETH': 'Ethereum',
|
111
|
+
'USDT': 'Tether USD',
|
112
|
+
'USDC': 'USD Coin',
|
113
|
+
'BNB': 'Binance Coin',
|
114
|
+
'ADA': 'Cardano',
|
115
|
+
'DOT': 'Polkadot',
|
116
|
+
'MATIC': 'Polygon',
|
117
|
+
'AVAX': 'Avalanche',
|
118
|
+
'SOL': 'Solana',
|
119
|
+
'LTC': 'Litecoin',
|
120
|
+
'BCH': 'Bitcoin Cash',
|
121
|
+
'XRP': 'Ripple',
|
122
|
+
'DOGE': 'Dogecoin',
|
123
|
+
'ATOM': 'Cosmos',
|
124
|
+
'LINK': 'Chainlink',
|
125
|
+
'UNI': 'Uniswap',
|
126
|
+
'AAVE': 'Aave',
|
127
|
+
'COMP': 'Compound',
|
128
|
+
'MKR': 'Maker',
|
129
|
+
'SNX': 'Synthetix',
|
130
|
+
'YFI': 'yearn.finance',
|
131
|
+
'SUSHI': 'SushiSwap',
|
132
|
+
'CRV': 'Curve DAO Token',
|
133
|
+
'BAL': 'Balancer',
|
134
|
+
'REN': 'Ren',
|
135
|
+
'KNC': 'Kyber Network',
|
136
|
+
'ZRX': '0x',
|
137
|
+
'BAT': 'Basic Attention Token',
|
138
|
+
'ENJ': 'Enjin Coin',
|
139
|
+
'MANA': 'Decentraland',
|
140
|
+
'SAND': 'The Sandbox',
|
141
|
+
'AXS': 'Axie Infinity',
|
142
|
+
'FTM': 'Fantom',
|
143
|
+
'ONE': 'Harmony',
|
144
|
+
'NEAR': 'NEAR Protocol',
|
145
|
+
'ALGO': 'Algorand',
|
146
|
+
'XTZ': 'Tezos',
|
147
|
+
'EOS': 'EOS',
|
148
|
+
'TRX': 'TRON',
|
149
|
+
'VET': 'VeChain',
|
150
|
+
'THETA': 'Theta Network',
|
151
|
+
'FIL': 'Filecoin',
|
152
|
+
'ICP': 'Internet Computer',
|
153
|
+
'HBAR': 'Hedera',
|
154
|
+
'EGLD': 'MultiversX',
|
155
|
+
'FLOW': 'Flow',
|
156
|
+
'XLM': 'Stellar',
|
157
|
+
'IOTA': 'IOTA',
|
158
|
+
'XMR': 'Monero',
|
159
|
+
'ZEC': 'Zcash',
|
160
|
+
'DASH': 'Dash',
|
161
|
+
'ETC': 'Ethereum Classic',
|
162
|
+
'BSV': 'Bitcoin SV',
|
163
|
+
'NEO': 'Neo',
|
164
|
+
'QTUM': 'Qtum',
|
165
|
+
'ZIL': 'Zilliqa',
|
166
|
+
'ONT': 'Ontology',
|
167
|
+
'ICX': 'ICON',
|
168
|
+
'WAVES': 'Waves',
|
169
|
+
'LSK': 'Lisk',
|
170
|
+
'NANO': 'Nano',
|
171
|
+
'DGB': 'DigiByte',
|
172
|
+
'RVN': 'Ravencoin',
|
173
|
+
'SC': 'Siacoin',
|
174
|
+
'DCR': 'Decred',
|
175
|
+
'ZEN': 'Horizen',
|
176
|
+
'KMD': 'Komodo',
|
177
|
+
'STRAT': 'Stratis',
|
178
|
+
'ARK': 'Ark',
|
179
|
+
'NXT': 'Nxt',
|
180
|
+
'BTS': 'BitShares',
|
181
|
+
'STEEM': 'Steem',
|
182
|
+
'SBD': 'Steem Dollars',
|
183
|
+
'GNT': 'Golem',
|
184
|
+
'REP': 'Augur',
|
185
|
+
'CVC': 'Civic',
|
186
|
+
'STORJ': 'Storj',
|
187
|
+
'FUN': 'FunFair',
|
188
|
+
'DNT': 'district0x',
|
189
|
+
'MCO': 'Monaco',
|
190
|
+
'MTL': 'Metal',
|
191
|
+
'PAY': 'TenX',
|
192
|
+
'REQ': 'Request Network',
|
193
|
+
'SALT': 'SALT',
|
194
|
+
'SUB': 'Substratum',
|
195
|
+
'POWR': 'Power Ledger',
|
196
|
+
'ENG': 'Enigma',
|
197
|
+
'BNT': 'Bancor',
|
198
|
+
'FUEL': 'Etherparty',
|
199
|
+
'MAID': 'MaidSafeCoin',
|
200
|
+
'AMP': 'Synereo',
|
201
|
+
'XAS': 'Asch',
|
202
|
+
'PPT': 'Populous',
|
203
|
+
'PART': 'Particl',
|
204
|
+
'CLOAK': 'CloakCoin',
|
205
|
+
'BLOCK': 'Blocknet',
|
206
|
+
'NAV': 'NavCoin',
|
207
|
+
'VIBE': 'VIBE',
|
208
|
+
'LUN': 'Lunyr',
|
209
|
+
'KIN': 'Kin',
|
210
|
+
'TUSD': 'TrueUSD',
|
211
|
+
'PAX': 'Paxos Standard',
|
212
|
+
'GUSD': 'Gemini Dollar',
|
213
|
+
'HUSD': 'HUSD',
|
214
|
+
'BUSD': 'Binance USD',
|
215
|
+
'DAI': 'Dai Stablecoin',
|
216
|
+
'FRAX': 'Frax',
|
217
|
+
'LUSD': 'Liquity USD',
|
218
|
+
'SUSD': 'sUSD',
|
219
|
+
'USDN': 'Neutrino USD',
|
220
|
+
'RSR': 'Reserve Rights',
|
221
|
+
'AMPL': 'Ampleforth',
|
222
|
+
'TRIBE': 'Tribe',
|
223
|
+
'FEI': 'Fei USD',
|
224
|
+
}
|
225
|
+
|
226
|
+
# Network display names
|
227
|
+
network_names = {
|
228
|
+
'eth': 'Ethereum',
|
229
|
+
'bsc': 'Binance Smart Chain',
|
230
|
+
'matic': 'Polygon',
|
231
|
+
'arbitrum': 'Arbitrum',
|
232
|
+
'optimism': 'Optimism',
|
233
|
+
'avalanche': 'Avalanche',
|
234
|
+
'fantom': 'Fantom',
|
235
|
+
'harmony': 'Harmony',
|
236
|
+
'moonbeam': 'Moonbeam',
|
237
|
+
'moonriver': 'Moonriver',
|
238
|
+
'celo': 'Celo',
|
239
|
+
'gnosis': 'Gnosis Chain',
|
240
|
+
'aurora': 'Aurora',
|
241
|
+
'cronos': 'Cronos',
|
242
|
+
'evmos': 'Evmos',
|
243
|
+
'milkomeda': 'Milkomeda',
|
244
|
+
'syscoin': 'Syscoin NEVM',
|
245
|
+
'metis': 'Metis',
|
246
|
+
'boba': 'Boba Network',
|
247
|
+
'fuse': 'Fuse',
|
248
|
+
'telos': 'Telos EVM',
|
249
|
+
'kcc': 'KuCoin Community Chain',
|
250
|
+
'heco': 'Huobi ECO Chain',
|
251
|
+
'okexchain': 'OKEx Chain',
|
252
|
+
'xdai': 'xDai',
|
253
|
+
'tron': 'TRON',
|
254
|
+
'trx': 'TRON',
|
255
|
+
'solana': 'Solana',
|
256
|
+
'sol': 'Solana',
|
257
|
+
'near': 'NEAR Protocol',
|
258
|
+
'algorand': 'Algorand',
|
259
|
+
'algo': 'Algorand',
|
260
|
+
'cardano': 'Cardano',
|
261
|
+
'ada': 'Cardano',
|
262
|
+
'polkadot': 'Polkadot',
|
263
|
+
'dot': 'Polkadot',
|
264
|
+
'kusama': 'Kusama',
|
265
|
+
'ksm': 'Kusama',
|
266
|
+
'cosmos': 'Cosmos Hub',
|
267
|
+
'atom': 'Cosmos Hub',
|
268
|
+
'osmosis': 'Osmosis',
|
269
|
+
'osmo': 'Osmosis',
|
270
|
+
'terra': 'Terra',
|
271
|
+
'luna': 'Terra',
|
272
|
+
'avalanche': 'Avalanche C-Chain',
|
273
|
+
'avax': 'Avalanche C-Chain',
|
274
|
+
'bitcoin': 'Bitcoin',
|
275
|
+
'btc': 'Bitcoin',
|
276
|
+
'litecoin': 'Litecoin',
|
277
|
+
'ltc': 'Litecoin',
|
278
|
+
'bitcoincash': 'Bitcoin Cash',
|
279
|
+
'bch': 'Bitcoin Cash',
|
280
|
+
'dogecoin': 'Dogecoin',
|
281
|
+
'doge': 'Dogecoin',
|
282
|
+
'zcash': 'Zcash',
|
283
|
+
'zec': 'Zcash',
|
284
|
+
'monero': 'Monero',
|
285
|
+
'xmr': 'Monero',
|
286
|
+
'dash': 'Dash',
|
287
|
+
'stellar': 'Stellar',
|
288
|
+
'xlm': 'Stellar',
|
289
|
+
'ripple': 'Ripple',
|
290
|
+
'xrp': 'Ripple',
|
291
|
+
'eos': 'EOS',
|
292
|
+
'tezos': 'Tezos',
|
293
|
+
'xtz': 'Tezos',
|
294
|
+
'iota': 'IOTA',
|
295
|
+
'miota': 'IOTA',
|
296
|
+
'neo': 'Neo',
|
297
|
+
'waves': 'Waves',
|
298
|
+
'lisk': 'Lisk',
|
299
|
+
'lsk': 'Lisk',
|
300
|
+
'nano': 'Nano',
|
301
|
+
'digibyte': 'DigiByte',
|
302
|
+
'dgb': 'DigiByte',
|
303
|
+
'ravencoin': 'Ravencoin',
|
304
|
+
'rvn': 'Ravencoin',
|
305
|
+
'siacoin': 'Siacoin',
|
306
|
+
'sc': 'Siacoin',
|
307
|
+
'decred': 'Decred',
|
308
|
+
'dcr': 'Decred',
|
309
|
+
'horizen': 'Horizen',
|
310
|
+
'zen': 'Horizen',
|
311
|
+
'komodo': 'Komodo',
|
312
|
+
'kmd': 'Komodo',
|
313
|
+
'stratis': 'Stratis',
|
314
|
+
'strat': 'Stratis',
|
315
|
+
'ark': 'Ark',
|
316
|
+
'nxt': 'Nxt',
|
317
|
+
'bitshares': 'BitShares',
|
318
|
+
'bts': 'BitShares',
|
319
|
+
'steem': 'Steem',
|
320
|
+
'vechain': 'VeChain',
|
321
|
+
'vet': 'VeChain',
|
322
|
+
'theta': 'Theta Network',
|
323
|
+
'filecoin': 'Filecoin',
|
324
|
+
'fil': 'Filecoin',
|
325
|
+
'internetcomputer': 'Internet Computer',
|
326
|
+
'icp': 'Internet Computer',
|
327
|
+
'hedera': 'Hedera',
|
328
|
+
'hbar': 'Hedera',
|
329
|
+
'elrond': 'MultiversX',
|
330
|
+
'egld': 'MultiversX',
|
331
|
+
'flow': 'Flow',
|
332
|
+
'zilliqa': 'Zilliqa',
|
333
|
+
'zil': 'Zilliqa',
|
334
|
+
'ontology': 'Ontology',
|
335
|
+
'ont': 'Ontology',
|
336
|
+
'icon': 'ICON',
|
337
|
+
'icx': 'ICON',
|
338
|
+
'qtum': 'Qtum',
|
339
|
+
'ethereumclassic': 'Ethereum Classic',
|
340
|
+
'etc': 'Ethereum Classic',
|
341
|
+
'bitcoinsv': 'Bitcoin SV',
|
342
|
+
'bsv': 'Bitcoin SV',
|
343
|
+
}
|
344
|
+
|
345
|
+
base_name = base_names.get(base_currency_code, base_currency_code)
|
346
|
+
|
347
|
+
if not network_code or network_code == base_currency_code.lower():
|
348
|
+
# Native currency on its own network
|
349
|
+
return base_name
|
350
|
+
|
351
|
+
network_name = network_names.get(network_code.lower(), network_code.title())
|
352
|
+
return f"{base_name} ({network_name})"
|
353
|
+
|
354
|
+
def _get_precise_patterns(self) -> Dict[str, str]:
|
355
|
+
"""Get precise patterns from real NowPayments API data."""
|
356
|
+
return {
|
357
|
+
# Stablecoins - most common
|
358
|
+
'tether usd': 'USDT',
|
359
|
+
'tether (': 'USDT', # "Tether (Arbitrum One)"
|
360
|
+
'tether ': 'USDT', # "Tether USD (Algorand)"
|
361
|
+
'usd coin': 'USDC', # "USD Coin (Ethereum)"
|
362
|
+
'usd coin bridged': 'USDC', # "USD Coin Bridged (Polygon)"
|
363
|
+
'trueusd': 'TUSD', # "TrueUSD (Tron)"
|
364
|
+
'binance usd': 'BUSD', # "Binance USD (Polygon)"
|
365
|
+
'paxos standard': 'PAX', # "Paxos Standard"
|
366
|
+
'gemini dollar': 'GUSD', # "Gemini Dollar"
|
367
|
+
|
368
|
+
# Major cryptocurrencies
|
369
|
+
'bitcoin': 'BTC',
|
370
|
+
'ethereum': 'ETH',
|
371
|
+
'cardano': 'ADA',
|
372
|
+
'dogecoin': 'DOGE',
|
373
|
+
'litecoin': 'LTC',
|
374
|
+
'bitcoin cash': 'BCH',
|
375
|
+
'ripple': 'XRP',
|
376
|
+
'polkadot': 'DOT',
|
377
|
+
'avalanche': 'AVAX',
|
378
|
+
'chainlink': 'LINK',
|
379
|
+
'uniswap': 'UNI',
|
380
|
+
'ethereum classic': 'ETC',
|
381
|
+
'stellar': 'XLM',
|
382
|
+
'monero': 'XMR',
|
383
|
+
'zcash': 'ZEC',
|
384
|
+
'dash': 'DASH',
|
385
|
+
'tezos': 'XTZ',
|
386
|
+
'cosmos': 'ATOM',
|
387
|
+
'algorand': 'ALGO',
|
388
|
+
'eos': 'EOS',
|
389
|
+
'tron': 'TRX',
|
390
|
+
'vechain': 'VET',
|
391
|
+
'theta network': 'THETA',
|
392
|
+
'filecoin': 'FIL',
|
393
|
+
'internet computer': 'ICP',
|
394
|
+
'hedera': 'HBAR',
|
395
|
+
'multiversx': 'EGLD',
|
396
|
+
'elrond': 'EGLD',
|
397
|
+
'flow': 'FLOW',
|
398
|
+
'near protocol': 'NEAR',
|
399
|
+
'solana': 'SOL',
|
400
|
+
'fantom': 'FTM',
|
401
|
+
'harmony': 'ONE',
|
402
|
+
'zilliqa': 'ZIL',
|
403
|
+
'ontology': 'ONT',
|
404
|
+
'icon': 'ICX',
|
405
|
+
'qtum': 'QTUM',
|
406
|
+
'waves': 'WAVES',
|
407
|
+
'lisk': 'LSK',
|
408
|
+
'nano': 'NANO',
|
409
|
+
'digibyte': 'DGB',
|
410
|
+
'ravencoin': 'RVN',
|
411
|
+
'siacoin': 'SC',
|
412
|
+
'decred': 'DCR',
|
413
|
+
'horizen': 'ZEN',
|
414
|
+
'komodo': 'KMD',
|
415
|
+
'stratis': 'STRAT',
|
416
|
+
'ark': 'ARK',
|
417
|
+
'nxt': 'NXT',
|
418
|
+
'bitshares': 'BTS',
|
419
|
+
'steem': 'STEEM',
|
420
|
+
|
421
|
+
# Exchange tokens
|
422
|
+
'binance coin': 'BNB',
|
423
|
+
'bnb': 'BNB',
|
424
|
+
'kucoin shares': 'KCS',
|
425
|
+
'huobi token': 'HT',
|
426
|
+
'okb': 'OKB',
|
427
|
+
'crypto.com coin': 'CRO',
|
428
|
+
'ftx token': 'FTT',
|
429
|
+
'binance usd': 'BUSD',
|
430
|
+
|
431
|
+
# Layer 1/2 tokens
|
432
|
+
'polygon': 'MATIC',
|
433
|
+
'matic network': 'MATIC',
|
434
|
+
'avalanche': 'AVAX',
|
435
|
+
'solana': 'SOL',
|
436
|
+
'chainlink': 'LINK',
|
437
|
+
'uniswap': 'UNI',
|
438
|
+
'aave': 'AAVE',
|
439
|
+
'compound': 'COMP',
|
440
|
+
'maker': 'MKR',
|
441
|
+
'synthetix': 'SNX',
|
442
|
+
'yearn.finance': 'YFI',
|
443
|
+
'sushiswap': 'SUSHI',
|
444
|
+
'curve dao token': 'CRV',
|
445
|
+
'balancer': 'BAL',
|
446
|
+
'ren': 'REN',
|
447
|
+
'kyber network': 'KNC',
|
448
|
+
'0x': 'ZRX',
|
449
|
+
'basic attention token': 'BAT',
|
450
|
+
'enjin coin': 'ENJ',
|
451
|
+
'decentraland': 'MANA',
|
452
|
+
'the sandbox': 'SAND',
|
453
|
+
'axie infinity': 'AXS',
|
454
|
+
|
455
|
+
# Other stablecoins
|
456
|
+
'dai stablecoin': 'DAI',
|
457
|
+
'frax': 'FRAX',
|
458
|
+
'liquity usd': 'LUSD',
|
459
|
+
'susd': 'SUSD',
|
460
|
+
'neutrino usd': 'USDN',
|
461
|
+
'reserve rights': 'RSR',
|
462
|
+
'ampleforth': 'AMPL',
|
463
|
+
'tribe': 'TRIBE',
|
464
|
+
'fei usd': 'FEI',
|
465
|
+
|
466
|
+
# Meme coins
|
467
|
+
'shiba inu': 'SHIB',
|
468
|
+
'dogecoin': 'DOGE',
|
469
|
+
'safemoon': 'SAFEMOON',
|
470
|
+
'floki inu': 'FLOKI',
|
471
|
+
'baby doge coin': 'BABYDOGE',
|
472
|
+
|
473
|
+
# Gaming tokens
|
474
|
+
'axie infinity': 'AXS',
|
475
|
+
'smooth love potion': 'SLP',
|
476
|
+
'the sandbox': 'SAND',
|
477
|
+
'decentraland': 'MANA',
|
478
|
+
'enjin coin': 'ENJ',
|
479
|
+
'gala': 'GALA',
|
480
|
+
'illuvium': 'ILV',
|
481
|
+
'star atlas': 'ATLAS',
|
482
|
+
'yield guild games': 'YGG',
|
483
|
+
|
484
|
+
# NFT tokens
|
485
|
+
'opensea': 'OS',
|
486
|
+
'looks rare': 'LOOKS',
|
487
|
+
'x2y2': 'X2Y2',
|
488
|
+
|
489
|
+
# Privacy coins
|
490
|
+
'monero': 'XMR',
|
491
|
+
'zcash': 'ZEC',
|
492
|
+
'dash': 'DASH',
|
493
|
+
'verge': 'XVG',
|
494
|
+
'beam': 'BEAM',
|
495
|
+
'grin': 'GRIN',
|
496
|
+
|
497
|
+
# Oracle tokens
|
498
|
+
'chainlink': 'LINK',
|
499
|
+
'band protocol': 'BAND',
|
500
|
+
'api3': 'API3',
|
501
|
+
'tellor': 'TRB',
|
502
|
+
|
503
|
+
# Storage tokens
|
504
|
+
'filecoin': 'FIL',
|
505
|
+
'storj': 'STORJ',
|
506
|
+
'siacoin': 'SC',
|
507
|
+
'arweave': 'AR',
|
508
|
+
|
509
|
+
# Cross-chain tokens
|
510
|
+
'thorchain': 'RUNE',
|
511
|
+
'cosmos': 'ATOM',
|
512
|
+
'polkadot': 'DOT',
|
513
|
+
'kusama': 'KSM',
|
514
|
+
'ren': 'REN',
|
515
|
+
'anyswap': 'ANY',
|
516
|
+
|
517
|
+
# Yield farming tokens
|
518
|
+
'yearn.finance': 'YFI',
|
519
|
+
'harvest finance': 'FARM',
|
520
|
+
'pickle finance': 'PICKLE',
|
521
|
+
'cream finance': 'CREAM',
|
522
|
+
'alpha finance lab': 'ALPHA',
|
523
|
+
|
524
|
+
# Lending tokens
|
525
|
+
'aave': 'AAVE',
|
526
|
+
'compound': 'COMP',
|
527
|
+
'maker': 'MKR',
|
528
|
+
'venus': 'XVS',
|
529
|
+
'justlend': 'JST',
|
530
|
+
|
531
|
+
# Insurance tokens
|
532
|
+
'nexus mutual': 'NXM',
|
533
|
+
'cover protocol': 'COVER',
|
534
|
+
'nsure network': 'NSURE',
|
535
|
+
|
536
|
+
# Prediction market tokens
|
537
|
+
'augur': 'REP',
|
538
|
+
'gnosis': 'GNO',
|
539
|
+
'polymarket': 'POLY',
|
540
|
+
|
541
|
+
# Social tokens
|
542
|
+
'rally': 'RLY',
|
543
|
+
'whale': 'WHALE',
|
544
|
+
'friends with benefits': 'FWB',
|
545
|
+
|
546
|
+
# Fan tokens
|
547
|
+
'chiliz': 'CHZ',
|
548
|
+
'socios.com': 'CHZ',
|
549
|
+
|
550
|
+
# Metaverse tokens
|
551
|
+
'decentraland': 'MANA',
|
552
|
+
'the sandbox': 'SAND',
|
553
|
+
'enjin coin': 'ENJ',
|
554
|
+
'bloktopia': 'BLOK',
|
555
|
+
'star atlas': 'ATLAS',
|
556
|
+
'illuvium': 'ILV',
|
557
|
+
'gala': 'GALA',
|
558
|
+
'axie infinity': 'AXS',
|
559
|
+
'smooth love potion': 'SLP',
|
560
|
+
'yield guild games': 'YGG',
|
561
|
+
'merit circle': 'MC',
|
562
|
+
'ultra': 'UOS',
|
563
|
+
'wax': 'WAXP',
|
564
|
+
'alien worlds': 'TLM',
|
565
|
+
'my neighbor alice': 'ALICE',
|
566
|
+
'radio caca': 'RACA',
|
567
|
+
'derace': 'DERC',
|
568
|
+
'vulcan forged': 'PYR',
|
569
|
+
'mobox': 'MBOX',
|
570
|
+
'cryptoblades': 'SKILL',
|
571
|
+
'thetan arena': 'THG',
|
572
|
+
'gods unchained': 'GODS',
|
573
|
+
'immutable x': 'IMX',
|
574
|
+
'ecomi': 'OMI',
|
575
|
+
'veve': 'VVV',
|
576
|
+
'efinity token': 'EFI',
|
577
|
+
'chromia': 'CHR',
|
578
|
+
'phantasma': 'SOUL',
|
579
|
+
'wax': 'WAXP',
|
580
|
+
'enjin coin': 'ENJ',
|
581
|
+
'flow': 'FLOW',
|
582
|
+
'dapper labs': 'FLOW',
|
583
|
+
'nba top shot': 'FLOW',
|
584
|
+
'cryptokitties': 'ETH',
|
585
|
+
'cryptopunks': 'ETH',
|
586
|
+
'bored ape yacht club': 'ETH',
|
587
|
+
'mutant ape yacht club': 'ETH',
|
588
|
+
'cool cats': 'ETH',
|
589
|
+
'world of women': 'ETH',
|
590
|
+
'pudgy penguins': 'ETH',
|
591
|
+
'azuki': 'ETH',
|
592
|
+
'clone x': 'ETH',
|
593
|
+
'moonbirds': 'ETH',
|
594
|
+
'otherdeeds for otherside': 'ETH',
|
595
|
+
'yuga labs': 'ETH',
|
596
|
+
}
|
597
|
+
|
598
|
+
def _get_fallback_patterns(self) -> Dict[str, str]:
|
599
|
+
"""Get fallback patterns for edge cases."""
|
600
|
+
return {
|
601
|
+
'usdt': 'USDT',
|
602
|
+
'usdc': 'USDC',
|
603
|
+
'tusd': 'TUSD',
|
604
|
+
'busd': 'BUSD',
|
605
|
+
'dai': 'DAI',
|
606
|
+
'frax': 'FRAX',
|
607
|
+
'btc': 'BTC',
|
608
|
+
'eth ': 'ETH',
|
609
|
+
'ada': 'ADA',
|
610
|
+
'doge': 'DOGE',
|
611
|
+
'matic': 'MATIC',
|
612
|
+
'avax': 'AVAX',
|
613
|
+
'sol': 'SOL',
|
614
|
+
'dot': 'DOT',
|
615
|
+
'atom': 'ATOM',
|
616
|
+
'near': 'NEAR',
|
617
|
+
'algo': 'ALGO',
|
618
|
+
'xtz': 'XTZ',
|
619
|
+
'eos': 'EOS',
|
620
|
+
'trx': 'TRX',
|
621
|
+
'xlm': 'XLM',
|
622
|
+
'xrp': 'XRP',
|
623
|
+
'ltc': 'LTC',
|
624
|
+
'bch': 'BCH',
|
625
|
+
'etc': 'ETC',
|
626
|
+
'xmr': 'XMR',
|
627
|
+
'zec': 'ZEC',
|
628
|
+
'dash': 'DASH',
|
629
|
+
'bnb': 'BNB',
|
630
|
+
'link': 'LINK',
|
631
|
+
'uni': 'UNI',
|
632
|
+
'aave': 'AAVE',
|
633
|
+
'comp': 'COMP',
|
634
|
+
'mkr': 'MKR',
|
635
|
+
'snx': 'SNX',
|
636
|
+
'yfi': 'YFI',
|
637
|
+
'sushi': 'SUSHI',
|
638
|
+
'crv': 'CRV',
|
639
|
+
'bal': 'BAL',
|
640
|
+
'ren': 'REN',
|
641
|
+
'knc': 'KNC',
|
642
|
+
'zrx': 'ZRX',
|
643
|
+
'bat': 'BAT',
|
644
|
+
'enj': 'ENJ',
|
645
|
+
'mana': 'MANA',
|
646
|
+
'sand': 'SAND',
|
647
|
+
'axs': 'AXS',
|
648
|
+
'ftm': 'FTM',
|
649
|
+
'one': 'ONE',
|
650
|
+
'zil': 'ZIL',
|
651
|
+
'ont': 'ONT',
|
652
|
+
'icx': 'ICX',
|
653
|
+
'qtum': 'QTUM',
|
654
|
+
'waves': 'WAVES',
|
655
|
+
'lsk': 'LSK',
|
656
|
+
'nano': 'NANO',
|
657
|
+
'dgb': 'DGB',
|
658
|
+
'rvn': 'RVN',
|
659
|
+
'sc': 'SC',
|
660
|
+
'dcr': 'DCR',
|
661
|
+
'zen': 'ZEN',
|
662
|
+
'kmd': 'KMD',
|
663
|
+
'strat': 'STRAT',
|
664
|
+
'ark': 'ARK',
|
665
|
+
'nxt': 'NXT',
|
666
|
+
'bts': 'BTS',
|
667
|
+
'steem': 'STEEM',
|
668
|
+
'vet': 'VET',
|
669
|
+
'theta': 'THETA',
|
670
|
+
'fil': 'FIL',
|
671
|
+
'icp': 'ICP',
|
672
|
+
'hbar': 'HBAR',
|
673
|
+
'egld': 'EGLD',
|
674
|
+
'flow': 'FLOW',
|
675
|
+
'iota': 'IOTA',
|
676
|
+
'shib': 'SHIB',
|
677
|
+
'floki': 'FLOKI',
|
678
|
+
'safemoon': 'SAFEMOON',
|
679
|
+
'babydoge': 'BABYDOGE',
|
680
|
+
'slp': 'SLP',
|
681
|
+
'gala': 'GALA',
|
682
|
+
'ilv': 'ILV',
|
683
|
+
'atlas': 'ATLAS',
|
684
|
+
'ygg': 'YGG',
|
685
|
+
'rune': 'RUNE',
|
686
|
+
'ksm': 'KSM',
|
687
|
+
'any': 'ANY',
|
688
|
+
'farm': 'FARM',
|
689
|
+
'pickle': 'PICKLE',
|
690
|
+
'cream': 'CREAM',
|
691
|
+
'alpha': 'ALPHA',
|
692
|
+
'xvs': 'XVS',
|
693
|
+
'jst': 'JST',
|
694
|
+
'nxm': 'NXM',
|
695
|
+
'cover': 'COVER',
|
696
|
+
'nsure': 'NSURE',
|
697
|
+
'rep': 'REP',
|
698
|
+
'gno': 'GNO',
|
699
|
+
'poly': 'POLY',
|
700
|
+
'rly': 'RLY',
|
701
|
+
'whale': 'WHALE',
|
702
|
+
'fwb': 'FWB',
|
703
|
+
'chz': 'CHZ',
|
704
|
+
'blok': 'BLOK',
|
705
|
+
'mc': 'MC',
|
706
|
+
'uos': 'UOS',
|
707
|
+
'waxp': 'WAXP',
|
708
|
+
'tlm': 'TLM',
|
709
|
+
'alice': 'ALICE',
|
710
|
+
'raca': 'RACA',
|
711
|
+
'derc': 'DERC',
|
712
|
+
'pyr': 'PYR',
|
713
|
+
'mbox': 'MBOX',
|
714
|
+
'skill': 'SKILL',
|
715
|
+
'thg': 'THG',
|
716
|
+
'gods': 'GODS',
|
717
|
+
'imx': 'IMX',
|
718
|
+
'omi': 'OMI',
|
719
|
+
'vvv': 'VVV',
|
720
|
+
'efi': 'EFI',
|
721
|
+
'chr': 'CHR',
|
722
|
+
'soul': 'SOUL',
|
723
|
+
}
|
724
|
+
|
725
|
+
def _get_provider_code_patterns(self) -> Dict[str, str]:
|
726
|
+
"""Get NowPayments provider code patterns."""
|
727
|
+
return {
|
728
|
+
# Stablecoins with network suffixes
|
729
|
+
'USDTERC20': 'USDT',
|
730
|
+
'USDTTRC20': 'USDT',
|
731
|
+
'USDTBSC': 'USDT',
|
732
|
+
'USDTMATIC': 'USDT',
|
733
|
+
'USDTARB': 'USDT',
|
734
|
+
'USDTALGO': 'USDT',
|
735
|
+
'USDTARC20': 'USDT', # Avalanche
|
736
|
+
'USDTOP': 'USDT', # Optimism
|
737
|
+
'USDTSOL': 'USDT', # Solana
|
738
|
+
'USDTTON': 'USDT', # TON
|
739
|
+
'USDTNEAR': 'USDT', # NEAR
|
740
|
+
'USDTEOS': 'USDT', # EOS
|
741
|
+
'USDTDOT': 'USDT', # Polkadot
|
742
|
+
'USDTCELO': 'USDT', # Celo
|
743
|
+
'USDTKAVA': 'USDT', # Kava
|
744
|
+
'USDTXTZ': 'USDT', # Tezos
|
745
|
+
|
746
|
+
# USDC variants
|
747
|
+
'USDCERC20': 'USDC',
|
748
|
+
'USDCBSC': 'USDC',
|
749
|
+
'USDCMATIC': 'USDC',
|
750
|
+
'USDCARB': 'USDC',
|
751
|
+
'USDCALGO': 'USDC',
|
752
|
+
'USDCARC20': 'USDC', # Avalanche
|
753
|
+
'USDCOP': 'USDC', # Optimism
|
754
|
+
'USDCSOL': 'USDC', # Solana
|
755
|
+
'USDCBASE': 'USDC', # Base
|
756
|
+
'USDCKCC': 'USDC', # KCC
|
757
|
+
'USDCXLM': 'USDC', # Stellar
|
758
|
+
|
759
|
+
# ETH variants
|
760
|
+
'ETHBSC': 'ETH',
|
761
|
+
'ETHARB': 'ETH',
|
762
|
+
'ETHBASE': 'ETH',
|
763
|
+
'ETHLNA': 'ETH', # Linea
|
764
|
+
|
765
|
+
# Other common patterns
|
766
|
+
'BTCBSC': 'BTC', # Wrapped BTC
|
767
|
+
'WBTC': 'BTC', # Wrapped Bitcoin
|
768
|
+
'WETH': 'ETH', # Wrapped Ethereum
|
769
|
+
|
770
|
+
# Network-specific tokens with suffixes
|
771
|
+
'BNBBSC': 'BNB',
|
772
|
+
'MATICMATIC': 'MATIC',
|
773
|
+
'AVAXARC20': 'AVAX',
|
774
|
+
'SOLANASOL': 'SOL',
|
775
|
+
|
776
|
+
# Additional patterns from NowPayments
|
777
|
+
'1INCHBSC': '1INCH',
|
778
|
+
'1INCHERC20': '1INCH',
|
779
|
+
'AAVEERC20': 'AAVE',
|
780
|
+
'AAVEBSC': 'AAVE',
|
781
|
+
'ADABSC': 'ADA',
|
782
|
+
'ALGOERC20': 'ALGO',
|
783
|
+
'APEERC20': 'APE',
|
784
|
+
'APEBSC': 'APE',
|
785
|
+
'ATOMCOSMOS': 'ATOM',
|
786
|
+
'AVAXBSC': 'AVAX',
|
787
|
+
'AXSERC20': 'AXS',
|
788
|
+
'AXSBSC': 'AXS',
|
789
|
+
'BATERC20': 'BAT',
|
790
|
+
'BATBSC': 'BAT',
|
791
|
+
'BCHBSC': 'BCH',
|
792
|
+
'BNBERC20': 'BNB',
|
793
|
+
'BUSDBSC': 'BUSD',
|
794
|
+
'BUSDERC20': 'BUSD',
|
795
|
+
'CAKEBSC': 'CAKE',
|
796
|
+
'COMPBSC': 'COMP',
|
797
|
+
'COMPERC20': 'COMP',
|
798
|
+
'CRVERC20': 'CRV',
|
799
|
+
'CRVBSC': 'CRV',
|
800
|
+
'DAIBSC': 'DAI',
|
801
|
+
'DAIERC20': 'DAI',
|
802
|
+
'DOGEERC20': 'DOGE',
|
803
|
+
'DOGEBSC': 'DOGE',
|
804
|
+
'DOTBSC': 'DOT',
|
805
|
+
'DOTERC20': 'DOT',
|
806
|
+
'ENJERC20': 'ENJ',
|
807
|
+
'ENJBSC': 'ENJ',
|
808
|
+
'ETCBSC': 'ETC',
|
809
|
+
'ETCERC20': 'ETC',
|
810
|
+
'FILBSC': 'FIL',
|
811
|
+
'FILERC20': 'FIL',
|
812
|
+
'FTMBSC': 'FTM',
|
813
|
+
'FTMERC20': 'FTM',
|
814
|
+
'GALAERC20': 'GALA',
|
815
|
+
'GALABSC': 'GALA',
|
816
|
+
'GRTERC20': 'GRT',
|
817
|
+
'GRTBSC': 'GRT',
|
818
|
+
'ICPERC20': 'ICP',
|
819
|
+
'ICPBSC': 'ICP',
|
820
|
+
'LINKERC20': 'LINK',
|
821
|
+
'LINKBSC': 'LINK',
|
822
|
+
'LTCBSC': 'LTC',
|
823
|
+
'LTCERC20': 'LTC',
|
824
|
+
'MANAERC20': 'MANA',
|
825
|
+
'MANABSC': 'MANA',
|
826
|
+
'MKRBSC': 'MKR',
|
827
|
+
'MKRERC20': 'MKR',
|
828
|
+
'NEARERC20': 'NEAR',
|
829
|
+
'NEARBSC': 'NEAR',
|
830
|
+
'ONEERC20': 'ONE',
|
831
|
+
'ONEBSC': 'ONE',
|
832
|
+
'SANDERC20': 'SAND',
|
833
|
+
'SANDBSC': 'SAND',
|
834
|
+
'SHIBERC20': 'SHIB',
|
835
|
+
'SHIBBSC': 'SHIB',
|
836
|
+
'SNXERC20': 'SNX',
|
837
|
+
'SNXBSC': 'SNX',
|
838
|
+
'SOLERC20': 'SOL',
|
839
|
+
'SOLBSC': 'SOL',
|
840
|
+
'SUSHIERC20': 'SUSHI',
|
841
|
+
'SUSHIBSC': 'SUSHI',
|
842
|
+
'TRXBSC': 'TRX',
|
843
|
+
'TRXERC20': 'TRX',
|
844
|
+
'TUSDTRC20': 'TUSD',
|
845
|
+
'TUSDBSC': 'TUSD',
|
846
|
+
'TUSDERC20': 'TUSD',
|
847
|
+
'UNIERC20': 'UNI',
|
848
|
+
'UNIBSC': 'UNI',
|
849
|
+
'VETBSC': 'VET',
|
850
|
+
'VETERC20': 'VET',
|
851
|
+
'XLMBSC': 'XLM',
|
852
|
+
'XLMERC20': 'XLM',
|
853
|
+
'XRPBSC': 'XRP',
|
854
|
+
'XRPERC20': 'XRP',
|
855
|
+
'XTZXTZ': 'XTZ',
|
856
|
+
'YFIIERC20': 'YFI',
|
857
|
+
'YFIIBSC': 'YFI',
|
858
|
+
'ZRXERC20': 'ZRX',
|
859
|
+
'ZRXBSC': 'ZRX',
|
860
|
+
}
|
861
|
+
|
862
|
+
def _get_network_suffixes(self) -> List[str]:
|
863
|
+
"""Get common network suffixes for pattern matching."""
|
864
|
+
return [
|
865
|
+
'ERC20', 'TRC20', 'BSC', 'MATIC', 'ARB', 'ALGO', 'ARC20',
|
866
|
+
'OP', 'SOL', 'TON', 'NEAR', 'EOS', 'DOT', 'CELO', 'KAVA',
|
867
|
+
'XTZ', 'BASE', 'KCC', 'XLM', 'LNA', 'AVAX', 'FTM', 'ONE',
|
868
|
+
'HARMONY', 'MOONBEAM', 'MOONRIVER', 'GNOSIS', 'AURORA',
|
869
|
+
'CRONOS', 'EVMOS', 'MILKOMEDA', 'SYSCOIN', 'METIS', 'BOBA',
|
870
|
+
'FUSE', 'TELOS', 'HECO', 'OKEX', 'XDAI', 'COSMOS', 'OSMOSIS',
|
871
|
+
'TERRA', 'KUSAMA', 'POLKADOT', 'CARDANO', 'STELLAR', 'RIPPLE',
|
872
|
+
'BITCOIN', 'LITECOIN', 'BITCOINCASH', 'DOGECOIN', 'ZCASH',
|
873
|
+
'MONERO', 'DASH', 'TEZOS', 'IOTA', 'NEO', 'WAVES', 'LISK',
|
874
|
+
'NANO', 'DIGIBYTE', 'RAVENCOIN', 'SIACOIN', 'DECRED',
|
875
|
+
'HORIZEN', 'KOMODO', 'STRATIS', 'ARK', 'NXT', 'BITSHARES',
|
876
|
+
'STEEM', 'VECHAIN', 'THETA', 'FILECOIN', 'INTERNETCOMPUTER',
|
877
|
+
'HEDERA', 'ELROND', 'FLOW', 'ZILLIQA', 'ONTOLOGY', 'ICON',
|
878
|
+
'QTUM', 'ETHEREUMCLASSIC', 'BITCOINSV'
|
879
|
+
]
|