feat: add florida module for unified hedging and monitoring
This commit is contained in:
87
florida/tools/fix_liquidity.py
Normal file
87
florida/tools/fix_liquidity.py
Normal file
@ -0,0 +1,87 @@
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
from web3 import Web3
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Add project root to path
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
project_root = os.path.dirname(os.path.dirname(current_dir)) # K:\Projects\uniswap_auto_clp
|
||||
sys.path.append(project_root)
|
||||
|
||||
# Load env from florida/.env or root .env
|
||||
load_dotenv(os.path.join(os.path.dirname(current_dir), '.env'))
|
||||
|
||||
RPC_URL = os.environ.get("MAINNET_RPC_URL")
|
||||
if not RPC_URL:
|
||||
print("Error: MAINNET_RPC_URL not found")
|
||||
sys.exit(1)
|
||||
|
||||
w3 = Web3(Web3.HTTPProvider(RPC_URL))
|
||||
if not w3.is_connected():
|
||||
print("Error: Could not connect to RPC")
|
||||
sys.exit(1)
|
||||
|
||||
NPM_ADDRESS = "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"
|
||||
NPM_ABI = [
|
||||
{
|
||||
"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
|
||||
"name": "positions",
|
||||
"outputs": [
|
||||
{"internalType": "uint96", "name": "nonce", "type": "uint96"},
|
||||
{"internalType": "address", "name": "operator", "type": "address"},
|
||||
{"internalType": "address", "name": "token0", "type": "address"},
|
||||
{"internalType": "address", "name": "token1", "type": "address"},
|
||||
{"internalType": "uint24", "name": "fee", "type": "uint24"},
|
||||
{"internalType": "int24", "name": "tickLower", "type": "int24"},
|
||||
{"internalType": "int24", "name": "tickUpper", "type": "int24"},
|
||||
{"internalType": "uint128", "name": "liquidity", "type": "uint128"},
|
||||
{"internalType": "uint256", "name": "feeGrowthInside0LastX128", "type": "uint256"},
|
||||
{"internalType": "uint256", "name": "feeGrowthInside1LastX128", "type": "uint256"},
|
||||
{"internalType": "uint128", "name": "tokensOwed0", "type": "uint128"},
|
||||
{"internalType": "uint128", "name": "tokensOwed1", "type": "uint128"}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
}
|
||||
]
|
||||
|
||||
npm = w3.eth.contract(address=NPM_ADDRESS, abi=NPM_ABI)
|
||||
|
||||
STATUS_FILE = os.path.join(os.path.dirname(current_dir), 'hedge_status.json')
|
||||
|
||||
def fix_liquidity():
|
||||
if not os.path.exists(STATUS_FILE):
|
||||
print(f"Status file not found: {STATUS_FILE}")
|
||||
return
|
||||
|
||||
with open(STATUS_FILE, 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
updated = False
|
||||
for entry in data:
|
||||
if entry.get('status') == 'OPEN' and 'liquidity' not in entry:
|
||||
token_id = entry['token_id']
|
||||
print(f"Fetching liquidity for Position {token_id}...")
|
||||
|
||||
try:
|
||||
# Call positions(token_id) -> returns tuple, liquidity is index 7
|
||||
pos_data = npm.functions.positions(token_id).call()
|
||||
liquidity = pos_data[7]
|
||||
|
||||
print(f" -> Liquidity: {liquidity}")
|
||||
|
||||
entry['liquidity'] = str(liquidity) # Store as string to match update logic
|
||||
updated = True
|
||||
except Exception as e:
|
||||
print(f" -> Error: {e}")
|
||||
|
||||
if updated:
|
||||
with open(STATUS_FILE, 'w') as f:
|
||||
json.dump(data, f, indent=2)
|
||||
print("Updated hedge_status.json")
|
||||
else:
|
||||
print("No OPEN positions needing liquidity update.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
fix_liquidity()
|
||||
Reference in New Issue
Block a user