Explorar o código

Refactor Hyperliquid API configuration for private key support - Updated the configuration to use 'privateKey' instead of 'apiKey' for Hyperliquid, ensuring compatibility with CCXT implementation. Added backward compatibility for existing setups and improved logging for sensitive information.

Carles Sentis hai 5 días
pai
achega
9b45b66e00
Modificáronse 2 ficheiros con 14 adicións e 11 borrados
  1. 3 5
      src/config.py
  2. 11 6
      src/hyperliquid_client.py

+ 3 - 5
src/config.py

@@ -96,16 +96,14 @@ class Config:
         }
         
         # Add authentication if available
+        # Hyperliquid CCXT implementation expects 'privateKey' credential
         if cls.HYPERLIQUID_PRIVATE_KEY:
-            config['apiKey'] = cls.HYPERLIQUID_PRIVATE_KEY
+            config['privateKey'] = cls.HYPERLIQUID_PRIVATE_KEY
+            config['apiKey'] = cls.HYPERLIQUID_PRIVATE_KEY  # Keep for backward compatibility
             
         if cls.HYPERLIQUID_SECRET_KEY:
             config['secret'] = cls.HYPERLIQUID_SECRET_KEY
             
-        # Legacy support for private_key parameter
-        if cls.HYPERLIQUID_PRIVATE_KEY:
-            config['private_key'] = cls.HYPERLIQUID_PRIVATE_KEY
-            
         return config
     
     @classmethod

+ 11 - 6
src/hyperliquid_client.py

@@ -32,6 +32,9 @@ class HyperliquidClient:
             self.config['sandbox'] = use_testnet
         
         # Ensure proper CCXT format
+        if not self.config.get('privateKey') and Config.HYPERLIQUID_PRIVATE_KEY:
+            self.config['privateKey'] = Config.HYPERLIQUID_PRIVATE_KEY
+            
         if not self.config.get('apiKey') and Config.HYPERLIQUID_PRIVATE_KEY:
             self.config['apiKey'] = Config.HYPERLIQUID_PRIVATE_KEY
             
@@ -42,19 +45,19 @@ class HyperliquidClient:
         self.sync_client = None
         self.async_client = None
         
-        if self.config.get('apiKey'):
+        if self.config.get('privateKey') or self.config.get('apiKey'):
             try:
                 # Log configuration (safely)
                 logger.info(f"🔧 Initializing Hyperliquid client with config: {self._safe_config_log()}")
                 
-                # Initialize with standard CCXT format
+                # Initialize with Hyperliquid-specific CCXT format
                 ccxt_config = {
-                    'apiKey': self.config['apiKey'],
+                    'privateKey': self.config.get('privateKey') or self.config.get('apiKey'),
                     'testnet': self.config.get('testnet', False),
                     'sandbox': self.config.get('sandbox', False),
                 }
                 
-                # Add secret if available
+                # Add secret if available (though Hyperliquid might not need it)
                 if self.config.get('secret'):
                     ccxt_config['secret'] = self.config['secret']
                 
@@ -81,10 +84,10 @@ class HyperliquidClient:
         safe_config = self.config.copy()
         if 'apiKey' in safe_config and safe_config['apiKey']:
             safe_config['apiKey'] = f"{safe_config['apiKey'][:8]}..."
+        if 'privateKey' in safe_config and safe_config['privateKey']:
+            safe_config['privateKey'] = f"{safe_config['privateKey'][:8]}..."
         if 'secret' in safe_config and safe_config['secret']:
             safe_config['secret'] = f"{safe_config['secret'][:8]}..."
-        if 'private_key' in safe_config and safe_config['private_key']:
-            safe_config['private_key'] = f"{safe_config['private_key'][:8]}..."
         return safe_config
     
     def _safe_ccxt_config_log(self, config: dict) -> dict:
@@ -92,6 +95,8 @@ class HyperliquidClient:
         safe_config = config.copy()
         if 'apiKey' in safe_config and safe_config['apiKey']:
             safe_config['apiKey'] = f"{safe_config['apiKey'][:10]}..."
+        if 'privateKey' in safe_config and safe_config['privateKey']:
+            safe_config['privateKey'] = f"{safe_config['privateKey'][:10]}..."
         if 'secret' in safe_config and safe_config['secret']:
             safe_config['secret'] = f"{safe_config['secret'][:10]}..."
         return safe_config