import os from eth_account import Account from hyperliquid.exchange import Exchange from hyperliquid.utils import constants from dotenv import load_dotenv from datetime import datetime, timedelta import json # Load environment variables from a .env file if it exists load_dotenv() def create_and_authorize_agent(): """ Creates and authorizes a new agent key pair using your main wallet, following the correct SDK pattern. """ # --- STEP 1: Load your main wallet --- # This is the wallet that holds the funds and has been activated on Hyperliquid. main_wallet_private_key = os.environ.get("MAIN_WALLET_PRIVATE_KEY") if not main_wallet_private_key: main_wallet_private_key = input("Please enter the private key of your MAIN trading wallet: ") try: main_account = Account.from_key(main_wallet_private_key) print(f"\nāœ… Loaded main wallet: {main_account.address}") except Exception as e: print(f"āŒ Error: Invalid main wallet private key provided. Details: {e}") return # --- STEP 2: Initialize the Exchange with your MAIN account --- # This object is used to send the authorization transaction. exchange = Exchange(main_account, constants.MAINNET_API_URL, account_address=main_account.address) # --- STEP 3: Create and approve the agent with a specific name --- # agent name must be between 1 and 16 characters long agent_name = "executor_swing" print(f"\nšŸ”— Authorizing a new agent named '{agent_name}'...") try: # --- FIX: Pass only the agent name string to the function --- approve_result, agent_private_key = exchange.approve_agent(agent_name) if approve_result.get("status") == "ok": # Derive the agent's public address from the key we received agent_account = Account.from_key(agent_private_key) print("\nšŸŽ‰ SUCCESS! Agent has been authorized on-chain.") print("="*50) print("SAVE THESE SECURELY. This is what your bot will use.") print(f" Name: {agent_name}") print(f" (Agent has a default long-term validity)") print(f"šŸ”‘ Agent Private Key: {agent_private_key}") print(f"šŸ  Agent Address: {agent_account.address}") print("="*50) print("\nYou can now set this private key as the AGENT_PRIVATE_KEY environment variable.") else: print("\nāŒ ERROR: Agent authorization failed.") print(" Response:", approve_result) if "Vault may not perform this action" in str(approve_result): print("\n ACTION REQUIRED: This error means your main wallet (vault) has not been activated. " "Please go to the Hyperliquid website, connect this wallet, and make a deposit to activate it.") except Exception as e: print(f"\nAn unexpected error occurred during authorization: {e}") if __name__ == "__main__": create_and_authorize_agent()