Browse Source

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 5 ngày trước cách đây
mục cha
commit
9b45b66e00
2 tập tin đã thay đổi với 14 bổ sung11 xóa
  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