@net-protocol/score 0.1.7 → 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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/abis/upvote-app.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"],"names":["useReadContract","useMemo"],"mappings":"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","file":"react.mjs","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\": \"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"]}
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","useMemo"],"mappings":"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","file":"react.mjs","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"]}
@@ -136,6 +136,15 @@ type UseUpvotePriceOptions = {
136
136
  chainId: number;
137
137
  enabled?: boolean;
138
138
  };
139
+ type PoolDiscoveryPair = {
140
+ tokenAddress: string;
141
+ baseTokenAddress?: string;
142
+ };
143
+ type UseDiscoverPoolsOptions = {
144
+ chainId: number;
145
+ pairs: PoolDiscoveryPair[];
146
+ enabled?: boolean;
147
+ };
139
148
 
140
149
  /**
141
150
  * Generate score key for token upvotes.
@@ -176,4 +185,4 @@ declare const extractTokenAddressFromScoreKey: (scoreKey: string) => string | nu
176
185
  */
177
186
  declare const getStorageUpvoteContext: (operatorAddress: string, storageKey: string) => `0x${string}`;
178
187
 
179
- export { type DecodedStrategyMetadata as D, type FeedMessage as F, type GetUpvotesOptions as G, type PoolKey as P, type ScoreClientOptions as S, type UseTokenUpvotesOptions as U, type GetUpvotesForItemsOptions as a, type GetStrategyKeyScoresOptions as b, type GetAppKeyScoresOptions as c, type PoolDiscoveryResult as d, type DecodedUpvoteBlob as e, type PoolStrategyMetadata as f, type PureAlphaMetadata as g, type ScoreItem as h, type UseUpvotePriceOptions as i, type UseUpvoteUserOptions as j, type UseUpvotesBatchOptions as k, type UseUpvotesOptions as l, type UseUserUpvotesGivenOptions as m, type UseUserUpvotesGivenPerTokenBatchOptions as n, type UseUserUpvotesReceivedOptions as o, type UseUserUpvotesReceivedPerTokenBatchOptions as p, extractTokenAddressFromScoreKey as q, getFeedContentKey as r, getScoreKey as s, getStorageScoreKey as t, getStorageUpvoteContext as u, getTokenScoreKey as v, isTokenScoreKey as w };
188
+ export { type DecodedStrategyMetadata as D, type FeedMessage as F, type GetUpvotesOptions as G, type PoolDiscoveryPair as P, type ScoreClientOptions as S, type UseTokenUpvotesOptions as U, type GetUpvotesForItemsOptions as a, type GetStrategyKeyScoresOptions as b, type GetAppKeyScoresOptions as c, type PoolDiscoveryResult as d, type PoolKey as e, type DecodedUpvoteBlob as f, type PoolStrategyMetadata as g, type PureAlphaMetadata as h, type ScoreItem as i, type UseUpvotePriceOptions as j, type UseUpvoteUserOptions as k, type UseUpvotesBatchOptions as l, type UseUpvotesOptions as m, type UseUserUpvotesGivenOptions as n, type UseUserUpvotesGivenPerTokenBatchOptions as o, type UseUserUpvotesReceivedOptions as p, type UseUserUpvotesReceivedPerTokenBatchOptions as q, extractTokenAddressFromScoreKey as r, getFeedContentKey as s, getScoreKey as t, getStorageScoreKey as u, getStorageUpvoteContext as v, getTokenScoreKey as w, isTokenScoreKey as x, type UseDiscoverPoolsOptions as y };
@@ -136,6 +136,15 @@ type UseUpvotePriceOptions = {
136
136
  chainId: number;
137
137
  enabled?: boolean;
138
138
  };
139
+ type PoolDiscoveryPair = {
140
+ tokenAddress: string;
141
+ baseTokenAddress?: string;
142
+ };
143
+ type UseDiscoverPoolsOptions = {
144
+ chainId: number;
145
+ pairs: PoolDiscoveryPair[];
146
+ enabled?: boolean;
147
+ };
139
148
 
140
149
  /**
141
150
  * Generate score key for token upvotes.
@@ -176,4 +185,4 @@ declare const extractTokenAddressFromScoreKey: (scoreKey: string) => string | nu
176
185
  */
177
186
  declare const getStorageUpvoteContext: (operatorAddress: string, storageKey: string) => `0x${string}`;
178
187
 
179
- export { type DecodedStrategyMetadata as D, type FeedMessage as F, type GetUpvotesOptions as G, type PoolKey as P, type ScoreClientOptions as S, type UseTokenUpvotesOptions as U, type GetUpvotesForItemsOptions as a, type GetStrategyKeyScoresOptions as b, type GetAppKeyScoresOptions as c, type PoolDiscoveryResult as d, type DecodedUpvoteBlob as e, type PoolStrategyMetadata as f, type PureAlphaMetadata as g, type ScoreItem as h, type UseUpvotePriceOptions as i, type UseUpvoteUserOptions as j, type UseUpvotesBatchOptions as k, type UseUpvotesOptions as l, type UseUserUpvotesGivenOptions as m, type UseUserUpvotesGivenPerTokenBatchOptions as n, type UseUserUpvotesReceivedOptions as o, type UseUserUpvotesReceivedPerTokenBatchOptions as p, extractTokenAddressFromScoreKey as q, getFeedContentKey as r, getScoreKey as s, getStorageScoreKey as t, getStorageUpvoteContext as u, getTokenScoreKey as v, isTokenScoreKey as w };
188
+ export { type DecodedStrategyMetadata as D, type FeedMessage as F, type GetUpvotesOptions as G, type PoolDiscoveryPair as P, type ScoreClientOptions as S, type UseTokenUpvotesOptions as U, type GetUpvotesForItemsOptions as a, type GetStrategyKeyScoresOptions as b, type GetAppKeyScoresOptions as c, type PoolDiscoveryResult as d, type PoolKey as e, type DecodedUpvoteBlob as f, type PoolStrategyMetadata as g, type PureAlphaMetadata as h, type ScoreItem as i, type UseUpvotePriceOptions as j, type UseUpvoteUserOptions as k, type UseUpvotesBatchOptions as l, type UseUpvotesOptions as m, type UseUserUpvotesGivenOptions as n, type UseUserUpvotesGivenPerTokenBatchOptions as o, type UseUserUpvotesReceivedOptions as p, type UseUserUpvotesReceivedPerTokenBatchOptions as q, extractTokenAddressFromScoreKey as r, getFeedContentKey as s, getScoreKey as t, getStorageScoreKey as u, getStorageUpvoteContext as v, getTokenScoreKey as w, isTokenScoreKey as x, type UseDiscoverPoolsOptions as y };