Copy from web3 import Web3
from typing import Dict, Any
def get_liquidity_state(w3: Web3, pool_address: str) -> Dict[str, Any]:
"""
Get current liquidity state from the pool.
"""
pool_abi = [
{"name": "getReserves", "type": "function", "inputs": [],
"outputs": [{"name": "reserveX", "type": "uint256"}, {"name": "reserveY", "type": "uint256"}],
"stateMutability": "view"},
{"name": "getBalances", "type": "function", "inputs": [],
"outputs": [{"name": "amountX", "type": "uint256"}, {"name": "amountY", "type": "uint256"}],
"stateMutability": "view"},
{"name": "getTokenX", "type": "function", "inputs": [],
"outputs": [{"name": "", "type": "address"}],
"stateMutability": "view"},
{"name": "getTokenY", "type": "function", "inputs": [],
"outputs": [{"name": "", "type": "address"}],
"stateMutability": "view"},
]
pool = w3.eth.contract(address=w3.to_checksum_address(pool_address), abi=pool_abi)
# Get current state
reserve_x, reserve_y = pool.functions.getReserves().call()
balance_x, balance_y = pool.functions.getBalances().call()
token_x = pool.functions.getTokenX().call()
token_y = pool.functions.getTokenY().call()
return {
'token_x': token_x,
'token_y': token_y,
'reserves': {'x': reserve_x, 'y': reserve_y},
'balances': {'x': balance_x, 'y': balance_y},
'unallocated': {'x': balance_x - reserve_x, 'y': balance_y - reserve_y}
}
# Usage
if __name__ == "__main__":
w3 = Web3(Web3.HTTPProvider("https://rpc3.monad.xyz"))
result = get_liquidity_state(w3, "0x...poolAddress")
print(f"Token X: {result['token_x']}")
print(f"Token Y: {result['token_y']}")
print(f"Reserves: X={result['reserves']['x']}, Y={result['reserves']['y']}")
print(f"Balances: X={result['balances']['x']}, Y={result['balances']['y']}")
print(f"Unallocated: X={result['unallocated']['x']}, Y={result['unallocated']['y']}")