@net-protocol/score 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +107 -28
- package/dist/index.d.ts +107 -28
- package/dist/index.js +471 -35
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +472 -38
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js.map +1 -1
- package/dist/react.mjs.map +1 -1
- package/dist/{scoreKeyUtils-BjMpyhyX.d.mts → scoreKeyUtils-BQl5oCSc.d.mts} +1 -1
- package/dist/{scoreKeyUtils-BjMpyhyX.d.ts → scoreKeyUtils-BQl5oCSc.d.ts} +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/abis/score.json","../src/abis/upvote-app.json","../src/abis/upvote-storage-app.json","../src/abis/pure-alpha-strategy.json","../src/abis/univ234-pools-strategy.json","../src/abis/dynamic-split-strategy.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/utils/strategyUtils.ts","../src/utils/scoreKeyUtils.ts","../src/client/ScoreClient.ts","../src/user-upvote/userUpvoteUtils.ts","../src/user-upvote/UserUpvoteClient.ts","../src/utils/poolKeyUtils.ts","../src/utils/poolDiscovery.ts"],"names":["decodeAbiParameters","getStorageKeyBytes","keccak256","encodePacked","getAddress","encodeAbiParameters","getPublicClient","readContract","isAddressEqual","getBaseDataSuffix","isValidPoolKey"],"mappings":"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","file":"index.js","sourcesContent":["[\n {\n \"type\": \"function\",\n \"name\": \"appKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appStrategyTotalScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appTotalScores\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appUserKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appUserTotalScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"execute\",\n \"inputs\": [\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"internalType\": \"contract IScoreStrategy\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct Score.ScoreParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppStrategyTotalScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppTotalScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppUserKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppUserTotalScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppMultiStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"counts\",\n \"type\": \"int256[][][]\",\n \"internalType\": \"int256[][][]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppMultiUserStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"users\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"counts\",\n \"type\": \"int256[][][]\",\n \"internalType\": \"int256[][][]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppUserKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiStrategyKeyScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiStrategyUserKeyScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiUserAppStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"users\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiUserStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"users\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyTotalScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyUserTotalScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyTotalScores\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyUserTotalScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalCalls\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ScoreUpdated\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"app\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n { \"type\": \"error\", \"name\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\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\": \"ZeroScoreDelta\", \"inputs\": [] }\n]\n","[\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 { \"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\": \"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 {\n \"name\": \"storageOperatorAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n { \"name\": \"storageKey\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n { \"name\": \"scoreDelta\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\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 { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n { \"type\": \"receive\", \"stateMutability\": \"payable\" },\n {\n \"type\": \"function\",\n \"name\": \"executeScoreStrategy\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IScoreStrategy.ScoreStrategyParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"appAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n { \"name\": \"metadata\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n ],\n \"stateMutability\": \"payable\"\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\": \"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\": \"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 {\n \"name\": \"newUpvotePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\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\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\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\": \"IncorrectEthAmount\",\n \"inputs\": [\n { \"name\": \"sent\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"expected\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"NegativeUpvotesNotSupported\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoTokensToWithdraw\", \"inputs\": [] },\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\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [{ \"name\": \"pool\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnauthorizedCaller\",\n \"inputs\": [\n { \"name\": \"caller\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"expected\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] }\n]\n","[\n { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n { \"type\": \"receive\", \"stateMutability\": \"payable\" },\n {\n \"type\": \"function\",\n \"name\": \"executeScoreStrategy\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IScoreStrategy.ScoreStrategyParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"appAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n { \"name\": \"metadata\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n ],\n \"stateMutability\": \"payable\"\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\": \"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\": \"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 {\n \"name\": \"newUpvotePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\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\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\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\": \"IncorrectEthAmount\",\n \"inputs\": [\n { \"name\": \"sent\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"expected\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPoolKeyForRouting\",\n \"inputs\": [\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n { \"name\": \"hooks\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenPair\",\n \"inputs\": [\n { \"name\": \"tokenIn\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokenOut\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"NegativeUpvotesNotSupported\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoTokensToWithdraw\", \"inputs\": [] },\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 {\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 {\n \"type\": \"error\",\n \"name\": \"UnauthorizedCaller\",\n \"inputs\": [\n { \"name\": \"caller\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"expected\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] }\n]\n","[\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executeScoreStrategy\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IScoreStrategy.ScoreStrategyParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"appAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"metadata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\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\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeBps\",\n \"inputs\": [\n {\n \"name\": \"newFeeBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setTokenSplitBps\",\n \"inputs\": [\n {\n \"name\": \"newTokenSplitBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setUpvotePrice\",\n \"inputs\": [\n {\n \"name\": \"newUpvotePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenSplitBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawETH\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\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\": \"IncorrectEthAmount\",\n \"inputs\": [\n {\n \"name\": \"sent\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"expected\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidFeeBps\",\n \"inputs\": [\n {\n \"name\": \"bps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPoolKeyForRouting\",\n \"inputs\": [\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\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenPair\",\n \"inputs\": [\n {\n \"name\": \"tokenIn\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenOut\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenSplitBps\",\n \"inputs\": [\n {\n \"name\": \"bps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NegativeUpvotesNotSupported\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoTokensToWithdraw\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotFound\",\n \"inputs\": [\n {\n \"name\": \"tokenA\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenB\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeTier\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [\n {\n \"name\": \"pool\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringsInsufficientHexLength\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnauthorizedCaller\",\n \"inputs\": [\n {\n \"name\": \"caller\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expected\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"WithdrawFailed\",\n \"inputs\": []\n }\n]\n","[\n {\n \"type\": \"function\",\n \"name\": \"V2_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"V3_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"V4_POOL_MANAGER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_checkV4PoolExternal\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [{ \"name\": \"exists\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolsMultiVersion\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct MultiVersionUniswapBulkPoolFinder.PoolFinderParams\",\n \"components\": [\n {\n \"name\": \"tokenAs\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"tokenBs\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"fees\", \"type\": \"uint24[]\", \"internalType\": \"uint24[]\" },\n {\n \"name\": \"v4TickSpacings\",\n \"type\": \"int24[]\",\n \"internalType\": \"int24[]\"\n },\n {\n \"name\": \"v4Hooks\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"pools\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct MultiVersionUniswapBulkPoolFinder.PoolDiscovery[]\",\n \"components\": [\n {\n \"name\": \"pairIndex\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n { \"name\": \"version\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n {\n \"name\": \"poolAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n { \"name\": \"hooks\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"name\": \"count\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"stateMutability\": \"view\"\n }\n]\n","[\n {\n \"type\": \"function\",\n \"name\": \"V4_POOL_MANAGER\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_getV4Liquidity\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_getV4Slot0\",\n \"inputs\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolsFullInfoMultiVersion\",\n \"inputs\": [\n {\n \"name\": \"v2PoolAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"v3PoolAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"v4PoolKeys\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PoolKey[]\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"baseToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct MultiVersionPoolInfoRetriever.PoolFullInfo[]\",\n \"components\": [\n {\n \"name\": \"poolAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token0\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token1\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token0Decimals\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"token1Decimals\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"baseTokenBalance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"token0Balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"token1Balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n }\n]\n","[\n {\n \"type\": \"constructor\",\n \"inputs\": [\n { \"name\": \"_alphaToken\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_erc20TokenGatedChat\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_net\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_swapRouter\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_weth\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"_upvotePrice\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"_feeBps\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ALPHA_TOKEN\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ERC20_TOKEN_GATED_CHAT\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ETH_USDC_POOL\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_TOKENS_PER_USER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NET\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"SWAP_ROUTER\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"UNISWAP_V3_FACTORY\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"WETH\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addTokenToList\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeBps\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTokenFeeTier\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint24\", \"internalType\": \"uint24\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTotalUpvotesPerToken\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserTokenCount\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserTokensInRange\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"startIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"endIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct UserUpvoteContract.TokenInfo[]\",\n \"components\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGiven\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGivenPerToken\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesGivenPerTokenBatch\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokens\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceived\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceivedPerToken\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getUserUpvotesReceivedPerTokenBatch\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokens\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"\", \"type\": \"uint256[]\", \"internalType\": \"uint256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isTokenInUserList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeTokenFromList\",\n \"inputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeBps\",\n \"inputs\": [\n { \"name\": \"newFeeBps\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setUpvotePrice\",\n \"inputs\": [\n { \"name\": \"newUpvotePrice\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalUpvotesPerToken\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n { \"name\": \"newOwner\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvoteUser\",\n \"inputs\": [\n { \"name\": \"userToUpvote\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"numUpvotes\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenCount\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenExists\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenFeeTiers\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint24\", \"internalType\": \"uint24\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokenSeen\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userTokens\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ],\n \"outputs\": [\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesGiven\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesGivenPerToken\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesReceived\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userUpvotesReceivedPerToken\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n { \"name\": \"to\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n { \"name\": \"previousOwner\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"newOwner\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokenAddedToList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"indexed\": false, \"internalType\": \"uint24\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokenRemovedFromList\",\n \"inputs\": [\n { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"UserUpvoted\",\n \"inputs\": [\n { \"name\": \"upvoter\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"upvotedUser\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"token\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n { \"name\": \"numUpvotes\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n ],\n \"anonymous\": false\n },\n { \"type\": \"error\", \"name\": \"IncorrectEthSent\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"MaxTokensReached\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoAlphaToWithdraw\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [{ \"name\": \"owner\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [{ \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotFound\",\n \"inputs\": [\n { \"name\": \"tokenA\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokenB\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"feeTier\", \"type\": \"uint24\", \"internalType\": \"uint24\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [{ \"name\": \"pool\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringsInsufficientHexLength\",\n \"inputs\": [\n { \"name\": \"value\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"length\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"TokenAlreadyInList\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"TokenNotInUserList\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"UserCannotUpvoteSelf\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"ZeroUpvotes\", \"inputs\": [] }\n]\n","import type { Abi, Address } from \"viem\";\nimport scoreAbi from \"./abis/score.json\";\nimport upvoteAppAbi from \"./abis/upvote-app.json\";\nimport upvoteStorageAppAbi from \"./abis/upvote-storage-app.json\";\nimport pureAlphaStrategyAbi from \"./abis/pure-alpha-strategy.json\";\nimport univ234PoolsStrategyAbi from \"./abis/univ234-pools-strategy.json\";\nimport dynamicSplitStrategyAbi from \"./abis/dynamic-split-strategy.json\";\nimport multiVersionUniswapBulkPoolFinderAbi from \"./abis/multi-version-uniswap-bulk-pool-finder.json\";\nimport multiVersionUniswapPoolInfoRetrieverAbi from \"./abis/multi-version-uniswap-pool-info-retriever.json\";\nimport userUpvoteAbi from \"./abis/user-upvote.json\";\n\n// Score core contract (v2 strategy)\nexport const SCORE_CONTRACT = {\n address: \"0x0000000fa09b022e5616e5a173b4b67fa2fbcf28\" as Address,\n abi: scoreAbi as Abi,\n} as const;\n\n// UpvoteApp contract\nexport const UPVOTE_APP = {\n address: \"0x00000001f0b8173316a016a5067ad74e8cea47bf\" as Address,\n abi: upvoteAppAbi as Abi,\n} as const;\n\n// UpvoteStorageApp contract\nexport const UPVOTE_STORAGE_APP = {\n address: \"0x000000060CEB69D023227DF64CfB75eC37c75B62\" as Address,\n abi: upvoteStorageAppAbi as Abi,\n} as const;\n\n// UpvotePureAlphaStrategy contract\nexport const PURE_ALPHA_STRATEGY = {\n address: \"0x00000001b1bcdeddeafd5296aaf4f3f3e21ae876\" as Address,\n abi: pureAlphaStrategyAbi as Abi,\n} as const;\n\n// UpvoteUniv234PoolsStrategy (handles Uniswap V2, V3, V4 pools)\nexport const UNIV234_POOLS_STRATEGY = {\n address: \"0x000000063f84e07a3e7a7ee578b42704ee6d22c9\" as Address,\n abi: univ234PoolsStrategyAbi as Abi,\n} as const;\n\n// UpvoteDynamicSplitUniv234PoolsStrategy (configurable token/alpha split for Uni V2/V3/V4 pools)\nexport const DYNAMIC_SPLIT_STRATEGY = {\n address: \"0x0000000869160f0b2a213adefb46a7ea7e62ac7a\" as Address,\n abi: dynamicSplitStrategyAbi as Abi,\n} as const;\n\n// All strategy addresses for batch queries\nexport const ALL_STRATEGY_ADDRESSES: Address[] = [\n UNIV234_POOLS_STRATEGY.address,\n PURE_ALPHA_STRATEGY.address,\n DYNAMIC_SPLIT_STRATEGY.address,\n];\n\n// Legacy upvote contract addresses (v1 and v2, before Score system)\nexport const LEGACY_UPVOTE_V1_ADDRESS =\n \"0x0ada882dbbdc12388a1f9ca85d2d847088f747df\" as Address;\n\nexport const LEGACY_UPVOTE_V2_ADDRESS =\n \"0x9027dcad0a3dca5835895e14fbc022a1e5ea909b\" as Address;\n\n// Chains where the Score system is deployed\nexport const SUPPORTED_SCORE_CHAINS = [8453] as const;\n\n// Pool discovery contracts\nexport const MULTI_VERSION_UNISWAP_BULK_POOL_FINDER = {\n address: \"0xbc237dac4c74c170780fc12f353a258bdd31a8cf\" as Address,\n abi: multiVersionUniswapBulkPoolFinderAbi as Abi,\n} as const;\n\nexport const MULTI_VERSION_UNISWAP_POOL_INFO_RETRIEVER = {\n address: \"0x00000002986Ca76897216a8A3A7Db10FcB0d29Cf\" as Address,\n abi: multiVersionUniswapPoolInfoRetrieverAbi as Abi,\n} as const;\n\n// WETH addresses by chain\nconst WETH_BY_CHAIN: Record<number, Address> = {\n 8453: \"0x4200000000000000000000000000000000000006\", // Base (L2 predeploy)\n 1: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\", // Ethereum mainnet\n};\n\n/**\n * Get the WETH address for a given chain.\n */\nexport function getWethAddress(chainId: number): Address {\n const addr = WETH_BY_CHAIN[chainId];\n if (!addr) {\n throw new Error(`Score: No WETH address for chain ${chainId}`);\n }\n return addr;\n}\n\n// Common addresses\nexport const NULL_ADDRESS =\n \"0x0000000000000000000000000000000000000000\" as Address;\n\n// Upvote pricing\nexport const UPVOTE_PRICE_ETH = 0.000025;\n\n// User upvote contract (standalone user-to-user upvote system, separate from Score)\nexport const USER_UPVOTE_CONTRACT = {\n address: \"0xa4bc2c63dd0157692fd5f409389e5032e37d8895\" as Address,\n abi: userUpvoteAbi as Abi,\n} as const;\n","import { 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 { type Address, type PublicClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { getPublicClient } from \"@net-protocol/core\";\nimport {\n SCORE_CONTRACT,\n UPVOTE_APP,\n ALL_STRATEGY_ADDRESSES,\n} from \"../constants\";\nimport { getScoreKey } from \"../utils/scoreKeyUtils\";\nimport type {\n ScoreClientOptions,\n GetUpvotesOptions,\n GetUpvotesForItemsOptions,\n GetStrategyKeyScoresOptions,\n GetAppKeyScoresOptions,\n} from \"../types\";\n\n/**\n * ScoreClient - Client for interacting with Net protocol scoring/upvote system\n *\n * **Pattern for client methods:**\n * - Client methods never require `chainId` in their parameters\n * - All methods use `this.client` internally (created during construction)\n * - This ensures consistency: the client's chain is the single source of truth\n */\nexport class ScoreClient {\n private client: PublicClient;\n private scoreAddress: Address;\n private upvoteAppAddress: Address;\n\n constructor(params: ScoreClientOptions) {\n this.client = getPublicClient({\n chainId: params.chainId,\n rpcUrl: params.overrides?.rpcUrls,\n });\n this.scoreAddress =\n params.overrides?.scoreAddress ?? SCORE_CONTRACT.address;\n this.upvoteAppAddress =\n params.overrides?.upvoteAppAddress ?? UPVOTE_APP.address;\n }\n\n /**\n * Get upvote counts for score keys via UpvoteApp.getUpvotesWithLegacy.\n * Returns an array of counts, one per score key.\n */\n async getUpvotesWithLegacy({\n scoreKeys,\n strategies = ALL_STRATEGY_ADDRESSES,\n }: GetUpvotesOptions): Promise<number[]> {\n const data = await readContract(this.client, {\n address: this.upvoteAppAddress,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [scoreKeys, strategies],\n });\n\n if (Array.isArray(data)) {\n return data.map(Number);\n }\n return [];\n }\n\n /**\n * Get upvote counts for ScoreItem array.\n * Converts items to score keys, then calls getUpvotesWithLegacy.\n */\n async getUpvotesForItems({\n items,\n strategies,\n }: GetUpvotesForItemsOptions): Promise<number[]> {\n const scoreKeys = items.map((item) => getScoreKey(item));\n return this.getUpvotesWithLegacy({ scoreKeys, strategies });\n }\n\n /**\n * Read scores for keys from a specific strategy on the Score contract.\n * Uses the batch getAppStrategyKeyScores function for efficiency.\n */\n async getStrategyKeyScores({\n strategy,\n scoreKeys,\n }: GetStrategyKeyScoresOptions): Promise<number[]> {\n const data = await readContract(this.client, {\n address: this.scoreAddress,\n abi: SCORE_CONTRACT.abi,\n functionName: \"getAppStrategyKeyScores\",\n args: [this.upvoteAppAddress, strategy, scoreKeys],\n });\n\n if (Array.isArray(data)) {\n return data.map(Number);\n }\n return [];\n }\n\n /**\n * Read scores for keys from a specific app on the Score contract.\n * Uses the batch getAppKeyScores function for efficiency.\n */\n async getAppKeyScores({\n app,\n scoreKeys,\n }: GetAppKeyScoresOptions): Promise<number[]> {\n const data = await readContract(this.client, {\n address: this.scoreAddress,\n abi: SCORE_CONTRACT.abi,\n functionName: \"getAppKeyScores\",\n args: [app, scoreKeys],\n });\n\n if (Array.isArray(data)) {\n return data.map(Number);\n }\n return [];\n }\n}\n","import { type Address, decodeAbiParameters, isAddressEqual } from \"viem\";\nimport type {\n ParsedUserUpvoteMessage,\n TokenAddressExtraction,\n UserUpvote,\n UserUpvoteReceived,\n UserUpvoteNetMessage,\n} from \"./types\";\n\n/**\n * Parse a Net protocol message from the user upvote contract.\n *\n * Two formats based on topic:\n * - Topic \"ub-{address}\" (received upvotes): 7 fields including userTokenBalance\n * - Topic \"g\" (given upvotes): 6 fields without userTokenBalance\n */\nexport function parseUserUpvoteMessage(\n message: UserUpvoteNetMessage,\n topic: string\n): ParsedUserUpvoteMessage | null {\n try {\n if (topic.startsWith(\"ub-\")) {\n // Received upvotes: 7 fields\n const [\n upvotedUserString,\n actualToken,\n numUpvotes,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"string\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n message.data\n );\n return {\n upvotedUserString: upvotedUserString as string,\n actualToken: actualToken as string,\n numUpvotes: Number(numUpvotes),\n tokenWethPrice: tokenWethPrice as bigint,\n wethUsdcPrice: wethUsdcPrice as bigint,\n alphaWethPrice: alphaWethPrice as bigint,\n userTokenBalance: userTokenBalance as bigint,\n };\n } else {\n // Given upvotes (topic \"g\"): 6 fields\n const [\n upvotedUserString,\n actualToken,\n numUpvotes,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n ] = decodeAbiParameters(\n [\n { type: \"string\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n message.data\n );\n return {\n upvotedUserString: upvotedUserString as string,\n actualToken: actualToken as string,\n numUpvotes: Number(numUpvotes),\n tokenWethPrice: tokenWethPrice as bigint,\n wethUsdcPrice: wethUsdcPrice as bigint,\n alphaWethPrice: alphaWethPrice as bigint,\n };\n }\n } catch {\n return null;\n }\n}\n\n/**\n * Extract unique token addresses from an array of Net messages.\n */\nexport function extractTokenAddressesFromMessages(\n messages: UserUpvoteNetMessage[],\n topic: string\n): TokenAddressExtraction {\n const tokenSet = new Set<string>();\n const validMessages: ParsedUserUpvoteMessage[] = [];\n\n for (const message of messages) {\n const parsed = parseUserUpvoteMessage(message, topic);\n if (parsed) {\n tokenSet.add(parsed.actualToken.toLowerCase());\n validMessages.push(parsed);\n }\n }\n\n return {\n tokenAddresses: Array.from(tokenSet),\n validMessages,\n };\n}\n\n/**\n * Validate that a Net message can be parsed as a user upvote message.\n */\nexport function validateUserUpvoteMessage(\n message: UserUpvoteNetMessage,\n topic: string\n): boolean {\n return parseUserUpvoteMessage(message, topic) !== null;\n}\n\n/**\n * Calculate the USDC price from a parsed user upvote message.\n *\n * The contract emits (halfWei * 1e18) / amountRaw for tokenWethPrice,\n * so we divide by 10^(36 - tokenDecimals) to get the actual price.\n */\nexport function calculatePriceInUsdc(\n parsedMessage: ParsedUserUpvoteMessage,\n tokenDecimals: number = 18\n): number | undefined {\n const { tokenWethPrice, wethUsdcPrice } = parsedMessage;\n if (tokenWethPrice > 0n && wethUsdcPrice > 0n) {\n const scale = 10 ** (36 - tokenDecimals);\n const tokenWethPriceNum = Number(tokenWethPrice) / scale;\n const wethUsdcPriceNum = Number(wethUsdcPrice) / 1e6;\n return tokenWethPriceNum * wethUsdcPriceNum;\n }\n return undefined;\n}\n\n/**\n * Calculate the human-readable token balance from a raw bigint value.\n */\nexport function calculateUserTokenBalance(\n rawBalance: bigint,\n tokenDecimals: number = 18\n): number {\n return Number(rawBalance) / Math.pow(10, tokenDecimals);\n}\n\n/**\n * Client-side validation for upvote parameters.\n * Mirrors contract-side errors for better UX before sending a transaction.\n */\nexport function validateUpvoteParams(params: {\n sender: Address;\n userToUpvote: Address;\n numUpvotes: number;\n}): { valid: boolean; error?: string } {\n if (isAddressEqual(params.sender, params.userToUpvote)) {\n return { valid: false, error: \"Cannot upvote yourself\" };\n }\n if (!Number.isInteger(params.numUpvotes)) {\n return { valid: false, error: \"Number of upvotes must be a whole number\" };\n }\n if (params.numUpvotes <= 0) {\n return { valid: false, error: \"Number of upvotes must be greater than zero\" };\n }\n return { valid: true };\n}\n\n/**\n * Calculate the total ETH cost for a given number of upvotes.\n */\nexport function calculateUpvoteCost(\n numUpvotes: number,\n upvotePrice: bigint\n): bigint {\n return BigInt(numUpvotes) * upvotePrice;\n}\n\nfunction computeEnrichedFields(\n parsed: ParsedUserUpvoteMessage,\n tokenInfo?: { name: string; symbol: string; decimals: number }\n) {\n const decimals = tokenInfo?.decimals ?? 18;\n const priceInUsdc = calculatePriceInUsdc(parsed, decimals);\n const userTokenBalance = parsed.userTokenBalance\n ? calculateUserTokenBalance(parsed.userTokenBalance, decimals)\n : 0;\n\n const userTokenBalanceUsdValue =\n priceInUsdc !== undefined && userTokenBalance > 0\n ? priceInUsdc * userTokenBalance\n : undefined;\n\n return { priceInUsdc, userTokenBalance, userTokenBalanceUsdValue };\n}\n\n/**\n * Build an enriched UserUpvote from a parsed message and optional token info.\n */\nexport function buildUserUpvote(\n parsed: ParsedUserUpvoteMessage,\n timestamp: number,\n tokenInfo?: { name: string; symbol: string; decimals: number }\n): UserUpvote {\n return {\n tokenAddress: parsed.actualToken,\n numUpvotes: parsed.numUpvotes,\n timestamp,\n ...computeEnrichedFields(parsed, tokenInfo),\n upvotedUserAddress: parsed.upvotedUserString,\n tokenInfo,\n };\n}\n\n/**\n * Build an enriched UserUpvoteReceived from a parsed message, upvoter address, and optional token info.\n */\nexport function buildUserUpvoteReceived(\n parsed: ParsedUserUpvoteMessage,\n upvoterAddress: string,\n timestamp: number,\n tokenInfo?: { name: string; symbol: string; decimals: number }\n): UserUpvoteReceived {\n return {\n upvoterAddress,\n tokenAddress: parsed.actualToken,\n numUpvotes: parsed.numUpvotes,\n timestamp,\n ...computeEnrichedFields(parsed, tokenInfo),\n tokenInfo,\n };\n}\n","import { type Address, type PublicClient, type WalletClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { getPublicClient, getBaseDataSuffix } from \"@net-protocol/core\";\nimport { USER_UPVOTE_CONTRACT, NULL_ADDRESS } from \"../constants\";\nimport { validateUpvoteParams, calculateUpvoteCost } from \"./userUpvoteUtils\";\nimport type { UserUpvoteClientOptions } from \"./types\";\n\n/**\n * UserUpvoteClient - Client for reading user-to-user upvote data.\n *\n * This is a standalone upvote system separate from the token Score system.\n * It reads directly from the UserUpvote contract on Base.\n */\nexport class UserUpvoteClient {\n private client: PublicClient;\n private contractAddress: Address;\n private chainId: number;\n\n constructor(params: UserUpvoteClientOptions) {\n this.chainId = params.chainId;\n this.client = getPublicClient({\n chainId: params.chainId,\n rpcUrl: params.overrides?.rpcUrls,\n });\n this.contractAddress =\n params.overrides?.contractAddress ?? USER_UPVOTE_CONTRACT.address;\n }\n\n async getUserUpvotesGiven({ user }: { user: Address }): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGiven\",\n args: [user],\n });\n return data as bigint;\n }\n\n async getUserUpvotesReceived({ user }: { user: Address }): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceived\",\n args: [user],\n });\n return data as bigint;\n }\n\n async getUserUpvotesGivenPerTokenBatch({\n user,\n tokens,\n }: {\n user: Address;\n tokens: Address[];\n }): Promise<bigint[]> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGivenPerTokenBatch\",\n args: [user, tokens],\n });\n return data as bigint[];\n }\n\n async getUserUpvotesReceivedPerTokenBatch({\n user,\n tokens,\n }: {\n user: Address;\n tokens: Address[];\n }): Promise<bigint[]> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceivedPerTokenBatch\",\n args: [user, tokens],\n });\n return data as bigint[];\n }\n\n async getTotalUpvotesPerToken({\n token,\n }: {\n token: Address;\n }): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getTotalUpvotesPerToken\",\n args: [token],\n });\n return data as bigint;\n }\n\n async getUserTokensInRange({\n user,\n startIndex,\n endIndex,\n }: {\n user: Address;\n startIndex: number;\n endIndex: number;\n }): Promise<{ token: Address; feeTier: number }[]> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserTokensInRange\",\n args: [user, BigInt(startIndex), BigInt(endIndex)],\n });\n return (data as { token: Address; feeTier: number }[]).map((item) => ({\n token: item.token,\n feeTier: Number(item.feeTier),\n }));\n }\n\n async getUserTokenCount({ user }: { user: Address }): Promise<number> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserTokenCount\",\n args: [user],\n });\n return Number(data);\n }\n\n async isTokenInUserList({\n user,\n token,\n }: {\n user: Address;\n token: Address;\n }): Promise<boolean> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"isTokenInUserList\",\n args: [user, token],\n });\n return data as boolean;\n }\n\n async getUpvotePrice(): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvotePrice\",\n });\n return data as bigint;\n }\n\n async upvoteUser({\n walletClient,\n userToUpvote,\n token = NULL_ADDRESS,\n numUpvotes,\n feeTier = 0,\n value: providedValue,\n }: {\n walletClient: WalletClient;\n userToUpvote: Address;\n token?: Address;\n numUpvotes: number;\n feeTier?: number;\n /** Pre-computed ETH value. When omitted, fetches upvotePrice from chain. */\n value?: bigint;\n }): Promise<`0x${string}`> {\n const sender = walletClient.account?.address;\n if (sender) {\n const validation = validateUpvoteParams({ sender, userToUpvote, numUpvotes });\n if (!validation.valid) {\n throw new Error(validation.error);\n }\n }\n\n const value = providedValue ?? calculateUpvoteCost(numUpvotes, await this.getUpvotePrice());\n\n const hash = await walletClient.writeContract({\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvoteUser\",\n args: [userToUpvote, token, BigInt(numUpvotes), BigInt(feeTier)],\n value,\n chain: null,\n dataSuffix: getBaseDataSuffix(this.chainId),\n } as unknown as Parameters<typeof walletClient.writeContract>[0]);\n\n return hash;\n }\n}\n","import { encodeAbiParameters, type Address } from \"viem\";\nimport type { PoolKey } from \"../types\";\n\n/**\n * Encode a PoolKey struct to bytes for scoreStoredContext.\n * Returns \"0x\" for invalid or missing pool keys.\n */\nexport const encodePoolKey = (poolKey?: PoolKey | null): `0x${string}` => {\n if (!poolKey || !isValidPoolKey(poolKey)) {\n return \"0x\";\n }\n\n try {\n return encodeAbiParameters(\n [\n {\n type: \"tuple\",\n components: [\n { name: \"currency0\", type: \"address\" },\n { name: \"currency1\", type: \"address\" },\n { name: \"fee\", type: \"uint24\" },\n { name: \"tickSpacing\", type: \"int24\" },\n { name: \"hooks\", type: \"address\" },\n ],\n },\n ],\n [\n {\n currency0: poolKey.currency0 as Address,\n currency1: poolKey.currency1 as Address,\n fee: poolKey.fee,\n tickSpacing: poolKey.tickSpacing,\n hooks: poolKey.hooks as Address,\n },\n ]\n );\n } catch {\n return \"0x\";\n }\n};\n\nfunction isValidPoolKey(poolKey: PoolKey): boolean {\n return (\n poolKey.fee !== undefined ||\n poolKey.tickSpacing !== undefined ||\n poolKey.currency0 !== undefined\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/abis/score.json","../src/abis/upvote-app.json","../src/abis/upvote-storage-app.json","../src/abis/pure-alpha-strategy.json","../src/abis/univ234-pools-strategy.json","../src/abis/dynamic-split-strategy.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/abis/erc20-bulk-info-helper.json","../src/constants.ts","../src/utils/strategyUtils.ts","../src/utils/scoreKeyUtils.ts","../src/client/ScoreClient.ts","../src/user-upvote/userUpvoteUtils.ts","../src/user-upvote/UserUpvoteClient.ts","../src/utils/poolDiscovery.ts","../src/ranking/getTokenRankings.ts","../src/utils/poolKeyUtils.ts"],"names":["decodeAbiParameters","getStorageKeyBytes","keccak256","encodePacked","getAddress","encodeAbiParameters","getPublicClient","readContract","isAddressEqual","getBaseDataSuffix","NetClient","STORAGE_CONTRACT","isValidPoolKey"],"mappings":"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","file":"index.js","sourcesContent":["[\n {\n \"type\": \"function\",\n \"name\": \"appKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appStrategyTotalScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appTotalScores\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appUserKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"appUserTotalScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"execute\",\n \"inputs\": [\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"internalType\": \"contract IScoreStrategy\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct Score.ScoreParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppStrategyTotalScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppTotalScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppUserKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getAppUserTotalScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppMultiStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"counts\",\n \"type\": \"int256[][][]\",\n \"internalType\": \"int256[][][]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppMultiUserStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"users\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"counts\",\n \"type\": \"int256[][][]\",\n \"internalType\": \"int256[][][]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiAppUserKeyScores\",\n \"inputs\": [\n { \"name\": \"apps\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiStrategyKeyScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiStrategyUserKeyScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiUserAppStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"app\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"users\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMultiUserStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"users\", \"type\": \"address[]\", \"internalType\": \"address[]\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[][]\", \"internalType\": \"int256[][]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyKeyScores\",\n \"inputs\": [\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyTotalScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"strategy\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n {\n \"name\": \"scoreKeys\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n { \"name\": \"counts\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getStrategyUserTotalScores\",\n \"inputs\": [\n {\n \"name\": \"strategies\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [\n { \"name\": \"totals\", \"type\": \"int256[]\", \"internalType\": \"int256[]\" }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyTotalScores\",\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyUserKeyScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"strategyUserTotalScores\",\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }\n ],\n \"outputs\": [{ \"name\": \"\", \"type\": \"int256\", \"internalType\": \"int256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalCalls\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ScoreUpdated\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"app\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n { \"type\": \"error\", \"name\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\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\": \"ZeroScoreDelta\", \"inputs\": [] }\n]\n","[\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 { \"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\": \"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 {\n \"name\": \"storageOperatorAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n { \"name\": \"storageKey\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n { \"name\": \"scoreDelta\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\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 { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n { \"type\": \"receive\", \"stateMutability\": \"payable\" },\n {\n \"type\": \"function\",\n \"name\": \"executeScoreStrategy\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IScoreStrategy.ScoreStrategyParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"appAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n { \"name\": \"metadata\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n ],\n \"stateMutability\": \"payable\"\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\": \"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\": \"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 {\n \"name\": \"newUpvotePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\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\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\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\": \"IncorrectEthAmount\",\n \"inputs\": [\n { \"name\": \"sent\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"expected\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"NegativeUpvotesNotSupported\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoTokensToWithdraw\", \"inputs\": [] },\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\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [{ \"name\": \"pool\", \"type\": \"address\", \"internalType\": \"address\" }]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnauthorizedCaller\",\n \"inputs\": [\n { \"name\": \"caller\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"expected\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] }\n]\n","[\n { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n { \"type\": \"receive\", \"stateMutability\": \"payable\" },\n {\n \"type\": \"function\",\n \"name\": \"executeScoreStrategy\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IScoreStrategy.ScoreStrategyParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"appAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n { \"name\": \"metadata\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n ],\n \"stateMutability\": \"payable\"\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\": \"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\": \"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 {\n \"name\": \"newUpvotePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\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\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n \"stateMutability\": \"view\"\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\": \"IncorrectEthAmount\",\n \"inputs\": [\n { \"name\": \"sent\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n { \"name\": \"expected\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPoolKeyForRouting\",\n \"inputs\": [\n { \"name\": \"fee\", \"type\": \"uint24\", \"internalType\": \"uint24\" },\n { \"name\": \"tickSpacing\", \"type\": \"int24\", \"internalType\": \"int24\" },\n { \"name\": \"hooks\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenPair\",\n \"inputs\": [\n { \"name\": \"tokenIn\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"tokenOut\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"NegativeUpvotesNotSupported\", \"inputs\": [] },\n { \"type\": \"error\", \"name\": \"NoTokensToWithdraw\", \"inputs\": [] },\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 {\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 {\n \"type\": \"error\",\n \"name\": \"UnauthorizedCaller\",\n \"inputs\": [\n { \"name\": \"caller\", \"type\": \"address\", \"internalType\": \"address\" },\n { \"name\": \"expected\", \"type\": \"address\", \"internalType\": \"address\" }\n ]\n },\n { \"type\": \"error\", \"name\": \"WithdrawFailed\", \"inputs\": [] }\n]\n","[\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executeScoreStrategy\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IScoreStrategy.ScoreStrategyParams\",\n \"components\": [\n {\n \"name\": \"scoreKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"scoreDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"originalSender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"appAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"scoreStoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"scoreUnstoredContext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"metadata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\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\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeBps\",\n \"inputs\": [\n {\n \"name\": \"newFeeBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setTokenSplitBps\",\n \"inputs\": [\n {\n \"name\": \"newTokenSplitBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setUpvotePrice\",\n \"inputs\": [\n {\n \"name\": \"newUpvotePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenSplitBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"upvotePrice\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawETH\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawErc20\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\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\": \"IncorrectEthAmount\",\n \"inputs\": [\n {\n \"name\": \"sent\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"expected\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidFeeBps\",\n \"inputs\": [\n {\n \"name\": \"bps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPoolKeyForRouting\",\n \"inputs\": [\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\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenPair\",\n \"inputs\": [\n {\n \"name\": \"tokenIn\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenOut\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenSplitBps\",\n \"inputs\": [\n {\n \"name\": \"bps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NegativeUpvotesNotSupported\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoTokensToWithdraw\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotFound\",\n \"inputs\": [\n {\n \"name\": \"tokenA\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenB\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeTier\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Slot0ReadFailed\",\n \"inputs\": [\n {\n \"name\": \"pool\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringsInsufficientHexLength\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnauthorizedCaller\",\n \"inputs\": [\n {\n \"name\": \"caller\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expected\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"WithdrawFailed\",\n \"inputs\": []\n }\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","[\n {\n \"type\": \"function\",\n \"name\": \"getTokenInfo\",\n \"inputs\": [\n {\n \"name\": \"tokenAddresses\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"tokenInfos\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct ERC20BulkInfoHelper.TokenInfo[]\",\n \"components\": [\n { \"name\": \"name\", \"type\": \"string\", \"internalType\": \"string\" },\n { \"name\": \"symbol\", \"type\": \"string\", \"internalType\": \"string\" },\n { \"name\": \"decimals\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n {\n \"name\": \"totalSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"burnedTokens\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n }\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 { 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 { type Address, type PublicClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { getPublicClient } from \"@net-protocol/core\";\nimport {\n SCORE_CONTRACT,\n UPVOTE_APP,\n ALL_STRATEGY_ADDRESSES,\n} from \"../constants\";\nimport { getScoreKey } from \"../utils/scoreKeyUtils\";\nimport type {\n ScoreClientOptions,\n GetUpvotesOptions,\n GetUpvotesForItemsOptions,\n GetStrategyKeyScoresOptions,\n GetAppKeyScoresOptions,\n} from \"../types\";\n\n/**\n * ScoreClient - Client for interacting with Net protocol scoring/upvote system\n *\n * **Pattern for client methods:**\n * - Client methods never require `chainId` in their parameters\n * - All methods use `this.client` internally (created during construction)\n * - This ensures consistency: the client's chain is the single source of truth\n */\nexport class ScoreClient {\n private client: PublicClient;\n private scoreAddress: Address;\n private upvoteAppAddress: Address;\n\n constructor(params: ScoreClientOptions) {\n this.client = getPublicClient({\n chainId: params.chainId,\n rpcUrl: params.overrides?.rpcUrls,\n });\n this.scoreAddress =\n params.overrides?.scoreAddress ?? SCORE_CONTRACT.address;\n this.upvoteAppAddress =\n params.overrides?.upvoteAppAddress ?? UPVOTE_APP.address;\n }\n\n /**\n * Get upvote counts for score keys via UpvoteApp.getUpvotesWithLegacy.\n * Returns an array of counts, one per score key.\n */\n async getUpvotesWithLegacy({\n scoreKeys,\n strategies = ALL_STRATEGY_ADDRESSES,\n }: GetUpvotesOptions): Promise<number[]> {\n const data = await readContract(this.client, {\n address: this.upvoteAppAddress,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [scoreKeys, strategies],\n });\n\n if (Array.isArray(data)) {\n return data.map(Number);\n }\n return [];\n }\n\n /**\n * Get upvote counts for ScoreItem array.\n * Converts items to score keys, then calls getUpvotesWithLegacy.\n */\n async getUpvotesForItems({\n items,\n strategies,\n }: GetUpvotesForItemsOptions): Promise<number[]> {\n const scoreKeys = items.map((item) => getScoreKey(item));\n return this.getUpvotesWithLegacy({ scoreKeys, strategies });\n }\n\n /**\n * Read scores for keys from a specific strategy on the Score contract.\n * Uses the batch getAppStrategyKeyScores function for efficiency.\n */\n async getStrategyKeyScores({\n strategy,\n scoreKeys,\n }: GetStrategyKeyScoresOptions): Promise<number[]> {\n const data = await readContract(this.client, {\n address: this.scoreAddress,\n abi: SCORE_CONTRACT.abi,\n functionName: \"getAppStrategyKeyScores\",\n args: [this.upvoteAppAddress, strategy, scoreKeys],\n });\n\n if (Array.isArray(data)) {\n return data.map(Number);\n }\n return [];\n }\n\n /**\n * Read scores for keys from a specific app on the Score contract.\n * Uses the batch getAppKeyScores function for efficiency.\n */\n async getAppKeyScores({\n app,\n scoreKeys,\n }: GetAppKeyScoresOptions): Promise<number[]> {\n const data = await readContract(this.client, {\n address: this.scoreAddress,\n abi: SCORE_CONTRACT.abi,\n functionName: \"getAppKeyScores\",\n args: [app, scoreKeys],\n });\n\n if (Array.isArray(data)) {\n return data.map(Number);\n }\n return [];\n }\n}\n","import { type Address, decodeAbiParameters, isAddressEqual } from \"viem\";\nimport type {\n ParsedUserUpvoteMessage,\n TokenAddressExtraction,\n UserUpvote,\n UserUpvoteReceived,\n UserUpvoteNetMessage,\n} from \"./types\";\n\n/**\n * Parse a Net protocol message from the user upvote contract.\n *\n * Two formats based on topic:\n * - Topic \"ub-{address}\" (received upvotes): 7 fields including userTokenBalance\n * - Topic \"g\" (given upvotes): 6 fields without userTokenBalance\n */\nexport function parseUserUpvoteMessage(\n message: UserUpvoteNetMessage,\n topic: string\n): ParsedUserUpvoteMessage | null {\n try {\n if (topic.startsWith(\"ub-\")) {\n // Received upvotes: 7 fields\n const [\n upvotedUserString,\n actualToken,\n numUpvotes,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n userTokenBalance,\n ] = decodeAbiParameters(\n [\n { type: \"string\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n message.data\n );\n return {\n upvotedUserString: upvotedUserString as string,\n actualToken: actualToken as string,\n numUpvotes: Number(numUpvotes),\n tokenWethPrice: tokenWethPrice as bigint,\n wethUsdcPrice: wethUsdcPrice as bigint,\n alphaWethPrice: alphaWethPrice as bigint,\n userTokenBalance: userTokenBalance as bigint,\n };\n } else {\n // Given upvotes (topic \"g\"): 6 fields\n const [\n upvotedUserString,\n actualToken,\n numUpvotes,\n tokenWethPrice,\n wethUsdcPrice,\n alphaWethPrice,\n ] = decodeAbiParameters(\n [\n { type: \"string\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n ],\n message.data\n );\n return {\n upvotedUserString: upvotedUserString as string,\n actualToken: actualToken as string,\n numUpvotes: Number(numUpvotes),\n tokenWethPrice: tokenWethPrice as bigint,\n wethUsdcPrice: wethUsdcPrice as bigint,\n alphaWethPrice: alphaWethPrice as bigint,\n };\n }\n } catch {\n return null;\n }\n}\n\n/**\n * Extract unique token addresses from an array of Net messages.\n */\nexport function extractTokenAddressesFromMessages(\n messages: UserUpvoteNetMessage[],\n topic: string\n): TokenAddressExtraction {\n const tokenSet = new Set<string>();\n const validMessages: ParsedUserUpvoteMessage[] = [];\n\n for (const message of messages) {\n const parsed = parseUserUpvoteMessage(message, topic);\n if (parsed) {\n tokenSet.add(parsed.actualToken.toLowerCase());\n validMessages.push(parsed);\n }\n }\n\n return {\n tokenAddresses: Array.from(tokenSet),\n validMessages,\n };\n}\n\n/**\n * Validate that a Net message can be parsed as a user upvote message.\n */\nexport function validateUserUpvoteMessage(\n message: UserUpvoteNetMessage,\n topic: string\n): boolean {\n return parseUserUpvoteMessage(message, topic) !== null;\n}\n\n/**\n * Calculate the USDC price from a parsed user upvote message.\n *\n * The contract emits (halfWei * 1e18) / amountRaw for tokenWethPrice,\n * so we divide by 10^(36 - tokenDecimals) to get the actual price.\n */\nexport function calculatePriceInUsdc(\n parsedMessage: ParsedUserUpvoteMessage,\n tokenDecimals: number = 18\n): number | undefined {\n const { tokenWethPrice, wethUsdcPrice } = parsedMessage;\n if (tokenWethPrice > 0n && wethUsdcPrice > 0n) {\n const scale = 10 ** (36 - tokenDecimals);\n const tokenWethPriceNum = Number(tokenWethPrice) / scale;\n const wethUsdcPriceNum = Number(wethUsdcPrice) / 1e6;\n return tokenWethPriceNum * wethUsdcPriceNum;\n }\n return undefined;\n}\n\n/**\n * Calculate the human-readable token balance from a raw bigint value.\n */\nexport function calculateUserTokenBalance(\n rawBalance: bigint,\n tokenDecimals: number = 18\n): number {\n return Number(rawBalance) / Math.pow(10, tokenDecimals);\n}\n\n/**\n * Client-side validation for upvote parameters.\n * Mirrors contract-side errors for better UX before sending a transaction.\n */\nexport function validateUpvoteParams(params: {\n sender: Address;\n userToUpvote: Address;\n numUpvotes: number;\n}): { valid: boolean; error?: string } {\n if (isAddressEqual(params.sender, params.userToUpvote)) {\n return { valid: false, error: \"Cannot upvote yourself\" };\n }\n if (!Number.isInteger(params.numUpvotes)) {\n return { valid: false, error: \"Number of upvotes must be a whole number\" };\n }\n if (params.numUpvotes <= 0) {\n return { valid: false, error: \"Number of upvotes must be greater than zero\" };\n }\n return { valid: true };\n}\n\n/**\n * Calculate the total ETH cost for a given number of upvotes.\n */\nexport function calculateUpvoteCost(\n numUpvotes: number,\n upvotePrice: bigint\n): bigint {\n return BigInt(numUpvotes) * upvotePrice;\n}\n\nfunction computeEnrichedFields(\n parsed: ParsedUserUpvoteMessage,\n tokenInfo?: { name: string; symbol: string; decimals: number }\n) {\n const decimals = tokenInfo?.decimals ?? 18;\n const priceInUsdc = calculatePriceInUsdc(parsed, decimals);\n const userTokenBalance = parsed.userTokenBalance\n ? calculateUserTokenBalance(parsed.userTokenBalance, decimals)\n : 0;\n\n const userTokenBalanceUsdValue =\n priceInUsdc !== undefined && userTokenBalance > 0\n ? priceInUsdc * userTokenBalance\n : undefined;\n\n return { priceInUsdc, userTokenBalance, userTokenBalanceUsdValue };\n}\n\n/**\n * Build an enriched UserUpvote from a parsed message and optional token info.\n */\nexport function buildUserUpvote(\n parsed: ParsedUserUpvoteMessage,\n timestamp: number,\n tokenInfo?: { name: string; symbol: string; decimals: number }\n): UserUpvote {\n return {\n tokenAddress: parsed.actualToken,\n numUpvotes: parsed.numUpvotes,\n timestamp,\n ...computeEnrichedFields(parsed, tokenInfo),\n upvotedUserAddress: parsed.upvotedUserString,\n tokenInfo,\n };\n}\n\n/**\n * Build an enriched UserUpvoteReceived from a parsed message, upvoter address, and optional token info.\n */\nexport function buildUserUpvoteReceived(\n parsed: ParsedUserUpvoteMessage,\n upvoterAddress: string,\n timestamp: number,\n tokenInfo?: { name: string; symbol: string; decimals: number }\n): UserUpvoteReceived {\n return {\n upvoterAddress,\n tokenAddress: parsed.actualToken,\n numUpvotes: parsed.numUpvotes,\n timestamp,\n ...computeEnrichedFields(parsed, tokenInfo),\n tokenInfo,\n };\n}\n","import { type Address, type PublicClient, type WalletClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { getPublicClient, getBaseDataSuffix } from \"@net-protocol/core\";\nimport { USER_UPVOTE_CONTRACT, NULL_ADDRESS } from \"../constants\";\nimport { validateUpvoteParams, calculateUpvoteCost } from \"./userUpvoteUtils\";\nimport type { UserUpvoteClientOptions } from \"./types\";\n\n/**\n * UserUpvoteClient - Client for reading user-to-user upvote data.\n *\n * This is a standalone upvote system separate from the token Score system.\n * It reads directly from the UserUpvote contract on Base.\n */\nexport class UserUpvoteClient {\n private client: PublicClient;\n private contractAddress: Address;\n private chainId: number;\n\n constructor(params: UserUpvoteClientOptions) {\n this.chainId = params.chainId;\n this.client = getPublicClient({\n chainId: params.chainId,\n rpcUrl: params.overrides?.rpcUrls,\n });\n this.contractAddress =\n params.overrides?.contractAddress ?? USER_UPVOTE_CONTRACT.address;\n }\n\n async getUserUpvotesGiven({ user }: { user: Address }): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGiven\",\n args: [user],\n });\n return data as bigint;\n }\n\n async getUserUpvotesReceived({ user }: { user: Address }): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceived\",\n args: [user],\n });\n return data as bigint;\n }\n\n async getUserUpvotesGivenPerTokenBatch({\n user,\n tokens,\n }: {\n user: Address;\n tokens: Address[];\n }): Promise<bigint[]> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesGivenPerTokenBatch\",\n args: [user, tokens],\n });\n return data as bigint[];\n }\n\n async getUserUpvotesReceivedPerTokenBatch({\n user,\n tokens,\n }: {\n user: Address;\n tokens: Address[];\n }): Promise<bigint[]> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserUpvotesReceivedPerTokenBatch\",\n args: [user, tokens],\n });\n return data as bigint[];\n }\n\n async getTotalUpvotesPerToken({\n token,\n }: {\n token: Address;\n }): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getTotalUpvotesPerToken\",\n args: [token],\n });\n return data as bigint;\n }\n\n async getUserTokensInRange({\n user,\n startIndex,\n endIndex,\n }: {\n user: Address;\n startIndex: number;\n endIndex: number;\n }): Promise<{ token: Address; feeTier: number }[]> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserTokensInRange\",\n args: [user, BigInt(startIndex), BigInt(endIndex)],\n });\n return (data as { token: Address; feeTier: number }[]).map((item) => ({\n token: item.token,\n feeTier: Number(item.feeTier),\n }));\n }\n\n async getUserTokenCount({ user }: { user: Address }): Promise<number> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"getUserTokenCount\",\n args: [user],\n });\n return Number(data);\n }\n\n async isTokenInUserList({\n user,\n token,\n }: {\n user: Address;\n token: Address;\n }): Promise<boolean> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"isTokenInUserList\",\n args: [user, token],\n });\n return data as boolean;\n }\n\n async getUpvotePrice(): Promise<bigint> {\n const data = await readContract(this.client, {\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvotePrice\",\n });\n return data as bigint;\n }\n\n async upvoteUser({\n walletClient,\n userToUpvote,\n token = NULL_ADDRESS,\n numUpvotes,\n feeTier = 0,\n value: providedValue,\n }: {\n walletClient: WalletClient;\n userToUpvote: Address;\n token?: Address;\n numUpvotes: number;\n feeTier?: number;\n /** Pre-computed ETH value. When omitted, fetches upvotePrice from chain. */\n value?: bigint;\n }): Promise<`0x${string}`> {\n const sender = walletClient.account?.address;\n if (sender) {\n const validation = validateUpvoteParams({ sender, userToUpvote, numUpvotes });\n if (!validation.valid) {\n throw new Error(validation.error);\n }\n }\n\n const value = providedValue ?? calculateUpvoteCost(numUpvotes, await this.getUpvotePrice());\n\n const hash = await walletClient.writeContract({\n address: this.contractAddress,\n abi: USER_UPVOTE_CONTRACT.abi,\n functionName: \"upvoteUser\",\n args: [userToUpvote, token, BigInt(numUpvotes), BigInt(feeTier)],\n value,\n chain: null,\n dataSuffix: getBaseDataSuffix(this.chainId),\n } as unknown as Parameters<typeof walletClient.writeContract>[0]);\n\n return hash;\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 { decodeAbiParameters, type Address, type PublicClient } from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { NetClient, getPublicClient } from \"@net-protocol/core\";\nimport { STORAGE_CONTRACT } from \"@net-protocol/storage\";\nimport {\n SCORE_CONTRACT,\n UPVOTE_APP,\n LEGACY_UPVOTE_V1_ADDRESS,\n ALL_STRATEGY_ADDRESSES,\n PURE_ALPHA_STRATEGY,\n UNIV234_POOLS_STRATEGY,\n DYNAMIC_SPLIT_STRATEGY,\n ERC20_BULK_INFO_HELPER_CONTRACT,\n SUPPORTED_SCORE_CHAINS,\n NULL_ADDRESS,\n getWethAddress,\n} from \"../constants\";\nimport {\n encodeUpvoteKey,\n decodeUpvoteStorageBlob,\n} from \"../utils/strategyUtils\";\nimport { extractTokenAddressFromScoreKey } from \"../utils/scoreKeyUtils\";\nimport { discoverPools } from \"../utils/poolDiscovery\";\nimport type {\n GetTokenRankingsOptions,\n RankedToken,\n RankingSort,\n} from \"./types\";\n\nconst DEFAULT_MESSAGE_SCAN_WINDOW = 150;\nconst DEFAULT_MAX_TOKENS = 50;\nconst DEFAULT_MIN_UPVOTES = 500;\nconst DEFAULT_MIN_MARKET_CAP = 40_000;\nconst DEFAULT_RECENCY_HOURS = 48;\nconst USDC_ADDRESS_BY_CHAIN: Record<number, Address> = {\n 8453: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n};\nconst ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;\n\nexport interface TokenInfo {\n name: string;\n symbol: string;\n decimals: number;\n totalSupply: bigint;\n burnedTokens: bigint;\n}\n\ninterface UpvoteEvent {\n timestamp: number;\n count: number;\n}\n\n/**\n * Compute a token leaderboard ranked by upvote activity, mirroring the\n * /token/<chain>/trending page on netprotocol.app.\n *\n * Reads recent Net Protocol upvote messages for the legacy upvote contract\n * and the three strategy contracts, aggregates them into per-token events,\n * scores them by the chosen sort, then enriches the top results with ERC20\n * metadata, Uniswap pool pricing, and aggregate upvote counts.\n *\n * All reads are live from chain — no off-chain index. Callers should cache\n * results (e.g. HTTP `Cache-Control`) since each call performs ~8 RPC reads.\n *\n * Currently supports only chains in SUPPORTED_SCORE_CHAINS (Base mainnet).\n * Throws synchronously for any other chain.\n */\nexport async function getTokenRankings(\n options: GetTokenRankingsOptions\n): Promise<RankedToken[]> {\n const {\n chainId,\n sort = \"trending\",\n maxTokens = DEFAULT_MAX_TOKENS,\n messageScanWindow = DEFAULT_MESSAGE_SCAN_WINDOW,\n rpcUrl,\n } = options;\n validateChainSupported(chainId);\n\n const minUpvotes = options.thresholds?.minUpvotes ?? DEFAULT_MIN_UPVOTES;\n const minMarketCap =\n options.thresholds?.minMarketCap ?? DEFAULT_MIN_MARKET_CAP;\n const recencyHours = options.thresholds?.recencyHours ?? DEFAULT_RECENCY_HOURS;\n const nowSec = Date.now() / 1000;\n\n const rpcOverride = rpcUrl\n ? { rpcUrls: Array.isArray(rpcUrl) ? rpcUrl : [rpcUrl] }\n : undefined;\n const publicClient = getPublicClient({ chainId, rpcUrl });\n const netClient = new NetClient({ chainId, overrides: rpcOverride });\n\n // --- Steps 1-2: enumerate recent upvote messages for legacy + 3 strategies\n const messageGroups = await fetchUpvoteMessages({\n netClient,\n messageScanWindow,\n });\n\n // --- Steps 3-4: bulk-read storage blobs referenced by strategy messages\n const storageBlobByKey = await fetchStrategyStorage({\n publicClient,\n messageGroups,\n });\n\n // --- Step 5: aggregate per-token events, score, take top N+slack\n const wethAddress = getWethAddress(chainId);\n const { tokenAddresses, latestUpvoteTimestamps } = aggregateAndRank({\n messageGroups,\n storageBlobByKey,\n sort,\n maxTokens,\n excludeAddresses: [wethAddress.toLowerCase()],\n nowSec,\n });\n\n if (tokenAddresses.length === 0) return [];\n\n // --- Steps 6-8: ERC20 info, pool prices, aggregate upvotes (parallel)\n const usdcAddress = USDC_ADDRESS_BY_CHAIN[chainId];\n const pairs = [\n ...tokenAddresses.map((tokenAddress) => ({\n tokenAddress,\n baseTokenAddress: wethAddress,\n })),\n ...(usdcAddress\n ? [{ tokenAddress: wethAddress, baseTokenAddress: usdcAddress }]\n : []),\n ];\n const [tokenInfos, pools, upvoteCounts] = await Promise.all([\n fetchBulkErc20Info({ publicClient, addresses: tokenAddresses }),\n discoverPools({ publicClient, pairs, chainId }),\n fetchAggregateUpvotes({ publicClient, tokenAddresses }),\n ]);\n\n if (tokenInfos.length !== tokenAddresses.length) {\n throw new Error(\n `ERC20 bulk info returned ${tokenInfos.length} entries for ${tokenAddresses.length} addresses`\n );\n }\n if (upvoteCounts.length !== tokenAddresses.length) {\n throw new Error(\n `getUpvotesWithLegacy returned ${upvoteCounts.length} entries for ${tokenAddresses.length} addresses`\n );\n }\n\n // --- Step 9: compose, filter, sort, slice\n return composeAndFilter({\n tokenAddresses,\n tokenInfos,\n pools,\n upvoteCounts,\n latestUpvoteTimestamps,\n wethAddress,\n usdcAddress,\n sort,\n maxTokens,\n minUpvotes,\n minMarketCap,\n recencyHours,\n nowSec,\n });\n}\n\nfunction validateChainSupported(chainId: number): void {\n if (!(SUPPORTED_SCORE_CHAINS as readonly number[]).includes(chainId)) {\n throw new Error(\n `getTokenRankings: chainId ${chainId} is not supported. ` +\n `Supported chains: ${SUPPORTED_SCORE_CHAINS.join(\", \")}`\n );\n }\n}\n\n// ============================================================================\n// Step 1-2: message fetch\n// ============================================================================\n\ntype MessageGroups = {\n legacy: Awaited<ReturnType<NetClient[\"getMessagesBatch\"]>>;\n strategy1: Awaited<ReturnType<NetClient[\"getMessagesBatch\"]>>;\n strategy2: Awaited<ReturnType<NetClient[\"getMessagesBatch\"]>>;\n strategy3: Awaited<ReturnType<NetClient[\"getMessagesBatch\"]>>;\n};\n\nasync function fetchUpvoteMessages({\n netClient,\n messageScanWindow,\n}: {\n netClient: NetClient;\n messageScanWindow: number;\n}): Promise<MessageGroups> {\n const legacyFilter = {\n appAddress: LEGACY_UPVOTE_V1_ADDRESS,\n topic: \"t\",\n };\n const strategyFilters = [\n UNIV234_POOLS_STRATEGY.address,\n PURE_ALPHA_STRATEGY.address,\n DYNAMIC_SPLIT_STRATEGY.address,\n ].map((stratAddr) => ({\n appAddress: SCORE_CONTRACT.address,\n topic: `t${stratAddr.toLowerCase()}`,\n }));\n\n const [legacyCount, ...strategyCounts] = await Promise.all([\n netClient.getMessageCount({ filter: legacyFilter }),\n ...strategyFilters.map((filter) => netClient.getMessageCount({ filter })),\n ]);\n\n // TOCTOU note: the count read above can be stale by the time the batch read\n // below runs. New messages landing in between are excluded from the window.\n // We accept this for simplicity; the alternative is overshoot+dedupe.\n const sliceRange = (count: number) => ({\n startIndex: Math.max(0, count - messageScanWindow),\n endIndex: count,\n });\n\n const [legacy, strategy1, strategy2, strategy3] = await Promise.all([\n legacyCount > 0\n ? netClient.getMessagesBatch({\n filter: legacyFilter,\n ...sliceRange(legacyCount),\n })\n : Promise.resolve([]),\n ...strategyFilters.map((filter, i) =>\n strategyCounts[i] > 0\n ? netClient.getMessagesBatch({\n filter,\n ...sliceRange(strategyCounts[i]),\n })\n : Promise.resolve([])\n ),\n ]);\n\n return { legacy, strategy1, strategy2, strategy3 };\n}\n\n// ============================================================================\n// Step 3-4: strategy storage bulk read\n// ============================================================================\n\nasync function fetchStrategyStorage({\n publicClient,\n messageGroups,\n}: {\n publicClient: PublicClient;\n messageGroups: MessageGroups;\n}): Promise<Map<string, `0x${string}`>> {\n // Dedup so the multicall payload grows with unique slots, not message count.\n const seen = new Set<string>();\n const keys: { key: `0x${string}`; operator: Address }[] = [];\n for (const msg of [\n ...messageGroups.strategy1,\n ...messageGroups.strategy2,\n ...messageGroups.strategy3,\n ]) {\n if (!msg.data || !msg.data.startsWith(\"0x\")) continue;\n const key = msg.data as `0x${string}`;\n if (seen.has(key)) continue;\n seen.add(key);\n keys.push({ key, operator: SCORE_CONTRACT.address });\n }\n\n if (keys.length === 0) return new Map();\n\n // Direct readContract instead of StorageClient.bulkGet, which swallows\n // errors. We want RPC failures to surface, not silently produce empty\n // rankings.\n const results = (await readContract(publicClient, {\n address: STORAGE_CONTRACT.address,\n abi: STORAGE_CONTRACT.abi,\n functionName: \"bulkGet\",\n args: [keys],\n })) as BulkGetResult[];\n\n return buildStorageMapFromBulkGetResults(results, keys);\n}\n\n// viem returns Solidity named-tuple outputs as `{text, value}` objects, not\n// positional arrays.\nexport type BulkGetResult = { text: string; value: `0x${string}` };\n\nexport function buildStorageMapFromBulkGetResults(\n results: BulkGetResult[],\n keys: { key: `0x${string}`; operator: Address }[]\n): Map<string, `0x${string}`> {\n if (results.length !== keys.length) {\n throw new Error(\n `bulkGet returned ${results.length} entries for ${keys.length} keys`\n );\n }\n const map = new Map<string, `0x${string}`>();\n results.forEach((item, idx) => {\n const value = item?.value;\n if (value && value !== \"0x\") {\n map.set(keys[idx].key, value);\n }\n });\n return map;\n}\n\n// ============================================================================\n// Step 5: aggregate + score (PURE, exported for tests)\n// ============================================================================\n\nexport function aggregateAndRank({\n messageGroups,\n storageBlobByKey,\n sort,\n maxTokens,\n excludeAddresses = [],\n nowSec,\n}: {\n messageGroups: MessageGroups;\n storageBlobByKey: Map<string, `0x${string}`>;\n sort: RankingSort;\n maxTokens: number;\n excludeAddresses?: string[];\n nowSec: number;\n}): { tokenAddresses: Address[]; latestUpvoteTimestamps: Map<string, number> } {\n const tokenUpvoteEvents = new Map<string, UpvoteEvent[]>();\n const excludeSet = new Set(excludeAddresses.map((a) => a.toLowerCase()));\n\n const addEvent = (tokenAddress: string, timestamp: number, count: number) => {\n if (!ADDRESS_RE.test(tokenAddress)) return;\n const lower = tokenAddress.toLowerCase();\n if (lower === NULL_ADDRESS || excludeSet.has(lower)) return;\n if (!Number.isFinite(timestamp) || !Number.isFinite(count)) return;\n const events = tokenUpvoteEvents.get(lower) ?? [];\n events.push({ timestamp, count });\n tokenUpvoteEvents.set(lower, events);\n };\n\n for (const msg of messageGroups.legacy) {\n if (msg.topic !== \"t\" || !msg.text) continue;\n let count = 1;\n if (msg.data && msg.data.startsWith(\"0x\")) {\n try {\n const [votes] = decodeAbiParameters(\n [{ type: \"uint256\" }],\n msg.data as `0x${string}`\n );\n count = Number(votes);\n } catch {\n count = 1;\n }\n }\n addEvent(msg.text, Number(msg.timestamp), count);\n }\n\n for (const msg of [\n ...messageGroups.strategy1,\n ...messageGroups.strategy2,\n ...messageGroups.strategy3,\n ]) {\n if (!msg.topic.startsWith(\"t\") || !msg.data || !msg.data.startsWith(\"0x\")) {\n continue;\n }\n const blob = storageBlobByKey.get(msg.data);\n if (!blob) continue;\n const decoded = decodeUpvoteStorageBlob(blob);\n if (!decoded || !decoded.scoreKey) continue;\n const tokenAddress = extractTokenAddressFromScoreKey(decoded.scoreKey);\n if (!tokenAddress) continue;\n addEvent(tokenAddress, Number(msg.timestamp), decoded.scoreDelta);\n }\n\n const timeWeight = (ts: number) => Math.exp(-0.1 * ((nowSec - ts) / 3600));\n\n const latestUpvoteTimestamps = new Map<string, number>();\n for (const [addr, events] of tokenUpvoteEvents) {\n let latest = events[0].timestamp;\n for (const e of events) if (e.timestamp > latest) latest = e.timestamp;\n latestUpvoteTimestamps.set(addr, latest);\n }\n\n let ordered: string[];\n if (sort === \"top\") {\n // For \"top\", we don't know aggregate counts yet — defer to step 9.\n ordered = Array.from(tokenUpvoteEvents.keys());\n } else {\n const scores = new Map<string, number>();\n for (const [addr, events] of tokenUpvoteEvents) {\n if (sort === \"recent\") {\n scores.set(addr, latestUpvoteTimestamps.get(addr) ?? 0);\n } else {\n // \"trending\": time-decayed weighted score\n const score = events.reduce(\n (total, e) => total + e.count * timeWeight(e.timestamp),\n 0\n );\n scores.set(addr, score);\n }\n }\n ordered = Array.from(scores.entries())\n .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))\n .map(([address]) => address);\n }\n\n // Fetch more than needed so the threshold filter has slack to work with.\n const fetchLimit = Math.max(maxTokens * 3, 30);\n return {\n tokenAddresses: ordered.slice(0, fetchLimit) as Address[],\n latestUpvoteTimestamps,\n };\n}\n\n// ============================================================================\n// Step 6: ERC20 bulk info\n// ============================================================================\n\nasync function fetchBulkErc20Info({\n publicClient,\n addresses,\n}: {\n publicClient: PublicClient;\n addresses: Address[];\n}): Promise<TokenInfo[]> {\n if (addresses.length === 0) return [];\n try {\n const data = (await readContract(publicClient, {\n address: ERC20_BULK_INFO_HELPER_CONTRACT.address,\n abi: ERC20_BULK_INFO_HELPER_CONTRACT.abi,\n functionName: \"getTokenInfo\",\n args: [addresses],\n })) as TokenInfo[];\n if (Array.isArray(data) && data.length === addresses.length) return data;\n } catch {\n // Bulk reverted (likely one bad address). Fall through to per-address.\n }\n // Per-address fallback so one bad address doesn't kill the whole ranking.\n const results = await Promise.all(\n addresses.map(async (addr): Promise<TokenInfo> => {\n try {\n const data = (await readContract(publicClient, {\n address: ERC20_BULK_INFO_HELPER_CONTRACT.address,\n abi: ERC20_BULK_INFO_HELPER_CONTRACT.abi,\n functionName: \"getTokenInfo\",\n args: [[addr]],\n })) as TokenInfo[];\n if (Array.isArray(data) && data[0]) return data[0];\n } catch {\n // swallow per-address failure\n }\n return {\n name: \"\",\n symbol: \"\",\n decimals: 0,\n totalSupply: 0n,\n burnedTokens: 0n,\n };\n })\n );\n return results;\n}\n\n// ============================================================================\n// Step 8: aggregate upvotes\n// ============================================================================\n\nasync function fetchAggregateUpvotes({\n publicClient,\n tokenAddresses,\n}: {\n publicClient: PublicClient;\n tokenAddresses: Address[];\n}): Promise<number[]> {\n if (tokenAddresses.length === 0) return [];\n const data = (await readContract(publicClient, {\n address: UPVOTE_APP.address,\n abi: UPVOTE_APP.abi,\n functionName: \"getUpvotesWithLegacy\",\n args: [\n tokenAddresses.map((addr) => encodeUpvoteKey(addr)),\n ALL_STRATEGY_ADDRESSES,\n ],\n })) as readonly bigint[];\n if (!Array.isArray(data)) {\n throw new Error(\n \"getUpvotesWithLegacy returned non-array; contract or RPC misbehaving\"\n );\n }\n return data.map(Number);\n}\n\n// ============================================================================\n// Step 9: compose, filter, sort, slice (PURE, exported for tests)\n// ============================================================================\n\nexport function composeAndFilter({\n tokenAddresses,\n tokenInfos,\n pools,\n upvoteCounts,\n latestUpvoteTimestamps,\n wethAddress,\n usdcAddress,\n sort,\n maxTokens,\n minUpvotes,\n minMarketCap,\n recencyHours,\n nowSec,\n}: {\n tokenAddresses: Address[];\n tokenInfos: TokenInfo[];\n pools: Awaited<ReturnType<typeof discoverPools>>;\n upvoteCounts: number[];\n latestUpvoteTimestamps: Map<string, number>;\n wethAddress: Address;\n usdcAddress: Address | undefined;\n sort: RankingSort;\n maxTokens: number;\n minUpvotes: number;\n minMarketCap: number;\n recencyHours: number;\n nowSec: number;\n}): RankedToken[] {\n const wethLower = wethAddress.toLowerCase();\n const usdcLower = usdcAddress?.toLowerCase();\n\n // ETH price in USDC. Pool discovery dedupes by on-chain pool address; if USDC\n // happens to be in the ranked set, the explicit WETH/USDC anchor may collide\n // with USDC's own USDC/WETH pool. Try both orientations.\n let ethPriceInUsdc: number | undefined;\n if (usdcLower) {\n const wethUsdcPool = pools.find(\n (p) =>\n p.tokenAddress.toLowerCase() === wethLower &&\n p.baseTokenAddress.toLowerCase() === usdcLower\n );\n const usdcWethPool = pools.find(\n (p) =>\n p.tokenAddress.toLowerCase() === usdcLower &&\n p.baseTokenAddress.toLowerCase() === wethLower\n );\n // Match website behavior: treat price == 0 as missing (truthy check), and\n // guard against 1/0 = Infinity in the fallback path.\n if (wethUsdcPool?.price) {\n ethPriceInUsdc = wethUsdcPool.price;\n } else if (usdcWethPool?.price) {\n ethPriceInUsdc = 1 / usdcWethPool.price;\n }\n }\n\n const tokenAddressToPool = new Map<string, (typeof pools)[number]>();\n for (const pool of pools) {\n if (pool.baseTokenAddress.toLowerCase() === wethLower) {\n tokenAddressToPool.set(pool.tokenAddress.toLowerCase(), pool);\n }\n }\n\n const composed: RankedToken[] = tokenAddresses.map((address, i) => {\n const info = tokenInfos[i];\n const pool = tokenAddressToPool.get(address.toLowerCase());\n // Truthy check on price matches the website; treats 0 as 'no price'.\n const priceInUsdc =\n pool?.price && ethPriceInUsdc ? pool.price * ethPriceInUsdc : undefined;\n // Truthy check on totalSupply matches the website; 0n is treated as 'no\n // supply data'. Clamp at 0 in case burned > total (buggy/reflection tokens).\n let circulating: bigint | undefined;\n if (info?.totalSupply) {\n const burned = info.burnedTokens ?? 0n;\n const c = info.totalSupply - burned;\n circulating = c > 0n ? c : 0n;\n }\n // Match website: decimals 0 is treated as 'no decimals known' (rare ERC20\n // case that produces wildly inflated FDV otherwise).\n const decimals = info?.decimals || undefined;\n const fdv =\n circulating != null && decimals != null && priceInUsdc != null\n ? (Number(circulating) / 10 ** decimals) * priceInUsdc\n : undefined;\n\n return {\n address,\n name: info?.name || undefined,\n symbol: info?.symbol || undefined,\n decimals,\n fdv,\n priceInUsdc,\n upvotes: upvoteCounts[i] ?? 0,\n latestUpvoteTimestamp:\n latestUpvoteTimestamps.get(address.toLowerCase()) ?? 0,\n };\n });\n\n // Drop tokens with missing metadata, or stale tokens below the market cap floor.\n const valid = composed.filter((t) => {\n if (!t.name?.trim() || !t.symbol?.trim()) return false;\n const belowFloor = t.fdv == null || t.fdv < minMarketCap;\n if (belowFloor) {\n const hoursSince = (nowSec - t.latestUpvoteTimestamp) / 3600;\n if (hoursSince > recencyHours) return false;\n }\n return true;\n });\n\n // Re-sort per requested order.\n let sorted: RankedToken[];\n if (sort === \"top\") {\n sorted = [...valid].sort((a, b) => b.upvotes - a.upvotes);\n } else {\n // Preserve the order returned by step 5 (already scored by hot/recent).\n const byAddr = new Map(valid.map((t) => [t.address.toLowerCase(), t]));\n sorted = tokenAddresses\n .map((addr) => byAddr.get(addr.toLowerCase()))\n .filter((t): t is RankedToken => t != null);\n }\n\n // Two-tier: tokens meeting the upvote/cap floor get top billing.\n const qualifies = (t: RankedToken) =>\n t.upvotes >= minUpvotes || (t.fdv != null && t.fdv >= minMarketCap);\n const top = sorted.filter(qualifies);\n const rest = sorted.filter((t) => !qualifies(t));\n return [...top, ...rest].slice(0, maxTokens);\n}\n","import { encodeAbiParameters, type Address } from \"viem\";\nimport type { PoolKey } from \"../types\";\n\n/**\n * Encode a PoolKey struct to bytes for scoreStoredContext.\n * Returns \"0x\" for invalid or missing pool keys.\n */\nexport const encodePoolKey = (poolKey?: PoolKey | null): `0x${string}` => {\n if (!poolKey || !isValidPoolKey(poolKey)) {\n return \"0x\";\n }\n\n try {\n return encodeAbiParameters(\n [\n {\n type: \"tuple\",\n components: [\n { name: \"currency0\", type: \"address\" },\n { name: \"currency1\", type: \"address\" },\n { name: \"fee\", type: \"uint24\" },\n { name: \"tickSpacing\", type: \"int24\" },\n { name: \"hooks\", type: \"address\" },\n ],\n },\n ],\n [\n {\n currency0: poolKey.currency0 as Address,\n currency1: poolKey.currency1 as Address,\n fee: poolKey.fee,\n tickSpacing: poolKey.tickSpacing,\n hooks: poolKey.hooks as Address,\n },\n ]\n );\n } catch {\n return \"0x\";\n }\n};\n\nfunction isValidPoolKey(poolKey: PoolKey): boolean {\n return (\n poolKey.fee !== undefined ||\n poolKey.tickSpacing !== undefined ||\n poolKey.currency0 !== undefined\n );\n}\n"]}
|