from web3 import Web3
NAV_CALCULATOR = "0x..."
PORTFOLIO_SAFE = "0x..."
SHARES = "0x..."
ASSET = [{"name": "asset", "type": "address"}, {"name": "symbol", "type": "string"}, {"name": "decimals", "type": "uint8"}]
nav_abi = [{
"name": "getAccountNav", "type": "function", "stateMutability": "view",
"inputs": [{"name": "account", "type": "address"}, {"name": "quoteAsset", "type": "address"}],
"outputs": [{"type": "tuple", "components": [
{"name": "value", "type": "int256"},
{"name": "quoteAsset", "type": "tuple", "components": ASSET},
{"name": "timestamp", "type": "uint64"},
{"name": "stalePriceAssets", "type": "tuple[]", "components": ASSET},
{"name": "sequencerDown", "type": "bool"},
{"name": "quoteAssetStale", "type": "bool"},
{"name": "irregularPriceAssets", "type": "tuple[]", "components": ASSET},
{"name": "quoteAssetIrregular", "type": "bool"},
{"name": "monitorsUnhealthyPriceAssets", "type": "tuple[]", "components": ASSET},
]}],
}]
shares_abi = [{"name": "totalSupply", "type": "function", "stateMutability": "view",
"inputs": [], "outputs": [{"type": "uint256"}]}]
w3 = Web3(Web3.HTTPProvider("https://eth.llamarpc.com"))
calc = w3.eth.contract(address=NAV_CALCULATOR, abi=nav_abi)
shares = w3.eth.contract(address=SHARES, abi=shares_abi)
nav = calc.functions.getAccountNav(PORTFOLIO_SAFE, "0x0000000000000000000000000000000000000000").call()
supply = shares.functions.totalSupply().call()
share_price = nav[0] * 10**18 // supply