@net-protocol/score 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/abis/upvote-app.json","../src/abis/multi-version-uniswap-bulk-pool-finder.json","../src/abis/multi-version-uniswap-pool-info-retriever.json","../src/abis/user-upvote.json","../src/constants.ts","../src/hooks/useUpvotes.ts","../src/utils/strategyUtils.ts","../src/utils/scoreKeyUtils.ts","../src/hooks/useUpvotesBatch.ts","../src/hooks/useTokenUpvotes.ts","../src/hooks/useUserUpvotesGiven.ts","../src/hooks/useUserUpvotesReceived.ts","../src/hooks/useUserUpvotesGivenPerTokenBatch.ts","../src/hooks/useUserUpvotesReceivedPerTokenBatch.ts","../src/hooks/useUpvoteUser.ts","../src/hooks/useUpvotePrice.ts","../src/utils/poolDiscovery.ts","../src/hooks/useDiscoverPools.ts"],"names":["useReadContract","getStorageKeyBytes","keccak256","encodePacked","useMemo","useWriteContract","getBaseDataSuffix","formatEther","readContract","usePublicClient","useQuery","skipToken"],"mappings":"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","file":"react.js","sourcesContent":["[\n { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n {\n \"type\": \"function\",\n \"name\": \"CORE_CONTRACT\",\n \"inputs\": [],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"contract Score\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"LEGACY_CONTRACT\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract ILegacyUpvoteContract\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUpvotesWithLegacy\",\n \"inputs\": [\n {\n \"name\": \"upvoteKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"string\", \"internalType\": \"string\" }],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n { \"name\": \"newOwner\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvote\",\n \"inputs\": [\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"internalType\": \"contract IScoreStrategy\"\n },\n { \"name\": \"scoreKey\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n { \"name\": \"scoreDelta\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawETH\",\n \"inputs\": [{ \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n { \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n { \"name\": \"owner\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] }\n]\n","[\n {\n \"type\": \"function\",\n \"name\": \"V2_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"V3_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"V4_POOL_MANAGER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_checkV4PoolExternal\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [{ \"name\": \"exists\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolsMultiVersion\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct MultiVersionUniswapBulkPoolFinder.PoolFinderParams\",\n \"components\": [\n {\n \"name\": \"tokenAs\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"tokenBs\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"fees\", \"type\": \"uint24[]\", \"internalType\": \"uint24[]\" },\n {\n \"name\": \"v4TickSpacings\",\n \"type\": \"int24[]\",\n \"internalType\": \"int24[]\"\n },\n {\n \"name\": \"v4Hooks\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"pools\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct MultiVersionUniswapBulkPoolFinder.PoolDiscovery[]\",\n \"components\": [\n {\n \"name\": \"pairIndex\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n { \"name\": \"version\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n {\n \"name\": \"poolAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n { \"name\": \"hooks\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"name\": \"count\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"stateMutability\": \"view\"\n }\n]\n","[\n {\n \"type\": \"function\",\n \"name\": \"V4_POOL_MANAGER\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_getV4Liquidity\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_getV4Slot0\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolsFullInfoMultiVersion\",\n \"inputs\": [\n {\n \"name\": \"v2PoolAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"v3PoolAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"v4PoolKeys\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PoolKey[]\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"baseToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct MultiVersionPoolInfoRetriever.PoolFullInfo[]\",\n \"components\": [\n {\n \"name\": \"poolAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token0\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token1\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token0Decimals\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"token1Decimals\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"baseTokenBalance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"token0Balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"token1Balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n }\n]\n","[\n {\n \"type\": \"constructor\",\n \"inputs\": [\n { \"name\": \"_alphaToken\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_erc20TokenGatedChat\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_net\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_swapRouter\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_weth\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_upvotePrice\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"_feeBps\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ALPHA_TOKEN\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ERC20_TOKEN_GATED_CHAT\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ETH_USDC_POOL\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_TOKENS_PER_USER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NET\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"SWAP_ROUTER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"UNISWAP_V3_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"WETH\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addTokenToList\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeBps\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTokenFeeTier\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint24\", \"internalType\": \"uint24\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTotalUpvotesPerToken\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserTokenCount\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserTokensInRange\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"startIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"endIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct UserUpvoteContract.TokenInfo[]\",\n \"components\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGiven\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGivenPerToken\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGivenPerTokenBatch\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokens\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceived\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceivedPerToken\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceivedPerTokenBatch\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokens\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isTokenInUserList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeTokenFromList\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeBps\",\n \"inputs\": [\n { \"name\": \"newFeeBps\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setUpvotePrice\",\n \"inputs\": [\n { \"name\": \"newUpvotePrice\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalUpvotesPerToken\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n { \"name\": \"newOwner\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvoteUser\",\n \"inputs\": [\n { \"name\": \"userToUpvote\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"numUpvotes\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenCount\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenExists\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenFeeTiers\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint24\", \"internalType\": \"uint24\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenSeen\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokens\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesGiven\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesGivenPerToken\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesReceived\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesReceivedPerToken\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n { \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n { \"name\": \"previousOwner\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"newOwner\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokenAddedToList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"indexed\": false, \"internalType\": \"uint24\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokenRemovedFromList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"UserUpvoted\",\n \"inputs\": [\n { \"name\": \"upvoter\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"upvotedUser\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"numUpvotes\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n ],\n \"anonymous\": false\n },\n { \"type\": \"error\", \"name\": \"IncorrectEthSent\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"MaxTokensReached\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoAlphaToWithdraw\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [{ \"name\": \"owner\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [{ \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotFound\",\n \"inputs\": [\n { \"name\": \"tokenA\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokenB\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [{ \"name\": \"pool\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringsInsufficientHexLength\",\n \"inputs\": [\n { \"name\": \"value\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"length\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"TokenAlreadyInList\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"TokenNotInUserList\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"UserCannotUpvoteSelf\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"ZeroUpvotes\", \"inputs\": [] }\n]\n","import type { Abi, Address } from \"viem\";\nimport scoreAbi from \"./abis/score.json\";\nimport upvoteAppAbi from \"./abis/upvote-app.json\";\nimport upvoteStorageAppAbi from \"./abis/upvote-storage-app.json\";\nimport pureAlphaStrategyAbi from \"./abis/pure-alpha-strategy.json\";\nimport univ234PoolsStrategyAbi from \"./abis/univ234-pools-strategy.json\";\nimport dynamicSplitStrategyAbi from \"./abis/dynamic-split-strategy.json\";\nimport multiVersionUniswapBulkPoolFinderAbi from \"./abis/multi-version-uniswap-bulk-pool-finder.json\";\nimport multiVersionUniswapPoolInfoRetrieverAbi from \"./abis/multi-version-uniswap-pool-info-retriever.json\";\nimport userUpvoteAbi from \"./abis/user-upvote.json\";\n\n// Score core contract (v2 strategy)\nexport const SCORE_CONTRACT = {\n address: \"0x0000000fa09b022e5616e5a173b4b67fa2fbcf28\" as Address,\n abi: scoreAbi as Abi,\n} as const;\n\n// UpvoteApp contract\nexport const UPVOTE_APP = {\n address: \"0x00000001f0b8173316a016a5067ad74e8cea47bf\" as Address,\n abi: upvoteAppAbi as Abi,\n} as const;\n\n// UpvoteStorageApp contract\nexport const UPVOTE_STORAGE_APP = {\n address: \"0x000000060CEB69D023227DF64CfB75eC37c75B62\" as Address,\n abi: upvoteStorageAppAbi as Abi,\n} as const;\n\n// UpvotePureAlphaStrategy contract\nexport const PURE_ALPHA_STRATEGY = {\n address: \"0x00000001b1bcdeddeafd5296aaf4f3f3e21ae876\" as Address,\n abi: pureAlphaStrategyAbi as Abi,\n} as const;\n\n// UpvoteUniv234PoolsStrategy (handles Uniswap V2, V3, V4 pools)\nexport const UNIV234_POOLS_STRATEGY = {\n address: \"0x000000063f84e07a3e7a7ee578b42704ee6d22c9\" as Address,\n abi: univ234PoolsStrategyAbi as Abi,\n} as const;\n\n// UpvoteDynamicSplitUniv234PoolsStrategy (configurable token/alpha split for Uni V2/V3/V4 pools)\nexport const DYNAMIC_SPLIT_STRATEGY = {\n address: \"0x0000000869160f0b2a213adefb46a7ea7e62ac7a\" as Address,\n abi: dynamicSplitStrategyAbi as Abi,\n} as const;\n\n// All strategy addresses for batch queries\nexport const ALL_STRATEGY_ADDRESSES: Address[] = [\n UNIV234_POOLS_STRATEGY.address,\n PURE_ALPHA_STRATEGY.address,\n DYNAMIC_SPLIT_STRATEGY.address,\n];\n\n// Legacy upvote contract addresses (v1 and v2, before Score system)\nexport const LEGACY_UPVOTE_V1_ADDRESS =\n \"0x0ada882dbbdc12388a1f9ca85d2d847088f747df\" as Address;\n\nexport const LEGACY_UPVOTE_V2_ADDRESS =\n \"0x9027dcad0a3dca5835895e14fbc022a1e5ea909b\" as Address;\n\n// Chains where the Score system is deployed\nexport const SUPPORTED_SCORE_CHAINS = [8453] as const;\n\n// Pool discovery contracts\nexport const MULTI_VERSION_UNISWAP_BULK_POOL_FINDER = {\n address: \"0xbc237dac4c74c170780fc12f353a258bdd31a8cf\" as Address,\n abi: multiVersionUniswapBulkPoolFinderAbi as Abi,\n} as const;\n\nexport const MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER = {\n address: \"0x00000002986Ca76897216a8A3A7Db10FcB0d29Cf\" as Address,\n abi: multiVersionUniswapPoolInfoRetrieverAbi as Abi,\n} as const;\n\n// WETH addresses by chain\nconst WETH_BY_CHAIN: Record<number, Address> = {\n 8453: \"0x4200000000000000000000000000000000000006\", // Base (L2 predeploy)\n 1: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\", // Ethereum mainnet\n};\n\n/**\n * Get the WETH address for a given chain.\n */\nexport function getWethAddress(chainId: number): Address {\n const addr = WETH_BY_CHAIN[chainId];\n if (!addr) {\n throw new Error(`Score: No WETH address for chain ${chainId}`);\n }\n return addr;\n}\n\n// Common addresses\nexport const NULL_ADDRESS =\n \"0x0000000000000000000000000000000000000000\" as Address;\n\n// Upvote pricing\nexport const UPVOTE_PRICE_ETH = 0.000025;\n\n// User upvote contract (standalone user-to-user upvote system, separate from Score)\nexport const USER_UPVOTE_CONTRACT = {\n address: \"0xa4bc2c63dd0157692fd5f409389e5032e37d8895\" as Address,\n abi: userUpvoteAbi as Abi,\n} as const;\n","import { useReadContract } from \"wagmi\";\nimport { UPVOTE_APP, ALL_STRATEGY_ADDRESSES } from \"../constants\";\nimport type { UseUpvotesOptions } from \"../types\";\n\n/**\n * React hook for fetching the upvote count for a single score key.\n * Uses UpvoteApp.getUpvotesWithLegacy, which aggregates across legacy contracts and strategies.\n *\n * @param options - Upvote query options\n * @param options.chainId - Chain ID to query\n * @param options.scoreKey - The bytes32 score key to look up\n * @param options.strategies - Strategy addresses to include (default: all strategies)\n * @param options.enabled - Whether the query is enabled (default: true)\n * @returns Object with upvotes count, isLoading, error, and refetch\n *\n * @example\n * ```tsx\n * const { upvotes, isLoading } = useUpvotes({\n * chainId: 8453,\n * scoreKey: getTokenScoreKey(tokenAddress),\n * });\n * ```\n */\nexport function useUpvotes({\n chainId,\n scoreKey,\n strategies = ALL_STRATEGY_ADDRESSES,\n enabled = true,\n}: UseUpvotesOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: UPVOTE_APP.address,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [[scoreKey], strategies],\n chainId,\n query: { enabled },\n });\n\n return {\n upvotes: Array.isArray(data) && data.length > 0 ? Number(data[0]) : 0,\n isLoading,\n error,\n refetch,\n };\n}\n","import { decodeAbiParameters, type Address } from \"viem\";\nimport {\n PURE_ALPHA_STRATEGY,\n UNIV234_POOLS_STRATEGY,\n DYNAMIC_SPLIT_STRATEGY,\n} from \"../constants\";\nimport type {\n PureAlphaMetadata,\n PoolStrategyMetadata,\n DecodedStrategyMetadata,\n PoolKey,\n} from \"../types\";\n\n/**\n * Convert token address to bytes32 upvote key.\n */\nexport const encodeUpvoteKey = (tokenAddress: string): `0x${string}` => {\n return `0x${BigInt(`0x${tokenAddress.slice(2)}`)\n .toString(16)\n .padStart(64, \"0\")}`;\n};\n\n/**\n * Convert token address to upvote key string format.\n * Strips leading zeros to match Solidity's Strings.toHexString(uint256(scoreKey)).\n */\nexport function tokenAddressToUpvoteKeyString(tokenAddress: string): string {\n const lower = tokenAddress.toLowerCase();\n const withoutPrefix = lower.slice(2);\n const stripped = withoutPrefix.replace(/^0+/, \"\") || \"0\";\n return \"0x\" + stripped;\n}\n\n/**\n * Check if a topic string represents a strategy message.\n */\nexport function isStrategyMessage(topic: string): boolean {\n return topic.startsWith(\"s\") && topic.length > 43;\n}\n\n/**\n * Check if a topic string represents a user upvote message.\n */\nexport function isUserUpvoteMessage(topic: string): boolean {\n return topic.startsWith(\"t\");\n}\n\n/**\n * Extracts strategy address from topic string.\n * Handles both new format and legacy format.\n */\nexport function extractStrategyAddress(topic: string): string {\n try {\n if (topic.startsWith(\"t\")) {\n return topic.slice(1);\n }\n\n if (topic.startsWith(\"s\")) {\n return topic.slice(1, 43);\n }\n\n if (topic.startsWith(\"t-\")) {\n return topic.slice(2);\n }\n\n const parts = topic.split(\"-\");\n if (parts.length >= 2) {\n return parts[0];\n }\n\n return \"\";\n } catch {\n return \"\";\n }\n}\n\nexport function isPureAlphaStrategy(strategyAddress: string): boolean {\n return (\n strategyAddress.toLowerCase() ===\n PURE_ALPHA_STRATEGY.address.toLowerCase()\n );\n}\n\nexport function isUniv234PoolsStrategy(strategyAddress: string): boolean {\n return (\n strategyAddress.toLowerCase() ===\n UNIV234_POOLS_STRATEGY.address.toLowerCase()\n );\n}\n\nexport function isDynamicSplitStrategy(strategyAddress: string): boolean {\n return (\n strategyAddress.toLowerCase() ===\n DYNAMIC_SPLIT_STRATEGY.address.toLowerCase()\n );\n}\n\n/**\n * Decode strategy-specific metadata from ABI-encoded bytes.\n */\nexport const decodeStrategyMetadata = (\n metadata: `0x${string}`,\n strategyAddress: string\n): DecodedStrategyMetadata => {\n try {\n if (isPureAlphaStrategy(strategyAddress)) {\n const [alphaAmount, alphaWethPrice, wethUsdcPrice, userAlphaBalance] =\n decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n metadata\n );\n return {\n alphaAmount,\n alphaWethPrice,\n wethUsdcPrice,\n userAlphaBalance,\n } as PureAlphaMetadata;\n } else if (\n isUniv234PoolsStrategy(strategyAddress) ||\n isDynamicSplitStrategy(strategyAddress)\n ) {\n const [\n tokenAmount,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n metadata\n );\n return {\n tokenAmount,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n } as PoolStrategyMetadata;\n } else {\n return null;\n }\n } catch {\n return null;\n }\n};\n\n/**\n * Decode the full Score storage blob.\n */\nexport const decodeUpvoteStorageBlob = (value: `0x${string}`) => {\n try {\n const [\n scoreKey,\n scoreDelta,\n originalSender,\n appAddress,\n strategyAddress,\n timestamp,\n scoreStoredContext,\n scoreUnstoredContext,\n metadata,\n ] = decodeAbiParameters(\n [\n { type: \"bytes32\" },\n { type: \"int256\" },\n { type: \"address\" },\n { type: \"address\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"bytes\" },\n { type: \"bytes\" },\n { type: \"bytes\" },\n ],\n value\n );\n\n const decodedMetadata = decodeStrategyMetadata(\n metadata as `0x${string}`,\n strategyAddress as string\n );\n\n return {\n scoreKey: scoreKey as `0x${string}`,\n scoreDelta: Number(scoreDelta),\n originalSender: originalSender as Address,\n appAddress: appAddress as Address,\n strategyAddress: strategyAddress as Address,\n timestamp: Number(timestamp),\n scoreStoredContext: scoreStoredContext as `0x${string}`,\n scoreUnstoredContext: scoreUnstoredContext as `0x${string}`,\n decodedMetadata,\n };\n } catch {\n return null;\n }\n};\n\n/**\n * Select the appropriate strategy based on pool key validity.\n * Returns PURE_ALPHA if no valid pool key; DYNAMIC_SPLIT otherwise.\n */\nexport const selectStrategy = (poolKey?: PoolKey | null): Address => {\n if (!poolKey || !isValidPoolKey(poolKey)) {\n return PURE_ALPHA_STRATEGY.address;\n }\n return DYNAMIC_SPLIT_STRATEGY.address;\n};\n\nfunction isValidPoolKey(poolKey: PoolKey): boolean {\n return (\n poolKey.fee !== undefined ||\n poolKey.tickSpacing !== undefined ||\n poolKey.currency0 !== undefined\n );\n}\n\n/**\n * Decode an upvote message from Net protocol into a consistent format.\n * Handles both legacy and strategy message formats.\n */\nexport function decodeUpvoteMessage(msg: {\n topic: string;\n data: `0x${string}`;\n text: string;\n}) {\n try {\n if (msg.topic === \"t\") {\n if (!msg.data || msg.data === \"0x\" || msg.data.length < 32) {\n return null;\n }\n\n try {\n const [\n numUpvotesDecoded,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n msg.data\n );\n\n return {\n scoreDelta: Number(numUpvotesDecoded),\n tokenWethPrice: Number(tokenWethPrice),\n wethUsdcPrice: Number(wethUsdcPrice),\n alphaWethPrice: Number(alphaWethPrice),\n userTokenBalance: Number(userTokenBalance),\n tokenAddress: msg.text,\n messageType: \"legacy\" as const,\n };\n } catch {\n return null;\n }\n } else if (\n (msg.topic.startsWith(\"0x\") && msg.topic.length === 42) ||\n msg.topic.startsWith(\"p-\")\n ) {\n const [\n numUpvotesDecoded,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n msg.data\n );\n\n return {\n scoreDelta: Number(numUpvotesDecoded),\n tokenWethPrice: Number(tokenWethPrice),\n wethUsdcPrice: Number(wethUsdcPrice),\n alphaWethPrice: Number(alphaWethPrice),\n userTokenBalance: Number(userTokenBalance),\n tokenAddress: msg.topic,\n messageType: \"legacy\" as const,\n };\n } else if (msg.topic.startsWith(\"app-\") && msg.topic.endsWith(\"-first\")) {\n const topicParts = msg.topic.split(\"-\");\n\n if (topicParts.length === 3) {\n // \"app-{addr}-first\"\n return {\n appAddress: topicParts[1],\n messageType: \"app-first\" as const,\n };\n } else if (topicParts.length === 5 && topicParts[2] === \"strategy\") {\n // \"app-{addr}-strategy-{strat}-first\"\n return {\n appAddress: topicParts[1],\n strategyAddress: topicParts[3],\n messageType: \"app-strategy-first\" as const,\n };\n } else if (topicParts.length === 5 && topicParts[2] === \"user\") {\n // \"app-{addr}-user-{user}-first\"\n return {\n appAddress: topicParts[1],\n userAddress: topicParts[3],\n tokenAddress: msg.text,\n messageType: \"app-user-first\" as const,\n };\n } else if (\n topicParts.length === 7 &&\n topicParts[2] === \"strategy\" &&\n topicParts[4] === \"user\"\n ) {\n // \"app-{addr}-strategy-{strat}-user-{user}-first\"\n return {\n appAddress: topicParts[1],\n strategyAddress: topicParts[3],\n userAddress: topicParts[5],\n tokenAddress: msg.text,\n messageType: \"app-strategy-user-first\" as const,\n };\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n","import {\n type Address,\n encodeAbiParameters,\n keccak256,\n encodePacked,\n getAddress,\n} from \"viem\";\nimport { getStorageKeyBytes } from \"@net-protocol/storage\";\nimport { encodeUpvoteKey } from \"./strategyUtils\";\nimport type { ScoreItem, FeedMessage } from \"../types\";\n\n/**\n * Generate score key for token upvotes.\n * Pads the token address into a bytes32 value.\n */\nexport const getTokenScoreKey = (tokenAddress: string): `0x${string}` => {\n return encodeUpvoteKey(tokenAddress);\n};\n\n/**\n * Generate score key for storage upvotes.\n * keccak256(encodePacked(storageKeyBytes32, operatorAddress))\n */\nexport const getStorageScoreKey = (\n operatorAddress: string,\n storageKey: string\n): `0x${string}` => {\n const bytes32Key = getStorageKeyBytes(storageKey) as `0x${string}`;\n return keccak256(\n encodePacked(\n [\"bytes32\", \"address\"],\n [bytes32Key, operatorAddress as Address]\n )\n );\n};\n\n/**\n * Generate content-based key for feed posts.\n * Uses all message content to create a unique identifier that's\n * independent of query filter (works regardless of how messages are fetched).\n *\n * Two messages with identical content will share the same key (and upvotes),\n * which is semantically correct - they are the same content.\n */\nexport const getFeedContentKey = (message: FeedMessage): `0x${string}` => {\n return keccak256(\n encodePacked(\n [\"address\", \"string\", \"address\", \"uint256\", \"string\", \"bytes\"],\n [\n message.app,\n message.topic,\n message.sender,\n message.timestamp,\n message.text,\n message.data,\n ]\n )\n );\n};\n\n/**\n * Get score key for any ScoreItem type.\n */\nexport const getScoreKey = (item: ScoreItem): `0x${string}` => {\n switch (item.type) {\n case \"token\":\n return getTokenScoreKey(item.tokenAddress);\n case \"storage\":\n return getStorageScoreKey(item.operatorAddress, item.storageKey);\n case \"feed\": {\n const contentKey = getFeedContentKey(item.message);\n return getStorageScoreKey(\n item.message.sender,\n contentKey\n );\n }\n }\n};\n\n/**\n * Check if a score key represents a token upvote (zero-padded address)\n * vs a hash-based key (storage/feed).\n */\nexport const isTokenScoreKey = (scoreKey: string): boolean => {\n return scoreKey.startsWith(\"0x000000000000000000000000\");\n};\n\n/**\n * Extract and validate token address from a token score key.\n * Returns the checksummed address or null if invalid.\n */\nexport const extractTokenAddressFromScoreKey = (\n scoreKey: string\n): string | null => {\n if (!isTokenScoreKey(scoreKey)) {\n return null;\n }\n\n const tokenAddress = `0x${scoreKey.slice(26)}`;\n\n if (tokenAddress.startsWith(\"0x\") && tokenAddress.length === 42) {\n try {\n return getAddress(tokenAddress);\n } catch {\n return null;\n }\n }\n\n return null;\n};\n\n/**\n * Generate upvote stored context for storage upvotes.\n * ABI-encodes (bytes32 storageKeyBytes, address operatorAddress).\n */\nexport const getStorageUpvoteContext = (\n operatorAddress: string,\n storageKey: string\n): `0x${string}` => {\n const bytes32Key = getStorageKeyBytes(storageKey) as `0x${string}`;\n return encodeAbiParameters(\n [{ type: \"bytes32\" }, { type: \"address\" }],\n [bytes32Key, operatorAddress as Address]\n );\n};\n","import { useMemo } from \"react\";\nimport { useReadContract } from \"wagmi\";\nimport { UPVOTE_APP, ALL_STRATEGY_ADDRESSES } from \"../constants\";\nimport { getScoreKey } from \"../utils/scoreKeyUtils\";\nimport type { UseUpvotesBatchOptions } from \"../types\";\n\n/**\n * React hook for fetching upvote counts for multiple ScoreItems in a single contract call.\n * Uses UpvoteApp.getUpvotesWithLegacy with batched score keys.\n *\n * @param options - Batch upvote query options\n * @param options.chainId - Chain ID to query\n * @param options.items - Array of ScoreItems (token, storage, or feed) to get counts for\n * @param options.strategies - Strategy addresses to include (default: all strategies)\n * @param options.enabled - Whether the query is enabled (default: true)\n * @returns Object with upvoteCounts array, isLoading, error, and refetch\n *\n * @example\n * ```tsx\n * const { upvoteCounts, isLoading } = useUpvotesBatch({\n * chainId: 8453,\n * items: [\n * { type: \"token\", tokenAddress: \"0x...\" },\n * { type: \"storage\", operatorAddress: \"0x...\", storageKey: \"my-key\" },\n * ],\n * });\n * ```\n */\nexport function useUpvotesBatch({\n chainId,\n items,\n strategies = ALL_STRATEGY_ADDRESSES,\n enabled = true,\n}: UseUpvotesBatchOptions) {\n const scoreKeys = useMemo(\n () => items.map((item) => getScoreKey(item)),\n [items]\n );\n\n const { data, isLoading, error, refetch } = useReadContract({\n address: UPVOTE_APP.address,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [scoreKeys, strategies],\n chainId,\n query: { enabled: enabled && scoreKeys.length > 0 },\n });\n\n return {\n upvoteCounts: Array.isArray(data) ? (data as bigint[]).map(Number) : [],\n isLoading,\n error,\n refetch,\n };\n}\n","import { useMemo } from \"react\";\nimport { useUpvotes } from \"./useUpvotes\";\nimport { getTokenScoreKey } from \"../utils/scoreKeyUtils\";\nimport type { UseTokenUpvotesOptions } from \"../types\";\n\n/**\n * Convenience React hook for fetching upvotes for a single token address.\n * Wraps useUpvotes with automatic token score key generation.\n *\n * @param options - Token upvote query options\n * @param options.chainId - Chain ID to query\n * @param options.tokenAddress - The token contract address\n * @param options.enabled - Whether the query is enabled (default: true)\n * @returns Object with upvotes count, isLoading, error, and refetch\n *\n * @example\n * ```tsx\n * const { upvotes, isLoading } = useTokenUpvotes({\n * chainId: 8453,\n * tokenAddress: \"0x...\",\n * });\n * ```\n */\nexport function useTokenUpvotes({\n chainId,\n tokenAddress,\n enabled = true,\n}: UseTokenUpvotesOptions) {\n const scoreKey = useMemo(\n () => getTokenScoreKey(tokenAddress),\n [tokenAddress]\n );\n\n return useUpvotes({ chainId, scoreKey, enabled });\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesGivenOptions } from \"../types\";\n\nexport function useUserUpvotesGiven({\n chainId,\n userAddress,\n enabled = true,\n}: UseUserUpvotesGivenOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGiven\",\n args: [userAddress],\n chainId,\n query: { enabled: enabled && !!userAddress },\n });\n\n return {\n upvotes: typeof data === \"bigint\" ? Number(data) : 0,\n isLoading,\n error,\n refetch,\n };\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesReceivedOptions } from \"../types\";\n\nexport function useUserUpvotesReceived({\n chainId,\n userAddress,\n enabled = true,\n}: UseUserUpvotesReceivedOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceived\",\n args: [userAddress],\n chainId,\n query: { enabled: enabled && !!userAddress },\n });\n\n return {\n upvotes: typeof data === \"bigint\" ? Number(data) : 0,\n isLoading,\n error,\n refetch,\n };\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesGivenPerTokenBatchOptions } from \"../types\";\n\nexport function useUserUpvotesGivenPerTokenBatch({\n chainId,\n userAddress,\n tokenAddresses,\n enabled = true,\n}: UseUserUpvotesGivenPerTokenBatchOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGivenPerTokenBatch\",\n args: [userAddress, tokenAddresses],\n chainId,\n query: { enabled: enabled && tokenAddresses.length > 0 },\n });\n\n return {\n upvoteCounts: Array.isArray(data) ? (data as bigint[]).map(Number) : [],\n isLoading,\n error,\n refetch,\n };\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesReceivedPerTokenBatchOptions } from \"../types\";\n\nexport function useUserUpvotesReceivedPerTokenBatch({\n chainId,\n userAddress,\n tokenAddresses,\n enabled = true,\n}: UseUserUpvotesReceivedPerTokenBatchOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceivedPerTokenBatch\",\n args: [userAddress, tokenAddresses],\n chainId,\n query: { enabled: enabled && tokenAddresses.length > 0 },\n });\n\n return {\n upvoteCounts: Array.isArray(data) ? (data as bigint[]).map(Number) : [],\n isLoading,\n error,\n refetch,\n };\n}\n","import { type Address } from \"viem\";\nimport { useWriteContract } from \"wagmi\";\nimport { getBaseDataSuffix } from \"@net-protocol/core\";\nimport { USER_UPVOTE_CONTRACT, NULL_ADDRESS } from \"../constants\";\nimport type { UseUpvoteUserOptions } from \"../types\";\n\nexport function useUpvoteUser({ chainId }: UseUpvoteUserOptions) {\n const { writeContractAsync, isPending, isSuccess, error, data: hash, reset } =\n useWriteContract();\n\n const upvoteUser = async (params: {\n userToUpvote: Address;\n token?: Address;\n numUpvotes: number;\n feeTier?: number;\n value: bigint;\n }) => {\n return writeContractAsync({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvoteUser\",\n args: [\n params.userToUpvote,\n params.token ?? NULL_ADDRESS,\n BigInt(params.numUpvotes),\n BigInt(params.feeTier ?? 0),\n ],\n value: params.value,\n chainId,\n dataSuffix: getBaseDataSuffix(chainId),\n });\n };\n\n return { upvoteUser, isPending, isSuccess, error, hash, reset };\n}\n","import { useReadContract } from \"wagmi\";\nimport { formatEther } from \"viem\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUpvotePriceOptions } from \"../types\";\n\nexport function useUpvotePrice({\n chainId,\n enabled = true,\n}: UseUpvotePriceOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvotePrice\",\n chainId,\n query: { enabled },\n });\n\n const price = typeof data === \"bigint\" ? data : 0n;\n const priceInEth = price > 0n ? Number(formatEther(price)) : 0;\n\n return {\n price,\n priceInEth,\n isLoading,\n error,\n refetch,\n };\n}\n","import { type Address, type PublicClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport {\n MULTI_VERSION_UNISWAP_BULK_POOL_FINDER,\n MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER,\n getWethAddress,\n NULL_ADDRESS,\n} from \"../constants\";\nimport type { PoolKey, PoolDiscoveryResult, PoolDiscoveryPair } from \"../types\";\n\n// ============================================================================\n// Internal types\n// ============================================================================\n\ntype PairInput = PoolDiscoveryPair;\n\ntype V4PoolKeyLike = {\n currency0: Address;\n currency1: Address;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n};\n\ntype RawPoolDiscovery = {\n pairIndex: bigint;\n version: number;\n poolAddress: Address;\n poolKey: V4PoolKeyLike;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n};\n\ntype PoolFullInfo = {\n poolAddress: Address;\n token0: Address;\n token1: Address;\n token0Decimals: number;\n token1Decimals: number;\n sqrtPriceX96: bigint;\n baseTokenBalance: bigint;\n token0Balance: bigint;\n token1Balance: bigint;\n liquidity: bigint;\n};\n\ntype PairMeta = {\n tokenAddress: string;\n baseTokenAddress: string;\n fee: number;\n};\n\ntype Discoveries = {\n v2PoolAddresses: Address[];\n v3PoolAddresses: Address[];\n v4PoolKeys: V4PoolKeyLike[];\n v2PoolAddressToPair: Record<string, PairMeta>;\n v3PoolAddressToPair: Record<string, PairMeta>;\n v4PoolKeyToPair: Record<string, PairMeta>;\n};\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst V3_V4_FEE_TIERS = [500, 3000, 10000, 12000, 8388608];\nconst V4_TICK_SPACINGS = [200];\nconst V4_HOOKS: Address[] = [\n NULL_ADDRESS,\n \"0xDd5EeaFf7BD481AD55Db083062b13a3cdf0A68CC\",\n \"0x34a45c6B61876d739400Bd71228CbcbD4F53E8cC\",\n \"0xb429d62f8f3bFFb98CdB9569533eA23bF0Ba28CC\",\n \"0xd60D6B218116cFd801E28F78d011a203D2b068Cc\",\n \"0x3e342a06f9592459D75721d6956B570F02eF2Dc0\",\n \"0xbB7784A4d481184283Ed89619A3e3ed143e1Adc0\",\n \"0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544\",\n];\n\nconst Q96 = BigInt(2) ** BigInt(96);\nconst ZERO_BI = BigInt(0);\n\n// Derived WETH amount (wei) for a V4 pool at its current price.\n// WETH = currency1: L * sqrtPriceX96 / Q96\n// WETH = currency0: L * Q96 / sqrtPriceX96\n// Only counts in-range liquidity, which is sufficient for selection.\nfunction deriveV4WethDepthWei(\n liquidity: bigint,\n sqrtPriceX96: bigint,\n wethIsCurrency1: boolean\n): bigint {\n if (sqrtPriceX96 === ZERO_BI || liquidity === ZERO_BI) return ZERO_BI;\n if (wethIsCurrency1) {\n return (liquidity * sqrtPriceX96) / Q96;\n }\n return (liquidity * Q96) / sqrtPriceX96;\n}\n\n// WETH-side balance for a V2/V3 pool. Mirrors the V4 helper so selection can\n// compare both versions on the same `wethDepthWei` axis.\nfunction deriveV2V3WethDepthWei(\n info: PoolFullInfo,\n wethLower: string\n): bigint {\n if ((info.token0 ?? \"\").toLowerCase() === wethLower) {\n return BigInt(info.token0Balance ?? 0);\n }\n if ((info.token1 ?? \"\").toLowerCase() === wethLower) {\n return BigInt(info.token1Balance ?? 0);\n }\n return BigInt(info.baseTokenBalance ?? 0);\n}\n\n// ============================================================================\n// Pure helper functions\n// ============================================================================\n\nexport function normalizeTokenPairs(pairs: PairInput[], wethAddress: Address) {\n return pairs.map((pair) => {\n const tokenA = pair.tokenAddress;\n const tokenB = pair.baseTokenAddress || wethAddress;\n\n return {\n originalPair: pair,\n tokenA: tokenA.toLowerCase() < tokenB.toLowerCase() ? tokenA : tokenB,\n tokenB: tokenA.toLowerCase() < tokenB.toLowerCase() ? tokenB : tokenA,\n };\n });\n}\n\nfunction buildDiscoveryArgs(\n normalizedPairs: ReturnType<typeof normalizeTokenPairs>\n) {\n return {\n tokenAs: normalizedPairs.map((p) => p.tokenA),\n tokenBs: normalizedPairs.map((p) => p.tokenB),\n fees: V3_V4_FEE_TIERS,\n v4TickSpacings: V4_TICK_SPACINGS,\n v4Hooks: V4_HOOKS,\n };\n}\n\nexport function parsePoolDiscoveries(\n poolResults: readonly [RawPoolDiscovery[], bigint] | undefined,\n pairs: PairInput[],\n wethAddress: Address\n): Discoveries {\n if (!poolResults) {\n return {\n v2PoolAddresses: [],\n v3PoolAddresses: [],\n v4PoolKeys: [],\n v2PoolAddressToPair: {},\n v3PoolAddressToPair: {},\n v4PoolKeyToPair: {},\n };\n }\n\n const [discoveries, countRaw] = poolResults;\n const countNum =\n typeof countRaw === \"bigint\" ? Number(countRaw) : Number(countRaw || 0);\n\n const v2PoolAddresses: Address[] = [];\n const v3PoolAddresses: Address[] = [];\n const v4PoolKeys: V4PoolKeyLike[] = [];\n const seenV2V3Addresses = new Set<string>();\n const seenV4Keys = new Set<string>();\n\n const v2PoolAddressToPair: Record<string, PairMeta> = {};\n const v3PoolAddressToPair: Record<string, PairMeta> = {};\n const v4PoolKeyToPair: Record<string, PairMeta> = {};\n\n for (let i = 0; i < Math.min(countNum, discoveries.length); i++) {\n const discovery: RawPoolDiscovery = discoveries[i] as RawPoolDiscovery;\n const version = Number(discovery?.version ?? 0);\n const poolAddressValue = discovery?.poolAddress as string | undefined;\n const pairIndex = Number(discovery?.pairIndex ?? 0);\n const feeNum = Number(discovery?.fee ?? 0);\n const poolKey = discovery?.poolKey;\n\n const pair = pairs[pairIndex];\n if (!pair) continue;\n\n if (\n version === 2 &&\n poolAddressValue &&\n poolAddressValue !== NULL_ADDRESS\n ) {\n const poolAddress = poolAddressValue.toLowerCase();\n if (!seenV2V3Addresses.has(poolAddress)) {\n seenV2V3Addresses.add(poolAddress);\n v2PoolAddresses.push(poolAddressValue as Address);\n v2PoolAddressToPair[poolAddress] = {\n tokenAddress: pair.tokenAddress,\n baseTokenAddress: pair.baseTokenAddress || wethAddress,\n fee: feeNum,\n };\n }\n } else if (\n version === 3 &&\n poolAddressValue &&\n poolAddressValue !== NULL_ADDRESS\n ) {\n const poolAddress = poolAddressValue.toLowerCase();\n if (!seenV2V3Addresses.has(poolAddress)) {\n seenV2V3Addresses.add(poolAddress);\n v3PoolAddresses.push(poolAddressValue as Address);\n v3PoolAddressToPair[poolAddress] = {\n tokenAddress: pair.tokenAddress,\n baseTokenAddress: pair.baseTokenAddress || wethAddress,\n fee: feeNum,\n };\n }\n } else if (version === 4 && poolKey) {\n const poolKeyString = JSON.stringify(poolKey);\n if (!seenV4Keys.has(poolKeyString)) {\n seenV4Keys.add(poolKeyString);\n v4PoolKeys.push(poolKey);\n v4PoolKeyToPair[poolKeyString] = {\n tokenAddress: pair.tokenAddress,\n baseTokenAddress: pair.baseTokenAddress || wethAddress,\n fee: feeNum,\n };\n }\n }\n }\n\n return {\n v2PoolAddresses,\n v3PoolAddresses,\n v4PoolKeys,\n v2PoolAddressToPair,\n v3PoolAddressToPair,\n v4PoolKeyToPair,\n };\n}\n\nfunction determinePoolVersion(discoveries: Discoveries, index: number) {\n const {\n v2PoolAddresses,\n v3PoolAddresses,\n v4PoolKeys,\n v2PoolAddressToPair,\n v3PoolAddressToPair,\n v4PoolKeyToPair,\n } = discoveries;\n\n if (index < v2PoolAddresses.length) {\n const poolAddress = v2PoolAddresses[index].toLowerCase();\n return {\n version: 2,\n pair: v2PoolAddressToPair[poolAddress],\n fee: 0,\n v4PoolKey: undefined,\n };\n } else if (index < v2PoolAddresses.length + v3PoolAddresses.length) {\n const v3Index = index - v2PoolAddresses.length;\n const poolAddress = v3PoolAddresses[v3Index].toLowerCase();\n return {\n version: 3,\n pair: v3PoolAddressToPair[poolAddress],\n fee: v3PoolAddressToPair[poolAddress]?.fee || 0,\n v4PoolKey: undefined,\n };\n } else {\n const v4Index = index - v2PoolAddresses.length - v3PoolAddresses.length;\n const poolKey = v4PoolKeys[v4Index];\n const poolKeyString = JSON.stringify(poolKey);\n return {\n version: 4,\n pair: v4PoolKeyToPair[poolKeyString],\n fee: v4PoolKeyToPair[poolKeyString]?.fee || 0,\n v4PoolKey: poolKey,\n };\n }\n}\n\n/**\n * Calculate price from sqrtPriceX96 for Uniswap V3/V4 pools.\n */\nexport function calculatePriceFromSqrtPriceX96(\n sqrtPriceX96: bigint,\n token0Decimals: number,\n token1Decimals: number,\n isToken0: boolean\n): number {\n const sqrtPrice = Number(sqrtPriceX96);\n if (sqrtPrice === 0) return 0;\n\n const priceX96 = (sqrtPrice / 2 ** 96) ** 2;\n\n if (isToken0) {\n return priceX96 * 10 ** (token0Decimals - token1Decimals);\n } else {\n return (1 / priceX96) * 10 ** (token1Decimals - token0Decimals);\n }\n}\n\nfunction calculatePoolPrice(\n info: PoolFullInfo,\n pair: PairMeta,\n version: number\n): number | null {\n try {\n const sqrtPriceX96 = Number(info.sqrtPriceX96);\n const token0Decimals = Number(info.token0Decimals);\n const token1Decimals = Number(info.token1Decimals);\n const isToken0 =\n info.token0.toLowerCase() === pair.tokenAddress.toLowerCase();\n\n if (version === 2) {\n const token0Balance = Number(info.token0Balance) / 10 ** token0Decimals;\n const token1Balance = Number(info.token1Balance) / 10 ** token1Decimals;\n\n if (token0Balance === 0 || token1Balance === 0) return null;\n\n if (isToken0) {\n return token1Balance / token0Balance;\n } else {\n return token0Balance / token1Balance;\n }\n } else {\n if (sqrtPriceX96 === 0) return null;\n\n if (isToken0) {\n return (\n (sqrtPriceX96 / 2 ** 96) ** 2 *\n 10 ** (token0Decimals - token1Decimals)\n );\n } else {\n const priceX96 = (sqrtPriceX96 / 2 ** 96) ** 2;\n return (1 / priceX96) * 10 ** (token1Decimals - token0Decimals);\n }\n }\n } catch {\n return null;\n }\n}\n\nexport function constructPoolKey(\n info: PoolFullInfo,\n pair: PairMeta,\n version: number,\n v4PoolKey?: V4PoolKeyLike\n): PoolKey | undefined {\n try {\n if (!info.token0 || !info.token1 || typeof pair.fee !== \"number\") {\n return undefined;\n }\n\n if (!info.token0.startsWith(\"0x\") || !info.token1.startsWith(\"0x\")) {\n return undefined;\n }\n\n const currency0 =\n info.token0.toLowerCase() < info.token1.toLowerCase()\n ? info.token0\n : info.token1;\n const currency1 =\n info.token0.toLowerCase() < info.token1.toLowerCase()\n ? info.token1\n : info.token0;\n\n if (version === 2) {\n return {\n currency0,\n currency1,\n fee: 0,\n tickSpacing: 0,\n hooks: NULL_ADDRESS,\n };\n } else if (version === 3) {\n return {\n currency0,\n currency1,\n fee: pair.fee,\n tickSpacing: 0,\n hooks: NULL_ADDRESS,\n };\n } else {\n if (!v4PoolKey || !v4PoolKey.currency0 || !v4PoolKey.currency1) {\n return undefined;\n }\n return v4PoolKey as PoolKey;\n }\n } catch {\n return undefined;\n }\n}\n\n// ============================================================================\n// Pool selection\n// ============================================================================\n\ntype PoolWithMeta = {\n tokenAddress: string;\n baseTokenAddress: string;\n poolAddress: Address | null;\n price: number | null;\n baseTokenBalance: string;\n token0?: Address;\n token1?: Address;\n token0Balance: string;\n token1Balance: string;\n fee: number;\n poolKey?: PoolKey;\n liquidity: string;\n wethDepthWei: bigint;\n};\n\n// V2/V3 WETH-side ERC20 balance and V4 in-range virtual reserve are both\n// expressed in WETH wei, so they're directly comparable. Pools with zero depth\n// are rejected to skip V4 ghost pools left behind after liquidity removal.\nexport function selectBestPoolPerPair(\n allPools: PoolWithMeta[]\n): PoolWithMeta[] {\n const poolsByPair: Record<string, PoolWithMeta[]> = {};\n\n for (const pool of allPools) {\n const key =\n pool.tokenAddress.toLowerCase() +\n \"_\" +\n pool.baseTokenAddress.toLowerCase();\n if (!poolsByPair[key]) poolsByPair[key] = [];\n poolsByPair[key].push(pool);\n }\n\n const bestPools: PoolWithMeta[] = [];\n for (const group of Object.values(poolsByPair)) {\n const withDepth = group.filter((p) => p.wethDepthWei > ZERO_BI);\n if (withDepth.length === 0) continue;\n const best = withDepth.reduce((a, b) =>\n a.wethDepthWei > b.wethDepthWei ? a : b\n );\n bestPools.push(best);\n }\n\n return bestPools;\n}\n\n// ============================================================================\n// Main exported functions\n// ============================================================================\n\n/**\n * Discover the best Uniswap pools for multiple token pairs.\n * Makes two on-chain calls: pool discovery + pool info retrieval.\n */\nexport async function discoverPools({\n publicClient,\n pairs,\n chainId = 8453,\n}: {\n publicClient: PublicClient;\n pairs: PoolDiscoveryPair[];\n /** Chain ID used to resolve the WETH address. Defaults to Base (8453). */\n chainId?: number;\n}): Promise<PoolDiscoveryResult[]> {\n if (pairs.length === 0) return [];\n\n const wethAddress = getWethAddress(chainId);\n const normalizedPairs = normalizeTokenPairs(pairs, wethAddress);\n const discoveryArgs = buildDiscoveryArgs(normalizedPairs);\n\n // Step 1: Discover pools\n const poolResults = (await readContract(publicClient, {\n address: MULTI_VERSION_UNISWAP_BULK_POOL_FINDER.address,\n abi: MULTI_VERSION_UNISWAP_BULK_POOL_FINDER.abi,\n functionName: \"getPoolsMultiVersion\",\n args: [discoveryArgs],\n })) as readonly [RawPoolDiscovery[], bigint];\n\n const discoveries = parsePoolDiscoveries(poolResults, pairs, wethAddress);\n\n const totalPools =\n discoveries.v2PoolAddresses.length +\n discoveries.v3PoolAddresses.length +\n discoveries.v4PoolKeys.length;\n\n if (totalPools === 0) return [];\n\n // Step 2: Get full pool info\n const poolInfos = (await readContract(publicClient, {\n address: MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER.address,\n abi: MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER.abi,\n functionName: \"getPoolsFullInfoMultiVersion\",\n args: [\n discoveries.v2PoolAddresses,\n discoveries.v3PoolAddresses,\n discoveries.v4PoolKeys,\n wethAddress,\n ],\n })) as PoolFullInfo[];\n\n if (!Array.isArray(poolInfos) || poolInfos.length === 0) return [];\n\n const wethLower = wethAddress.toLowerCase();\n\n // Step 3: Map pool infos to enriched format\n const allPools = poolInfos\n .map((info: PoolFullInfo, index: number) => {\n const poolData = determinePoolVersion(discoveries, index);\n if (!poolData || !poolData.pair) return null;\n\n const isV4 = poolData.version === 4;\n const liquidity = BigInt(info.liquidity ?? 0);\n\n let wethDepthWei: bigint;\n if (isV4) {\n const wethIsCurrency1 =\n poolData.v4PoolKey!.currency1.toLowerCase() === wethLower;\n wethDepthWei = deriveV4WethDepthWei(\n liquidity,\n BigInt(info.sqrtPriceX96 ?? 0),\n wethIsCurrency1\n );\n } else {\n wethDepthWei = deriveV2V3WethDepthWei(info, wethLower);\n }\n\n return {\n tokenAddress: poolData.pair.tokenAddress,\n baseTokenAddress: poolData.pair.baseTokenAddress || wethAddress,\n poolAddress: isV4 ? null : (info.poolAddress as Address),\n price: calculatePoolPrice(info, poolData.pair, poolData.version),\n baseTokenBalance: String(info.baseTokenBalance || 0),\n token0: info.token0,\n token1: info.token1,\n token0Balance: String(info.token0Balance || 0),\n token1Balance: String(info.token1Balance || 0),\n fee: poolData.fee,\n poolKey: constructPoolKey(\n info,\n poolData.pair,\n poolData.version,\n poolData.v4PoolKey\n ),\n liquidity: String(liquidity),\n wethDepthWei,\n };\n })\n .filter((p): p is NonNullable<typeof p> => p !== null) as PoolWithMeta[];\n\n // Step 4: Select best pool per pair\n const bestPools = selectBestPoolPerPair(allPools);\n\n return bestPools.map(\n (pool): PoolDiscoveryResult => ({\n tokenAddress: pool.tokenAddress,\n baseTokenAddress: pool.baseTokenAddress,\n poolAddress: pool.poolAddress,\n price: pool.price,\n fee: pool.fee,\n poolKey: pool.poolKey,\n liquidity: pool.liquidity,\n balances: {\n baseTokenBalance: pool.baseTokenBalance,\n token0Balance: pool.token0Balance,\n token1Balance: pool.token1Balance,\n },\n })\n );\n}\n\n/**\n * Discover the best WETH pool for a single token.\n * Convenience wrapper around discoverPools.\n */\nexport async function discoverTokenPool({\n publicClient,\n tokenAddress,\n chainId = 8453,\n}: {\n publicClient: PublicClient;\n tokenAddress: string;\n /** Chain ID used to resolve the WETH address. Defaults to Base (8453). */\n chainId?: number;\n}): Promise<PoolDiscoveryResult | null> {\n const results = await discoverPools({\n publicClient,\n pairs: [{ tokenAddress }],\n chainId,\n });\n return results[0] ?? null;\n}\n","import { useQuery, skipToken } from \"@tanstack/react-query\";\nimport { usePublicClient } from \"wagmi\";\nimport { discoverPools } from \"../utils/poolDiscovery\";\nimport type { UseDiscoverPoolsOptions } from \"../types\";\n\nexport function useDiscoverPools({\n chainId,\n pairs,\n enabled = true,\n}: UseDiscoverPoolsOptions) {\n const publicClient = usePublicClient({ chainId });\n const canRun = enabled && !!publicClient && pairs.length > 0;\n\n // Normalize addresses in the queryKey so case drift doesn't fragment the cache.\n // discoverPools itself is already case-insensitive internally.\n const keyPairs = pairs.map((p) => [\n p.tokenAddress.toLowerCase(),\n p.baseTokenAddress?.toLowerCase(),\n ]);\n\n const { data, isLoading, error, refetch } = useQuery({\n queryKey: [\"discoverPools\", chainId, keyPairs],\n queryFn: canRun\n ? () => discoverPools({ publicClient, pairs, chainId })\n : skipToken,\n });\n\n return {\n pools: data ?? [],\n isLoading,\n error,\n refetch,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/abis/upvote-app.json","../src/abis/multi-version-uniswap-bulk-pool-finder.json","../src/abis/multi-version-uniswap-pool-info-retriever.json","../src/abis/user-upvote.json","../src/constants.ts","../src/hooks/useUpvotes.ts","../src/utils/strategyUtils.ts","../src/utils/scoreKeyUtils.ts","../src/hooks/useUpvotesBatch.ts","../src/hooks/useTokenUpvotes.ts","../src/hooks/useUserUpvotesGiven.ts","../src/hooks/useUserUpvotesReceived.ts","../src/hooks/useUserUpvotesGivenPerTokenBatch.ts","../src/hooks/useUserUpvotesReceivedPerTokenBatch.ts","../src/hooks/useUpvoteUser.ts","../src/hooks/useUpvotePrice.ts","../src/utils/poolDiscovery.ts","../src/hooks/useDiscoverPools.ts"],"names":["useReadContract","getStorageKeyBytes","keccak256","encodePacked","useMemo","useWriteContract","getBaseDataSuffix","formatEther","readContract","usePublicClient","useQuery","skipToken"],"mappings":"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","file":"react.js","sourcesContent":["[\n { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n {\n \"type\": \"function\",\n \"name\": \"CORE_CONTRACT\",\n \"inputs\": [],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"contract Score\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"LEGACY_CONTRACT\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract ILegacyUpvoteContract\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUpvotesWithLegacy\",\n \"inputs\": [\n {\n \"name\": \"upvoteKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"string\", \"internalType\": \"string\" }],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n { \"name\": \"newOwner\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvote\",\n \"inputs\": [\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"internalType\": \"contract IScoreStrategy\"\n },\n { \"name\": \"scoreKey\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n { \"name\": \"scoreDelta\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawETH\",\n \"inputs\": [{ \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n { \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n { \"name\": \"owner\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] }\n]\n","[\n {\n \"type\": \"function\",\n \"name\": \"V2_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"V3_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"V4_POOL_MANAGER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_checkV4PoolExternal\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [{ \"name\": \"exists\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolsMultiVersion\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct MultiVersionUniswapBulkPoolFinder.PoolFinderParams\",\n \"components\": [\n {\n \"name\": \"tokenAs\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"tokenBs\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"fees\", \"type\": \"uint24[]\", \"internalType\": \"uint24[]\" },\n {\n \"name\": \"v4TickSpacings\",\n \"type\": \"int24[]\",\n \"internalType\": \"int24[]\"\n },\n {\n \"name\": \"v4Hooks\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"pools\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct MultiVersionUniswapBulkPoolFinder.PoolDiscovery[]\",\n \"components\": [\n {\n \"name\": \"pairIndex\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n { \"name\": \"version\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n {\n \"name\": \"poolAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n { \"name\": \"hooks\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"name\": \"count\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"stateMutability\": \"view\"\n }\n]\n","[\n {\n \"type\": \"function\",\n \"name\": \"V4_POOL_MANAGER\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_getV4Liquidity\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_getV4Slot0\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolsFullInfoMultiVersion\",\n \"inputs\": [\n {\n \"name\": \"v2PoolAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"v3PoolAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"v4PoolKeys\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PoolKey[]\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"baseToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct MultiVersionPoolInfoRetriever.PoolFullInfo[]\",\n \"components\": [\n {\n \"name\": \"poolAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token0\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token1\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token0Decimals\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"token1Decimals\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"baseTokenBalance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"token0Balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"token1Balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n }\n]\n","[\n {\n \"type\": \"constructor\",\n \"inputs\": [\n { \"name\": \"_alphaToken\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_erc20TokenGatedChat\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_net\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_swapRouter\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_weth\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_upvotePrice\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"_feeBps\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ALPHA_TOKEN\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ERC20_TOKEN_GATED_CHAT\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ETH_USDC_POOL\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_TOKENS_PER_USER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NET\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"SWAP_ROUTER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"UNISWAP_V3_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"WETH\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addTokenToList\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeBps\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTokenFeeTier\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint24\", \"internalType\": \"uint24\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTotalUpvotesPerToken\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserTokenCount\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserTokensInRange\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"startIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"endIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct UserUpvoteContract.TokenInfo[]\",\n \"components\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGiven\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGivenPerToken\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGivenPerTokenBatch\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokens\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceived\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceivedPerToken\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceivedPerTokenBatch\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokens\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isTokenInUserList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeTokenFromList\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeBps\",\n \"inputs\": [\n { \"name\": \"newFeeBps\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setUpvotePrice\",\n \"inputs\": [\n { \"name\": \"newUpvotePrice\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalUpvotesPerToken\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n { \"name\": \"newOwner\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvoteUser\",\n \"inputs\": [\n { \"name\": \"userToUpvote\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"numUpvotes\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenCount\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenExists\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenFeeTiers\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint24\", \"internalType\": \"uint24\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenSeen\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokens\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesGiven\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesGivenPerToken\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesReceived\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesReceivedPerToken\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n { \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n { \"name\": \"previousOwner\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"newOwner\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokenAddedToList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"indexed\": false, \"internalType\": \"uint24\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokenRemovedFromList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"UserUpvoted\",\n \"inputs\": [\n { \"name\": \"upvoter\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"upvotedUser\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"numUpvotes\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n ],\n \"anonymous\": false\n },\n { \"type\": \"error\", \"name\": \"IncorrectEthSent\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"MaxTokensReached\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoAlphaToWithdraw\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [{ \"name\": \"owner\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [{ \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotFound\",\n \"inputs\": [\n { \"name\": \"tokenA\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokenB\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [{ \"name\": \"pool\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringsInsufficientHexLength\",\n \"inputs\": [\n { \"name\": \"value\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"length\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"TokenAlreadyInList\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"TokenNotInUserList\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"UserCannotUpvoteSelf\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"ZeroUpvotes\", \"inputs\": [] }\n]\n","import type { Abi, Address } from \"viem\";\nimport scoreAbi from \"./abis/score.json\";\nimport upvoteAppAbi from \"./abis/upvote-app.json\";\nimport upvoteStorageAppAbi from \"./abis/upvote-storage-app.json\";\nimport pureAlphaStrategyAbi from \"./abis/pure-alpha-strategy.json\";\nimport univ234PoolsStrategyAbi from \"./abis/univ234-pools-strategy.json\";\nimport dynamicSplitStrategyAbi from \"./abis/dynamic-split-strategy.json\";\nimport multiVersionUniswapBulkPoolFinderAbi from \"./abis/multi-version-uniswap-bulk-pool-finder.json\";\nimport multiVersionUniswapPoolInfoRetrieverAbi from \"./abis/multi-version-uniswap-pool-info-retriever.json\";\nimport userUpvoteAbi from \"./abis/user-upvote.json\";\nimport erc20BulkInfoHelperAbi from \"./abis/erc20-bulk-info-helper.json\";\n\n// Score core contract (v2 strategy)\nexport const SCORE_CONTRACT = {\n address: \"0x0000000fa09b022e5616e5a173b4b67fa2fbcf28\" as Address,\n abi: scoreAbi as Abi,\n} as const;\n\n// UpvoteApp contract\nexport const UPVOTE_APP = {\n address: \"0x00000001f0b8173316a016a5067ad74e8cea47bf\" as Address,\n abi: upvoteAppAbi as Abi,\n} as const;\n\n// UpvoteStorageApp contract\nexport const UPVOTE_STORAGE_APP = {\n address: \"0x000000060CEB69D023227DF64CfB75eC37c75B62\" as Address,\n abi: upvoteStorageAppAbi as Abi,\n} as const;\n\n// UpvotePureAlphaStrategy contract\nexport const PURE_ALPHA_STRATEGY = {\n address: \"0x00000001b1bcdeddeafd5296aaf4f3f3e21ae876\" as Address,\n abi: pureAlphaStrategyAbi as Abi,\n} as const;\n\n// UpvoteUniv234PoolsStrategy (handles Uniswap V2, V3, V4 pools)\nexport const UNIV234_POOLS_STRATEGY = {\n address: \"0x000000063f84e07a3e7a7ee578b42704ee6d22c9\" as Address,\n abi: univ234PoolsStrategyAbi as Abi,\n} as const;\n\n// UpvoteDynamicSplitUniv234PoolsStrategy (configurable token/alpha split for Uni V2/V3/V4 pools)\nexport const DYNAMIC_SPLIT_STRATEGY = {\n address: \"0x0000000869160f0b2a213adefb46a7ea7e62ac7a\" as Address,\n abi: dynamicSplitStrategyAbi as Abi,\n} as const;\n\n// All strategy addresses for batch queries\nexport const ALL_STRATEGY_ADDRESSES: Address[] = [\n UNIV234_POOLS_STRATEGY.address,\n PURE_ALPHA_STRATEGY.address,\n DYNAMIC_SPLIT_STRATEGY.address,\n];\n\n// Legacy upvote contract addresses (v1 and v2, before Score system)\nexport const LEGACY_UPVOTE_V1_ADDRESS =\n \"0x0ada882dbbdc12388a1f9ca85d2d847088f747df\" as Address;\n\nexport const LEGACY_UPVOTE_V2_ADDRESS =\n \"0x9027dcad0a3dca5835895e14fbc022a1e5ea909b\" as Address;\n\n// Chains where the Score system is deployed\nexport const SUPPORTED_SCORE_CHAINS = [8453] as const;\n\n// Pool discovery contracts\nexport const MULTI_VERSION_UNISWAP_BULK_POOL_FINDER = {\n address: \"0xbc237dac4c74c170780fc12f353a258bdd31a8cf\" as Address,\n abi: multiVersionUniswapBulkPoolFinderAbi as Abi,\n} as const;\n\nexport const MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER = {\n address: \"0x00000002986Ca76897216a8A3A7Db10FcB0d29Cf\" as Address,\n abi: multiVersionUniswapPoolInfoRetrieverAbi as Abi,\n} as const;\n\n// WETH addresses by chain\nconst WETH_BY_CHAIN: Record<number, Address> = {\n 8453: \"0x4200000000000000000000000000000000000006\", // Base (L2 predeploy)\n 1: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\", // Ethereum mainnet\n};\n\n/**\n * Get the WETH address for a given chain.\n */\nexport function getWethAddress(chainId: number): Address {\n const addr = WETH_BY_CHAIN[chainId];\n if (!addr) {\n throw new Error(`Score: No WETH address for chain ${chainId}`);\n }\n return addr;\n}\n\n// Common addresses\nexport const NULL_ADDRESS =\n \"0x0000000000000000000000000000000000000000\" as Address;\n\n// Upvote pricing\nexport const UPVOTE_PRICE_ETH = 0.000025;\n\n// User upvote contract (standalone user-to-user upvote system, separate from Score)\nexport const USER_UPVOTE_CONTRACT = {\n address: \"0xa4bc2c63dd0157692fd5f409389e5032e37d8895\" as Address,\n abi: userUpvoteAbi as Abi,\n} as const;\n\n// ERC20 bulk info helper (name/symbol/decimals/totalSupply/burnedTokens in one call)\nexport const ERC20_BULK_INFO_HELPER_CONTRACT = {\n address: \"0x00000051809cbfacdf7d08ada813836822b880a2\" as Address,\n abi: erc20BulkInfoHelperAbi as Abi,\n} as const;\n","import { useReadContract } from \"wagmi\";\nimport { UPVOTE_APP, ALL_STRATEGY_ADDRESSES } from \"../constants\";\nimport type { UseUpvotesOptions } from \"../types\";\n\n/**\n * React hook for fetching the upvote count for a single score key.\n * Uses UpvoteApp.getUpvotesWithLegacy, which aggregates across legacy contracts and strategies.\n *\n * @param options - Upvote query options\n * @param options.chainId - Chain ID to query\n * @param options.scoreKey - The bytes32 score key to look up\n * @param options.strategies - Strategy addresses to include (default: all strategies)\n * @param options.enabled - Whether the query is enabled (default: true)\n * @returns Object with upvotes count, isLoading, error, and refetch\n *\n * @example\n * ```tsx\n * const { upvotes, isLoading } = useUpvotes({\n * chainId: 8453,\n * scoreKey: getTokenScoreKey(tokenAddress),\n * });\n * ```\n */\nexport function useUpvotes({\n chainId,\n scoreKey,\n strategies = ALL_STRATEGY_ADDRESSES,\n enabled = true,\n}: UseUpvotesOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: UPVOTE_APP.address,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [[scoreKey], strategies],\n chainId,\n query: { enabled },\n });\n\n return {\n upvotes: Array.isArray(data) && data.length > 0 ? Number(data[0]) : 0,\n isLoading,\n error,\n refetch,\n };\n}\n","import { decodeAbiParameters, type Address } from \"viem\";\nimport {\n PURE_ALPHA_STRATEGY,\n UNIV234_POOLS_STRATEGY,\n DYNAMIC_SPLIT_STRATEGY,\n} from \"../constants\";\nimport type {\n PureAlphaMetadata,\n PoolStrategyMetadata,\n DecodedStrategyMetadata,\n PoolKey,\n} from \"../types\";\n\n/**\n * Convert token address to bytes32 upvote key.\n */\nexport const encodeUpvoteKey = (tokenAddress: string): `0x${string}` => {\n return `0x${BigInt(`0x${tokenAddress.slice(2)}`)\n .toString(16)\n .padStart(64, \"0\")}`;\n};\n\n/**\n * Convert token address to upvote key string format.\n * Strips leading zeros to match Solidity's Strings.toHexString(uint256(scoreKey)).\n */\nexport function tokenAddressToUpvoteKeyString(tokenAddress: string): string {\n const lower = tokenAddress.toLowerCase();\n const withoutPrefix = lower.slice(2);\n const stripped = withoutPrefix.replace(/^0+/, \"\") || \"0\";\n return \"0x\" + stripped;\n}\n\n/**\n * Check if a topic string represents a strategy message.\n */\nexport function isStrategyMessage(topic: string): boolean {\n return topic.startsWith(\"s\") && topic.length > 43;\n}\n\n/**\n * Check if a topic string represents a user upvote message.\n */\nexport function isUserUpvoteMessage(topic: string): boolean {\n return topic.startsWith(\"t\");\n}\n\n/**\n * Extracts strategy address from topic string.\n * Handles both new format and legacy format.\n */\nexport function extractStrategyAddress(topic: string): string {\n try {\n if (topic.startsWith(\"t\")) {\n return topic.slice(1);\n }\n\n if (topic.startsWith(\"s\")) {\n return topic.slice(1, 43);\n }\n\n if (topic.startsWith(\"t-\")) {\n return topic.slice(2);\n }\n\n const parts = topic.split(\"-\");\n if (parts.length >= 2) {\n return parts[0];\n }\n\n return \"\";\n } catch {\n return \"\";\n }\n}\n\nexport function isPureAlphaStrategy(strategyAddress: string): boolean {\n return (\n strategyAddress.toLowerCase() ===\n PURE_ALPHA_STRATEGY.address.toLowerCase()\n );\n}\n\nexport function isUniv234PoolsStrategy(strategyAddress: string): boolean {\n return (\n strategyAddress.toLowerCase() ===\n UNIV234_POOLS_STRATEGY.address.toLowerCase()\n );\n}\n\nexport function isDynamicSplitStrategy(strategyAddress: string): boolean {\n return (\n strategyAddress.toLowerCase() ===\n DYNAMIC_SPLIT_STRATEGY.address.toLowerCase()\n );\n}\n\n/**\n * Decode strategy-specific metadata from ABI-encoded bytes.\n */\nexport const decodeStrategyMetadata = (\n metadata: `0x${string}`,\n strategyAddress: string\n): DecodedStrategyMetadata => {\n try {\n if (isPureAlphaStrategy(strategyAddress)) {\n const [alphaAmount, alphaWethPrice, wethUsdcPrice, userAlphaBalance] =\n decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n metadata\n );\n return {\n alphaAmount,\n alphaWethPrice,\n wethUsdcPrice,\n userAlphaBalance,\n } as PureAlphaMetadata;\n } else if (\n isUniv234PoolsStrategy(strategyAddress) ||\n isDynamicSplitStrategy(strategyAddress)\n ) {\n const [\n tokenAmount,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n metadata\n );\n return {\n tokenAmount,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n } as PoolStrategyMetadata;\n } else {\n return null;\n }\n } catch {\n return null;\n }\n};\n\n/**\n * Decode the full Score storage blob.\n */\nexport const decodeUpvoteStorageBlob = (value: `0x${string}`) => {\n try {\n const [\n scoreKey,\n scoreDelta,\n originalSender,\n appAddress,\n strategyAddress,\n timestamp,\n scoreStoredContext,\n scoreUnstoredContext,\n metadata,\n ] = decodeAbiParameters(\n [\n { type: \"bytes32\" },\n { type: \"int256\" },\n { type: \"address\" },\n { type: \"address\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"bytes\" },\n { type: \"bytes\" },\n { type: \"bytes\" },\n ],\n value\n );\n\n const decodedMetadata = decodeStrategyMetadata(\n metadata as `0x${string}`,\n strategyAddress as string\n );\n\n return {\n scoreKey: scoreKey as `0x${string}`,\n scoreDelta: Number(scoreDelta),\n originalSender: originalSender as Address,\n appAddress: appAddress as Address,\n strategyAddress: strategyAddress as Address,\n timestamp: Number(timestamp),\n scoreStoredContext: scoreStoredContext as `0x${string}`,\n scoreUnstoredContext: scoreUnstoredContext as `0x${string}`,\n decodedMetadata,\n };\n } catch {\n return null;\n }\n};\n\n/**\n * Select the appropriate strategy based on pool key validity.\n * Returns PURE_ALPHA if no valid pool key; DYNAMIC_SPLIT otherwise.\n */\nexport const selectStrategy = (poolKey?: PoolKey | null): Address => {\n if (!poolKey || !isValidPoolKey(poolKey)) {\n return PURE_ALPHA_STRATEGY.address;\n }\n return DYNAMIC_SPLIT_STRATEGY.address;\n};\n\nfunction isValidPoolKey(poolKey: PoolKey): boolean {\n return (\n poolKey.fee !== undefined ||\n poolKey.tickSpacing !== undefined ||\n poolKey.currency0 !== undefined\n );\n}\n\n/**\n * Decode an upvote message from Net protocol into a consistent format.\n * Handles both legacy and strategy message formats.\n */\nexport function decodeUpvoteMessage(msg: {\n topic: string;\n data: `0x${string}`;\n text: string;\n}) {\n try {\n if (msg.topic === \"t\") {\n if (!msg.data || msg.data === \"0x\" || msg.data.length < 32) {\n return null;\n }\n\n try {\n const [\n numUpvotesDecoded,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n msg.data\n );\n\n return {\n scoreDelta: Number(numUpvotesDecoded),\n tokenWethPrice: Number(tokenWethPrice),\n wethUsdcPrice: Number(wethUsdcPrice),\n alphaWethPrice: Number(alphaWethPrice),\n userTokenBalance: Number(userTokenBalance),\n tokenAddress: msg.text,\n messageType: \"legacy\" as const,\n };\n } catch {\n return null;\n }\n } else if (\n (msg.topic.startsWith(\"0x\") && msg.topic.length === 42) ||\n msg.topic.startsWith(\"p-\")\n ) {\n const [\n numUpvotesDecoded,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n msg.data\n );\n\n return {\n scoreDelta: Number(numUpvotesDecoded),\n tokenWethPrice: Number(tokenWethPrice),\n wethUsdcPrice: Number(wethUsdcPrice),\n alphaWethPrice: Number(alphaWethPrice),\n userTokenBalance: Number(userTokenBalance),\n tokenAddress: msg.topic,\n messageType: \"legacy\" as const,\n };\n } else if (msg.topic.startsWith(\"app-\") && msg.topic.endsWith(\"-first\")) {\n const topicParts = msg.topic.split(\"-\");\n\n if (topicParts.length === 3) {\n // \"app-{addr}-first\"\n return {\n appAddress: topicParts[1],\n messageType: \"app-first\" as const,\n };\n } else if (topicParts.length === 5 && topicParts[2] === \"strategy\") {\n // \"app-{addr}-strategy-{strat}-first\"\n return {\n appAddress: topicParts[1],\n strategyAddress: topicParts[3],\n messageType: \"app-strategy-first\" as const,\n };\n } else if (topicParts.length === 5 && topicParts[2] === \"user\") {\n // \"app-{addr}-user-{user}-first\"\n return {\n appAddress: topicParts[1],\n userAddress: topicParts[3],\n tokenAddress: msg.text,\n messageType: \"app-user-first\" as const,\n };\n } else if (\n topicParts.length === 7 &&\n topicParts[2] === \"strategy\" &&\n topicParts[4] === \"user\"\n ) {\n // \"app-{addr}-strategy-{strat}-user-{user}-first\"\n return {\n appAddress: topicParts[1],\n strategyAddress: topicParts[3],\n userAddress: topicParts[5],\n tokenAddress: msg.text,\n messageType: \"app-strategy-user-first\" as const,\n };\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n","import {\n type Address,\n encodeAbiParameters,\n keccak256,\n encodePacked,\n getAddress,\n} from \"viem\";\nimport { getStorageKeyBytes } from \"@net-protocol/storage\";\nimport { encodeUpvoteKey } from \"./strategyUtils\";\nimport type { ScoreItem, FeedMessage } from \"../types\";\n\n/**\n * Generate score key for token upvotes.\n * Pads the token address into a bytes32 value.\n */\nexport const getTokenScoreKey = (tokenAddress: string): `0x${string}` => {\n return encodeUpvoteKey(tokenAddress);\n};\n\n/**\n * Generate score key for storage upvotes.\n * keccak256(encodePacked(storageKeyBytes32, operatorAddress))\n */\nexport const getStorageScoreKey = (\n operatorAddress: string,\n storageKey: string\n): `0x${string}` => {\n const bytes32Key = getStorageKeyBytes(storageKey) as `0x${string}`;\n return keccak256(\n encodePacked(\n [\"bytes32\", \"address\"],\n [bytes32Key, operatorAddress as Address]\n )\n );\n};\n\n/**\n * Generate content-based key for feed posts.\n * Uses all message content to create a unique identifier that's\n * independent of query filter (works regardless of how messages are fetched).\n *\n * Two messages with identical content will share the same key (and upvotes),\n * which is semantically correct - they are the same content.\n */\nexport const getFeedContentKey = (message: FeedMessage): `0x${string}` => {\n return keccak256(\n encodePacked(\n [\"address\", \"string\", \"address\", \"uint256\", \"string\", \"bytes\"],\n [\n message.app,\n message.topic,\n message.sender,\n message.timestamp,\n message.text,\n message.data,\n ]\n )\n );\n};\n\n/**\n * Get score key for any ScoreItem type.\n */\nexport const getScoreKey = (item: ScoreItem): `0x${string}` => {\n switch (item.type) {\n case \"token\":\n return getTokenScoreKey(item.tokenAddress);\n case \"storage\":\n return getStorageScoreKey(item.operatorAddress, item.storageKey);\n case \"feed\": {\n const contentKey = getFeedContentKey(item.message);\n return getStorageScoreKey(\n item.message.sender,\n contentKey\n );\n }\n }\n};\n\n/**\n * Check if a score key represents a token upvote (zero-padded address)\n * vs a hash-based key (storage/feed).\n */\nexport const isTokenScoreKey = (scoreKey: string): boolean => {\n return scoreKey.startsWith(\"0x000000000000000000000000\");\n};\n\n/**\n * Extract and validate token address from a token score key.\n * Returns the checksummed address or null if invalid.\n */\nexport const extractTokenAddressFromScoreKey = (\n scoreKey: string\n): string | null => {\n if (!isTokenScoreKey(scoreKey)) {\n return null;\n }\n\n const tokenAddress = `0x${scoreKey.slice(26)}`;\n\n if (tokenAddress.startsWith(\"0x\") && tokenAddress.length === 42) {\n try {\n return getAddress(tokenAddress);\n } catch {\n return null;\n }\n }\n\n return null;\n};\n\n/**\n * Generate upvote stored context for storage upvotes.\n * ABI-encodes (bytes32 storageKeyBytes, address operatorAddress).\n */\nexport const getStorageUpvoteContext = (\n operatorAddress: string,\n storageKey: string\n): `0x${string}` => {\n const bytes32Key = getStorageKeyBytes(storageKey) as `0x${string}`;\n return encodeAbiParameters(\n [{ type: \"bytes32\" }, { type: \"address\" }],\n [bytes32Key, operatorAddress as Address]\n );\n};\n","import { useMemo } from \"react\";\nimport { useReadContract } from \"wagmi\";\nimport { UPVOTE_APP, ALL_STRATEGY_ADDRESSES } from \"../constants\";\nimport { getScoreKey } from \"../utils/scoreKeyUtils\";\nimport type { UseUpvotesBatchOptions } from \"../types\";\n\n/**\n * React hook for fetching upvote counts for multiple ScoreItems in a single contract call.\n * Uses UpvoteApp.getUpvotesWithLegacy with batched score keys.\n *\n * @param options - Batch upvote query options\n * @param options.chainId - Chain ID to query\n * @param options.items - Array of ScoreItems (token, storage, or feed) to get counts for\n * @param options.strategies - Strategy addresses to include (default: all strategies)\n * @param options.enabled - Whether the query is enabled (default: true)\n * @returns Object with upvoteCounts array, isLoading, error, and refetch\n *\n * @example\n * ```tsx\n * const { upvoteCounts, isLoading } = useUpvotesBatch({\n * chainId: 8453,\n * items: [\n * { type: \"token\", tokenAddress: \"0x...\" },\n * { type: \"storage\", operatorAddress: \"0x...\", storageKey: \"my-key\" },\n * ],\n * });\n * ```\n */\nexport function useUpvotesBatch({\n chainId,\n items,\n strategies = ALL_STRATEGY_ADDRESSES,\n enabled = true,\n}: UseUpvotesBatchOptions) {\n const scoreKeys = useMemo(\n () => items.map((item) => getScoreKey(item)),\n [items]\n );\n\n const { data, isLoading, error, refetch } = useReadContract({\n address: UPVOTE_APP.address,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [scoreKeys, strategies],\n chainId,\n query: { enabled: enabled && scoreKeys.length > 0 },\n });\n\n return {\n upvoteCounts: Array.isArray(data) ? (data as bigint[]).map(Number) : [],\n isLoading,\n error,\n refetch,\n };\n}\n","import { useMemo } from \"react\";\nimport { useUpvotes } from \"./useUpvotes\";\nimport { getTokenScoreKey } from \"../utils/scoreKeyUtils\";\nimport type { UseTokenUpvotesOptions } from \"../types\";\n\n/**\n * Convenience React hook for fetching upvotes for a single token address.\n * Wraps useUpvotes with automatic token score key generation.\n *\n * @param options - Token upvote query options\n * @param options.chainId - Chain ID to query\n * @param options.tokenAddress - The token contract address\n * @param options.enabled - Whether the query is enabled (default: true)\n * @returns Object with upvotes count, isLoading, error, and refetch\n *\n * @example\n * ```tsx\n * const { upvotes, isLoading } = useTokenUpvotes({\n * chainId: 8453,\n * tokenAddress: \"0x...\",\n * });\n * ```\n */\nexport function useTokenUpvotes({\n chainId,\n tokenAddress,\n enabled = true,\n}: UseTokenUpvotesOptions) {\n const scoreKey = useMemo(\n () => getTokenScoreKey(tokenAddress),\n [tokenAddress]\n );\n\n return useUpvotes({ chainId, scoreKey, enabled });\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesGivenOptions } from \"../types\";\n\nexport function useUserUpvotesGiven({\n chainId,\n userAddress,\n enabled = true,\n}: UseUserUpvotesGivenOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGiven\",\n args: [userAddress],\n chainId,\n query: { enabled: enabled && !!userAddress },\n });\n\n return {\n upvotes: typeof data === \"bigint\" ? Number(data) : 0,\n isLoading,\n error,\n refetch,\n };\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesReceivedOptions } from \"../types\";\n\nexport function useUserUpvotesReceived({\n chainId,\n userAddress,\n enabled = true,\n}: UseUserUpvotesReceivedOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceived\",\n args: [userAddress],\n chainId,\n query: { enabled: enabled && !!userAddress },\n });\n\n return {\n upvotes: typeof data === \"bigint\" ? Number(data) : 0,\n isLoading,\n error,\n refetch,\n };\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesGivenPerTokenBatchOptions } from \"../types\";\n\nexport function useUserUpvotesGivenPerTokenBatch({\n chainId,\n userAddress,\n tokenAddresses,\n enabled = true,\n}: UseUserUpvotesGivenPerTokenBatchOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGivenPerTokenBatch\",\n args: [userAddress, tokenAddresses],\n chainId,\n query: { enabled: enabled && tokenAddresses.length > 0 },\n });\n\n return {\n upvoteCounts: Array.isArray(data) ? (data as bigint[]).map(Number) : [],\n isLoading,\n error,\n refetch,\n };\n}\n","import { useReadContract } from \"wagmi\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUserUpvotesReceivedPerTokenBatchOptions } from \"../types\";\n\nexport function useUserUpvotesReceivedPerTokenBatch({\n chainId,\n userAddress,\n tokenAddresses,\n enabled = true,\n}: UseUserUpvotesReceivedPerTokenBatchOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceivedPerTokenBatch\",\n args: [userAddress, tokenAddresses],\n chainId,\n query: { enabled: enabled && tokenAddresses.length > 0 },\n });\n\n return {\n upvoteCounts: Array.isArray(data) ? (data as bigint[]).map(Number) : [],\n isLoading,\n error,\n refetch,\n };\n}\n","import { type Address } from \"viem\";\nimport { useWriteContract } from \"wagmi\";\nimport { getBaseDataSuffix } from \"@net-protocol/core\";\nimport { USER_UPVOTE_CONTRACT, NULL_ADDRESS } from \"../constants\";\nimport type { UseUpvoteUserOptions } from \"../types\";\n\nexport function useUpvoteUser({ chainId }: UseUpvoteUserOptions) {\n const { writeContractAsync, isPending, isSuccess, error, data: hash, reset } =\n useWriteContract();\n\n const upvoteUser = async (params: {\n userToUpvote: Address;\n token?: Address;\n numUpvotes: number;\n feeTier?: number;\n value: bigint;\n }) => {\n return writeContractAsync({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvoteUser\",\n args: [\n params.userToUpvote,\n params.token ?? NULL_ADDRESS,\n BigInt(params.numUpvotes),\n BigInt(params.feeTier ?? 0),\n ],\n value: params.value,\n chainId,\n dataSuffix: getBaseDataSuffix(chainId),\n });\n };\n\n return { upvoteUser, isPending, isSuccess, error, hash, reset };\n}\n","import { useReadContract } from \"wagmi\";\nimport { formatEther } from \"viem\";\nimport { USER_UPVOTE_CONTRACT } from \"../constants\";\nimport type { UseUpvotePriceOptions } from \"../types\";\n\nexport function useUpvotePrice({\n chainId,\n enabled = true,\n}: UseUpvotePriceOptions) {\n const { data, isLoading, error, refetch } = useReadContract({\n address: USER_UPVOTE_CONTRACT.address,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvotePrice\",\n chainId,\n query: { enabled },\n });\n\n const price = typeof data === \"bigint\" ? data : 0n;\n const priceInEth = price > 0n ? Number(formatEther(price)) : 0;\n\n return {\n price,\n priceInEth,\n isLoading,\n error,\n refetch,\n };\n}\n","import { type Address, type PublicClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport {\n MULTI_VERSION_UNISWAP_BULK_POOL_FINDER,\n MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER,\n getWethAddress,\n NULL_ADDRESS,\n} from \"../constants\";\nimport type { PoolKey, PoolDiscoveryResult, PoolDiscoveryPair } from \"../types\";\n\n// ============================================================================\n// Internal types\n// ============================================================================\n\ntype PairInput = PoolDiscoveryPair;\n\ntype V4PoolKeyLike = {\n currency0: Address;\n currency1: Address;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n};\n\ntype RawPoolDiscovery = {\n pairIndex: bigint;\n version: number;\n poolAddress: Address;\n poolKey: V4PoolKeyLike;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n};\n\ntype PoolFullInfo = {\n poolAddress: Address;\n token0: Address;\n token1: Address;\n token0Decimals: number;\n token1Decimals: number;\n sqrtPriceX96: bigint;\n baseTokenBalance: bigint;\n token0Balance: bigint;\n token1Balance: bigint;\n liquidity: bigint;\n};\n\ntype PairMeta = {\n tokenAddress: string;\n baseTokenAddress: string;\n fee: number;\n};\n\ntype Discoveries = {\n v2PoolAddresses: Address[];\n v3PoolAddresses: Address[];\n v4PoolKeys: V4PoolKeyLike[];\n v2PoolAddressToPair: Record<string, PairMeta>;\n v3PoolAddressToPair: Record<string, PairMeta>;\n v4PoolKeyToPair: Record<string, PairMeta>;\n};\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst V3_V4_FEE_TIERS = [500, 3000, 10000, 12000, 8388608];\nconst V4_TICK_SPACINGS = [200];\nconst V4_HOOKS: Address[] = [\n NULL_ADDRESS,\n \"0xDd5EeaFf7BD481AD55Db083062b13a3cdf0A68CC\",\n \"0x34a45c6B61876d739400Bd71228CbcbD4F53E8cC\",\n \"0xb429d62f8f3bFFb98CdB9569533eA23bF0Ba28CC\",\n \"0xd60D6B218116cFd801E28F78d011a203D2b068Cc\",\n \"0x3e342a06f9592459D75721d6956B570F02eF2Dc0\",\n \"0xbB7784A4d481184283Ed89619A3e3ed143e1Adc0\",\n \"0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544\",\n];\n\nconst Q96 = BigInt(2) ** BigInt(96);\nconst ZERO_BI = BigInt(0);\n\n// Derived WETH amount (wei) for a V4 pool at its current price.\n// WETH = currency1: L * sqrtPriceX96 / Q96\n// WETH = currency0: L * Q96 / sqrtPriceX96\n// Only counts in-range liquidity, which is sufficient for selection.\nfunction deriveV4WethDepthWei(\n liquidity: bigint,\n sqrtPriceX96: bigint,\n wethIsCurrency1: boolean\n): bigint {\n if (sqrtPriceX96 === ZERO_BI || liquidity === ZERO_BI) return ZERO_BI;\n if (wethIsCurrency1) {\n return (liquidity * sqrtPriceX96) / Q96;\n }\n return (liquidity * Q96) / sqrtPriceX96;\n}\n\n// WETH-side balance for a V2/V3 pool. Mirrors the V4 helper so selection can\n// compare both versions on the same `wethDepthWei` axis.\nfunction deriveV2V3WethDepthWei(\n info: PoolFullInfo,\n wethLower: string\n): bigint {\n if ((info.token0 ?? \"\").toLowerCase() === wethLower) {\n return BigInt(info.token0Balance ?? 0);\n }\n if ((info.token1 ?? \"\").toLowerCase() === wethLower) {\n return BigInt(info.token1Balance ?? 0);\n }\n return BigInt(info.baseTokenBalance ?? 0);\n}\n\n// ============================================================================\n// Pure helper functions\n// ============================================================================\n\nexport function normalizeTokenPairs(pairs: PairInput[], wethAddress: Address) {\n return pairs.map((pair) => {\n const tokenA = pair.tokenAddress;\n const tokenB = pair.baseTokenAddress || wethAddress;\n\n return {\n originalPair: pair,\n tokenA: tokenA.toLowerCase() < tokenB.toLowerCase() ? tokenA : tokenB,\n tokenB: tokenA.toLowerCase() < tokenB.toLowerCase() ? tokenB : tokenA,\n };\n });\n}\n\nfunction buildDiscoveryArgs(\n normalizedPairs: ReturnType<typeof normalizeTokenPairs>\n) {\n return {\n tokenAs: normalizedPairs.map((p) => p.tokenA),\n tokenBs: normalizedPairs.map((p) => p.tokenB),\n fees: V3_V4_FEE_TIERS,\n v4TickSpacings: V4_TICK_SPACINGS,\n v4Hooks: V4_HOOKS,\n };\n}\n\nexport function parsePoolDiscoveries(\n poolResults: readonly [RawPoolDiscovery[], bigint] | undefined,\n pairs: PairInput[],\n wethAddress: Address\n): Discoveries {\n if (!poolResults) {\n return {\n v2PoolAddresses: [],\n v3PoolAddresses: [],\n v4PoolKeys: [],\n v2PoolAddressToPair: {},\n v3PoolAddressToPair: {},\n v4PoolKeyToPair: {},\n };\n }\n\n const [discoveries, countRaw] = poolResults;\n const countNum =\n typeof countRaw === \"bigint\" ? Number(countRaw) : Number(countRaw || 0);\n\n const v2PoolAddresses: Address[] = [];\n const v3PoolAddresses: Address[] = [];\n const v4PoolKeys: V4PoolKeyLike[] = [];\n const seenV2V3Addresses = new Set<string>();\n const seenV4Keys = new Set<string>();\n\n const v2PoolAddressToPair: Record<string, PairMeta> = {};\n const v3PoolAddressToPair: Record<string, PairMeta> = {};\n const v4PoolKeyToPair: Record<string, PairMeta> = {};\n\n for (let i = 0; i < Math.min(countNum, discoveries.length); i++) {\n const discovery: RawPoolDiscovery = discoveries[i] as RawPoolDiscovery;\n const version = Number(discovery?.version ?? 0);\n const poolAddressValue = discovery?.poolAddress as string | undefined;\n const pairIndex = Number(discovery?.pairIndex ?? 0);\n const feeNum = Number(discovery?.fee ?? 0);\n const poolKey = discovery?.poolKey;\n\n const pair = pairs[pairIndex];\n if (!pair) continue;\n\n if (\n version === 2 &&\n poolAddressValue &&\n poolAddressValue !== NULL_ADDRESS\n ) {\n const poolAddress = poolAddressValue.toLowerCase();\n if (!seenV2V3Addresses.has(poolAddress)) {\n seenV2V3Addresses.add(poolAddress);\n v2PoolAddresses.push(poolAddressValue as Address);\n v2PoolAddressToPair[poolAddress] = {\n tokenAddress: pair.tokenAddress,\n baseTokenAddress: pair.baseTokenAddress || wethAddress,\n fee: feeNum,\n };\n }\n } else if (\n version === 3 &&\n poolAddressValue &&\n poolAddressValue !== NULL_ADDRESS\n ) {\n const poolAddress = poolAddressValue.toLowerCase();\n if (!seenV2V3Addresses.has(poolAddress)) {\n seenV2V3Addresses.add(poolAddress);\n v3PoolAddresses.push(poolAddressValue as Address);\n v3PoolAddressToPair[poolAddress] = {\n tokenAddress: pair.tokenAddress,\n baseTokenAddress: pair.baseTokenAddress || wethAddress,\n fee: feeNum,\n };\n }\n } else if (version === 4 && poolKey) {\n const poolKeyString = JSON.stringify(poolKey);\n if (!seenV4Keys.has(poolKeyString)) {\n seenV4Keys.add(poolKeyString);\n v4PoolKeys.push(poolKey);\n v4PoolKeyToPair[poolKeyString] = {\n tokenAddress: pair.tokenAddress,\n baseTokenAddress: pair.baseTokenAddress || wethAddress,\n fee: feeNum,\n };\n }\n }\n }\n\n return {\n v2PoolAddresses,\n v3PoolAddresses,\n v4PoolKeys,\n v2PoolAddressToPair,\n v3PoolAddressToPair,\n v4PoolKeyToPair,\n };\n}\n\nfunction determinePoolVersion(discoveries: Discoveries, index: number) {\n const {\n v2PoolAddresses,\n v3PoolAddresses,\n v4PoolKeys,\n v2PoolAddressToPair,\n v3PoolAddressToPair,\n v4PoolKeyToPair,\n } = discoveries;\n\n if (index < v2PoolAddresses.length) {\n const poolAddress = v2PoolAddresses[index].toLowerCase();\n return {\n version: 2,\n pair: v2PoolAddressToPair[poolAddress],\n fee: 0,\n v4PoolKey: undefined,\n };\n } else if (index < v2PoolAddresses.length + v3PoolAddresses.length) {\n const v3Index = index - v2PoolAddresses.length;\n const poolAddress = v3PoolAddresses[v3Index].toLowerCase();\n return {\n version: 3,\n pair: v3PoolAddressToPair[poolAddress],\n fee: v3PoolAddressToPair[poolAddress]?.fee || 0,\n v4PoolKey: undefined,\n };\n } else {\n const v4Index = index - v2PoolAddresses.length - v3PoolAddresses.length;\n const poolKey = v4PoolKeys[v4Index];\n const poolKeyString = JSON.stringify(poolKey);\n return {\n version: 4,\n pair: v4PoolKeyToPair[poolKeyString],\n fee: v4PoolKeyToPair[poolKeyString]?.fee || 0,\n v4PoolKey: poolKey,\n };\n }\n}\n\n/**\n * Calculate price from sqrtPriceX96 for Uniswap V3/V4 pools.\n */\nexport function calculatePriceFromSqrtPriceX96(\n sqrtPriceX96: bigint,\n token0Decimals: number,\n token1Decimals: number,\n isToken0: boolean\n): number {\n const sqrtPrice = Number(sqrtPriceX96);\n if (sqrtPrice === 0) return 0;\n\n const priceX96 = (sqrtPrice / 2 ** 96) ** 2;\n\n if (isToken0) {\n return priceX96 * 10 ** (token0Decimals - token1Decimals);\n } else {\n return (1 / priceX96) * 10 ** (token1Decimals - token0Decimals);\n }\n}\n\nfunction calculatePoolPrice(\n info: PoolFullInfo,\n pair: PairMeta,\n version: number\n): number | null {\n try {\n const sqrtPriceX96 = Number(info.sqrtPriceX96);\n const token0Decimals = Number(info.token0Decimals);\n const token1Decimals = Number(info.token1Decimals);\n const isToken0 =\n info.token0.toLowerCase() === pair.tokenAddress.toLowerCase();\n\n if (version === 2) {\n const token0Balance = Number(info.token0Balance) / 10 ** token0Decimals;\n const token1Balance = Number(info.token1Balance) / 10 ** token1Decimals;\n\n if (token0Balance === 0 || token1Balance === 0) return null;\n\n if (isToken0) {\n return token1Balance / token0Balance;\n } else {\n return token0Balance / token1Balance;\n }\n } else {\n if (sqrtPriceX96 === 0) return null;\n\n if (isToken0) {\n return (\n (sqrtPriceX96 / 2 ** 96) ** 2 *\n 10 ** (token0Decimals - token1Decimals)\n );\n } else {\n const priceX96 = (sqrtPriceX96 / 2 ** 96) ** 2;\n return (1 / priceX96) * 10 ** (token1Decimals - token0Decimals);\n }\n }\n } catch {\n return null;\n }\n}\n\nexport function constructPoolKey(\n info: PoolFullInfo,\n pair: PairMeta,\n version: number,\n v4PoolKey?: V4PoolKeyLike\n): PoolKey | undefined {\n try {\n if (!info.token0 || !info.token1 || typeof pair.fee !== \"number\") {\n return undefined;\n }\n\n if (!info.token0.startsWith(\"0x\") || !info.token1.startsWith(\"0x\")) {\n return undefined;\n }\n\n const currency0 =\n info.token0.toLowerCase() < info.token1.toLowerCase()\n ? info.token0\n : info.token1;\n const currency1 =\n info.token0.toLowerCase() < info.token1.toLowerCase()\n ? info.token1\n : info.token0;\n\n if (version === 2) {\n return {\n currency0,\n currency1,\n fee: 0,\n tickSpacing: 0,\n hooks: NULL_ADDRESS,\n };\n } else if (version === 3) {\n return {\n currency0,\n currency1,\n fee: pair.fee,\n tickSpacing: 0,\n hooks: NULL_ADDRESS,\n };\n } else {\n if (!v4PoolKey || !v4PoolKey.currency0 || !v4PoolKey.currency1) {\n return undefined;\n }\n return v4PoolKey as PoolKey;\n }\n } catch {\n return undefined;\n }\n}\n\n// ============================================================================\n// Pool selection\n// ============================================================================\n\ntype PoolWithMeta = {\n tokenAddress: string;\n baseTokenAddress: string;\n poolAddress: Address | null;\n price: number | null;\n baseTokenBalance: string;\n token0?: Address;\n token1?: Address;\n token0Balance: string;\n token1Balance: string;\n fee: number;\n poolKey?: PoolKey;\n liquidity: string;\n wethDepthWei: bigint;\n};\n\n// V2/V3 WETH-side ERC20 balance and V4 in-range virtual reserve are both\n// expressed in WETH wei, so they're directly comparable. Pools with zero depth\n// are rejected to skip V4 ghost pools left behind after liquidity removal.\nexport function selectBestPoolPerPair(\n allPools: PoolWithMeta[]\n): PoolWithMeta[] {\n const poolsByPair: Record<string, PoolWithMeta[]> = {};\n\n for (const pool of allPools) {\n const key =\n pool.tokenAddress.toLowerCase() +\n \"_\" +\n pool.baseTokenAddress.toLowerCase();\n if (!poolsByPair[key]) poolsByPair[key] = [];\n poolsByPair[key].push(pool);\n }\n\n const bestPools: PoolWithMeta[] = [];\n for (const group of Object.values(poolsByPair)) {\n const withDepth = group.filter((p) => p.wethDepthWei > ZERO_BI);\n if (withDepth.length === 0) continue;\n const best = withDepth.reduce((a, b) =>\n a.wethDepthWei > b.wethDepthWei ? a : b\n );\n bestPools.push(best);\n }\n\n return bestPools;\n}\n\n// ============================================================================\n// Main exported functions\n// ============================================================================\n\n/**\n * Discover the best Uniswap pools for multiple token pairs.\n * Makes two on-chain calls: pool discovery + pool info retrieval.\n */\nexport async function discoverPools({\n publicClient,\n pairs,\n chainId = 8453,\n}: {\n publicClient: PublicClient;\n pairs: PoolDiscoveryPair[];\n /** Chain ID used to resolve the WETH address. Defaults to Base (8453). */\n chainId?: number;\n}): Promise<PoolDiscoveryResult[]> {\n if (pairs.length === 0) return [];\n\n const wethAddress = getWethAddress(chainId);\n const normalizedPairs = normalizeTokenPairs(pairs, wethAddress);\n const discoveryArgs = buildDiscoveryArgs(normalizedPairs);\n\n // Step 1: Discover pools\n const poolResults = (await readContract(publicClient, {\n address: MULTI_VERSION_UNISWAP_BULK_POOL_FINDER.address,\n abi: MULTI_VERSION_UNISWAP_BULK_POOL_FINDER.abi,\n functionName: \"getPoolsMultiVersion\",\n args: [discoveryArgs],\n })) as readonly [RawPoolDiscovery[], bigint];\n\n const discoveries = parsePoolDiscoveries(poolResults, pairs, wethAddress);\n\n const totalPools =\n discoveries.v2PoolAddresses.length +\n discoveries.v3PoolAddresses.length +\n discoveries.v4PoolKeys.length;\n\n if (totalPools === 0) return [];\n\n // Step 2: Get full pool info\n const poolInfos = (await readContract(publicClient, {\n address: MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER.address,\n abi: MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER.abi,\n functionName: \"getPoolsFullInfoMultiVersion\",\n args: [\n discoveries.v2PoolAddresses,\n discoveries.v3PoolAddresses,\n discoveries.v4PoolKeys,\n wethAddress,\n ],\n })) as PoolFullInfo[];\n\n if (!Array.isArray(poolInfos) || poolInfos.length === 0) return [];\n\n const wethLower = wethAddress.toLowerCase();\n\n // Step 3: Map pool infos to enriched format\n const allPools = poolInfos\n .map((info: PoolFullInfo, index: number) => {\n const poolData = determinePoolVersion(discoveries, index);\n if (!poolData || !poolData.pair) return null;\n\n const isV4 = poolData.version === 4;\n const liquidity = BigInt(info.liquidity ?? 0);\n\n let wethDepthWei: bigint;\n if (isV4) {\n const wethIsCurrency1 =\n poolData.v4PoolKey!.currency1.toLowerCase() === wethLower;\n wethDepthWei = deriveV4WethDepthWei(\n liquidity,\n BigInt(info.sqrtPriceX96 ?? 0),\n wethIsCurrency1\n );\n } else {\n wethDepthWei = deriveV2V3WethDepthWei(info, wethLower);\n }\n\n return {\n tokenAddress: poolData.pair.tokenAddress,\n baseTokenAddress: poolData.pair.baseTokenAddress || wethAddress,\n poolAddress: isV4 ? null : (info.poolAddress as Address),\n price: calculatePoolPrice(info, poolData.pair, poolData.version),\n baseTokenBalance: String(info.baseTokenBalance || 0),\n token0: info.token0,\n token1: info.token1,\n token0Balance: String(info.token0Balance || 0),\n token1Balance: String(info.token1Balance || 0),\n fee: poolData.fee,\n poolKey: constructPoolKey(\n info,\n poolData.pair,\n poolData.version,\n poolData.v4PoolKey\n ),\n liquidity: String(liquidity),\n wethDepthWei,\n };\n })\n .filter((p): p is NonNullable<typeof p> => p !== null) as PoolWithMeta[];\n\n // Step 4: Select best pool per pair\n const bestPools = selectBestPoolPerPair(allPools);\n\n return bestPools.map(\n (pool): PoolDiscoveryResult => ({\n tokenAddress: pool.tokenAddress,\n baseTokenAddress: pool.baseTokenAddress,\n poolAddress: pool.poolAddress,\n price: pool.price,\n fee: pool.fee,\n poolKey: pool.poolKey,\n liquidity: pool.liquidity,\n balances: {\n baseTokenBalance: pool.baseTokenBalance,\n token0Balance: pool.token0Balance,\n token1Balance: pool.token1Balance,\n },\n })\n );\n}\n\n/**\n * Discover the best WETH pool for a single token.\n * Convenience wrapper around discoverPools.\n */\nexport async function discoverTokenPool({\n publicClient,\n tokenAddress,\n chainId = 8453,\n}: {\n publicClient: PublicClient;\n tokenAddress: string;\n /** Chain ID used to resolve the WETH address. Defaults to Base (8453). */\n chainId?: number;\n}): Promise<PoolDiscoveryResult | null> {\n const results = await discoverPools({\n publicClient,\n pairs: [{ tokenAddress }],\n chainId,\n });\n return results[0] ?? null;\n}\n","import { useQuery, skipToken } from \"@tanstack/react-query\";\nimport { usePublicClient } from \"wagmi\";\nimport { discoverPools } from \"../utils/poolDiscovery\";\nimport type { UseDiscoverPoolsOptions } from \"../types\";\n\nexport function useDiscoverPools({\n chainId,\n pairs,\n enabled = true,\n}: UseDiscoverPoolsOptions) {\n const publicClient = usePublicClient({ chainId });\n const canRun = enabled && !!publicClient && pairs.length > 0;\n\n // Normalize addresses in the queryKey so case drift doesn't fragment the cache.\n // discoverPools itself is already case-insensitive internally.\n const keyPairs = pairs.map((p) => [\n p.tokenAddress.toLowerCase(),\n p.baseTokenAddress?.toLowerCase(),\n ]);\n\n const { data, isLoading, error, refetch } = useQuery({\n queryKey: [\"discoverPools\", chainId, keyPairs],\n queryFn: canRun\n ? () => discoverPools({ publicClient, pairs, chainId })\n : skipToken,\n });\n\n return {\n pools: data ?? [],\n isLoading,\n error,\n refetch,\n };\n}\n"]}