71 lines
3.0 KiB
Python
71 lines
3.0 KiB
Python
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()
|
|
|